manifest-diff

The "before/after delta + what changed verdict" UI. A one-sentence verdict callout that decodes a jump, plus a signed-Δ comparison table with per-row new/gone tags. One source of truth for status.gf.cx/r2/<bucket>/manifest/ and any surface that has to explain a step between two snapshots.

<link rel="stylesheet" href="https://assets.gf.cx/manifest-diff/manifest-diff.css">

<div class="manifest-diff">
  <div class="verdict up">…</div>
  <table>…</table>
</div>

Verdict · growth (.up — red left-edge)

the mystery, decoded
+1.1 GB between Aug 12 and Aug 19, same object count — existing files changed size. Biggest mover: .cr2 +820 MB (+40 files).
before: 493,318 objects / 374.9 GB (Aug 12) → after: 493,358 objects / 376.0 GB (Aug 19)

Delta table · signed Δ + new/gone tags

only changed types shown
File typeΔ filesΔ bytes Files nowSize now
.cr2 +40+820 MB 1,0911.1 GB
.jpg ±0+310 MB 177,579133.9 GB
.avifnew +120+14 MB 12014 MB
.png ±0±0 B 27,0516.7 GB
.bmpgone −18−44 MB 00 B
5 changed file types · red = grew, green = shrank · between Aug 12 and Aug 19

Verdict · shrink (.down — green left-edge)

a purge, decoded
−52.2 GB between Aug 18 and Aug 19, object count −12,844. Biggest mover: .mp4 −49.8 GB (−11,300 files) — the video drain landed.
before: 506,202 objects / 428.2 GB (Aug 18) → after: 493,358 objects / 376.0 GB (Aug 19)

Current breakdown · by file type

The other half of the pattern — the current file-type table the diff sits above. Real dan-immich numbers (493,358 objects, 376.0 GB, 18 types).

what the bytes are made of
File typeFilesTotal size Avg size% of bytes
.mov10,380172.8 GB17.0 MB46.0%
.jpg177,579133.9 GB790.5 KB35.6%
.mp47,23229.5 GB4.2 MB7.8%
.heic21,01027.1 GB1.3 MB7.2%
.png27,0516.7 GB258.1 KB1.8%
.avi1942.1 GB10.8 MB0.5%
.m4v1371.4 GB10.6 MB0.4%
other (11 types)249,7752.6 GB11.0 KB0.7%
18 file types · sorted by total bytes · captured Aug 19

Empty state (.empty)

one manifest so far — nothing to diff
Only one manifest so far — nothing to diff against yet. The before/after breakdown appears once this bucket is listed a second time (on its next notable move).