File size: 7,828 Bytes
e488ce7 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 | # 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.
|