Offset Latent Image
An empty latent that isn't actually empty
- LATENT
ComfyUI's stock Empty Latent Image starts you at zeros. Most of the time that's fine - the sampler adds noise on top and zero is a neutral starting point. But diffusion models trained the usual way have a well-known bias against reaching truly extreme values: pure black, pure white, deep shadow, blown highlight. The standard fix during training is offset noise - nudging the training data's noise away from zero-mean so the model learns those extremes exist. Offset Latent Image gives you the sampling-time equivalent: an empty latent with a deliberate per-channel constant baked in, instead of flat zeros.
You'll recognize the name if you've read about IC-Light - one of its three released checkpoints, iclight_sd15_fcon, is literally "the same model, trained with offset noise," specifically because the plain version washes out dark tones. This node lets you apply the same underlying idea at generation time on any model, without needing a specially-trained checkpoint.
The inputs
width/height(default 512, min 16, step 8, up to 8192) - standard latent dimensions.batch_size(default 1, up to 4096).offset_0throughoffset_3(each default 0, -10 to 10, step 0.1) - a constant value baked into each of the latent's four channels. These map to a standard SD-family latent's four channels - not literally R/G/B, so there's no intuitive "make it redder" mapping; you're nudging the model's own internal representation, not a color space you can eyeball directly.
Output: one LATENT.
The README's own suggestion for finding useful values is the right approach: pair this with this pack's Latent Stats node, run it on a reference image's encoded latent to see what its real per-channel means look like, then feed similar values into offset_0–offset_3 here to start your generation already biased toward that tone.
Important: this isn't noise by itself
This node creates a flat, constant-value latent - not random noise. It's the base you'd otherwise get from Empty Latent Image, just non-zero. You still need your sampler (or this pack's Custom Noise node) to add actual noise on top for generation to work normally; using this node's output directly with nothing else added won't do what you expect.
How to install it
ComfyUI Manager: search "ComfyUI-Image-Filters", install, restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/spacepxl/ComfyUI-Image-Filters
restart. Dependency is opencv-contrib-python; import errors on cv2 are almost always another node pack's conflicting opencv version, fixed on Windows via the author's install.bat/import_error_install.bat, or manually by uninstalling stray opencv variants and reinstalling opencv-contrib-python alone. No models involved - pure latent-space math, essentially free to run.
Common issues & troubleshooting
Guessing offset values gets you nowhere. These channel values don't correspond to anything you can eyeball intuitively - don't try to reason your way to "channel 2 controls warmth" or similar. Use Latent Stats on a reference image's encoded latent to get real numbers, then start from there.
Generation looks unchanged from a normal empty latent. This node only matters if your sampler and workflow are actually sensitive to the starting bias - with a full denoise schedule and a normal number of steps, the sampler often washes out a modest offset anyway. The effect is most visible when you're chasing genuinely extreme output (pure black/white scenes) that a standard empty latent struggles to reach.
Most people never need this node. That's honestly true - it's a niche tool for a specific, known limitation (extreme brightness values) rather than something every workflow benefits from. If your generations aren't struggling to hit true blacks or whites, there's no reason to reach for it over the stock Empty Latent Image.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| width | INT | 51216–8192 | — |
| height | INT | 51216–8192 | — |
| batch_size | INT | 11–4096 | — |
| offset_0 | FLOAT | 0.0-10–10 | — |
| offset_1 | FLOAT | 0.0-10–10 | — |
| offset_2 | FLOAT | 0.0-10–10 | — |
| offset_3 | FLOAT | 0.0-10–10 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | — |