Neo 空Latent (Forge Neo 噪声)
The widget that isn't noise, it's a random number generator you have to agree with
- model
- latent
- LATENT
Everyone thinks the seed is the seed. It isn't. The seed is a number you feed to a random number generator, and which RNG you feed it to decides the noise you actually start from. ComfyUI has its own; Forge Neo has ImageRNG, plus an offset setting called ENSD and a second "variation" seed on top. Same number in, different noise out, different image.
Neo Empty Latent is the node that hands you Neo's noise. It's also secretly the plumbing that makes the Neo KSampler work at all, because the sampler refuses to run without it.
What it's actually doing
It builds a zero tensor of the right shape, then generates the first noise sample with Neo's ImageRNG using your seed, and stashes that noise and the RNG state inside the LATENT dictionary it returns. The KSampler downstream picks up that state and continues the same random stream, which is why the first noise isn't drawn twice.
The batch rule is Neo's too: with subseed_strength at 0, the seeds for batch items are seed + i, not random draws.
The inputs that matter
width/height- 1024×1024 by default, in steps of 8.batch_size- how many images; seeds advanceseed + iper item.seed- with the usual control-after-generate widgets next to it.rng_source-GPU,CPU,NV. This is the one that bites people. The author's own tooltip says Neo's factory default is CPU, while this node defaults to GPU. If your Neo images don't match your ComfyUI images, check this first.NVis Neo's own Philox-based generator.latent_type- three shapes:Anima / Wan / Qwen-Image (16通道, 视频式),SD1.5 / SDXL (4通道),Flux / SD3 / Z-Image / Lumina (16通道). The video-style one adds a leading frame dimension. If you connect a model, this widget is ignored.eta_noise_seed_delta- Neo's ENSD. Leave at 0 unless you deliberately use it in Neo; it perturbs ancestral noise step by step.model(optional) - wire your MODEL here and the node reads the channels and dimensionality off the latent format instead of the dropdown. Honestly, just do that; it removes a whole class of "why is my latent the wrong shape" mistakes.latent(optional) - the img2img door. VAE Encode your source image and feed the result in here; the node attaches Neo's noise to your latent instead of an empty one.subseed/subseed_strength- Neo's variation seed. Strength 0 disables it and reverts to theseed + ibatch rule.seed_resize_from_w/seed_resize_from_h- Neo's "resize seed from" pair for hires passes.
One output: LATENT, which goes into the Neo KSampler's latent_image input. Nothing else in the graph wants it.
Install
ComfyUI Manager → search ComfyUI Neo Sampler, or:
cd ComfyUI/custom_nodes
git clone https://github.com/wangjue520/ComfyUI-Neo-Sampler
Restart ComfyUI. The pack pulls lark, torchsde and scipy into the same Python that runs ComfyUI the first time it loads; if that fails the console prints the pip command to run yourself. No model downloads - this node is pure code.
Common issues
The KSampler throwing "latent must come from Neo Empty Latent" means exactly that: a stock Empty Latent was wired in, or a VAE Encode went straight into the sampler. For img2img, the VAE Encode goes into this node's latent input, not into the sampler.
rng_source mismatch is the classic "my image looks different from Neo" cause, and it's silent - no error, just a different picture. The same goes for using ComfyUI's own Empty Latent node by mistake in a half-converted workflow: it produces a valid LATENT with no RNG state, and the sampler will reject it.
And a note on what stays reproducible: the author's verification puts CPU and NV modes bit-identical to Neo, with GPU running the same code path. Small floating-point differences still appear between GPUs, PyTorch versions and attention implementations - nobody can remove those. Hires passes regenerate noise at the new size from the same seeds, which is Neo's rule and not a bug.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| width | INT | 102416–16384 | — |
| height | INT | 102416–16384 | — |
| batch_size | INT | 11–4096 | — |
| seed | INT | 00–4294967295 | — |
| rng_source | COMBO | GPU | Neo 设置 → 随机数生成器。注意 Neo 的出厂默认是 CPU |
| latent_type | COMBO | 3 options: Anima / Wan / Qwen-Image (16通道, 视频式), SD1.5 / SDXL (4通道), Flux / SD3 / Z-Image / Lumina (16通道) | |
| eta_noise_seed_delta | INT | 00–4294967295 | Neo 设置 → ENSD |
| modelopt | MODEL | 接上后按模型自动决定通道数/维度,忽略 latent_type | |
| latentopt | LATENT | 图生图:接 VAE 编码后的 latent,为它配上 Neo 噪声 | |
| subseedopt | INT | 00–4294967295 | 变异种子 (Variation seed) |
| subseed_strengthopt | FLOAT | 0.000–1 | — |
| seed_resize_from_wopt | INT | 00–16384 | — |
| seed_resize_from_hopt | INT | 00–16384 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | — |