Free, forever, no account
Verify a RevUp Render receipt
Drop a receipt bundle (.zip) from any RevUp project. Your browser re-hashes the actual pixels and re-derives every claim. Nothing is uploaded. A bare receipt.json or worldline.jsonl checks the receipt math only.
No bundle handy? Try one from a real project: download the genuine one
How to read the report
Three headline outcomes, then one line per check.
- VERIFIED
- Every check passed. Outside the approved mask the output is byte-identical to the input, and the receipt chain is intact.
- VERIFICATION FAILED
- At least one check failed. Something in the bundle does not match what the receipt claims. Do not rely on the render.
- RECEIPT MATH VALID
- You dropped a bare receipt or worldline without the images, so only the receipt arithmetic could be checked, not the pixels.
- bundle contents
- receipt.json, input.png, mask.png and output.png are all present.
- receipt format
- The receipt uses a spec this verifier understands. The report names the profile:
masked-inpaintmeans a diffusion model made the pixels inside the mask;deterministic-recolourmeans they are integer arithmetic on the input and the receipt re-executes to the same bytes with no model or GPU, measured identical on x86-64 and Arm machines. An unfamiliar profile is named, not failed, because the pixel and chain checks do not depend on it. - receipt certificate
- Hashing the receipt's manifest reproduces its certificate, so the receipt was not edited after signing.
- input / mask / output file digest
- Each file's hash equals the one named in the receipt, so the files are the ones the receipt describes.
- dimensions consistent
- Input, mask and output decode to the same width and height.
- locked digest matches receipt (input / output)
- The pixels outside the mask, hashed from the decoded images, equal the receipt's locked-region digests. Equal on both sides means byte-identical outside the mask. This is the guarantee.
- worldline chain intact / chain links intact
- Every revision in the project's history points at the certificate of an earlier revision, with no gaps and no rewrites. A project may branch (several revisions can share a parent when you render variants) and each branch is checked the same way.
- receipt is on the chain
- This receipt is one of the links in that history, not a stray.
- client review / comment n / approval n
- When the bundle carries
review.jsonl, each client comment and approval is checked on its own line: its certificate re-derives (the text was not edited), it names this project and this render’s output by digest (V1; entries written before 2026-09-24 carry no project name and say so), the pixels under a comment’s rectangle still hash to what it recorded (V2), and an approved frame is every pixel of this output (V3). An approval names pixels, not a person: the author field is a claim that cannot be edited unnoticed, not a signature. When the reviewer’s browser holds a signing key, a fourth line (V4) checks an Ed25519 signature over the entry’s canonical bytes; that key identifies a browser profile, not a person, and an unsigned entry is reported as unsigned rather than failed. - verification run
- The verifier itself finished without an internal error.
What the verifier checks
- Every file in the bundle re-hashes to the digest named in the receipt.
- The PNGs are decoded with our own decoder, not the browser canvas, and the locked-region digest of the output equals the locked-region digest of the input.
- The receipt’s certificate re-derives from its canonical bytes, and every link in the project’s worldline chains to an earlier entry, branches included.
- If a client commented on or approved this render, each comment’s rectangle and each approval’s frame is re-hashed from the same decoded output and compared with what the client’s entry recorded.
The same check runs offline with our command-line verifier, available to customers on request, and the receipt format is the open INVAR format. Get a bundle from any project at app.revuprender.com.