Download ComfyUI-MiniMaxH3-Context-Loop/ComfyUI-MAINodes/TESTING_ALPHA.md from dzmdd/Fast_deploy: direct link, hf CLI and curl.
- Browser
- Download file 7.83 kB
-
https://huggingface.co/dzmdd/Fast_deploy/resolve/main/ComfyUI-MiniMaxH3-Context-Loop/ComfyUI-MAINodes/TESTING_ALPHA.md
- Command line
-
hf download hf://dzmdd/Fast_deploy/ComfyUI-MiniMaxH3-Context-Loop/ComfyUI-MAINodes/TESTING_ALPHA.md
-
curl -L -o TESTING_ALPHA.md https://huggingface.co/dzmdd/Fast_deploy/resolve/main/ComfyUI-MiniMaxH3-Context-Loop/ComfyUI-MAINodes/TESTING_ALPHA.md
Alpha test checklist (2026-08-09 nodes)
Covers H3 Manual Hold Map, H3 Motion Editor (and its widget), H3 Segment Crop, H3 Segment Splice, and the manual mask paths on H3 Motion Composite / H3 V2V Init. The Python compile paths have been exercised via the API; the interactive widget and the drag-in workflows need human passes. Findings welcome as issues; symptom/dial pairs belong in TUNING.md.
Setup: any ComfyUI with the H3 models working (0.30 and 0.31 front ends both need coverage). Keep the browser dev console open; any red line during widget use is a finding. All three graphs wire clip length from one source node; drop to a short legal duration (56 or 73 frames at 24fps) while iterating. Reminder when reviewing saved clips elsewhere: H3 audio is 32 kHz and some players decode that as silence; resample to 48 kHz AAC if you share files.
1. Targeted graph (motion_pipeline_targeted.json)
- First queue with the shipped range saves baseline / oraclemap / dilated / final, no errors, final plays clean
- The Manual Hold Map report (the price tag) is actually visible somewhere; if you had to wire your own text display, note it
- Two-pass rhythm: watch oraclemap, retype ranges to the real burst, requeue; baseline sampler must NOT re-run; dilated length and report shrink
- Syntax: multi-range, seconds ("0.5s-1.1s"), per-range ":hold", mixed; segments output echoes token-snapped (wider) spans
- Error UX: reversed range and out-of-bounds range produce readable messages, not a stack wall
- Gate mode semantics: with the oracle wired, your ranges choose WHERE and the oracle chooses hold strength (typed :hold values are ignored); unwire the oracle and your holds apply directly
- s_per_step set to a measured value gives a plausible minutes estimate
- Spatial branch: unmute, paint a background lasso mask, queue; with invert_mask on, the painted region returns to baseline timing; the seam (feather 64 smoothstep on a real edge) is invisible in playback
- Latent freeze hard-cell ratification: hard 0/1 cells are now the DEFAULT (mask_feather 0 snaps boundary cells instead of leaving them fractional). Route the same mask through H3 V2V Init's freeze path and run same-seed mask_feather 0 vs 32 vs 64. The bet: hard cells tie or win, because half-frozen blend cells were the seam mush and the decode smooths a hard edge anyway. If 32/64 clearly wins in playback, revert the default and say so in TUNING
2. Editor graph (motion_pipeline_editor.json)
Cold load
- Node renders with toolbar, timeline, paint hint, price line; the raw editor_state textarea is hidden; console clean
- Save and reload the workflow before any queue; node intact
First queue (no blocks)
- Behaves like the classic adaptive pipeline (oracle passes through, mask is all ones)
- Widget populates: filmstrip, green jerk profile, "last run" report
Timeline
- Scrub on filmstrip/ruler; playhead and frame label track
- Drag on the block lane creates a block snapped to the token grid; "+ block" works at the playhead; snap toggle off allows free edges
- Move and resize via bracket handles (are the 4 px hit zones big enough?); multiple blocks get distinct colors; labels show "oracle"/"hN" and a star once painted
- Delete button and Delete key; drags under 2 frames create nothing
- Undo button and ctrl+z; ctrl+z inside the editor must NOT undo the ComfyUI graph, and editor keys must not trigger canvas hotkeys; clicking outside restores normal hotkeys
Painting
- Unpainted selected block shows the red tint and the "paint to narrow it" notice
- Brush paints with the circle cursor; erase removes; size slider works at both extremes; "clear frame" wipes only the current frame
- Playhead outside the selected block: painting no-ops with notice
- "paint: whole block" strokes persist across the block's frames
- Onion skin ghosts previous (blue) and next (green) frame strokes; toggle kills them
- Mouse wheel over the paint area steps frames without zooming the graph canvas; arrow keys step too
Dials and automation
- All per-block dials respond; hold changes move the price line
- "A" buttons open lanes for hold/feather/strength; click adds points, drag shapes, double-click deletes; values clamp to range and block span; the button lights when an envelope exists
- Known cosmetic: pre-queue price estimates oracle blocks at hold 4, so it can overshoot the post-run report
Edit and requeue (the core promise)
- After an edit, only the regeneration side re-runs; if the baseline sampler re-runs, that is the P1 finding
- Painted region regenerates, unpainted stays baseline; block edges ease via the fade dial with no hard pop
- Trap to confirm and document: adding ANY block gates the oracle, so bursts outside your blocks are not de-roped
- invert_mask and outside_blocks=regenerated behave as labeled
Persistence
- Save + browser refresh mid-edit: blocks/strokes/envelopes survive; the filmstrip may be blank until the next queue (temp thumbnails); confirm it degrades to the hint, not broken images
- After a ComfyUI restart, the first queue repopulates everything
3. Segment graph (motion_pipeline_editor_segment.json)
- First queue with an empty editor crops to the oracle's window plus handles; the crop report states the speedup ratio
- A tight block around the burst improves the ratio and the wall time vs the plain editor graph
- Video seam: step frames at both window boundaries; look for tone or brightness drift across the crossfade; compare feather_frames 0 vs 6
- Audio seam: headphones at both splice points; no clicks; total duration matches baseline; sync holds after the splice
- Edge cases: block touching frame 0 or the last frame; two separate bursts produce ONE window spanning both (current behavior); the report should make that obvious
Triage
- P1: baseline re-runs on edit; state loss on save/reload; crashes; unreadable errors on common mistakes
- P2: interaction jank, price/report confusion, seams below the playback bar
- P3: cosmetics (canvas text is not hidpi-scaled yet, known)
5. Oracle alpha knobs (added 2026-08-10)
-
profile_modedefault (value |d3|) must reproduce your previous results exactly: same clip, same seed, same hold map and same segments string as before this change. Verified bit-identical offline; confirm once in the graph. -
profile_mode=value |d1| (energy baseline): the honest cheap baseline. On real clips it correlates 0.96-0.98 with |d3|, so if it produces a materially similar hold map, that IS the finding and the default detector is not earning its name. -
profile_mode=trajectory centroid |d3|: expect a different hold map. Judge in playback whether it targets the burst better or worse. Do not judge from the profile string alone. -
abstain_below(absolute gate, 0 = off): run it on a clip you KNOW is calm. Raise until the oracle returns a flat hold map and empty segments, then check it still dilates a genuinely fast clip at that setting. Measured contrast ran ~1.9x higher on a lurching toy than a constant-velocity one, so the useful range is likely 1.5-2.5. If a single threshold cannot separate your calm and fast clips, say so: that is evidence the contrast statistic is the wrong absolute unit and the demand-over-capacity route in ROADMAP.md section 1 is needed instead.