AICG-采样器(高级)
Five Sampling Nodes Collapsed Into One Box, With a Denoise That Works
- model
- conditioning
- latent
- latent
What it replaces
In stock ComfyUI, sampling a flow-matching video model takes five nodes: RandomNoise for the seed, BasicScheduler for the sigma table, KSamplerSelect for the sampler object, BasicGuider for the conditioning, and SamplerCustomAdvanced to actually run it. Five boxes, nine wires, and every one of them is set once and never touched.
AICG-采样器(高级) gets that down to one node with a LATENT output. The internal behaviour is the same - same noise preparation, same guider, same sigma table, same latent structure coming out, so it drops into any graph that expects the native result.
The module's own docstring says the merge exists so the canvas sampling chain goes from five nodes to one and the parameters sit in a single panel. That's the whole pitch, and for a workflow that renders video, one savings of four nodes per render stage genuinely matters. Especially in the segment chain, where you'd otherwise multiply five by however many shots you're rendering.
The one thing it does better than the stock chain
denoise actually works here.
ComfyUI's BasicScheduler truncates the sigma table when denoise is below 1: it lays the schedule out over int(steps / denoise) steps and takes the last steps + 1 sigmas, so a 20-step run at 0.5 denoise walks the back half of a 40-step schedule. It's easy to reimplement that wrong, and this node's source carries a comment saying exactly that - an earlier version here didn't truncate at all, so denoise was decorative and everything ran at 1.0. The current implementation does the truncation properly, and returns an empty sigma tensor at denoise = 0 so the guider hands your latent back untouched instead of sampling nothing in a loop.
If you're using this node as a refinement pass, that's the difference between a knob and a placebo.
Inputs and output
Required:
model- the H3 model, patched with whatever LoRA or sampling tweak you want.conditioning- the encoded prompt. On the AICG3D path that's thepositiveoutput ofAICG3D_H3Output.noise_seed- 64-bit, default 0.sampler_name·scheduler·steps·denoise- the same quartet you'd otherwise split across three nodes. Defaults:euler,normal, 20 steps, denoise 1.0.
Optional:
latent- the starting latent. In practice, connect it. This is the combined audio/video latent fromAICG3D_H3Output; it carries the frame count and resolution the context planned, and there's nothing sensible for the node to sample if it's empty.
Output is latent - a LATENT with the same structure the native custom-sampler chain produces, ready for an AV decode node.
Wiring
[AICG3D_H3Output] positive -> conditioning
latent -> latent
[MODEL] ------------------> model
|
AICG3D_H3SamplerAdvanced -> latent -> AV decode -> VIDEO
That's the "I want to see everything" version of an H3 render, as opposed to AICG-渲染器(高级) which bundles sampling, both decodes and the compose. Use this one when you need to interpose something - a latent step, a low-VRAM tiling pass, a comparison decode.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/JGRFW/comfyui-AICG3D
Then restart. If you came through ComfyUI Manager, search the Registry for AICG3D or 短剧工作台; the package name is aicg3d-h3-suite. Hard-reload the browser afterwards (Ctrl+F5) - this pack versions its JS files because stale frontend modules cause phantom panel bugs.
Only pip dependency: imageio-ffmpeg, and that's for the long-video combiner:
python -m pip install imageio-ffmpeg
Run it in the environment ComfyUI uses. Before any of this is useful you need H3 weights - transformers, text encoder, and both VAEs - in the folders the pack's loader scans.
Traps
Seed 0 and the cache. The node rolls a fresh 64-bit seed when the seed is 0, but its cache key comes from the widget values. Rerun with seed 0 and nothing else changed and you may get the cached latent back rather than a new one. Set a real number when you want reproducibility; use the generate control when you want a reroll.
A hand-rolled schedule that isn't monotonic. The external-sigmas path elsewhere in the pack validates that there are at least two values. If you're feeding sigmas from a custom node into a different sampler, do the sanity check yourself; this node computes steps from the tensor length and will happily report nonsense if the tensor is nonsense.
Micro-stepping to fix quality. 33B video models don't reward 60 steps the way SDXL did. If a shot is wrong, the prompt and the seed are the fix. Also remember flow-matching models are less tolerant of aggressive schedulers than the SD-era habit suggests - simple or normal before you go reaching for karras.
Assuming this is a drop-in for the renderers. It outputs a latent, not a video. You still need two decodes and a compose, and if you skip the audio VAE you'll get a silent clip with no error.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| conditioning | CONDITIONING | — | |
| noise_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 | normal | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 |
| steps | INT | 201–10000 | — |
| denoise | FLOAT | 1.000–1 | — |
| latentopt | LATENT | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| latent | LATENT | — |