← Workflow All products

Contact Sheets - how a beat becomes a still

Stage 2 of the five-stage pipeline. The selector takes a beat, writes five queries, fetches candidate stills from the source article, ranks them against the hero reference, and picks the highest-scoring candidate within the reject rules. Every step has a measured cost and a rule that closes one class of failures.

Stage 2: Select - from beat to chosen still

For each beat in the audio, the selector pulls candidate stills from the source article and ranks them against the locked hero reference. Highest score wins, subject to the reject rules. The hero reference is held out of the active run, so the calibration is not contaminated.

The five-query rule

Identical queries across needs put the same 50 jpgs in every folder. The selector dedups globally, so half the needs see nothing. Five queries per need, character name first, plus a per-need verb:

queries = [ "{character_name} {subject_action} {scene}", "{character_name} {scene}", "{character_name} {location}", "{subject_action} {scene} {visual_world}", "{location} {scene}", ]

The ranking - vs the hero reference

Every candidate gets scored against the locked hero reference frame using cosine similarity. Highest score wins, subject to the reject rules.

The reject rules - never generic, always named to the beat

A blanket rule like "no Kanao" or "no romance" rejected the wrong needs - the very need where the forbidden character IS the subject, or where romance IS the subject. Every NEVER names its beat. Hard character constraints stay absolute but the constraint is per-beat, not global:

accept: "{character} in {location}, looking {direction}, period dress" reject: "modern product photography, neon lights, period-incorrect armour" NEVER: "{character} appears with {forbidden_char}", "modern-{period}-inappropriate costume", "anachronistic weapons",

Pixel review must be at full 1080×1920. Two rejects of 23 shots were false positives at 640px thumbnail - at full resolution they passed cleanly. Confirm any "wrong character" call by opening the source PNG.

What a contact sheet actually looks like

The EP_MUSASHI contact sheet shows 19 frames, each captioned with the line the narrator says during that shot and the timestamp window. Same data the build pipeline used to generate the MP4, rendered as a single page so a brand can verify each shot independently against the source.

The drift bug - and its fix

The first build of the Musashi episode had the right 19 frames for the right 19 lines, but the stills were 5.16 seconds shorter than the audio. The builder rescaled every shot to fit, and the pictures walked ahead of the captions until they were 2.7 seconds out by the end of the video. 7 of 19 shots showed the wrong picture under the caption.

The fix: each shot is given the pause in front of it, so the builder anchors every boundary to the words rather than to the spoken-span-only. After the fix, the same 19 frames against the same audio produced a clean gate with zero defects.

The contact-sheet rules on this page are what prevent the drift from happening in the first place. The drift fix is the recovery path when it does.

The strongest title pattern

Subject carries the claim, not the title pattern. Across 1,297 videos measured against the channel median, the patterns that lift on every channel are:

PatternLiftNote
STRONGEST1.65x to 4.12xAcross channels
WHY6.77x on dark historyPer-channel, not universal
NUMBERED8.24x51 videos measured
STORY3.65x24 videos measured
TRUTH0.29xDo not use on this channel
SHOCK (INSANE / BROKEN / CRAZY)0.13xUnderperforms
BACKSTORY / TRAGEDY0.09x to 0.78xUnderperforms everywhere

These are per-channel medians against the channel median. The pooled-median math that suggested "STRONGEST = 1.65x" hides the truth: STRONGEST is the only pattern that lifts on every channel measured. Pick on the ratio, not on intuition.

The three rules this stage enforces

These are the rules that belong specifically to Stage 2. The other three live on the main workflow page.

02
Five queries per need

Identical queries put the same 50 jpgs in every folder; the selector dedups globally, so half the needs see nothing.

$1.50 saved per rebuild
03
Every NEVER names its beat

"No Kanao" rejected the very need whose line is "Then he met Kanao." Constraints are per-beat, not global.

~25min saved per re-SELECT
05
Pixel review at full 1080×1920

Six frames passed at 640px and failed at full resolution. Confirm any "wrong character" call by opening the source PNG.

6 frames caught
See EP_MUSASHI breakdown Master workflow