Nodes/ComfyUI-CineStack-H3/CineStack H3 Director Refine
ComfyUI Node

CineStack H3 Director Refine

Fix the Shot, or Blow It Up to 1.8MP — Pick One

By guomenghao·Created 6 days ago·Updated 2 days ago· 0
CineStack H3 Director Refine
  • refine_model
  • sigmas
  • upscale_model
  • refine
  • width
  • height
◄moderefine►
◄upscale_methodh3_latent►
◄latent_upscale_model▾►
◄samplereuler►
◄passes1►
◄seed_modeinherit►
◄aspect_ratio跟随导演台►
◄megapixels1.0►
◄width1280►
◄height720►
◄skip_fl2vtrue►
◄confirm_first_passfalse►
◄enable_latent_chunkingfalse►
◄enable_tilingfalse►
◄tile_count2►
◄tile_overlap128►
◄seed0►
◄refine_onlyfalse►

H3 at 864×480 is a preview canvas, not a deliverable. You have two ways to get from there to something you'd show someone: run a second sampling pass at the same size to clean up what the first pass fumbled, or enlarge the canvas and sample into it. CineStack H3 Director Refine does both, plus a third thing that isn't sampling at all.

It plugs into the Director's refine socket. Unconnected, the Director is a single-pass sampler and nothing changes. Connected, every segment you run gets a second pass, and the Director's images becomes the refined result while images_pre_refine preserves exactly what the first pass produced - so you can actually A/B the thing instead of guessing whether the second pass helped.

The three modes

mode: refine is the same-resolution second sample. Think of it as giving the model another crack at the same composition with a fresh sigma schedule; it's the mode that fixes mushy motion and soft detail without changing your shot size.

mode: upscale enlarges to a target canvas first, then samples. This is hi-res-fix logic from the image world carried into video, and it's the mode most people want for delivery. upscale_method decides how it enlarges: h3_latent does it in H3's own 3D latent space with a matching 3D weight, lanczos is pixel interpolation (optionally through upscale_model, e.g. RealESRGAN_x2plus), and nvidia_rtx_vsr hands it to NVIDIA's RTX Video Super Resolution, which needs nvidia-vfx and an RTX card. The pack deliberately does not install that for you.

mode: latent_upscale enlarges the latent and doesn't sample afterwards. Fast, cheap, and honest about it - you get a bigger frame without new detail invented for it.

Sizing and sampling

megapixels is the dial for enlargement, not aspect_ratio - that field is deprecated and the second pass always follows the Director's first-pass aspect. A 864×480 first pass (16:9) at 1.8MP lands at 1824×1024, per the tooltip's own example. Leave aspect_ratio alone; width/height only matter in the custom case.

passes is how many refine iterations run; with upscale, only the first one enlarges and the rest are same-size refinement. latent_upscale ignores it.

For sampling, sampler defaults to euler, the example template's choice, while the author's note says high-quality second passes commonly pair res_multistep with a BasicScheduler. Which brings up the rule that trips everyone: sigmas must be wired for refine and upscale. Feed it from Comfy's BasicScheduler or ManualSigmas, and connect that scheduler to the same MODEL the second pass uses - the Director's model, or refine_model if you plugged a different UNET in. H3's SigmaShift is applied inside Refine, so don't stack another one on.

