Visual Investigation — our demo

One example among many. Don't reuse its story, arc, shots, props or timings.

Demo: The Hindenburg: Four Minutes, 32 Seconds (興登堡號:四分鐘與三十二秒, 60.0 s) · visual-investigation.mp4 · source in demo/

An unofficial film. Every picture, page, map and sound in it comes from real archives and public institutions (the U.S. National Archives' Universal Newsreels, the U.S. Navy and the Naval History and Heritage Command, the FBI file, the U.S. Department of Commerce accident report, the U.S. Geological Survey); none of them made or endorsed it. All facts and their sources are in demo/FACTS.md; every inference is marked on screen.

Story & structure

On 6 May 1937 the airship Hindenburg burned at the Naval Air Station, Lakehurst. The film rebuilds the last hours on one clock from five kinds of evidence. It opens on the decisive frozen frame and rewinds; then the clock narrows through three scales (minutes, seconds, days), each carried by a readout inside the picture:

Why it fits the style: every section is a moment where independent sources meet; one event clock runs through the film and changes scale at the cuts; the only discovery the archive can't make by itself (the newsreel started ≈7 s late) shows because the sources are laid on one clock; what the inquiry could not settle is shown as plainly as what it did.

Shots

# Time (s) Layout Sources Native move
1 0.0–2.4 big freeze → 2×2 grid → rewind newsreel 01:20, FBI p.39, Pasquarella, report freeze & circle, sync line, rewind cold open
2 2.4–6.3 footage left, title + lower third right newsreel 00:38 (New York) title package
3 6.3–12.3 four radiogram cards over a wind chart with playhead report (radiograms, weather) telegrams on the clock, data chart with a playhead
4 12.3–14.8 map push-in USGS 1947 map → plan (1)
5 14.8–18.6 plan left; mast photo and approach footage right NARA 518856, newsreel 01:03 map → plan (2), inferred view cone
6 18.6–23.8 statement + quote + wide side view report (Ward) big readout, cover flutter
7 23.8–31.8 five-source board + side view FBI p.39, newsreel 01:20, Pasquarella, newsreel sound, report freeze/magnify, evidence → model links, ✓ badges
8 31.8–38.6 three-column sync grid + stopwatch report, Pasquarella, NH 57973, newsreel 01:18–01:43 hard sync point, columns light up as sources begin
9 38.6–45.6 teletype strip + known / unresolved FBI p.13, report two columns
10 45.6–52.4 claim card + fact check + dots newsreel sound, report then vs. record, dots for people
11 52.4–55.6 evidence map all evidence map
12 55.6–60.0 end card — —

Cuts sit on a 0.5 s grid except where they follow the voice. Layouts fill y 60–900; subtitles sit below at y ≈ 984 / 1022; the evidence map, which has no subtitle, is centred.

Sound & score

Score from VSCO 2 CE / VCSL samples (CC0), D minor. A timpani and gran-cassa hit on the opening freeze; a low D drone from the title; a pizzicato ostinato in eighths (Dm → Dm7 → B♭ → Gm → A) through the wait and the position; a pendulum tick every 0.5 s; in the four minutes the ostinato stops, the tick gets louder and a tremolo minor second (E5/F5) builds over a heartbeat-like bass pulse, cut to silence 0.2 s before the origin hit. During the newsreel commentary only the drone stays. Five rising glockenspiel notes for the ✓ badges. The 32-second run has one tick per event second (32 ticks in 4.3 s, the first 7 faster) and a rising string swell; one deep thump on impact, then near silence. The inquiry is four slow string-and-harp chords (Dm – B♭ – Gm – A) under teletype chatter. People: one cello note. The evidence map resolves on D minor add9 with a vibraphone arpeggio; the end card ends on harp. Foley is procedural: paper, shutter, Morse, keys, rewind, pencil, thump. Voice: Kokoro am_michael, eight lines; newsreel commentary twice (3.5 s and 4.3 s). −14 LUFS, true peak about −2.4 dB (4× oversampled peak limiter in mix.py).

Palette & props

Exactly the style palette: #0B0C0E ground, #141619 panels, greyscale sources, one red #FF4A2E, paper cards #E4E0D4 for the typeset radiograms. Drawn props: the plan (mast, 700 ft ring, 30° bearing, view cone, map inset, 500 ft scale bar), the 16-cell side view (cells numbered from the stern), the wind chart, the dot matrix, the mini timeline with a broken axis.

End card

Left-aligned on the ground, held 4.4 s: "興登堡號:四分鐘與三十二秒", "THE HINDENBURG: FOUR MINUTES, 32 SECONDS", a thin rule, "視覺調查 · Visual Investigation", "LemoLab × Claude Opus 5.5", then the source lines (newsreel and sound; photos; documents; map; "unofficial film; photo times, camera positions and the film alignment are our inferences"). Four evidence thumbnails on the right. The "LemoLab × Claude Opus 5.5" sign-off belongs to this library's demo only; a user's film carries no LemoLab credit and no copy of this card.

Build notes

demo/
  index.html          the page: render(t), TEXTS(t) for readcheck, SUBCHECK() for subtitles; all drawing helpers
  film.json           sections, voice starts, original-sound clips, bilingual subtitles (page, mix and .srt read it)
  audio/lines.json    narration (Kokoro)       audio/mix.py   score, foley, original sound, voice, ducking, limiter
  tools/footage.py    search / fetch / licence log (writes SOURCES.jsonl, SOURCES.md)
  tools/prep.sh       raw/ → assets/ (newsreel frames, freezes, sound clips, FBI pages, photos, USGS crop)
  tools/wave.py       waveform peaks of the sound clips      tools/fonts.py   OFL subsets from Google Fonts
  tools/cues.py       film.json → audio/cues.json → .srt      tools/subcheck.mjs   one line per language
  tools/final_asr.py  speech check on the finished film, line by line
  FACTS.md · SOURCES.md · SOURCES.jsonl · CREDITS · stills/styleframe.jpg

sh demo/build.sh (library set up with setup.sh deps voice music, plus ffmpeg and poppler's pdftoppm): downloads the six sources into raw/ (~92 MB), prepares frames, fetches fonts, makes and checks the voice, mixes, runs the reading check, renders 1,800 frames (5 workers), writes and checks the subtitles, masters to −14 LUFS without grain (grain is already on the sources), makes the poster (55.3 s) and the styleframe (30.9 s), and runs the speech check on the finished film.

Pitfalls tied to this demo: only one licensable moving-image source exists, so the "multi-camera" sync is film + photos + documents + sound; Hearst, Pathé and agency material is left out. Freeze at src 01:20, not 01:24: the 01:24 frame shows only smoke, the 01:20 frame has the burst over the hull edge. Keep the panels clean: no timeline band under every shot (four tracks, pins, a chapter readout: it reads as odd, and it goes empty after 45 s), no type · source · detail tag on every panel and no English twins under most labels (the small text is noise), no hatched "NO FOOTAGE" panel for the newsreel's first 7 s (an empty panel looks like an error). Spread every layout to the full height, put the subtitles at the bottom, give each source one short tag, and let the late newsreel just light up when it starts. The plan's mast is not on the 1947 map, so keep the plan separate and use the map only as a locator. A whole-film Whisper pass drifts its timestamps after the newsreel sound and loses "people died": the final speech check cuts each line out of the film. The newsreel commentary is old and noisy; it is subtitled in both languages and never carries a fact on its own.