Nodes/PromptMasterLD/πŸ” H3 Refine Pass - LD
ComfyUI Node

πŸ” H3 Refine Pass - LD

The Refine Pass Sampler

By Lora-DaddyΒ·Created 6 days agoΒ·Updated 2 days agoΒ· 5
πŸ” H3 Refine Pass - LD
  • latent
  • positive
  • model
  • video_vae
  • audio_vae
  • sampler
  • sigmas
  • frames_in
  • audio_in
  • frames
  • audio
  • latent
  • report
β—„steps3β–Ί
β—„seed444β–Ί
β—„expect_w0β–Ί
β—„expect_h0β–Ί
β—„seconds_at_a_time3.0β–Ί

The second pass that doesn't throw away the take you liked

Here's the classic upscale workflow trap on video: you hunt for a good seed, find a take you love, run it through an upscaler to add real detail - and the upscaler's output is a different video. Not just sharper, different. The motion changed, the face wandered, the take you picked is gone. H3 Refine Pass (πŸ” H3 Refine Pass - LD, under LD / PromptMaster / Finishing, in PromptMasterLD) is built for that exact moment: it takes the AV latent that came back from the MiniMax upscaler and runs a short, partial-denoise refine on it - 3/4/5-step schedules starting near 0.90 denoise - so the structure of the take you chose survives the pass while the upscaler's added detail gets polished instead of re-rolled.

The numbers are the whole design: starting near 0.90 means the sampler barely moves - it's correcting and re-integrating, not generating fresh. More steps means more new detail and more drift from the take you chose, so the honest guidance is "use the fewest steps that fix what bothers you."

What it expects

  • latent - the UPSCALED AV latent: video out of the Minimax upscaler, re-joined to its audio by a Concat AV Latent node. This is not the raw sampler output.
  • positive - straight from the seed hunter. It must be the conditioning the take was sampled against; a fresh encode at another size is a different picture, and the refine pass can't be expected to preserve a take it never knew.
  • model, video_vae, audio_vae, sampler, steps, seed - the usual sampler set. seed re-rolls the upscale pass without re-hunting, which is the workflow's cheapest do-over.

The optional block is where the real H3 care shows:

  • frames_in / audio_in - wire the hunter's frames and audio here. They're ignored while this node runs; they're what comes out the other side when the group is bypassed during a hunt. One graph, two roles.
  • expect_w / expect_h - the hunter's out_w/out_h. This is the SIZE THE TAKE WAS SAMPLED AT, not a demand the upscaler match it. When they differ, keyframe/reference conditioning is resized to the upscaled latent so pass 2 doesn't crash.
  • seconds_at_a_time - how many seconds of the upscaled clip H3 refines in one go. 3s keeps a 24GB card from paging (the docs describe 99% VRAM, cold GPU); 0 = whole clip. Snaps to H3's 17k+5 grid, so ~3s becomes 73 frames, and the windows overlap-blend so the cut doesn't flash.
  • sigmas - optional override; wired, it wins over steps.

Outputs: frames (IMAGE), audio (AUDIO), latent (LATENT) - so you can keep refining, decode, or hand the latent onward - and report (STRING).

Install

cd ComfyUI/custom_nodes
git clone https://github.com/Lora-Daddy/PromptMasterLD
cd PromptMasterLD
pip install -r requirements.txt

Restart ComfyUI, or ComfyUI Manager β†’ search "PromptMasterLD".

The workflow it belongs to

This node is one stage in a finishing chain, not a standalone renderer: hunter picks the take β†’ MiniMax upscaler adds detail β†’ Concat AV Latent re-joins the upscaled picture to the original audio β†’ [optionally H3 Lock Audio to pin that audio] β†’ H3 Refine Pass re-integrates β†’ decode and save. The two most common mistakes are feeding it the wrong latent (the upscaled one, re-joined to audio - not the raw sampler output) and giving it a positive from a different encode than the take. Get those two right and the refine pass is the difference between "upscaled video" and "the take you picked, only better."

CategoryLD/PromptMaster/Finishing

Inputs (14)

NameTypeDefaultDescription
latentLATENTThe UPSCALED AV latent β€” video out of the Minimax upscaler, re-joined to its audio by Concat AV Latent.
positiveCONDITIONINGStraight from the Seed Hunter. It must be the conditioning the take was sampled against; a fresh encode at another size is a different picture.
modelMODELβ€”
video_vaeVAEβ€”
audio_vaeVAEβ€”
samplerSAMPLERβ€”
stepsCOMBO3Partial-denoise schedules from the reference workflow, starting at ~0.90. More steps means more new detail AND more drift from the take you chose.
seedINT4440–72057594037927940Re-roll the upscale pass without re-hunting.
sigmasoptSIGMASOptional override. Wired, it wins over `steps` β€” your own ManualSigmas go here.
frames_inoptIMAGEWire the Seed Hunter's `frames` here. It is ignored while this node runs; it is what comes out the other side when the group is bypassed during a hunt.
audio_inoptAUDIOThe hunter's `audio`, for the same reason.
expect_woptINT00–16384Wire the hunter's `out_w`. This is the SIZE THE TAKE WAS SAMPLED AT, not a demand that the upscaler match it. When they differ, keyframe/ref cond is resized to the upscaled latent so pass 2 does not crash.
expect_hoptINT00–16384The hunter's `out_h`, same job.
seconds_at_a_timeoptFLOAT3.00–30How many seconds of the upscaled clip H3 refines in one go. 3s keeps 24GB cards from paging (99% VRAM, cold GPU). 0 = whole clip. Snaps to H3's 17k+5 grid (~3s becomes 73 frames). Windows overlap-blend so the cut does not flash.

Outputs (4)

NameTypeDescription
framesIMAGEβ€”
audioAUDIOβ€”
latentLATENTβ€”
reportSTRINGβ€”