Nodes/H3 LongTake/H3 LongTake Refine (second pass)
ComfyUI Node

H3 LongTake Refine (second pass)

The Second Pass Is Where Your H3 Video Stops Looking Like Plastic

By mark9009·Created 10 days ago·Updated 2 days ago· 22
H3 LongTake Refine (second pass)
  • model
  • clip
  • vae
  • ref_image_1
  • face_image
  • last_clip
  • project_dir
  • report
project_namelongtake
megapixels1.00
denoise0.40
steps4
seed0
sampler_nameeuler
schedulersimple
prompt
modecontinue
max_clips0
dry_runfalse
chunk_crf10
project_dir

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.

CategoryH3 LongTake

Inputs (18)

NameTypeDefaultDescription
modelMODELH3 model with Turbo (ref2va or fl2va: there are no video references here).
clipCLIP
vaeVAE
project_nameSTRINGlongtakeAn already rendered project (Render or Image -> Video). The refined clips go to <project>/hr (in the Stitch: project_name = 'name/hr').
megapixelsFLOAT1.000.2–2.5Second-pass canvas (same aspect as the project). 1.0 MP ~ 736x1312 in 9:16.
denoiseFLOAT0.400.05–1How much to regenerate: 0.25-0.4 adds detail while keeping content and motion; more changes the scene.
stepsINT41–100Second-pass steps (like the KSampler with denoise: schedule over steps/denoise, the tail is used).
seedINT00–18446744073709550000
sampler_nameCOMBOeuler44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
schedulerCOMBOsimple9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3
promptSTRINGEmpty: Image -> Video projects use the project's blocks (one per clip), otherwise a generic quality prompt. With a low denoise it matters little.
modeCOMBOcontinuecontinue: skips the clips already refined.
max_clipsINT00–99990 = all.
dry_runBOOLEANfalse
ref_image_1optIMAGEIdentity reference (<Picture 1>) for the second pass: ref2va only.
face_imageoptIMAGEClose-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_crfoptINT100–30
project_diroptSTRINGConnect the Render/I2V project_dir: it replaces project_name.

Outputs (3)

NameTypeDescription
last_clipIMAGE
project_dirSTRING
reportSTRING