H3 LongTake Refine (second pass)
The Second Pass Is Where Your H3 Video Stops Looking Like Plastic
- model
- clip
- vae
- ref_image_1
- face_image
- last_clip
- project_dir
- report
If you've rendered a MiniMax H3 project through the LongTake Render or Image to Video node and the result is soft - flat skin, mushy hair, that 0.5 MP look - this is the node that fixes it. H3LongTakeRefine is a hires fix for video: it walks an already-rendered project clip by clip, upscales each one and partially re-denoises it, and drops the refined chunks into an hr subfolder next to the originals. Same pack, same models, no new downloads beyond the Turbo LoRA you already have.
Know what it can't do, because this is the classic upscaling distinction. It's the "more detail" rung - generation, not interpolation - so it invents texture that wasn't there. Motion, framing and a first pass that misread your prompt come through unchanged. What it can do is give you real skin and hair where the first pass gave you plastic, and - the interesting bit - restore the identity reference's face across the whole video.
How the second pass works
Per clip it loads the saved latent, decodes it with the VAE, resizes in pixels to the new canvas, and re-encodes. That upscaled latent goes back in with a noise mask of ones over video and zeros over audio, so the audio latent you already generated rides through untouched and each chunk's original mp4 audio is copied, not regenerated. Then it samples with the sigmas core's KSampler would use at denoise < 1: the schedule is computed over steps / denoise steps and you get the tail. At 4 steps and 0.25 denoise that's three sigmas - 0.80, 0.45, 0 - so the sampling itself is cheap. It unloads the models at each stage inside the loop: a 33B model plus a 26 GB text encoder won't sit in VRAM through a decode, an encode and another decode. That's where the per-clip time goes.
Knobs that matter
denoise is the one. The recommendation is 0.25 - enough to add detail while holding content and motion. 0.4 regenerates more while keeping identity; past that the scene itself starts to change. The widget default is 0.4, so set it down.
megapixels is your target canvas (1.0 MP, same aspect - about 864×1184 from 608×832). steps is second-pass steps: 4 with the 4-step Turbo LoRA, or 8 with the 8-step v1.0 LoRA, which the author's measurements put at the best identity and stability for roughly two extra minutes per clip. project_name is the source project, or wire the Render's project_dir into the project_dir socket and let it replace the field. prompt can stay empty - on an Image to Video project it reuses the project's per-clip blocks, and at low denoise it barely matters.
The two optional references are where the identity work happens, both ref2va only. ref_image_1 puts or restores the reference person's identity even on a project rendered with no references at all. face_image is a face close-up and it's the strongest option: it restores the picture's face across the entire video, including stretches where the first pass had clearly lost it. On a 30-second no-reference project, mean ArcFace similarity to the source picture went from 0.27 to 0.62 with image plus face. That's a different person.
mode only offers continue and restart - no per-clip redo like the Render nodes, because you can delete the offending file from hr and re-queue.
Outputs are last_clip, project_dir and report, wired Refine → Stitch: connect the Refine's project_dir, or set the Stitch's project_name to name/hr. The hr folder has its own plan.json with the same cut and the new canvas, so the Stitch assembles it like the original.
Installing it
Nothing extra - same pack, same install:
cd ComfyUI/custom_nodes
git clone https://github.com/mark9009/ComfyUI-H3-LongTake
Manager users, search H3 LongTake; restart afterwards. Core ≥ 0.34, no other node packs, no pip dependencies (genuinely unusual, and appreciated), plus a reachable ffmpeg - VideoHelperSuite's, imageio-ffmpeg, or the system binary.
Things that will bite you
The source project has to exist first, with a plan.json in it. If it doesn't you get no plan.json in <dir>: render the project first, which is exactly what it means.
High-contrast textures come out a touch softer than the original - graffiti was the author's test case. Not broken, just don't expect pixel-level fidelity on busy detail.
Budget honestly: about 5.7 minutes per clip at 1.0 MP with 4 partial steps on a 16 GB card, thanks to the two VAE round trips. Refining clips independently doesn't create cuts - seams measured 0.059 before and 0.048 after - so you can fix one clip without re-rendering the project.
And steal the pattern the author landed on: a fast first pass at 0.5 MP with no references, then let the Refine supply both the detail and the identity - two passes each doing what they're good at, instead of one slow pass failing at both. A face swap on top is post-production, outside this pack.
Inputs (18)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | H3 model with Turbo (ref2va or fl2va: there are no video references here). | |
| clip | CLIP | — | |
| vae | VAE | — | |
| project_name | STRING | longtake | An already rendered project (Render or Image -> Video). The refined clips go to <project>/hr (in the Stitch: project_name = 'name/hr'). |
| megapixels | FLOAT | 1.000.2–2.5 | Second-pass canvas (same aspect as the project). 1.0 MP ~ 736x1312 in 9:16. |
| denoise | FLOAT | 0.400.05–1 | How much to regenerate: 0.25-0.4 adds detail while keeping content and motion; more changes the scene. |
| steps | INT | 41–100 | Second-pass steps (like the KSampler with denoise: schedule over steps/denoise, the tail is used). |
| seed | INT | 00–18446744073709550000 | — |
| sampler_name | COMBO | euler | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 |
| scheduler | COMBO | simple | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 |
| prompt | STRING | Empty: Image -> Video projects use the project's blocks (one per clip), otherwise a generic quality prompt. With a low denoise it matters little. | |
| mode | COMBO | continue | continue: skips the clips already refined. |
| max_clips | INT | 00–9999 | 0 = all. |
| dry_run | BOOLEAN | false | — |
| ref_image_1opt | IMAGE | Identity reference (<Picture 1>) for the second pass: ref2va only. | |
| face_imageopt | IMAGE | Close-up of the face (<Picture 2>, or <Picture 1> alone) for the second pass: restores the picture's face even where the first pass lost it. ref2va only. | |
| chunk_crfopt | INT | 100–30 | — |
| project_diropt | STRING | Connect the Render/I2V project_dir: it replaces project_name. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| last_clip | IMAGE | — |
| project_dir | STRING | — |
| report | STRING | — |