How it works
The join is arithmetic
A record names the digest of the file it produced and the digests of the files it consumed. Two records connect because SHA-256 of one file equals a digest the other named — an equality anybody can recompute, which nobody administers.
The alternative would be a row id. Under that design three parties could change a lineage without touching a byte of anyone’s work: whoever runs the database, a later editor re-pointing their own row, and anyone who can write to the table. Under this one, re-pointing an edge means finding a second file with the same SHA-256.
What that does notbuy: it proves the later signer named that digest, not that their file came from it. Anyone may name any digest as a parent, without the parent’s key and without asking.
Ten acts, each of them a declaration
Chaine never sees a shutter fire, never watches a model run and never inspects pixels. Every sentence below begins with Says, and that is enforced by the build rather than by editorial habit.
- captured
- Says this came off a camera. No earlier step is named.
- drawn
- Says it was made here by hand or by software. No earlier step is named.
- generated
- Says a model made it. No earlier step is named.
- edited
- Says they changed the picture above.
- composited
- Says they combined the pictures above.
- upscaled
- Says they enlarged the picture above.
- retouched
- Says they retouched the picture above.
- transcoded
- Says they re-saved the picture above in another format.
- cropped
- Says they cropped the picture above.
- published
- Says they published the picture above.
Six answers, and no seventh
- No gaps in what was registered
- Every step this chain names resolves to a record here, and every one of those records' signatures checks out. It says nothing about whether the chain is the whole story — only that it has no holes in it.
- Part of this chain is not registered here
- A step names an earlier file we have no record of, or a signer used a key they never registered with us. That is what almost everybody produces, and nobody is being accused of anything.
- Two records claim these bytes
- More than one key has signed a statement about this exact file. Both are shown, in an order that means nothing — we have not picked one and have no standing to.
- We could not check this one
- That can mean the record was altered, or that we failed to reconstruct what was signed. We cannot tell which, and until we can we are not calling it tampering.
- A signature here does not check out
- The bytes of a record do not match the signature over them. This is the only thing Chaine says that is an accusation, so it is the only one it will not say without a named, reproducible reason.
- Not in this registry
- No record here names these exact bytes. That is the answer for almost every file in the world — registration is voluntary, and a re-encode, a crop or a screenshot lands here too. It is not a finding about your file.
The words complete and unbroken appear nowhere in this product. The cheapest way to earn the most reassuring answer is to mint a key, sign one record over a photograph you stole, and stop — one link, no holes. The honest four-step lineage where one collaborator never registered comes back open. So the count prints beside every verdict.
The licence questions
Every answer puts the keyholder in the subject position, and that is enforced by the build too. A bare not allowed would make Chaine the authority — and if the registrant is the thief, that sentence tells the actual creator, in plain confident English, that she may not use her own picture.
example: attribution-required
- Can I sell something that includes this?
- The keyholder says you may sell something that includes this, if you name them wherever it appears.
- Can I change it and share the result?
- The keyholder says you may change it and share the result, if you name them wherever it appears.
- Can I pass it on unchanged?
- The keyholder says you may pass it on unchanged, if you name them wherever it appears.
- Can I train a model on it?
- The keyholder says you may train a model on it, if you name them wherever it appears — this code carves out no exception for training.
- Can I use it without naming anyone?
- The keyholder says no — they ask to be named wherever it appears.
- Did anyone check that this person owns this?
- No. Nobody checked.
These are this registry's own words, written by us. They are not a Creative Commons licence, not a court-tested instrument, not registered with anybody, and not legal advice. They bind nobody who never saw them.
The source type cannot be left out
Every record must declare what kind of source it is. That is a security control rather than tidiness: published work produces cryptographically valid provenance manifests asserting human authorship over model-generated pixels using nothing but the omission of a field the standard permits you to leave out. Refusing a record that does not declare one is a real, one-constraint improvement — and it is the whole of the claim.
It does not mean what the record says is true. A source type of digitalCapture over a generated image is a lie a valid signature carries perfectly. And for the overwhelming majority of files — the ones with no record at all — the absence of a “made by a model” declaration means nobody said, never it isn’t.
Source-type tokens read from the registry: no. The IPTC vocabulary host is unreachable from this environment, so these token spellings were read from secondary sources and no human has checked them against the registry. A wrong token would silently break interoperability with any tool that ever reads a Chaine record.
- trainedAlgorithmicMedia
- compositeWithTrainedAlgorithmicMedia
- algorithmicMedia
- digitalCapture
- digitalArt
- screenCapture
- composite
The demo keys are published
The private half of this key is published in this repository, so a signature made by it proves only that somebody read the file. It is real cryptography over a key that is not a secret.
Chaine needs a root of trust binding keys to people. It cannot have one — no certificate authority, no trust list, no domain oracle — and it does not fake one. The honest substitute is not an invented authority; it is a real signature over a key everybody already holds. Every key in this registry carries self-asserted beside its name, and that is the truth about all of them.
- Maya Okonkwo
- M29fyrQVcUics-e2zPrFGH-LXLnONFU8gHMx30JVmVw
- Sam Ferreira
- JY4jRIx2z0v25n_TAQAbd1mInkYTeBH_eT1f4d3ierc
- This registry (signs tree heads, not links)
- 6wJ-DmudYG7nqPoLOqO79b-8MQsNnz4Sl1yu2DWnwMY
Check it yourself
Everything above is asserted by a script that exits non-zero when it fails, including the forgery bench and its mutation control — the check that re-runs every forgery against a deliberately weakened verifier and requires them all to be accepted.
pnpm chaine:prove pnpm chaine:demo