Skip to content

▣ shipped · 603 GB · 1,620 clips

The pipeline, end to end

The same story as the case study, in about eight minutes: 17 phases from an unsorted pile on six drives to four finished multicam films. One source, one shared dedup stage, then two lanes that ran independently — and one edge that runs backwards. Hover a node for the one-line version; open it for the full account.

01 — the processing pipeline

raw footage → finished films

Everything passes through inventory and byte-exact dedup first. After that the graph forks: the photo lane runs to a self-hosted archive on its own, the video lane runs to a graded cut — and one edge runs backwards, because a 141-second offset that a single matching frame appeared to confirm sent the sync stage round again.

The wedding pipeline as a directed graph: a 603 GB source, a shared inventory and dedup stage, a fork into a photo lane ending at the archive and a video lane ending at the graded cut, a dashed bypass where a steadier camera skipped the flicker fight, a feedback edge from the false sync confirmation back into the sync stage, and a fan-in from the agent fleet into one serial render queue and the finished films.
  1. source
  2. 01 · 603 gb · six folders the pile Two days, two photographers, five cameras and a drone — arriving as 603 GB copied and re-copied across six folders on different drives. Arrival at the resort — one frame out of the 33,302 that had to be accounted for.
  3. 02 · sha-256 · 14,077 dupes inventory · dedup Size groups, then a head+tail partial hash, then full SHA-256 on the ~26,760 survivors. Nothing deleted on a guess; ~217 GB reclaimed.
  4. photo lane
  5. 03 · rawpy · auto_wb raw development Sony ARW through rawpy, Nikon JPGs alongside it — with a per-image auto white balance after the fixed channel pushes went pink, then yellow. Haldi, straight out of the photo pipeline.
  6. 04 · 41 pairs measured house style A grade measured off 41 original→edited pairs from our own photographers' finals — and a resize-only passthrough for their posed portraits. Reception portraits — the photographers’ own graded finals, passed through untouched.
  7. 05 · clocks realigned chronology Scene clustering as a first draft, a real Marathi-wedding taxonomy over the top, and a per-folder clock fix because the Nikon read 2014. An auto-generated scene contact sheet for the Sangeet cluster — a whole cluster judged at a glance.
  8. 06 · 27 albums · immich self-hosted archive ~4,900 graded photos uploaded to a self-hosted Immich server through its CLI and REST API, checksum-deduped so the upload is re-runnable.
  9. video lane
  10. 07 · 1,620 clips gcc-phat sync Envelope correlation sat at ~0.2 confidence. Syncing every angle to one clean song track instead moved it to a median around 105 against a lock threshold of 25. Two cameras at centre-time 101.2 s: matching poses and the same hearts-and-starburst frame on the LED wall.
  11. 08 · x · h · a · c marking Four keys over the raw footage — bad, highlight, audience, couple — and an assembly planner that compiles the cut from the marks. The sync view mid-performance: the gold anchor bar, a verified wide angle in green, and every other camera with its own offset nudges and tags.
  12. 09 · −82% measured flicker fight Three dead ends against a beating LED wall before the insight that mattered turned out to be about frame rates, not filters. The floor-signal detector: fixed sample points across the stage's pattern, median-voted so one covered spot never breaks the read.
  13. 10 · yolo11 masks skin work Per-person segmentation and pose on an upscaled crop, so the flash correction touches the couple and leaves the light show alone. A per-person segmentation mask plus pose skeleton mid-flash: a clean cutout of the couple with the LED wall excluded.
  14. 11 · 271 s · graded 3-camera cut Centre plus two side angles on one timeline, cross-dissolved, cut on the phrases of the dance — and the beat-synced zoom punch binned.
  15. 12 · c0026 · no fusion the right camera A second centre angle of the same performance, from a steadier camera, barely flickered — and skipped the whole fight.
  16. verification loop
  17. 13 · pre-flight · post-render frozen-frame check A pre-flight assert that no segment (dissolve tail included) overruns its source, and a frame-hash pass after every render.
  18. 14 · 141 s correction the signal that lied A wall clock 146 s out, then an audio offset a single matching frame appeared to confirm — and was still wrong by 141 seconds. The last 0.7 seconds made visible: the centre camera's truth, the corrected sync, and the old fine-tune that passed a glance.
  19. delivery
  20. 15 · one per performance agent fleet Claude stopped being the editor and became the orchestrator — roughly one subagent per performance, each handed the same playbook.
  21. 16 · one lockfile serial render queue Editing parallel, rendering serial: a machine-wide lock, because two heavy encodes on a 16 GB box OOM the machine.
  22. 17 · 4 multicam masters finished films Four polished multicam performances plus the ceremony cuts, every master in one list, playable in the browser. The finished-videos view — every completed master in one list, quality selector on Web-HQ 1080p.

02 — the multicam sync picker

nine performances, one song track each

The review instrument, redrawn: pick a performance and read its angles as stacked tracks against the reference. Locked angles sit on the anchor at t = 0 — that is what alignment means — and the ones GCC-PHAT never resolved hang off it, dashed. the sync act has the method.

gcc-phat · reference: clean song track · confidence (batch) mid-20s – 353

Bride & groom

0:00 1:00 2:00 3:00 4:00 4:31 t = 0 · anchor reference cam 01 cam 02 cam 03

The hero. They performed twice — locked-off centre as anchor plus Camera A and Camera B on each performance, plus a drone cutaway on the second. Seven videos in all.

Track lengths are the performance duration, not per-clip runtimes, and the indent on an unlocked angle marks “no lock found” — it is not a measured offset. Per-clip offsets and per-performance confidences were never recorded, so none are drawn: the story reports one batch band, mid-20s to 353, and that is all this shows. Angles are counts, not camera identities.

read the full story →