ComfyUI Node

OCSNoise Conditioning

Add noise to your prompt embeddings

By blepping·Created 2 years ago·Updated 2 months ago· 30
OCSNoise Conditioning
  • conditioning
  • custom_noise
  • CONDITIONING
seed0
blend0.01
pooled_blend0.01
blend_modeinject
pooled_blend_modeinject
noise_strength1.00
pooled_noise_strength1.00
conditioning_multiplier1.00
pooled_conditioning_multiplier1.00
time_moderelaxed
start_time0.00
end_time1.00
item_start0.00
item_end1.00
pooled_item_start0.00
pooled_item_end1.00
slice_start0.00
slice_end1.00
pooled_slice_start0.00
pooled_slice_end1.00
cpu_noisetrue
normalizetrue
fake_channels1

Most noise experiments target the latent: the image in training space. This node targets something stranger - the conditioning itself. OCSNoise Conditioning takes a CONDITIONING (your prompt embeddings, the thing that comes out of a CLIP encode) and injects noise into it before sampling. Done subtly, perturbing prompt embeddings is a known trick for breaking the model out of a rut or nudging composition; done carelessly, it just wrecks your prompt adherence. This node gives you an enormous amount of control over exactly how that perturbation happens.

What it is

A conditioning transformer in the OCS noise family. It generates noise shaped to match your conditioning tensors, blends it in, and returns modified CONDITIONING. It's filed under the sd category rather than the OCS noise section, which tells you it's the odd one out - it doesn't produce noise for samplers, it produces noised prompt data. You'd wire it between your CLIP Text Encode output and your sampler's conditioning input.

The inputs that matter

You don't need to know all 27 of these - the node splits everything into a regular conditioning part and a pooled conditioning part (the SDXL/SD3 pooled vector that also steers generation), and both follow the same pattern.

  • conditioning (required) - the conditioning to noise.
  • seed (required) - seeds the generated noise, same as everywhere in OCS.
  • blend and pooled_blend (both default 0.01) - how much noise to add, as a percentage where 1.0 = 100%. At 0.01 you're adding one percent noise - a nudge. This is the dial to start with.
  • blend_mode / pooled_blend_mode (default inject) - how noise combines with the conditioning: inject (just add it), lerp, a_only, b_only.
  • noise_strength / pooled_noise_strength (default 1) - the strength of the generated noise before blending.
  • conditioning_multiplier / pooled_conditioning_multiplier (default 1) - scale the conditioning itself, independent of the noise.
  • start_time / end_time - as a percentage of sampling, plus time_mode (relaxed vs strict) controlling how overlap is judged. This lets you noise the prompt only during part of the denoise.
  • custom_noise (optional) - a custom noise generator; default is gaussian.
  • cpu_noise, normalize, fake_channels - the standard noise hygiene controls.

The single CONDITIONING output goes back into your sampling pipeline.

Why you'd bother

Prompt-embedding noise is a niche but real technique in the r/StableDiffusion bag of tricks - it's sometimes used as a "free randomness" lever for getting variety from the same prompt, or as a way to weaken a too-strong prompt. The item_start/item_end and slice_start/slice_end pairs even let you target specific conditioning items or slices of the noise chunk. That's deep power, but the honest advice is: start with blend and pooled_blend near 0.01, look at what changes, and only then start slicing.

Installing and gotchas

Part of the pack - Manager search "Overly Complicated Sampling" or git clone https://github.com/blepping/comfyui_overly_complicated_sampling into ComfyUI/custom_nodes, restart. No models or mandatory deps. The gotcha is philosophical: noise on conditioning is far less forgiving than noise on latents. A blend that looks tiny can still measurably change a generation, so keep the default 0.01 and move in small steps. And remember inject just adds - if you want the blend to respect the conditioning's magnitude, lerp is the more controlled option.

Categorysd

Inputs (25)

NameTypeDefaultDescription
conditioningCONDITIONINGInput conditioning to be noised.
seedINT00–18446744073709550000Seed to use for generated noise.
blendFLOAT0.01-10000–10000Blend strength of noise to be added to conditioning as a percentage where 1.0 would indicate 100%.
pooled_blendFLOAT0.01-10000–10000Blend strength of noise to be added to pooled conditioning as a percentage where 1.0 would indicate 100%.
blend_modeCOMBOinjectBlending function used when combining noise with the conditioning. inject just adds it.
pooled_blend_modeCOMBOinjectBlending function used when combining noise with the pooled conditioning. inject just adds it.
noise_strengthFLOAT1.00-10000–10000Strength of the generated noise to be added to conditioning.
pooled_noise_strengthFLOAT1.00-10000–10000Strength of the generated noise to be added to pooled conditioning.
conditioning_multiplierFLOAT1.00-10000–10000Multiplier applied to conditioning tensors.
pooled_conditioning_multiplierFLOAT1.00-10000–10000Multiplier applied to pooled conditioning tensors.
time_modeCOMBOrelaxedControls time matching. Strict requires a conditioning item to be fully within the start/end range while relaxed just requires it to have overlap with the range. For example, if the time range is 0.2 through 0.5 and the conditioning item is 0.0 through 0.4 then strict mode would not match.
start_timeFLOAT0.000–1Conditioning item start time as a percentage of sampling.
end_timeFLOAT1.000–1Conditioning item end time as a percentage of sampling.
item_startFLOAT0.000–1Conditioning item start as a percentage of the total number of conditioning items.
item_endFLOAT1.000–1Conditioning item end as a percentage of the total number of conditioning items.
pooled_item_startFLOAT0.000–1Conditioning pooled output item start as a percentage of the total number of conditioning items.
pooled_item_endFLOAT1.000–1Conditioning pooled output item end as a percentage of the total number of conditioning items.
slice_startFLOAT0.000–1Noise is generated to match the total size of matched conditioning items. Slices use a percentage of that chunk of noise.
slice_endFLOAT1.000–1Noise is generated to match the total size of matched conditioning items. Slices use a percentage of that chunk of noise.
pooled_slice_startFLOAT0.000–1Noise is generated to match the total size of matched conditioning items. Slices use a percentage of that chunk of noise.
pooled_slice_endFLOAT1.000–1Noise is generated to match the total size of matched conditioning items. Slices use a percentage of that chunk of noise.
cpu_noiseBOOLEANtrueControls whether noise will be generated on GPU or CPU. Only affects noise types that support GPU generation.
normalizeBOOLEANtrueControls whether the generated noise is normalized to 1.0 strength before scaling. Generally should be left enabled.
fake_channelsINT1Noise will be generated with number of channels. Shouldn't make a difference for most noise types.
custom_noiseoptOCS_NOISE,SONAR_CUSTOM_NOISECustom noise type to use. If not connected, gaussian noise will be used.

Outputs (1)

NameTypeDescription
CONDITIONINGCONDITIONING