Nodes/was-node-suite-comfyui/H3 De-RoPE Refine
ComfyUI Node Runs on cloud

H3 De-RoPE Refine

Redraw the frames H3 smeared, one window at a time

By WASasquatch·Created 4 years ago·Updated about 9 hours ago· 1,884
H3 De-RoPE Refine
  • model
  • positive
  • latent
  • negative
  • sampler
  • latent
  • report
◄denoise0.50►
◄seed0►
◄steps4►
◄cfg1.0►
◄sampler_nameres_multistep►
◄schedulersimple►
◄window_frames362►
◄overlap_frames17►

MiniMax H3's tell is fast motion. Kick a leg, swing a bat, spin a camera, and the frames come back smeared. The De-RoPE trio in WAS Node Suite v3 exists to fix that, and this node is the middle step: the pass that actually redraws the smear.

Here's the shape of the workaround. H3 De-RoPE Stretch finds where the clip moves fastest from the clip's own latent, shows those frames several times over - a hold - and re-encodes the stretched clip with the audio slowed to match, pitch kept. A second that was three frames of blur is now several seconds of slower movement, which an ordinary denoise can actually see. H3 De-RoPE Recover takes the extra showings back out and restores the source timing. Refine is the bit in between, and it decides whether the trick fits on your card.

Why it isn't just a KSampler

Because a stretch can be long. Hold the fastest bits of a 15-second clip and the latent no longer fits in one H3 pass - H3 runs in 17-frame clips with a 5-frame lead, and its longest single window is 362 frames. Refine slices the stretched latent into windows no longer than window_frames and samples them one at a time, so the memory ceiling is one window, not the whole clip.

What keeps that from looking like a patchwork is overlap. Each window carries overlap_frames of frames from the one before, and those rows are held - masked out of the noise, left at the values the previous window refined them to, not re-rolled. That's the difference between a join and a seam. One 17-frame clip is the default; 34 gives a steadier handoff; 0 leaves a visible step.

Windows also stop at scene cuts, since the plan reads where the stretched latent's scenes begin, and pinned frames in your prompt get moved to wherever they landed in the stretched clip - so a first or last frame still opens or closes it.

The inputs worth setting

  • denoise - wire H3 De-RoPE Stretch's denoise output here. It's the share of the schedule each window runs, as 0.5, and it's a wire rather than your own guess because Stretch already worked it out from how much was held.
  • steps - 4 after an 8-step pass, 13 after 25. Roughly half of whatever made the clip, since you're refining, not generating.
  • cfg - 1 for turbo LoRAs and distilled models, which is most H3 setups.
  • window_frames - 362 is one pass for most segments. Drop to 243 (about ten seconds) or lower to save memory, with one caveat the author flags: with smaller windows, a pinned last frame only shapes the final one.
  • overlap_frames - 17 by default. Raise it if the join shows.

latent, model and positive all come off H3 De-RoPE Stretch. seed seeds only the first window; every later window adds its number, which is why the noise lines up across the whole stretch. negative is optional and, left empty, the positive is zeroed - which at cfg 1 is what you were getting anyway. sampler is optional too: a SAMPLER object run in place of sampler_name, such as one of the suite's affine-wrapped samplers.

Then two outputs. latent goes to H3 De-RoPE Recover's latent input - Recover takes the held showings back out, so that's where this is headed. report is a string of each window's frames, how many it held and how long it took; wire it to a text display node when a run feels slow and you want to know which window to blame.

Installing

ComfyUI Manager, search WAS Node Suite v3. Manually:

cd ComfyUI/custom_nodes
git clone https://github.com/WASasquatch/was-node-suite-comfyui.git

Then restart. That's it - the pack installs nothing, downloads nothing and builds nothing, and this node needs no weights of its own. You need ComfyUI 0.14.0 or newer and Python 3.10+. What you do need is a MiniMax H3 model, its video VAE and the usual LoRA setup wired through H3 De-RoPE Stretch upstream; the weight downloads live on the H3 side of the graph.

Where people get burned

The old v2 suite was famous for breaking ComfyUI on upgrade - import failures, pip fighting over OpenCV versions, a BLIP dependency dragging the pack's requirements the wrong way. That history is why a lot of people still think this pack is dead. v3 ships an empty requirements.txt on purpose; if you're carrying a v2 install forward and seeing import errors, don't debug the pip mess - delete the folder and clone clean.

Memory is the real failure mode. Out of VRAM mid-run? Lower window_frames first; it's the one knob that buys back a whole sampling pass. And in a long-video workflow this node only refines one segment's stretch before H3 Extend Append glues it to the next, so a slow run is usually one heavily-held segment rather than the node misbehaving.

One thing to check before any of it, though: H3's weights are licensed under terms that exclude the US, EU, UK and South Korea from the "Applicable Territory", so for a good number of readers the local-node path isn't licensed at all.

CategoryWAS Suite/Latent/Video

Inputs (13)

NameTypeDefaultDescription
modelMODELThe H3 model, from H3 De-RoPE Stretch's model output.
positiveCONDITIONINGThe prompt, from H3 De-RoPE Stretch's positive output.
latentLATENTThe stretched latent, from H3 De-RoPE Stretch.
denoiseFLOAT0.500.05–1Share of the schedule each window runs, as `0.5`. Wire H3 De-RoPE Stretch's denoise output here.
seedINT00–18446744073709550000Noise seed of the first window, as `20261003`; each later window adds its number.
stepsINT41–10000Steps each window runs, as `4` after an 8-step pass or `13` after 25.
cfgFLOAT1.00–100Guidance, `1` for turbo LoRAs and distilled models.
sampler_nameCOMBOres_multistepThe solver each step runs, as `res_multistep` or `euler`.
schedulerCOMBOsimpleHow the noise level falls from step to step, as `simple`.
window_framesINT36222–362Stretched frames one window holds at most: `362` = H3's longest, one pass for most segments; `243` = about 10 seconds; smaller saves memory, but a pinned last frame then shapes only the final window.
overlap_framesINT170–102Stretched frames each window carries from the one before, held as refined: `17` = one clip; `34` = two, a steadier join; `0` = none.
negativeoptCONDITIONINGNegative prompt. Left empty, the positive zeroed, as at cfg `1`.
sampleroptSAMPLERA SAMPLER run in place of sampler_name, as an affine-wrapped one.

Outputs (2)

NameTypeDescription
latentLATENTThe refined stretched latent, for H3 De-RoPE Recover's latent.
reportSTRINGEach window's stretched frames, the frames it held and its time.