Submission and demo
02 — Demo video script (< 2 minutes)
Hard limit: 2:00. The submission form rejects longer. Target 1:48. The one thing the video must land: we measure the frame and tell you how to fix it.
The rule for this video
Every other entry will show a pretty render. Renders are cheap and indistinguishable. We show arithmetic that is checkable by hand. The camera moves, the numbers move, and a frame that fails gets a specific correction in metres.
Do not spend a single second on a shot we cannot defend.
Shot list
0:00 – 0:12 · The problem (12s)
Visual: A re-shoot app UI. A camera orbits. The render is fine. Cut to the same frame with the subject's head clipped at the top edge — still "fine".
VO:
"Every re-shoot tool asks the same question: where do you want the camera? And then it just… renders. Nobody tells you whether the frame is actually any good."
On screen: headroom = 0.02 — FAIL — too tight / clipped top
0:12 – 0:30 · What we built (18s)
Visual: The director's panel. All nine rules listed, live. Move the camera — every value updates.
VO:
"This is ComfyUI-Cinematographer. It scores a camera setup against the rules a working cinematographer actually uses — headroom, rule of thirds, lead room, shot size, the 180-degree line — and for every rule it fails, it gives you the lever that fixes it."
On screen: the rule panel, green and red, updating as the camera moves.
0:30 – 0:52 · The proof (22s) — THE MOST IMPORTANT 22 SECONDS
Visual: Drag the camera. headroom goes red. The correction reads "too much headroom: raise the camera target or push in." Drag again — it goes green.
VO:
"Watch. Headroom is 0.83. The medium-shot band is 0.10 to 0.45. So it fails, and it tells me to raise the target or push in. I do that — and it passes. That's not a model's opinion. That's arithmetic you can check by hand."
On screen, held long enough to read:
headroom 0.834 FAIL band [0.10, 0.45]
→ raise the camera target or push in
headroom 0.312 PASS
Do not rush this section. If the viewer believes only one thing, it must be this.
0:52 – 1:10 · Auto-frame, and the honest bit (18s)
Visual: Hit Auto-Frame. Camera flies to the solved pose. Badge reads CONVERGED · 3 iterations.
VO:
"It can also solve the pose for you. And here's the part most demos would hide: the original implementation of this solver ran twenty-four iterations and returned the twenty-fourth one unconditionally — no convergence test at all. Ours exits the moment the frame passes, and when it can't converge, it says so and names the rules still failing."
On screen: CONVERGED · 3 iterations, then a second run showing NOT CONVERGED · 24 iterations.
The NOT CONVERGED state is reproducible — use this exact recipe. It is reachable in 8 of 819 solver states across the panel's own slider range (subject height 1.20–2.10 m × 3 shot types × 3 angles), all of them short subjects at a high angle, so do not hunt for it live:
Reset → subject height 1.20 m → closeup → high → Auto-Frame
Result: NOT CONVERGED after 24 iteration(s) - still failing: headroom=0.612, shot_size=0.28, overall FAIL, reliability RED.
Read the residual off the panel; do not retype it. The engine prints only failures whose weight clears
OVERALL_PASS_WEIGHT = 0.8, so the line is shorter than the rule panel. In this stateheadroomandshot_sizeboth carry weight 1.0 and appear. The other seven rules are failing too —in_frame,rule_of_thirds,lead_room,negative_space,camera_angle,level,direct_address— but at weight < 0.8, so they are visible in the panel and absent from the residual. That gap is the honest part of the beat.
These numbers were re-derived, not remembered. Both the count and the residual come from driving
web/panel_state.js— the panel's own state module, the same code a page click runs — and were confirmed independently by the Python engine with the same intent: 8 states, identical residuals in both languages. Two earlier drafts of this script were wrong for this recipe and are retracted:54 of 1,377(that sweep started at 0.50 m, below the slider's 1.20 m minimum, so it measured an unreachable space) and7 of 819 / shot_size=0.346(built withcomp: 'centered', whichResetdoes not select). The recipe above is what the panel actually does.
This is the credibility beat. Do not cut it for time. The residual line is the point: the solver does not merely say "no" — it names the rules it could not satisfy and by how much.
1:10 – 1:28 · Continuity (18s)
Visual: Two shots in the continuity strip. Hit check. 180_axis goes red.
VO:
"And it checks the cut, not just the frame. Cross the action line and the subject's screen direction flips between shots. Cut on less than thirty degrees and it reads as a jump. Both are caught before you spend a single render."
On screen: 180_axis FAIL — axis crossed · 30_degree PASS — changed 55°
Two corrections to earlier drafts of this script. (1) The panel reads 55°, not 53° — read the number off the panel, do not retype it from memory. (2) The continuity strip also contains a failing cut that earlier drafts omitted; show it, because a strip where only one of two rules fires is the honest picture and it is the one the panel actually renders.
1:28 – 1:48 · The stack, and close (20s)
Visual: Node graph. LTX 2.3 → CrossView-Warp → MoGe-2. Then the licence table.
VO:
"It runs on LTX 2.3 with CrossView-Warp and MoGe-2 — and we deliberately don't use MiniMax H3, because the US is an excluded territory and local commercial use needs five thousand dollars a month. Every model here is one you can actually ship. Fourteen rules, all measured. Apache-2.0. The repo's in the description."
End card:
ComfyUI-Cinematographer
14 rules · measured, not guessed
Apache-2.0 · #OpenSourceHiggsfield
Production notes
- Record the panel at 1920×1080. The numbers must be legible at 720p playback.
- No music bed louder than the VO. Judges skim; the words carry it.
- Burn in the numbers as captions. Assume it is watched muted.
- Do not claim 38 rules. Say fourteen. The reference engine has 38 documented; 14 are machine-evaluated. Saying fourteen is a credibility asset, not a weakness.
- Do not name anything after a Higgsfield product.
- Do not show a render we did not produce. If the workflow has not been run, do not imply it has — show the graph and say "the graph is in the repo."
The 15-second cut (for the social post)
If a short version is needed for #OpenSourceHiggsfield:
0:00 headroom FAIL with the correction visible 0:06 drag → PASS 0:10 Auto-Frame → CONVERGED, 3 iterations 0:13 end card
Text: "Every re-shoot tool asks where you want the camera. Ours tells you if the frame is any good — and how to fix it. 14 rules, measured. Apache-2.0. #OpenSourceHiggsfield"