H3 Context Taper Noise (frames)
Chroma blocks that fix the seam without a latent
- images
- images
- alpha_schedule
If your H3 continuation chain feeds decoded frames rather than latents, the seam problem is the same and the fix comes in a different flavor. MiniMaxH3ContextTaperNoise is the frames-path sibling in Beijinren's ComfyUI-H3-Context-Noise pack: it takes the previous shot's decoded frames, slaps tapered blocky chroma noise onto the tail, and hands them to H3 Motion Context's context_frames.
When to reach for it. When you're not going through the latent path. Remember the pack's one rule: once context_latent is connected, H3 Motion Context completely ignores context_frames. So this node does the real work when your workflow never wires the latent - typically a pipeline that already has the previous shot decoded into an image batch. It's also the exact in-graph replacement for MacroSony's inject_tail_taper.py from minimax-h3-chained-character-swap, minus the offline mp4 round-trip.
How it works. It injects a 6-color chroma palette as block noise into the last tail_frames frames. The pattern is deliberately color-damaging but keeps motion readable, so the model can't copy the previous shot's appearance wholesale and has to re-synthesize from the identity references. The injection is tapered: flat alpha across the window, then a linear ramp down to alpha_end over the last ramp_frames. A constant strength leaves ghosting right at the seam; dropping it too fast throws away the sharpness benefit. The validated recipe is 22 / 0.45 / 0.10 / 3:
| frame (0 = oldest) | 0..18 | 19 | 20 | 21 (seam) | |---|---|---|---|---| | alpha | 0.45 | 0.333 | 0.217 | 0.100 |
The inputs that matter. Four, really:
images- the previous clip's decoded frames, exactly what you'd otherwise wire straight intocontext_frames.tail_frames- how many frames from the end of the clip get injected. Keep it ≥ Motion Context'scontext_length, or some pinned frames stay clean.alpha,alpha_end,ramp_frames- the taper. Defaults are the validated values;alpha_endmust not exceedalpha.seed- one random stream feeds every injected frame, so the whole sequence is reproducible from this alone.
Two optional knobs if you're experimenting. pattern defaults to poc_chroma_blocks, the validated 6-color palette - the other two, gaussian_rgb and uniform_rgb, are explicitly experimental. grid_mode controls the block grid: poc_36x64 reproduces the reference script bit-for-bit but only equals 16×16 pixel blocks at 576×1024, while block_size holds the block scale constant at any resolution.
Outputs. The noised images (wire it into context_frames) plus an alpha_schedule STRING that prints the applied per-frame strengths - the last entry is exactly alpha_end when everything's aligned, which is your quick check that the ramp hit.
Install. Same pack as the latent version - ComfyUI Manager (search "ComfyUI-H3-Context-Noise") or:
cd <ComfyUI>/custom_nodes
git clone https://github.com/Beijinren/ComfyUI-H3-Context-Noise
Restart ComfyUI and it's under conditioning/minimax. Zero extra dependencies - only ComfyUI's bundled torch and Pillow. You'll also want H3 Motion Context installed and H3's weights, licence caveats included.
Gotchas. The output is disposable - never feed the noised frames back in as the next link's context. Keep tail_frames ≥ Motion Context's context_length or the pinned frames partially skip the treatment. And if you've also got the latent node in the graph, disconnect it before trusting this one: H3 will silently prefer context_latent and ignore your carefully-noised frames.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | The previous clip's decoded frames, exactly what you would otherwise wire straight into H3 Motion Context's context_frames. | |
| tail_frames | INT | 221–4096 | How many frames at the END of this clip get injected. Motion Context pins the LAST context_length frames, so keep this >= context_length or some pinned frames stay clean. Frames before the window pass through untouched. |
| alpha | FLOAT | 0.450–1 | Flat injection strength across the window. 0.45 is the validated value. Lower keeps more of the previous clip's appearance; higher pushes the model harder onto the identity references. |
| alpha_end | FLOAT | 0.100–1 | Strength at the very last frame, the one touching the seam. Must not exceed alpha. |
| ramp_frames | INT | 31–4096 | How many frames at the end taper from alpha down to alpha_end. 3 is the validated value: 0.333 / 0.217 / 0.100. |
| seed | INT | 00–18446744073709550000 | Noise pattern seed. One stream feeds every injected frame, so the whole sequence is reproducible from this alone. |
| patternopt | COMBO | poc_chroma_blocks | poc_chroma_blocks is the validated 6-colour chroma palette. The other two are for experiments and are not validated. |
| grid_modeopt | COMBO | poc_36x64 | poc_36x64 reproduces the reference script bit-for-bit, but only equals 16x16 pixel blocks at 576x1024. block_size holds the block scale constant at any resolution. |
| block_sizeopt | INT | 161–256 | Pixel block size when grid_mode is block_size. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| alpha_schedule | STRING | — |