David
Blumenau
Menu
All demonstrations

Archive Lab / An inspectable engineering proof

Keep the originals.
Rebuild the index.

A useful archive keeps the original bytes and the record of what they are. Its search index can be built again.

Here, three generated images put that boundary to a real test. You can also check the files yourself.

Check the three originals

01 / Actual CLI execution, recorded

Rebuild the index
from its manifests.

The unchanged Photo Archive CLI staged these originals, verified them, and rebuilt its index after that disposable file was removed. These controls select the saved evidence.

The canonical archive

Preserved throughout
Generated geometric color study: Chromatic grid
Chromatic grid3,762 bytes
Generated geometric color study: Orbit study
Orbit study4,713 bytes
Generated geometric color study: Signal bars
Signal bars3,359 bytes
Originals + manifests + event ledgers

Each manifest records the original’s size and SHA-256. The supplied metadata JSON is retained as another hashed resource.

All canonical hashes match13 files checked

The derived index

Present

archive.sqlite

3asset rows

6resource rows

okintegrity check

Three asset rows and six resource rows: one original PNG and one retained metadata JSON for each asset.

Select recorded archive step

Recorded evidence. These controls execute no commands.

Initial index: 3 assets, 6 resources, SQLite integrity ok.

Actual command outputData-root paths shortened to $DEMO_ROOT
$ photo-archive rebuild-index $DEMO_ROOT/archive --destination $DEMO_ROOT/state/archive.sqlite
{"assets": 3, "path": "$DEMO_ROOT/state/archive.sqlite"}

$ photo-archive verify $DEMO_ROOT/archive
{"assets": 3, "resources": 6, "status": "ok"}

3 original PNGsSame sizes and SHA-256 hashes

13 canonical filesByte-identical before and after

Identical database rowsAssets, resources and identities

02 / A separate check, in your browser

Try the
byte comparison.

Fetch the three tiny synthetic PNGs and calculate their SHA-256 hashes locally with Web Crypto. Compare your results with the recorded originals.

This browser illustration is separate from the CLI run above. It has no archive backend, uploads or saved browser state.

Local synthetic-file verification

The recorded hashes are below. Enable JavaScript to calculate and compare hashes in this browser.

Chromatic grid

Not checked here

3,762 bytes · generated PNG · Download original

Inspect the SHA-256 comparison
Recorded original
5161464036288618fe892205908aa323b2420329b7ec00d7f4bccd2aa94a46de
Calculated in this browser
Not calculated

Orbit study

Not checked here

4,713 bytes · generated PNG · Download original

Inspect the SHA-256 comparison
Recorded original
9694257a1438544959d0068a97fef66f83d5ddd7f0d27ea92f02d9104cf484a5
Calculated in this browser
Not calculated

Signal bars

Not checked here

3,359 bytes · generated PNG · Download original

Inspect the SHA-256 comparison
Recorded original
6c329d5b536526360e4db3ab8563dccb0b8018a824c2fc143611ac90f62229b1
Calculated in this browser
Not calculated

Changing a copied byte affects one temporary array in memory. The hosted PNG, your download and the original archive evidence stay unchanged.

03 / Source, hashes and scope

Follow the
recorded evidence.

Download the public receipt
Recorded
15 October 2026
Source revision
7ecfaf029f48a41323e42f80e6f2fe238e99d60a
Resources
3 originals + 3 metadata files = 6
SQLite before / after
3 assets · 6 resources · integrity ok
Read every CLI command and its recorded result

