MiniMax H3 Long Video Color Match / 长视频接缝颜色统一 (Advanced EXP/T8)
Killing the color seams in a multi-segment H3 long video
- frames
- context
- frames
- status
- report_json
H3's native window is short, so long videos in this pack are built by stitching segments together. And stitched video has a tell: every segment is generated with its own prompt, its own seed, its own little color drift, so the seams where segment N hands off to segment N+1 show up as a subtle pop in brightness or tint. This node exists to make that pop disappear. It runs after the segment's Output Trim, and it's on by default in the long-video chain for exactly that reason - you'd have to explicitly disable it to get raw, uncorrected frames.
It's worth being precise about what it is and isn't. This is deterministic pixel post-processing, not another generation pass: it operates on decoded RGB frames after sampling and never touches audio or the native AV latent. If you're coming from the "do color correction with img2img" school of thought, this is the corrective - it's a cheap, reproducible color operation doing what a diffusion re-pass shouldn't.
How it works
Segment 0 is special: it has no predecessor, so the node just records its actual tail statistics to disk (keyed by chain_id) and passes frames through untouched. Every later segment loads that stored reference, then applies two bounded corrections that fade out over the seam so you don't see a correction window end:
- Global Lab distribution matching - aligns the segment's overall color distribution toward the reference's, clamped so it can't chase noise.
- A local 8x5 RGB correction that fixes the region right at the join, which is where the mismatch is actually visible.
"Bounded" is doing real work there: maximum_offset caps how far a channel is allowed to shift (default 0.02), minimum_jump and scene_cut_threshold decide when a difference is big enough to bother with versus small enough to be noise - and if a scene cut lands on the seam, the node backs off rather than forcing unrelated content to match.
The inputs that matter
Most of it is wiring, not tuning. The node needs the same validated long-video context object and chain_id as the rest of the chain - everything must agree it's the same video, or it refuses. segment_index tells it whether it's recording (segment 0) or matching (anything later).
Then there's the big one: enabled. It defaults to true. Flip it off and you get exact source frames out, but the node still records the tail statistics, which is the intended way to compare corrected vs. raw output without breaking the reference for later segments. If you want your A/B, that's the knob - not removing the node from the workflow.
Leave the advanced inputs (reference_frames, transition_frames, strength, the three thresholds) alone unless a specific seam is misbehaving. Outputs are the corrected frames, a status string, and report_json if you want to see exactly what it decided per segment.
Installing and running it
This is one of ~290 nodes in the T8mars/comfyui-minimax-h3-audio-T8 pack. Install via ComfyUI Manager ("MiniMax H3 Audio T8") or:
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8.git minimax-h3-audio-T8
then restart ComfyUI fully. No extra pip packages, but you do need a current ComfyUI with native MiniMax H3 support, and the H3 base model + Qwen3-VL text encoder + VAEs in their usual models/ folders. If every node comes up red, update ComfyUI + front-end + Manager first - that's the pack's own number-one FAQ.
Gotchas
- Don't invent your own
chain_id. It must match the one the Planner and Conditioning nodes used, and the reference is stored per-chain - a typo means segment 0's stats land somewhere nothing else reads. - It's EXP because the underlying long-video route is EXP. The whole multi-segment machinery is the experimental side of this pack; color match is the polish layer on top, not a standalone magic wand.
- It fixes color jumps, not content. If the seam problem is actually identity drift or a pose mismatch, no amount of Lab matching will save it - that's a job for the segment context, upstream of this node.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| frames | IMAGE | — | |
| context | H3_T8_CONTEXT | — | |
| chain_id | STRING | my_h3_long_video | — |
| segment_index | INT | 00–99999 | — |
| enabled | BOOLEAN | true | Default on. Disable for exact source frames while still recording the tail statistics for a later segment. |
| reference_frames | INT | 51–24 | — |
| transition_frames | INT | 241–240 | — |
| strength | FLOAT | 1.000–2 | — |
| minimum_jump | FLOAT | 0.00050–0.1 | — |
| maximum_offset | FLOAT | 0.0200–0.25 | — |
| scene_cut_threshold | FLOAT | 0.180.01–1 | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| frames | IMAGE | — |
| status | STRING | — |
| report_json | STRING | — |