John Corry
Under the bonnet

One person, fifteen stages, one pipeline.

Every Long Arc film is made by a single operator driving a production line I built myself. This page is the honest version of how it works — what each stage does, what it costs, and where the guardrails sit.

15pipeline stages
3delivery ratios
~450physicists behind the subject of the latest film
1operator

The production line

01

Research

Twelve to twenty dated, attributable facts, each with a source. No fact reaches the script without one — every number that appears on screen has to trace back to something real, because the validator will reject it otherwise.

→ <topic>_research.md
02

Plan

The research becomes a beat sheet of twelve to fourteen movements, each one narration plus a list of shots. This is where editorial judgement lives: what the argument is, where the turn comes, and which beats can stand alone as a Short.

→ SEQ (movements + shots)
03

Image prompts

Every shot gets a prompt. The house rule runs through all of them: the subject is modern, the treatment is archive. A single shared style prefix states the look once, so it can never drift between episodes.

→ IMAGES
04

Image generation

Stills are generated at 1536×1024 with a pinned high-quality model setting. Generation is resumable: anything already on disk is skipped, so a failed batch never costs the whole run.

→ images/*.png
05

Motion

Stills become moving shots at 720p, with the model chosen per shot: premium where a face is on screen, cheap where there are no people. Anything ambiguous goes premium — a mangled face costs more than thirty-five cents. Where motion is refused or capped, the shot falls back to a slow Ken Burns push. The film never blocks on a clip.

→ clips/*.mp4
06

Narration

Scripted narration, synthesised a movement at a time and paced deliberately slow. The engine reports the exact duration of every movement, and those numbers drive all the timing further down the line.

→ audio/mv_*.mp3 + durations.json
07

Score

An original bed, a sting and a motif per episode. The bed is mixed low and ducks under the narration, so the voice always sits on top.

→ music/score_*.mp3
08

Render

Shots are assembled into segments and the archive grade is applied — saturated, unstable tape with blooming highlights, chroma bleed and crawling grain. The look lives in one shared module, so the whole channel stays visually consistent.

→ seg/ + timeline.json
09

Narration fit

The audio-driven timing pass: every movement's voice-over is fitted to its visual span, with the overrun spread across shots rather than dumped on the last one. It runs on every ratio, which is what keeps the three masters identical in length.

→ asserted: no narration overlap
10

Assemble

Segments, narration and score are muxed into the 16:9 master with a consistent mix and a lead-in before every movement.

→ <TOPIC>.mp4 (1920×1080)
11

Square & portrait

The same film is rendered natively at 1080×1080 and 1080×1920 — cards and typography are regenerated for each shape, not letterboxed. All three masters must report the same duration before anything ships.

→ _1x1.mp4, _9x16.mp4
12

Compression & delivery

Each master is compressed under the messaging limit, decode-verified with zero errors, and delivered with an idempotency marker so nothing can be sent twice.

→ verified delivery
13

Thumbnails

Archival title cards, not YouTube furniture: one image, one short phrase, one colour decision, and a small plain wordmark. Judged at 320×180 — if the phrase is unreadable at that size, it gets simplified.

→ thumbs/thumb_{16x9,1x1,9x16}.png
14

Shorts

Standalone vertical cuts assembled from the episode's own narration — never a random trim. The beats that survive cold, with their own opening and a line that lands, are recorded in a spec and rendered by a tool.

→ shorts/*.mp4 + manifest
15

Publish

Film and Shorts are pushed to YouTube, the poster is set and then verified against the live CDN image rather than assumed, and every upload is recorded in a ledger so a re-run can never duplicate it.

→ public + ledger entry

What the model actually produces

Generated stills for the latest film, before motion and grade. These become moving shots in stage 5, then get the archive treatment in stage 8.

Generated still: aerial view of the polar ice sheet
The ice sheet as detector — generated still, pre-animation.
Generated still: the New Year pole ceremony
The New Year pole ceremony — the human beat of the episode.

Facts are facts

Maps are real geography with real place names, never invented diagrams. Charts must state their units and trace every number to a dated source — an unlabelled axis is treated as a bug, not a style choice.

Factual map: the neutrino's route from Orion to the South Pole
Factual map — the neutrino's route, from its source direction to the detector.
Line chart: institutions in the IceCube collaboration, 2011 to 2026
Unit-labelled chart — collaboration growth, 2011–2026.

The archival look

The grade and the thumbnails aim at one thing: a lost documentary found in an archive, rather than something generated last week.

Archive-graded key frame: a study desk with a star map
Key frame, post-grade — a shot from the finished film.
Archival thumbnail with the phrase THE ICE IS MOVING
Thumbnail — one image, one phrase, one colour decision.

One film, three shapes

The same story ships in three aspect ratios, each rendered natively so the typography is rebuilt for the shape rather than cropped into it. The film goes to the big screen, the feed, and the phone.

The guardrails

The parts that stop the pipeline quietly shipping something wrong. Every one of these exists because it caught a real failure.

Validation gate

Runs before any render. Fails the build if a chart title is meaningless, an axis has no units, or infographic cards take more than a quarter of the running time. Footage is the meal; cards are the garnish.

Casting check

Every shot with people in it must name the local population — and the validator fails the build if it doesn't. A film about a place has to show that place's people.

Likeness verification

Named figures are generated from a real reference photograph and then compared back against it before anyone is named on screen. No identity is asserted without a visual check.

Decode verification

Every deliverable is decoded end to end and must report zero errors before it is sent. A file existing is not evidence that it plays.

What it costs

The pipeline is metered as it runs, per service, and the model routing decisions in stage 5 were chosen on measured cost rather than taste. Where a premium model is only needed for faces, the rest of the film uses a cheaper one — that single routing change cut one episode's motion cost by roughly half without losing a face.

Built, not bought. The pipeline is a few dozen Python modules and shell scripts on a small server in Melbourne — research automation, image and audio generation, data visualisation and publishing. It is also where most of my applied-AI work actually happens.
Watch the films Back to films