The plan and the build record
ComfyUI-Cinematographer — Build Dossier
A complete, code-cited play-by-play of the planning and the build of the ComfyUI-Cinematographer entry for Comfy Org's Open Source Higgsfield LA Build Night: the premise that turned out to be false, the licence trap that re-aimed the entry, the differentiator and how it was made falsifiable, three honesty problems found in the entry's own claims, the build itself, the three verification harnesses, and the adversarial review that broke one of them.
Written for the team that has to defend it. The audience is Magieva, not a customer. That shapes the document in three ways: every claim carries a path:line; the entry's own defects are stated as defects rather than rounded into roadmap items; and it closes with the complete NOT-VERIFIED register rather than a sample of it.
The one-line finding: the entry's code is better than the documentation around it. Three independent verification harnesses — 289 differential checks against the original Go, 69 unit tests, 28 three-way panel-parity fixtures — all pass, and all three are blind to the same class of defect: twelve engine constants, including the entire medium-shot size band and the entire rule-of-thirds tolerance, can be set to wrong values while every harness still prints green.
Package contents
comfyui-higgsfield-cinema-oss/
├── README.md ← this file
├── comfyui-higgsfield-cinema-oss.html ← 12 sections · figures · self-contained
├── comfyui-higgsfield-cinema-oss.pdf ← Letter portrait render (headless Chrome)
├── analysis/ ← the evidence layer the HTML was built from
│ ├── 01-premise-and-reaim.md ← the false premise, and the four corrections
│ ├── 02-licence-trap.md ← open weights ≠ open licence; why H3 was rejected
│ ├── 03-differentiator-and-rule-count.md ← judgement vs preset; 38 documented, 14 evaluated
│ ├── 04-convergence-and-build.md ← the 24-iteration solver; engine, nodes, graphs, panel
│ ├── 05-adversarial-review.md ← the CRITICAL install defect; the 12-constant hole
│ └── 06-unverified-and-method.md ← the chain, the NOT-VERIFIED register, the method
└── assets/ ← cover wordmark + footer logomark, base64
├── cover-logo.datauri
└── foot-logomark.datauri
The two assets/*.datauri files are the sources for the inlined images, kept so the logos can be re-substituted if the HTML is ever regenerated. The HTML itself has no external file dependencies apart from the mermaid CDN.
The analysis/ files are the evidence layer. The HTML is the narrative built on top of it; where the two differ in detail, the analysis file is authoritative — it carries the full quotes and the per-claim citations that the dossier compresses.
Section map
| § | Title | Figure | Page |
|---|---|---|---|
| 01 | The brief as received — and the premise that was false | — | 3 |
| 02 | The re-aim — what the entry actually is | 1 | 7 |
| 03 | The licence trap — open weights is not open licence | — | 10 |
| 04 | The differentiator — a judgement, not a preset | 2 | 14 |
| 05 | The rule-count problem — 38 documented, 14 evaluated | — | 17 |
| 06 | The convergence problem — 24 iterations, no test | 3 | 22 |
| 07 | The build — engine, six nodes, two graphs, one panel | 4 | 26 |
| 08 | The verification chain — 289 checks, 28 fixtures, 69 tests | 5 | 31 |
| 09 | The adversarial review — what broke | — | 34 |
| 10 | The systemic finding — twelve unconstrained constants | — | 38 |
| 11 | What is still unverified | — | 41 |
| 12 | Appendix — evidence index and method | — | 45 |
The three honesty problems
The entry's differentiator is honesty about measured versus guessed. Three claims did not survive contact with the code, and each was handled differently.
| # | Problem | What was true | What was claimed | How it was handled |
|---|---|---|---|---|
| 1 | The rule count | Only 14 rules are machine-evaluated in the Go source | The prior report's headline said 38 rules | Corrected in the spec before the build. The entry says fourteen everywhere, and four separate places gate the number. |
| 2 | The solver's convergence | The Go solver runs exactly 24 iterations and returns the 24th unconditionally — no convergence test, no early exit | The prior report said it "solves a compliant camera pose" | Fixed in the port. Early exit, a converged flag assigned from the report itself, an iteration count, and a residual. Proved by 18 differential checks and a 1,800-call adversarial sweep. |
| 3 | The verification coverage | Both headline numbers measure value fidelity; neither measures threshold fidelity | "289 differential checks, zero disagreements" and "69 unit tests, every expected value hand-computed" | Found by the adversarial review, not fixed. Twelve engine constants are unconstrained by all three harnesses. |
Problems 1 and 2 were caught during planning, by reading the code the prior report described. Problem 3 was caught only by attacking the entry's own verification — and it is the one still open.
Verified vs not verified
Every claim in this package was read from source. Line numbers are 1-based for the revision pinned below. Four commands were re-run during the writing of this package and their outputs are quoted verbatim in the analysis files:
| Command | Result |
|---|---|
python3 verification/differential_check.py verification/go-reference-dump.json | differential checks run: 289 · ALL FIXTURES AGREE · exit 0 |
python3 app/web/parity_check.py | RESULT: PASS — 28 fixtures, 0 mismatches · exit 0 |
python3 -m pytest tests/ -q (from app/) | 69 passed |
python3 app/workflows/validate_graphs.py | PASS both graphs · exit 0 |
No ComfyUI instance was run, no graph was submitted, no render was produced, and no VRAM or timing was measured to produce this document. No environment, cluster, or database was queried.
| Term | Meaning here |
|---|---|
| Reproduced | A command in this package was re-run during writing and produced the stated output. |
| Checked | A harness inside the entry mechanically verifies it, and the harness was re-run. |
| Constructed | True by construction and checkable by reading, with no run required. |
| Measured | Recorded from a real execution of the artefact. Nothing in this entry is measured. |
| Quoted | Taken from a source that was read by someone else and not re-read here. |
| Broken | A runnable check contradicts it, or the documented path fails. |
| Stale | Was true of an earlier revision and was not updated. |
| NOT VERIFIED | Could not be confirmed by any means available. |
| Live | Not applicable. Nothing in this package was observed running in its target environment. |
| Flag-off | Not applicable. The entry has no feature flags. |
The two inapplicable terms are stated rather than dropped, because their absence is the finding: this entry has no live surface. Every claim about it is a claim about source code, a harness, or a JSON file. Nothing was observed running.
The complete register is in analysis/06-unverified-and-method.md §5. The most important entries:
| Not verified | Why it matters |
|---|---|
| ComfyUI loading the pack | The install path was broken and nobody noticed until the review simulated the loader. |
| Either workflow graph | Both _READMEs say NOT VERIFIED; the validator checks structure only. |
| Any render | LTX 2.3 + CrossView-Warp + MoGe-2 output quality is unknown. |
| The Go dump's provenance | The 289-check claim reduces to agreement with a JSON file. "The single largest hole in the verification chain, and it is inherent to the setup." |
| The licence terms | Quoted from the recon; the LTX, Wan, MoGe and H3 licence texts were not read here. |
eyeline (rule 12 of 14) | Never differentially verified — both extras fixtures have one character. |
| Twelve engine constants | Unconstrained by the differential check, the unit suite, and the parity check. |
| The competition rubric | Unpublished. |
Headline defects
Stated here because a dossier that only lists what works is not worth the team's time. Full detail in analysis/05-adversarial-review.md.
| # | Defect | Severity | State |
|---|---|---|---|
| 1 | Installed exactly as app/README.md:33-41 documents, the ComfyUI nodes do not load at all — the pack root has no __init__.py and ComfyUI's loader does not recurse. A judge gets an empty category, not six nodes. | CRITICAL | Partially fixed — a shim exists at app/__init__.py, but the documented clone target is still the repo root, which still has no __init__.py. |
| 2 | Twelve engine constants — including the entire medium-shot size band and the entire rule-of-thirds tolerance — can be wrong while all three harnesses print green. | MAJOR | Open |
| 3 | verification/README.md:12-13 claims the port reproduces Go "value-for-value". The check silently skips the scene correction and continuity detail fields, and those do diverge. | MAJOR | Open |
| 4 | validate_graphs.py:72 said SamplerCustomAdvanced: 1 where upstream declares 2 — falsifying the table's own "read from the node sources, not guessed" claim. | MAJOR | Fixed |
| 5 | eyeline (rule 12 of 14) is never differentially verified and is not disclosed as unverified. | MAJOR | Open |
| 6 | verification/README.md:122 told the reader to run verification/panel_parity_check.py, which does not exist. | MAJOR | Fixed |
| 7 | The demo's headline example is a medium-shot headroom failure — but headroom has weight 0.7 in a medium shot and gates the overall verdict only in a close-up. The demo shows a rule-level FAIL that does not change the frame's verdict. | MINOR | Open |
| 8 | The Go solver's failure mode is sold but not demonstrated by any captured fixture — all 18 Go autoframe fixtures end on a passing frame. | MINOR | Open |
| 9 | app/tests/test_framing.py:13's hand-computed F constant was wrong in the fifth decimal. | MINOR | Fixed |
| 10 | The demo script's continuity on-screen state does not match the panel (53° vs 55°, plus an omitted failing cut). | MINOR | Open |
| 11 | pytest is required by app/README.md:47 but is never listed as an install step. | MINOR | Open |
| 12 | The reliability zone returns red for an elevation-only violation where 01-SPEC.md:229 says yellow. | MINOR | Open |
One CRITICAL, five MAJOR, six MINOR shown; the full register is 17 defects. Not one of them is a wrong measurement — they are defects in the claims about the measurements, the packaging, and the coverage.
Three findings this package surfaced that the build did not make explicit
Each is an arithmetic consequence of constants the entry already published. None required running anything.
| # | Finding | Where |
|---|---|---|
| 1 | Only four rules can ever fail a frame. overall_pass is computed only over rules with weight >= 0.8. In a close-up that is in_frame, rule_of_thirds, headroom, shot_size; in a medium shot it is three; in a wide shot it is two. headroom — the demo's headline example — gates only in a close-up. | analysis/03-differentiator-and-rule-count.md §6.4 |
| 2 | The 289 checks are not 289 of the same thing. 243 are per-rule field comparisons (81 framing + 162 autoframe); the other 46 are camera-pose checks (18), early-exit checks (18), continuity checks (6) and scene-extras checks (4). The phrase "289 differential checks" reads as 289 independent comparisons and it is not. | analysis/04-convergence-and-build.md §3.3 |
| 3 | "14 rules" is the right number for the rule surface and the wrong number for the rules that can fail a frame. Of the 14: four never fail (informational), four more can fail but cannot fail the frame, two gate only in some shot types, and two gate in every shot type. | analysis/03-differentiator-and-rule-count.md §6.5 |
A fourth, found while folding the recon's evidence in: the prior report's explanation of how the rulebook grew is false. The 32→38 growth was hand-authored; the nightly CronJob's first successful run added rules 39–41 on 2026-09-02, after the growth it is credited with. The entry corrected the rule count but not the mechanism. — analysis/03-differentiator-and-rule-count.md §4.2b
Build
The PDF is a headless-Chrome render of the HTML. Mermaid diagrams load from the jsDelivr CDN (mermaid@10), so the render requires network access; the HTML itself is otherwise self-contained (logos are inlined as base64 data URIs).
cd client-reports/comfyui-higgsfield-cinema-oss
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
--headless --disable-gpu --no-sandbox \
--no-pdf-header-footer \
--virtual-time-budget=45000 \
--run-all-compositor-stages-before-draw \
--print-to-pdf=comfyui-higgsfield-cinema-oss.pdf \
"file://$PWD/comfyui-higgsfield-cinema-oss.html"
Verify the render — page count, and that no mermaid source leaked as text:
pdftotext -layout comfyui-higgsfield-cinema-oss.pdf /tmp/chc.txt
python3 -c "
pages = open('/tmp/chc.txt', encoding='utf-8', errors='replace').read().split('\f')
print('pages:', len(pages) - 1)
leak = [i for i, p in enumerate(pages, 1) if 'flowchart TB' in p or 'sequenceDiagram' in p]
print('raw mermaid leaked on pages:', leak or 'none')
"
Verified output of the shipped render (2026-10-29 17:52 PT):
pages: 51
raw mermaid leaked on pages: none
All five figures render as SVG; the TOC page numbers in the HTML were set from the rendered PDF and match the actual section start pages (3, 7, 10, 14, 17, 22, 26, 31, 34, 38, 41, 45).
Provenance
| Repository | higgsfield-comfyui-os (not a git checkout — pinned by sha256 manifest) |
| Manifest | 58d27eab06da1631333d6d5793de6205ca29c6bde3e15a340512d770dafe133c over 44 source files |
| Engine aggregate | cf24e2ba1eeadfd9e7b317fafc2c114710865c91f67b806e2d55fe337fb523fe over the six engine modules |
| Fixture engine hash | 24621deb23c66c8ffb501b97e8350f1d67c93c39626f8936a1805fcd1d67bd93 (recorded by parity_fixtures.json, recomputed by parity_check.py — matches live) |
| Method | Static source inspection with read/grep, plus four re-run harnesses. No execution of the artefact. |
| Snapshot taken | 2026-10-29 17:38 PT (2026-10-30T00:38Z) |
| ComfyUI versions referenced | None pinned. The graphs' _READMEs name their upstream node packs; the entry pins no ComfyUI version. |
| Report package | client-reports/comfyui-higgsfield-cinema-oss/ |
| Confidentiality | Confidential · Magieva Inc. · 2026 |
Concurrency caveat. The source tree was being edited by another lane while this package was written. Three files changed during the writing of analysis/05-adversarial-review.md — verification/README.md, app/workflows/validate_graphs.py, and app/tests/test_framing.py. The engine modules did not change, so every claim about engine behaviour is pinned. Every claim about the three edited files is timestamped in that file's §10.