Stage 0 audit, 2026-08-29. Every number below was MEASURED this session, not inherited. Regenerate with the commands in the last section. Per R3 this file is the persisted source of record; a claim that lives only in a chat transcript has now drifted five times.
Updated 2026-08-29 after the build passes. The numbers above are re-measured, not the Stage-0 audit figures. A worklog that still reports its audit snapshot is the stale-record failure R3 exists to prevent.
| Nodes registered (runtime) | 87 (was 104; 17 duplicate ids deleted in the 2026-08-29 dedup) |
| Registration style | V1 NODE_CLASS_MAPPINGS |
WEB_DIRECTORY |
./js |
| Test files | 17 |
| Tests | 409 passed, 0 failed, 0 collection errors (was 330/65/2 at Stage 0) |
Apache-2.0. Inbound: MIT/Apache only. GPL forbidden inbound — this rules out porting code from MiniMaxSuite (GPL-3.0). Shared work with the suite must be a data-format contract (H3_TRANSFORM, AOV channel packing, keypoint JSON), never a shared module.
PASS — 104 nodes under the production loader.
The suite does not currently function as a signal.
- Collection aborts.
tests/test_nukenodemax.pyimportsnodes/deep_composite.py, which no longer exists — it was migrated to ComfyUI-NukeMaxNodes (that repo's__init__.pyrecords "Migrated from ComfyUI-CustomNodePacks (Apr 2026)").tests/test_shape_draw_nodes.pyimportsDrawCircleMECfromnodes.mask_draw_frame, which no longer defines it. Until those two are removed or repointed, plainpytest tests/collects nothing at all and the other 15 files never run. - 65 failures, dominated by stale renames rather than broken product:
- 27
test_sam_multi_mask_picker.py—assert 'C2C/SAM' == 'MaskEditControl/SAM'. Category renamed to C2C; tests never updated. - 15
test_inpaint_suite.py—AttributeError: 'InpaintCropProMEC' object has no attribute 'crop_for_inpaint'. Method renamed away. - 9
test_vae_merge.py, 4test_folder_incrementer_fixes.py, 4test_phase4_nodes.py, 3test_spline_mask_editor.py, 3 singles.
- 27
Read this correctly: all 104 nodes register cleanly, so the product is probably fine. The tests have decayed. That is arguably worse than a red product — a suite this stale cannot tell you when something real breaks, and it has been silently non-collecting.
| Check | Result |
|---|---|
third_party runtime imports |
0 |
IS_CHANGED returning float("nan") |
0 |
Hardcoded .cuda() |
1 — R5 violation |
| Frame loops without interrupt check | 61 of 70 node files |
61 of 70 node files loop over frames or a batch dimension with no interrupt check. Helpers already
exist (_interrupt_check.py, _progress.py) and 9 node files use them. Same shape as the
NukeMaxNodes hanging complaint.
- Repair the test suite first — nothing below is verifiable until
pytest tests/collects. sam_model_loaderbatch processing (the original ask) + tests.- #66 waveform / false-colour scope. JS DOM widget: the
ui=payload is the ONLY channel to the browser — socket values never reachonExecuted. - #67 3D LUT from plate histogram (
parse_cube_lut/_apply_lut_3dalready in-house). - #69 OKLab palette transfer (NKD, MIT — allowed inbound).
- #82 QC, #106 deliverable export.
#82's "reuse RAFT from WanNodeExperiments" must be a re-implementation or a data contract, not an import — cross-repo runtime imports are forbidden.
head -3 LICENSE
# registration smoke, the way ComfyUI loads (third_party/ComfyUI/nodes.py:2243-2263):
# sys.modules[name] = mod BEFORE spec.loader.exec_module(mod)
# Anything less can report healthy for a pack that registers nothing.
python <scratch>/regsmoke.py ComfyUI-CustomNodePacks
D:/PROJECT/ComfyUI_windows_portable/comfy_env/python.exe -m pytest tests/ -q
Shell python has no torch — always use the comfy_env interpreter.