AICG-渲染器(一采)
Render the Cheap Version First, Then Decide If It Deserves a Second Pass
- h3_context
- model
- sampler
- sigmas
- video
- pass1
Two-pass rendering, without the tangle
The hi-res fix is the oldest trick in the book: generate small, then re-render big with partial denoising so the model adds detail instead of inventing a new composition. Upscaling essays have been saying this since SD 1.5, and it applies to video for the same reason - you can't afford to explore at final resolution, so you explore cheap and finish expensive.
On H3 with the AICG3D pack, that used to mean a canvas full of latent splitting, tiling, re-encoding and a second sampler. AICG-渲染器(一采) (AICG3D_H3RenderPass1) is the first half of the split, done as one node: sample, decode both streams, compose. It gives you a finished clip and, alongside it, a pass1 payload that the second-pass node can pick up.
The name literally means "first sampling pass". This is the cheap version - low resolution, full denoise, whatever schedule you like - and it's already watchable. If the shot is bad and the composition is wrong, you find out here rather than after a two-times upscale.
What it actually does
Same sampling core as the other renderers: the five-in-one path, with noise_seed driving the noise and sampler_name / scheduler / steps / denoise describing the schedule. Then the joint AV decode - the packed latent split back into picture and sound, each through its own VAE - and a compose step into a VIDEO at the context's frame rate.
Two outputs, and the second one is the point:
video- the first-pass clip. Wire it toSaveVideoand you're done; this is a complete render.pass1(AICG3D_H3_PASS1) - the AV latent plus the H3 context, packaged forAICG-渲染器(二采放大). It's not aLATENT; you can't feed it to a decoder directly. It's a bundle because the second pass needs the latent and everything that described how it was made.
Optional model, sampler and sigmas work as elsewhere: an external sampler/SIGMAS pair overrides the sampler name and the scheduler/steps/denoise trio, which is how the DMAD four-step setup gets in.
The widgets nobody else has
This node has two settings the plain renderer doesn't, both about watching the render:
sample_preview(关by default) - when on, every intermediate step is pushed through ComfyUI's native preview channel and painted on the node. Costs one preview decode per step. Handy when you're dialling in a prompt; turn it off when you're rendering a batch, because it's pure overhead then.preview_interval- how many steps between previews. The first and last steps always push one regardless, so you always see the opening and the finish.
denoise here has a tooltip worth reading: 1.0 means start at the very beginning of the sigma table. Since this is the first pass, that's what you normally want; the partial-denoise move belongs downstream.
cleanup_after_run defaults to unloading the model and emptying the cache after the run. With a second pass about to load its own models, that default is sensible - say so and move on. Switch it to 释放缓存 only if you're doing repeat first passes and have the VRAM.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/JGRFW/comfyui-AICG3D
Or via Manager, searching AICG3D or 短剧工作台 in the Registry. Restart, then Ctrl+F5. requirements.txt is a single line - imageio-ffmpeg - and that's for the sequence combiner, not for this node.
H3 model files go where the pack's loader expects them: transformers in models/diffusion_models, text encoder in models/text_encoders, both VAEs (video and audio, they are not the same file) in models/vae. The second-pass node additionally wants a latent upscaler checkpoint, but you don't need it to use this one.
Traps
Feeding it a segmented context. Single-clip renderers only. If the context came from the Context Segments node, the sampler inside refuses and tells you to use Segment Sample. Plan multi-shot work down the segment chain instead.
Expecting pass1 to be reusable as a latent. It's a payload dict; the second-pass node is the only consumer that understands it. Trying to encode or decode it directly gets you a type error.
Turning previews on and then complaining it's slow. One decode per step on a 33B video model is not free. preview_interval of 5 gets you most of the feedback for a fifth of the cost.
Judging the shot at first-pass resolution. That's the whole point of the design - first pass is a draft. Faces and fine texture are the second pass's job; don't tune the prompt to fix mush you're about to upscale.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| h3_context | MINIMAX_H3_CONTEXT | — | |
| noise_seed | INT | 00–18446744073709550000 | 一采噪声种子;0 = 每次随机。 |
| sampler_name | COMBO | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 | |
| scheduler | COMBO | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 | |
| steps | INT | 201–10000 | — |
| denoise | FLOAT | 1.000–1 | 一采降噪:1.0 = 从整条 sigma 调度表开头跑。 |
| sample_preview | COMBO | 关 | 开:一采每一步都把中间结果走 ComfyUI 原生预览通道推给前端,实时采样画面直接显示在这个节点上(右侧图片流面板同样能看到),代价是每步多一次预览解码;关:只留底部那条百分比进度条。 |
| preview_interval | INT | 11–1000 | 每隔多少步推一张预览图(1 = 每步都推)。调大能省掉预览解码与前端刷新的开销,采样更快、画面刷新更慢;第一步与整段采样的最后一步始终会推一张,方便看开局与成图。 |
| cleanup_after_run | COMBO | 卸载模型 | 跑完这个节点后怎么收尾:卸载模型 = 连模型一起卸出显存并回收内存,占用最低,但下次运行要重新加载;释放缓存 = 只把 PyTorch 缓存的显存还给驱动并回收内存,模型留在显存里,下次跑得快;不处理 = 保持 ComfyUI 默认行为。 |
| modelopt | MODEL | — | |
| sampleropt | SAMPLER | 可选外部采样器,例如 DMAD Sampler。连接后覆盖 sampler_name。 | |
| sigmasopt | SIGMAS | 可选外部 Sigmas,例如 DMAD Sigmas。连接后覆盖 scheduler、steps 和 denoise 截断。 |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| pass1 | AICG3D_H3_PASS1 | — |