seed_mode resolves to inherit (follow the segment's first-pass seed), offset (that seed + 1), or independent, which uses the node's own seed with the usual fixed/increment/decrement/randomize behaviour and never touches the Director's seeds.

Then the memory knobs, which matter more than they look: enable_tiling with tile_count and tile_overlap splits the spatial pass; enable_latent_chunking slices long latents into 24-frame chunks with weighted overlap so a long segment doesn't die in the upscale step. Both trades are the familiar one - lower peak VRAM, more forward passes, and a seam that may not match a whole-segment forward pass exactly.

Outputs, plus the two switches that bite

refine goes to the Director. width and height are the resolved target canvas (multiples of 32) and are handy for a display node or for sizing a downstream post chain to match.

skip_fl2v defaults to true, and that's the right default: a second pass repaints, and on a first/last-frame shot the pinned keyframes are the whole point. Turn it off only when you've decided you want new pixels at the ends.

confirm_first_pass is the "look before you leap" switch. On, the first Queue with no matching first-pass cache runs only the first pass and writes the cache plus a _pre.mp4; the next Queue with the same seed skips straight to refinement. It only skips when the fingerprint genuinely matches - same seed, same first-pass settings, same SelfLift and Semantic Bridge wiring and values. Change anything and it won't skip, which is the behaviour you want even though it feels like it isn't.

refine_only is the strict version: check every selected segment's first-pass cache, list the mismatches by segment and field, and stop. It never silently re-runs a first pass. Only valid for refine and upscale.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/guomenghao/ComfyUI-CineStack-H3.git
python -m pip install -r ComfyUI-CineStack-H3/requirements.txt

For h3_latent and latent_upscale you also need a 3D upscale weight in ComfyUI/models/latent_upscale_models/ - the dropdown lists whatever H3-family files it finds there. nvidia-vfx is not in requirements (AMD and cloud installs would break); install it yourself for the VSR path.

Where people get burned

Nothing happens, no second pass. sigmas is unconnected. In refine and upscale it's mandatory - steps, scheduler and denoise widgets are all ignored when it's absent.

"Second pass only" refuses to run. By design. Some segment's cache doesn't match its current prompt, seed or wiring, and the pack tells you which. Fix the mismatch or re-run the first pass for that segment.

A visible band or shimmer after enabling chunking or tiling. Overlap-weighted chunking is not identical to a whole-segment forward pass. If you're chasing the last few percent, turn the chunking off and pay the VRAM.

You upscaled with latent_upscale and it's still soft. Enlarging a latent adds no information. Want detail? You need the sample - upscale with h3_latent, or a real video upscaler in post. Keep the second-pass original and post-process from a copy, so you can tell which stage changed the picture.

CategoryCineStack/H3

Inputs (21)

NameTypeDefaultDescription
modeCOMBOrefinerefine = 同分辨率二采(精修)。upscale = 先放大到目标画布再二采。latent_upscale = 只放大 H3 latent,不再二采。
upscale_methodCOMBOh3_latent仅 mode=upscale。h3_latent = 先按目标画布放大 H3 视频 latent,再二采(下方选 3D 权重)。lanczos = 像素插值;可另接 upscale_model(RealESRGAN 等)。nvidia_rtx_vsr = NVIDIA RTX Video Super Resolution(需 nvidia-vfx + NVIDIA GPU)。
latent_upscale_modelCOMBOH3 3D latent 放大权重。放到 ComfyUI/models/latent_upscale_models/,目录里的 H3 系权重会自动列出(如 minimax_h3_latent_upscaler_3d_*.safetensors、h3_upscaler_lms_*.safetensors)。mode=latent_upscale,或 upscale + h3_latent 时使用。
samplerCOMBOeuler二采采样器。海螺案例用 euler;BasicScheduler 高质量二采常用 res_multistep。
passesINT11–9999精修次数。1 = 一次二采。upscale 时只有第 1 次放大,之后都是同分辨率精修。latent_upscale 不二采,此值无效。
refine_modeloptMODELSecond-pass UNET (二采模型)。不接则用导演台主模型。适合一采挂 Turbo LoRA、二采卸掉或换另一套。
sigmasoptSIGMAS二采噪声表。接 Comfy 自带 BasicScheduler 或 ManualSigmas。mode=refine / upscale 时必须接线。BasicScheduler 请接和二采相同的 MODEL(导演台主模型或 refine_model)。H3 的 SigmaShift 仍由 Refine 内部套上。
upscale_modeloptUPSCALE_MODEL可选。用「加载放大模型」接入,例如 RealESRGAN_x2plus。仅 mode=upscale 且 upscale_method=lanczos 时使用。不接则纯 lanczos 插值。选 nvidia_rtx_vsr / h3_latent 时忽略此口。
seed_modeoptCOMBOinherit二采种子从哪来。inherit = 跟随本段一采 seed(未单独指定时继承导演台)。offset = 本段一采 seed+1(二采和一采错开一号)。independent = 独立种子:只用下方 seed / 生成后控制,不改导演台 seed,确认二采仍可跳过一采。
aspect_ratiooptCOMBO跟随导演台已废弃:二采比例始终跟随导演台一采画布。请只用百万像素控制放大尺寸。
megapixelsoptFLOAT1.00–16放大目标百万像素。比例始终与导演台一采画布相同。例如一采 864×480(16:9),1.8 MP → 1824×1024。
widthoptINT12800–8192自定义宽度(×32)。仅「自定义」时生效。
heightoptINT7200–8192自定义高度(×32)。仅「自定义」时生效。
skip_fl2voptBOOLEANtrue跳过首尾帧(fl2v)镜头的二采/放大。二采会改画面,容易把钉死的首尾帧画飘;默认跳过以保护关键帧。关掉则 fl2v 也走精修 / latent 放大。
confirm_first_passoptBOOLEANfalse先确认一采再二采。默认关:一采完立刻二采(与现在相同)。开:没有一采缓存时只跑一采并写出缓存/_pre.mp4;已有精确匹配的一采缓存(同一 seed、一采参数、SelfLift、Semantic Bridge 接线与 alpha / magnitude_match)则跳过一采只跑二采。seed 请用 fixed,或第二次 Queue 前改回写出缓存时的 seed。Refine 面板「确认二采」与执行层用同一套指纹,不一致时不会跳过一采。
enable_latent_chunkingoptBOOLEANfalseH3 latent 放大的时间分块(省显存,默认关)。开:latent 超过 24 帧时按 24 帧切块、重叠区加权融合,放大网峰值更低,长段不易在这一步 OOM;接缝可能和整段前向不同。≤24 帧仍走整段。关则与现在完全一致。
enable_tilingoptBOOLEANfalse二采空间分块(省显存,默认关)。开:沿画面长边切开视频 latent,每步分块前向再叠回;音频整段参与,不切空间。关:整幅一次采样,与现在完全一致。mode=latent_upscale(不二采)时无效。
tile_countoptINT21–8分块数量。越大单块显存越低,但前向次数更多、更慢。1 等同不分块。
tile_overlapoptINT1280–2048块间重叠,单位为输出像素(步长 64)。越大接缝越轻,单块也越大,省显存越少。
seedoptINT00–18446744073709550000仅 seed_mode=independent 时生效。生成后控制:fixed=每次同一颗;increment=每次+1;decrement=每次-1;randomize=每次随机新种子。都不改导演台一采 seed。
refine_onlyoptBOOLEANfalse仅二采:先检查所有选中段的一采缓存,失配/缺失时列出原因并停止;绝不自动重跑一采。仅 refine/upscale。

Outputs (3)

NameTypeDescription
refineMMX_DIR_REFINE—
widthINT—
heightINT—