The actual Typer CLI ran through a guarded Python launcher. Commands below use its photo-archive entrypoint name. Only the disposable data-root prefix is replaced with $DEMO_ROOT. Refusal messages are labeled excerpts; full private tracebacks are omitted.

  1. Exit 01.692 seconds
    $ photo-archive init-volume $DEMO_ROOT/archive
    initialized $DEMO_ROOT/archive
  2. Exit 12.273 seconds
    $ photo-archive init-volume $DEMO_ROOT/archive
    [stderr excerpt] FileExistsError: [Errno 17] File exists:
  3. Exit 01.943 seconds
    $ photo-archive stage-osxphotos $DEMO_ROOT/archive --source-library-uuid SYNTHETIC-DEMO-LIBRARY --metadata-json $DEMO_ROOT/metadata/DE000001-2026-4000-8000-000000000001.json --resource $DEMO_ROOT/fixtures/DE000001-2026-4000-8000-000000000001.png
    {"archive_id": "PFA1-DE000001-2026-4000-8000-000000000001", "state": "archive_verified", "resources": 2}
  4. Exit 01.838 seconds
    $ photo-archive stage-osxphotos $DEMO_ROOT/archive --source-library-uuid SYNTHETIC-DEMO-LIBRARY --metadata-json $DEMO_ROOT/metadata/DE000002-2026-4000-8000-000000000002.json --resource $DEMO_ROOT/fixtures/DE000002-2026-4000-8000-000000000002.png
    {"archive_id": "PFA1-DE000002-2026-4000-8000-000000000002", "state": "archive_verified", "resources": 2}
  5. Exit 01.833 seconds
    $ photo-archive stage-osxphotos $DEMO_ROOT/archive --source-library-uuid SYNTHETIC-DEMO-LIBRARY --metadata-json $DEMO_ROOT/metadata/DE000003-2026-4000-8000-000000000003.json --resource $DEMO_ROOT/fixtures/DE000003-2026-4000-8000-000000000003.png
    {"archive_id": "PFA1-DE000003-2026-4000-8000-000000000003", "state": "archive_verified", "resources": 2}
  6. Exit 01.888 seconds
    $ photo-archive verify $DEMO_ROOT/archive
    {"assets": 3, "resources": 6, "status": "ok"}
  7. Exit 22.362 seconds
    $ photo-archive rebuild-index $DEMO_ROOT/archive $DEMO_ROOT/state/archive.sqlite
    [stderr excerpt] Got unexpected extra argument(s)
  8. Exit 01.765 seconds
    $ photo-archive rebuild-index $DEMO_ROOT/archive --destination $DEMO_ROOT/state/archive.sqlite
    {"assets": 3, "path": "$DEMO_ROOT/state/archive.sqlite"}
  9. Exit 01.769 seconds
    $ photo-archive rebuild-index $DEMO_ROOT/archive --destination $DEMO_ROOT/state/archive.sqlite
    {"assets": 3, "path": "$DEMO_ROOT/state/archive.sqlite"}
  10. Exit 01.896 seconds
    $ photo-archive verify $DEMO_ROOT/archive
    {"assets": 3, "resources": 6, "status": "ok"}

Between the initial and rebuilt index, the guarded driver removed only $DEMO_ROOT/state/archive.sqlite. Its recorded file identity and both database snapshots are in the public receipt.

Open the text transcript
Inspect source hashes and the canonical boundary

The four named source files below match the committed revision and retain the same hashes after the run. Six focused, existing source tests passed: staging success and overwrite refusal, sentinel enforcement, resource verification and corruption rejection, and complete index reconstruction.

src/photo_archive/cli.py2833d01f8f72d9858c3d445c5e0497cadcb00d8bc78e6cb2fea922a60af48b3e
src/photo_archive/index.py69444ce08d3207cc9636c372300b4bee2161f480e21f7000ff275bd527b870dc
src/photo_archive/staging.py1748e6fcbb55aedeecdefff8dc9fea48a7a603351dac377e66e4621c8cab26cd
src/photo_archive/storage.pybee831edc5627ebdff625c9cd5524d0fd2ae529522613508b13e277963c4a21c

The 13 canonical files are three PNG originals, three retained metadata JSONs, three manifests, three event ledgers and one volume sentinel. Every file’s size and SHA-256 match before and after. The public receipt includes both complete file-identity snapshots and both index row sets.

What the isolated run substituted and refused

The original source checkout remained unchanged. An explicit allowlist of committed code and narrow tests ran in an isolated copy. Three code-generated PNGs and minimal invented metadata replaced all real library inputs. The original home directories and real-volume paths were hidden; the network namespace was isolated. No Photos API, production catalog, archive server, model or enrichment operation ran.

Initializing the existing volume returned exit 1 without changing it. A positional index-destination sample returned exit 2 without creating a database; the successful commands use --destination. Staging retains a metadata JSON as a second resource, so three originals correctly yield six total resource rows. These are observations from the unchanged source.

Two test setup attempts encountered the sandbox’s read-only device restriction; disabling pytest capture and logging resolved them. The same six source tests then passed. Full private setup and failure receipts are retained outside this public exhibit.

Watch the recorded prototype replay · 18 seconds

This film records the private static prototype replaying the completed run’s evidence. The CLI commands had already finished. The display pacing is editorial; the film is not live CLI footage.

A continuous browser recording of the earlier private prototype. It shows three saved states: initial index, disposable index removed, and rebuilt index. All images are generated fixtures. Read the captions.

A narrow proof, deliberately

Know what
the evidence covers.

This run demonstrates original-byte preservation and reconstruction of a derived SQLite index from canonical manifests. It does not establish a second physical backup, long-term durability, Apple Photos behavior, production archive safety or machine-learning results.

Photo Archive is the storage boundary within a wider photo platform. This demonstration stays at that boundary.

Explore the memory district