MiniMax H3 FlashVSR Restore / 视频超分执行 (T8 Advanced EXP)
2× or 4×, audio untouched
- flashvsr_model
- plan
- frames
- audio
- restored_frames
- source_frames
- audio
- report_json
This is the node that actually does the work in the T8 FlashVSR chain. Feed it the model from the FlashVSR Model node, the plan from the FlashVSR Plan node, and your decoded frames, and it runs FlashVSR v1.1 on the clip - 2× or 4× - while returning your original audio completely untouched. If you've generated a MiniMax H3 clip and it just needs more pixels, this is the finish line.
The framing matters: this is post-processing on already-decoded video, not a faster H3 sampler. You run it after your clip exists. And per the KB's video-upscaling guidance, a real temporal model like FlashVSR is exactly what you want here - a per-frame image upscaler run 24 times a second falls apart on fine repeating texture, and FlashVSR doesn't have that problem. It's the open upscaler the community actually adopted, and its edge is speed, not magic sharpness.
How it works
The Restore node takes your frames, pads them up to FlashVSR's minimum supported length (repeating the final frame), bicubic-upscales to your target scale, and center-crops to a 128-multiple canvas. Then it runs the FlashVSR streaming core - one inference step, CFG 1 - using the LCSA attention mask built from the plan's 2.0/3.0/11 budget, dispatched through the spas_sage_attn block-sparse kernel. Per-chunk budgets come straight from the plan, so a balanced_dynamic_exp plan lowers only the eligible low-motion interior chunks while the boundaries stay guarded. When it's done it trims the repeated tail padding and hands back frames matching your original count.
Three details are easy to miss and worth knowing:
- The audio pass-through is exact. Wire your
AUDIOinto the optionalaudioinput and it comes out theaudiooutput byte-for-byte - no resampling, no denoising, no loudness changes. This is deliberate: the pack doesn't claim FlashVSR improves sound, so it refuses to touch it. source_framesis a second output - the padded, aligned source as the pipeline saw it. It's there so you can A/B against the restored result, which is genuinely useful given how easy it is to over-trust an upscaler.color_fixdefaults on andrelease_policydefaults tooffload_after- meaning after restore, the model is offloaded so the rest of your graph isn't holding VRAM hostage.keep_loadedexists if you're doing multiple clips back to back.
The inputs that matter
Just three, really: scale (2 or 4 - default 2, and the pack is explicit that 4× is what official FlashVSR targets while 2× is the conservative experiment), seed, and the model/plan/frames trio. If VRAM is tight, the fix is a memory_safe plan, not this node - it just executes whatever strategy the plan encoded.
Installing and the dependency you must not skip
The pack installs once (Manager search "MiniMax H3 Audio T8", or git clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8.git minimax-h3-audio-T8), then restart. But this node, unlike the Plan node, needs real machinery on disk: the FlashVSR v1.1 folder at ComfyUI/models/FlashVSR-v1.1 (including the posi_prompt.pth that isn't on the HF repo), plus a spas_sage_attn wheel matching your Torch/CUDA/Python - no wheel, and you get an explicit error, not a silent dense fallback. Also update ComfyUI core/frontend/Manager together before troubleshooting anything, or the whole pack shows red.
Common issues
- OOM at high resolution. There's no pixel ceiling - the node deliberately imposes none. The README's answer is blunt: lower resolution/frames, or use the
memory_safeplan with tiling, which is slower but uses a fraction of the VRAM. - Expecting 2× to restore a bad source. It can't. The author's own docs say it cannot reconstruct missing identity, lip sync, or source detail - if the render already lost the face, no upscale brings it back.
- "FlashVSR requires spas_sage_attn" - the kernel isn't installed or doesn't match your torch build. Get the right wheel; there's no workaround path baked in, and that's deliberate.
Bottom line: model in, plan in, frames in, pixels out and audio preserved. The whole chain is three nodes that read like a workflow diagram made flesh - load, decide, execute - and this one is the part that earns the VRAM.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| flashvsr_model | H3_T8_FLASHVSR_MODEL | — | |
| plan | H3_T8_FLASHVSR_PLAN | — | |
| frames | IMAGE | — | |
| scale | INT | 22–4 | — |
| seed | INT | 00–18446744073709550000 | — |
| color_fix | BOOLEAN | true | — |
| release_policy | COMBO | offload_after | 3 options: offload_after, clear_after, keep_loaded |
| audioopt | AUDIO | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| restored_frames | IMAGE | — |
| source_frames | IMAGE | — |
| audio | AUDIO | — |
| report_json | STRING | — |