ComfyUI Higgsfield Opensource Challenge The analysis ← Build log

The analysis

06 — What is still unverified, and the method

Scope: the verification chain drawn end to end, the revision this package documents, the largest hole in the chain, the licence terms that were quoted rather than read, the complete NOT VERIFIED register, the term table, and the method by which this package was produced.

Source root: as 01-premise-and-reaim.md §0.


1. The verification chain, drawn

  Magieva monorepo (private)
  internal/contentstudio/cinematography*.go
            │
            │  ◄── LINK 1: NOT AUDITED
            │      A temporary Go harness was compiled inside the module and run.
            │      Its output was captured to verification/go-reference-dump.json.
            │      The harness source is preserved. It was never re-run by anyone
            │      outside the Magieva checkout, and the checkout is not in this package.
            ▼
  verification/go-reference-dump.json          (3,003 lines, frozen)
            │
            │  ◄── LINK 2: MECHANICALLY CHECKED
            │      python verification/differential_check.py → 289 checks, 0 disagreements
            │      Tolerance 1e-6. Reproduced by this package.
            ▼
  app/cinematographer/*.py                     (1,342 lines, pure stdlib)
            │
            ├─── LINK 3a: MECHANICALLY CHECKED
            │    app/tests/ → 69 tests, hand-computed expectations
            │    Reproduced by this package.
            │
            │  ◄── LINK 3b: MECHANICALLY CHECKED
            │      python app/web/parity_check.py → 28 fixtures, 0 mismatches
            │      Three-way: JS↔fixtures, Python↔fixtures, Python↔JS live.
            │      sha256 staleness guard over the six engine modules.
            │      Reproduced by this package.
            ▼
  app/web/cinematographer.js                   (843 lines, JS mirror)
            │
            │  ◄── LINK 4: NOT CHECKED
            │      The panel renders these numbers. No browser test asserts that
            │      what is on screen equals what the engine computed.
            ▼
  app/web/index.html + app.js                  (the director's panel)

  ─────────────────────────────────────────────────────────────────────────

  app/workflows/*.json                         (2 graphs, 60 nodes, 82 links)
            │
            │  ◄── LINK 5: STRUCTURALLY CHECKED ONLY
            │      python app/workflows/validate_graphs.py → PASS both
            │      Checks: JSON parses, class_type present, slot counts, links
            │      resolve, acyclic, reachable from SaveVideo.
            │      Does NOT check: that ComfyUI accepts the prompt, that the
            │      node packs and weights are installed, that it runs, or that
            │      it produces a clip.
            ▼
  ComfyUI                                      ◄── NEVER EXECUTED

  ─────────────────────────────────────────────────────────────────────────

  app/cinematographer/nodes.py                 (698 lines, 6 nodes)
            │
            │  ◄── LINK 6: BROKEN, THEN PARTIALLY FIXED
            │      ComfyUI's loader requires <pack_root>/__init__.py and does not
            │      recurse. The documented clone puts the pack root at the repo
            │      root, which has no __init__.py. A shim now exists at
            │      app/__init__.py; the documented path is still broken.
            ▼
  ComfyUI custom_nodes/                        ◄── NEVER LOADED

Two links are mechanically checked end to end. Four are not.

Link Status Checked by
1. Go source → dumpNOT AUDITEDNothing in this package
2. Dump → Python engineCHECKEDdifferential_check.py, 289 checks
3a. Engine → unit testsCHECKEDpytest, 69 tests
3b. Engine → JS mirrorCHECKEDparity_check.py, 28 fixtures, 3 legs
4. JS mirror → rendered panelNOT CHECKEDNothing
5. Graphs → ComfyUINOT CHECKEDvalidate_graphs.py checks structure only
6. Nodes → ComfyUINOT CHECKEDNothing; the path was broken

2. The revision this package documents

The entry is not a git checkout (git status → fatal: not a git repository). Revision pinning was therefore done by sha256 manifest.

2.1 The manifest

A manifest over the 44 source files (.py, .js, .mjs, .json, .md, .html, .css, .toml, .txt, LICENSE), excluding __pycache__ and .pytest_cache:

$ find . -type f \( -name '*.py' -o -name '*.js' -o -name '*.mjs' -o -name '*.json' \
    -o -name '*.md' -o -name '*.html' -o -name '*.css' -o -name '*.toml' -o -name '*.txt' \
    -o -name 'LICENSE' \) -not -path '*/.pytest_cache/*' -not -path '*__pycache__*' \
  | sort | xargs shasum -a 256 > /tmp/cine-manifest.txt
$ wc -l < /tmp/cine-manifest.txt
44
$ shasum -a 256 /tmp/cine-manifest.txt
58d27eab06da1631333d6d5793de6205ca29c6bde3e15a340512d770dafe133c  /tmp/cine-manifest.txt

Manifest hash: 58d27eab06da1631333d6d5793de6205ca29c6bde3e15a340512d770dafe133c (44 files, observed 2026-10-29 17:38 PT)

2.2 The engine hash

The parity fixtures record their own hash over the six engine modules, constructed as sha256(Σ name ‖ \0 ‖ content ‖ \0) (app/web/parity_check.py:223-237):

engine_hash_sha256 = 24621deb23c66c8ffb501b97e8350f1d67c93c39626f8936a1805fcd1d67bd93

— app/web/parity_fixtures.json meta.engine_hash_sha256

The parity check recomputes it and reports "matches live engine" (parity_check.py:260-262), so the fixtures are not stale.

A second, independent aggregate over the same six modules:

$ find app/cinematographer -name '*.py' -not -path '*__pycache__*' | sort | xargs shasum -a 256 | shasum -a 256
cf24e2ba1eeadfd9e7b317fafc2c114710865c91f67b806e2d55fe337fb523fe  -

Engine aggregate: cf24e2ba1eeadfd9e7b317fafc2c114710865c91f67b806e2d55fe337fb523fe

Per-module:

Module sha256 (first 16)
geometry.py12b5f79083d37e4f
framing.py4b8a5a2ff43f6678
scene.py875c080dd2d00c31
continuity.py7378087ee5f0fae1
autoframe.py20416b5997baf67e
reliability.pyd9fdaa82a47318f9
nodes.py262a00103862ee83
__init__.py5cbba543b3eec096

2.3 The concurrency caveat

The source tree was being edited by another lane while this package was written. Three files changed during the writing of 05-adversarial-review.md:

File Change
verification/README.mdThe dead parity command was replaced; the parity row moved out of UNVERIFIED
app/workflows/validate_graphs.pySamplerCustomAdvanced slot count 1 → 2
app/tests/test_framing.pyF = 3.4567701 → F = 3.45679012345679

The engine modules did not change (the aggregate hash is stable), so every claim in this package about engine behaviour is pinned. Every claim about the three edited files is timestamped in 05-adversarial-review.md §10.

A reader re-running the manifest will get a different hash if further edits have landed. That is expected; the manifest's purpose is to say what was read, not to freeze the tree.


3. The largest hole: the Go dump's provenance

The adversarial review named it, and it is the single most important caveat in this package:

"No Magieva Go checkout. I could not re-run go-harness/zz-cine-dump.go. I verified the Python side against the frozen go-reference-dump.json only. The dump's own provenance is unverifiable from here — if it were fabricated or stale, none of my claim-A work would detect it. This is the single largest hole in the verification chain, and it is inherent to the setup." — verification/ADVERSARIAL-REVIEW.md:673-676

3.1 What this means precisely

The entry's strongest claim is:

"289 differential checks, zero disagreements — the Python port reproduces the original Go cinematography implementation." — verification/README.md:15

Stated precisely, the evidence supports:

The Python port agrees with verification/go-reference-dump.json on 289 comparisons.

The step from there to "agrees with the Go implementation" requires a fact this package cannot establish: that the JSON was produced by the Go code it claims to have been produced by.

3.2 What makes it auditable but not audited

The harness source is preserved at verification/go-harness/zz-cine-dump.go, and the README gives the exact reproduction commands:

# verification/README.md:26-32
cp verification/go-harness/zz-cine-dump.go cmd/zz-cine-dump/main.go
GOWORK=off go run ./cmd/zz-cine-dump > /tmp/go-cine-dump.json
rm -rf cmd/zz-cine-dump
python verification/differential_check.py /tmp/go-cine-dump.json

So the claim is auditable: anyone with the Magieva checkout can re-run it in about a minute. It was not audited, because the checkout is not in this package and the reviewer did not have it.

3.3 The three ways the dump could be wrong

Failure mode Detectable from this package?
The dump was hand-written or fabricatedNo
The dump is stale — produced from an older revision of the Go sourceNo
The dump was produced by a modified harness that pre-applies the port's own choicesNo

The third is the subtle one. A harness that called the Go functions with the port's own defaults would produce a dump that the port trivially matches. Nothing in the package rules this out.

3.4 What would close it

  1. Re-run the harness in the Magieva checkout and diff the output against the frozen dump. If they match byte-for-byte, link 1 is closed.
  2. Record the Go source revision (commit sha) alongside the dump.
  3. Record the harness's own sha256 in the dump's metadata.

None of the three was done.


4. The licence terms were quoted, not read

The licence argument in 02-licence-trap.md is the entry's second-strongest claim after the differential check. The review did not verify it:

"I did not read the LTX-2.x Community licence, the Wan 2.2 licence, or the MoGe-2 licence to confirm the revenue caps and territory exclusions quoted in the README." — verification/ADVERSARIAL-REVIEW.md §13 (What I could not verify)

What was verified is narrower and different:

"F — Licence-clean / no trademark — CONFIRMED. No Higgsfield in filenames or app strings; no MiniMax H3, no closed API, no partner nodes, no network calls in the engine." — verification/ADVERSARIAL-REVIEW.md:38

4.1 The distinction

Claim Status
The shipped code contains no Higgsfield trademark, no H3, no closed API, no partner nodes, no network callsVERIFIED — grep clean (verification/ADVERSARIAL-REVIEW.md:654)
Wan 2.1/2.2 are Apache-2.0 with no revenue capQUOTED — from the recon, not read from the licence text
LTX-2.x has a revenue capQUOTED — same
MiniMax H3 excludes the US and requires ~$5k/month for local commercial useQUOTED — same
MoGe-2's licenceNOT READ

The licence reasoning is in 02-licence-trap.md, which cites the recon's inventory. The recon read the licence texts; this package did not, and the review did not.

4.2 Why the distinction matters here

The entry's licence position is "we chose Wan 2.2 because it is Apache-2.0 with zero caveats." That is a claim about a licence text. If the text says something else, the entry's central open-weights argument weakens.

The practical consequence is small — the entry ships no weights and no model code, so it is not distributing anything under those licences. But the argument is load-bearing for the "open-weights-only" property, and the argument rests on quotes.


5. The complete NOT VERIFIED register

Consolidated from verification/README.md:117-126, 03-SUBMISSION.md, the workflow _READMEs, and the adversarial review's §13.

5.1 Never executed

Item Why not Consequence
ComfyUI loading the packNo ComfyUI instance was availableThe install path was broken and nobody noticed until the review simulated the loader
Either workflow graphSameBoth graphs' _READMEs say NOT VERIFIED; the validator checks structure only
Any renderSameLTX 2.3 + CrossView-Warp + MoGe-2 output quality is unknown
The panel in a browserNo browser test asserts rendered valuesThe JS mirror is proven equal to the engine; the rendering of those values is not
The Go harnessThe Magieva checkout is not in this packageSee §3

5.2 Never measured

Item Status
VRAM"MEASURED: nothing. No timing, no VRAM figure, no output."
Runtime / latencySame
The reliability envelope (±45° azimuth)CrossView-Warp's documented trained range, not independently measured (verification/README.md:123)
The size_importance absolute valuesExplicitly disclaimed (scene.py:15-20); the differential check skips the value (differential_check.py:241-244)
The 14-rule count in the Go sourceInherited from the recon (analysis/11-contentstudio-inventory.md:7), not re-derived
The 38-rule count in the rulebookSame

5.3 Never checked

Item Status
eyeline (rule 12 of 14)Never differentially verified — both extras fixtures have one character (scene.py:231; verification/ADVERSARIAL-REVIEW.md:203-211)
12 engine constantsUnconstrained by all three harnesses (verification/ADVERSARIAL-REVIEW.md:614)
Boundary behaviour of any ruleNo fixture sits on a boundary (verification/ADVERSARIAL-REVIEW.md:155-158)
Scene correction stringsSkipped, and they diverge (em dash vs hyphen)
Continuity detail stringsSkipped, and three of four diverge (°/≥/— vs deg/>=/-)
AutoFrameGroupNot ported; the entry says so (verification/README.md:66)
Browser coverageOne viewport, Chrome, local http.server. No CDN-offline fallback, no Firefox/Safari, no mobile
Input names beyond the flagged setSlot counts verified for all 33 class types; input names only for the flagged nodes

5.4 Never obtained

Item Status
A comfy.org login"We do not have a comfy.org login." (03-SUBMISSION.md:10)
The competition judging rubricUnpublished (verification/README.md:125)
The demo video"⛔ not recorded" (03-SUBMISSION.md:39)
The social post"⛔ not posted" (03-SUBMISSION.md:40)
A published repo"⛔ blocked" (03-SUBMISSION.md:38)

5.5 Never read

Item Status
The LTX-2.x Community licence textQuoted from the recon
The Wan 2.2 licence textQuoted from the recon
The MoGe-2 licence textNot read
The MiniMax H3 licence textQuoted from the recon
The CrossView-Warp licence textQuoted from the recon (Apache-2.0)

6. The term table

The terms used throughout this package, defined for this subject.

Term Meaning here Example
ReproducedA command in this package was re-run during writing and produced the stated outputdifferential_check.py → 289; parity_check.py → PASS; pytest → 69 passed
CheckedA harness inside the entry mechanically verifies it, and the harness was re-runThe 289 differential checks; the 28 parity fixtures; the graph validator
ConstructedTrue by construction and checkable by reading, with no run requiredThe engine has no network calls; converged is assigned from report.overall_pass
MeasuredRecorded from a real execution of the artefactNothing in this entry is measured. No render, no VRAM, no timing
QuotedTaken from a source that was read by someone else and not re-read hereThe licence terms; the 14-rule count
BrokenA runnable check contradicts it, or the documented path failsapp/README.md:41 — the nodes do not appear (partially fixed)
StaleWas true of an earlier revision and was not updatedverification/README.md:122 listed parity as UNVERIFIED (now fixed)
NOT VERIFIEDCould not be confirmed by any means availableComfyUI loading the pack; either graph running; any render
LiveNot applicable to this entry. 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 itself 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.

6.1 The term distribution

Term Count of distinct claims
Reproduced4 (differential, parity, pytest, validator)
Checked3 harnesses
ConstructedSeveral (no network calls, converged assignment, pure-stdlib engine)
Measured0
Quoted5 licence terms + 2 rule counts
Broken1 CRITICAL (partially fixed)
Stale1 (fixed)
NOT VERIFIED20+

Zero measured claims. That is the honest headline of this package, and it is why the entry's own honesty ledger (03-SUBMISSION.md:133-145) is the right artefact to lead with.


7. The method

7.1 How this package was produced

Step What was done
1Read the entry's own documents in full: 00-BREAKDOWN.md, 01-SPEC.md, 02-DEMO-SCRIPT.md, 03-SUBMISSION.md
2Read the recon: analysis/10-comfyui-substrate-inventory.md, analysis/11-contentstudio-inventory.md, analysis/20-competition-brief.md
3Read the verification lane: verification/README.md, verification/differential_check.py, verification/ADVERSARIAL-REVIEW.md, verification/go-reference-dump.json (structure)
4Read the build: all six engine modules, nodes.py, both graphs, validate_graphs.py, all four test files, all of app/web/
5Read the prior teardown: client-reports/higgsfield-cinema-studio-4.0/README.md, analysis/00-SYNTHESIS.md, analysis/50-verdict.md, analysis/60-risks-and-limits.md
6Re-ran the differential check, the unit suite, the parity check, and the graph validator
7Recomputed the gating-rule arithmetic from RULE_WEIGHTS (03 §6.4)
8Decomposed the 289 counter from the five increment sites (04 §3.3)
9Manifested the tree by sha256 and pinned the engine hash
10Observed the remediation state directly from the tree, timestamped

7.2 The rules this package followed

Rule How it was applied
Every factual claim about code carries path:lineEvery table row and quotation
Do not overstateThe term table (§6) exists for this purpose
Say NOT VERIFIED when not run§5 is a complete register, not a sample
Distinguish reproduced from quoted§6's terms
Do not name anything after a Higgsfield productThe pack is ComfyUI-Cinematographer; the category is Cinematographer
Do not claim we open-sourced Higgsfield's platform01-premise-and-reaim.md §2.4
Do not modify the source entryRead-only throughout; the manifest records what was read

7.3 What this package did not do

Not done Why
Run ComfyUINot available
Execute a workflow graphSame
Produce a renderSame
Re-run the Go harnessThe Magieva checkout is not in this package
Read any licence textOut of scope for a documentation package; the quotes are attributed
Add boundary fixturesThat is a fix to the entry, not documentation of it
Fix any defect in the entryWrite scope is this package alone
Audit the panel in a browserNo browser test harness was set up

7.4 The one thing this package added that the entry did not have

Three findings, each surfaced by re-deriving rather than re-reading:

  1. The gating-rule arithmetic (03 §6.4). Only four rules can ever fail a frame, and headroom — the demo's headline example — gates only in a close-up. The demo shows a rule-level FAIL that does not change the frame's verdict.
  2. The 289 decomposition (04 §3.3). 243 of the 289 are per-rule field comparisons; 46 are whole-object or invariant checks. The units are not homogeneous.
  3. The rule-surface vs gating-rule distinction (03 §6.5). Of 14 rules, 4 never fail and 8 more cannot fail the frame in at least one shot type. "14 rules" is the right number for the rule surface and the wrong number for the rules that can fail a frame.

All three are arithmetic consequences of constants the entry already published. None required running anything.


8. The timeline

Reconstructed from file mtimes and the documents' own statements.

Time (PT) Event Evidence
—Brief received: Comfy Org "Open Source Higgsfield" LA Build Night00-BREAKDOWN.md:1-10
—Premise checked and found false; entry re-aimed01-premise-and-reaim.md §2-4
—Spec frozen01-SPEC.md:3
—Build lanes run in parallel: engine, nodes, panel, graphs—
—Differential check run: 289 checksverification/README.md:15
—Unit suite run: 69 passedverification/README.md:98
—Panel parity run: 28 fixtures, 0 mismatchesapp/web/README.md:136
—Adversarial review written: 740 lines, 17 defects, 1 CRITICALverification/ADVERSARIAL-REVIEW.md
17:32app/__init__.py shim createdmtime
17:34–17:38Three defect fixes land: dead command, slot count, F constantmtimes
17:38This package's snapshot: manifest 58d27eab…, engine cf24e2ba…§2
2026-10-30 09:00Deadline00-BREAKDOWN.md

The gap between the review landing and the deadline is roughly 15 hours. The CRITICAL defect was still open at the snapshot.


9. What a reader should do to close the gaps

In priority order, with effort estimates.

# Action Closes Effort
1Add a repo-root __init__.py (or change the documented clone target, or move cinematographer/ to the root) and load it in a real ComfyUIThe CRITICAL defect; link 630 min
2Add one boundary fixture per thresholdThe 12-constant hole; the largest verification gap2 hours
3Re-run the Go harness and diff against the frozen dumpLink 1, the largest hole in the chain10 min with the checkout
4Add a two-character scene fixtureeyeline20 min
5Fix the scene/continuity strings to match Go, or disclose the divergenceThe "value-for-value" claim30 min
6Execute one graph in ComfyUI and record the outcomeLink 51 hour + weights
7Read the four licence texts and confirm the quoted termsThe licence argument30 min
8Add a browser assertion that rendered values equal engine valuesLink 41 hour
9Reconcile the demo script to the panel's actual statesDefects #9, #1020 min
10Record the Go source revision in the dump's metadataLink 1's auditability5 min

Items 1 and 2 are the two that matter. Item 1 is the difference between an installable pack and an empty category. Item 2 is the difference between a verification story that survives a curious judge and one that does not.


10. Evidence index for this file

Claim Primary source
The differential resultverification/README.md:15; re-run in 04 §3.5
The parity resultapp/web/README.md:136; re-run in 04 §4.3
The unit resultverification/README.md:98; re-run in 04 §5.2
The validator resultverification/ADVERSARIAL-REVIEW.md:381-385; re-run in 05 §5.1
The dump's provenance holeverification/ADVERSARIAL-REVIEW.md:673-676
The harness reproduction commandsverification/README.md:26-32
The licence terms were not readverification/ADVERSARIAL-REVIEW.md §13
The licence-clean grepverification/ADVERSARIAL-REVIEW.md:38, :654
The UNVERIFIED tableverification/README.md:117-126
The reliability envelope caveatverification/README.md:123
eyeline unverifiedverification/ADVERSARIAL-REVIEW.md:203-211
The 12 unconstrained constantsverification/ADVERSARIAL-REVIEW.md:614
The boundary-blindnessverification/ADVERSARIAL-REVIEW.md:155-158
The skipped fieldsverification/ADVERSARIAL-REVIEW.md:164-201
The submission blockers03-SUBMISSION.md:8-40
The honesty ledger03-SUBMISSION.md:133-145
The engine hash constructionapp/web/parity_check.py:223-237
The fixture metadataapp/web/parity_fixtures.json meta
The gating-rule arithmetic03 §6.4
The 289 decomposition04 §3.3
The remediation state05 §10, observed 2026-10-29 17:38 PT