dzmdd's picture
Upload folder using huggingface_hub
e488ce7 verified
|
Raw History Blame Contribute Delete
7.83 kB

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_mode default (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.