ComfyUI Higgsfield Opensource Challenge The plan and the build record ← Build log

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
01The brief as received — and the premise that was false—3
02The re-aim — what the entry actually is17
03The licence trap — open weights is not open licence—10
04The differentiator — a judgement, not a preset214
05The rule-count problem — 38 documented, 14 evaluated—17
06The convergence problem — 24 iterations, no test322
07The build — engine, six nodes, two graphs, one panel426
08The verification chain — 289 checks, 28 fixtures, 69 tests531
09The adversarial review — what broke—34
10The systemic finding — twelve unconstrained constants—38
11What is still unverified—41
12Appendix — 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
1The rule countOnly 14 rules are machine-evaluated in the Go sourceThe prior report's headline said 38 rulesCorrected in the spec before the build. The entry says fourteen everywhere, and four separate places gate the number.
2The solver's convergenceThe Go solver runs exactly 24 iterations and returns the 24th unconditionally — no convergence test, no early exitThe 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.
3The verification coverageBoth 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.jsondifferential checks run: 289 · ALL FIXTURES AGREE · exit 0
python3 app/web/parity_check.pyRESULT: PASS — 28 fixtures, 0 mismatches · exit 0
python3 -m pytest tests/ -q (from app/)69 passed
python3 app/workflows/validate_graphs.pyPASS 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
ReproducedA command in this package was re-run during writing and produced the stated output.
CheckedA harness inside the entry mechanically verifies it, and the harness was re-run.
ConstructedTrue by construction and checkable by reading, with no run required.
MeasuredRecorded from a real execution of the artefact. Nothing in this entry is measured.
QuotedTaken from a source that was read by someone else and not re-read here.
BrokenA runnable check contradicts it, or the documented path fails.
StaleWas true of an earlier revision and was not updated.
NOT VERIFIEDCould not be confirmed by any means available.
LiveNot applicable. Nothing in this package was observed running in its target environment.
Flag-offNot 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 packThe install path was broken and nobody noticed until the review simulated the loader.
Either workflow graphBoth _READMEs say NOT VERIFIED; the validator checks structure only.
Any renderLTX 2.3 + CrossView-Warp + MoGe-2 output quality is unknown.
The Go dump's provenanceThe 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 termsQuoted 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 constantsUnconstrained by the differential check, the unit suite, and the parity check.
The competition rubricUnpublished.

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
1Installed 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.CRITICALPartially fixed — a shim exists at app/__init__.py, but the documented clone target is still the repo root, which still has no __init__.py.
2Twelve 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.MAJOROpen
3verification/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.MAJOROpen
4validate_graphs.py:72 said SamplerCustomAdvanced: 1 where upstream declares 2 — falsifying the table's own "read from the node sources, not guessed" claim.MAJORFixed
5eyeline (rule 12 of 14) is never differentially verified and is not disclosed as unverified.MAJOROpen
6verification/README.md:122 told the reader to run verification/panel_parity_check.py, which does not exist.MAJORFixed
7The 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.MINOROpen
8The Go solver's failure mode is sold but not demonstrated by any captured fixture — all 18 Go autoframe fixtures end on a passing frame.MINOROpen
9app/tests/test_framing.py:13's hand-computed F constant was wrong in the fifth decimal.MINORFixed
10The demo script's continuity on-screen state does not match the panel (53° vs 55°, plus an omitted failing cut).MINOROpen
11pytest is required by app/README.md:47 but is never listed as an install step.MINOROpen
12The reliability zone returns red for an elevation-only violation where 01-SPEC.md:229 says yellow.MINOROpen

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
1Only 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
2The 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

Repositoryhiggsfield-comfyui-os (not a git checkout — pinned by sha256 manifest)
Manifest58d27eab06da1631333d6d5793de6205ca29c6bde3e15a340512d770dafe133c over 44 source files
Engine aggregatecf24e2ba1eeadfd9e7b317fafc2c114710865c91f67b806e2d55fe337fb523fe over the six engine modules
Fixture engine hash24621deb23c66c8ffb501b97e8350f1d67c93c39626f8936a1805fcd1d67bd93 (recorded by parity_fixtures.json, recomputed by parity_check.py — matches live)
MethodStatic source inspection with read/grep, plus four re-run harnesses. No execution of the artefact.
Snapshot taken2026-10-29 17:38 PT (2026-10-30T00:38Z)
ComfyUI versions referencedNone pinned. The graphs' _READMEs name their upstream node packs; the entry pins no ComfyUI version.
Report packageclient-reports/comfyui-higgsfield-cinema-oss/
ConfidentialityConfidential · 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.