ConditioningApplyOperation
ConditioningApplyOperation
- cond
- operation
- CONDITIONING
Prompts don't go into the sampler as words - they go in as CLIP embeddings, and those embeddings occupy a semantic space where "move this vector a little" means "subtly change the meaning." This node lets you reach in and edit that space directly: it takes a CONDITIONING and a LATENT_OPERATION (from one of the pack's Latent Operation builder nodes) and applies the operation to the conditioning's embedding tensor. No prompt rewriting, no weight tweaks - just math on the vector your prompt became.
Why would you? Because it's a whole different axis of control. The README frames it as "moving conditionings in semantic latent space," and the example workflow does exactly that: it takes a Latent Operation (Custom) set to add_noise at 0.1 and feeds it through this node. Result: the prompt's meaning wanders slightly, image to image, in a way that's hard to replicate by editing words. Add a scalar and you're biasing the whole conditioning; multiply and you're scaling how strongly the embedding asserts itself. It's experimental in the source, and it shows - this is tinkerer territory, not a production tool.
The mechanism is dead simple. A conditioning in ComfyUI is a list of (embedding_tensor, extras_dict) tuples. The node walks that list, applies your operation to each embedding tensor, and - if zero_out is on - zeroes the pooled_output in the extras, which is the global image-level summary CLIP produces. Zeroing pooled output is a crude "forget the global gist" switch; leave it off unless you're chasing a specific effect. Output is a CONDITIONING you can feed straight into any sampler.
Inputs: cond (the conditioning from a CLIPTextEncode), operation (a LATENT_OPERATION - you can only wire in the pack's own operation nodes, which is the usual socket gotcha), and zero_out (boolean).
Realistic expectations: effects at small magnitudes are subtle but real; crank the operation and the image drifts into odd semantic territory. Since it's per-conditioning, you can bend the positive and negative independently - bending just the negative is a fun way to discover what "negative space" actually encodes. The mechanism is grounded in how CLIP pooling works, but the pack is small and largely un-commented-on in the community, so treat it as a lab bench, not a recipe book.
Install: ComfyUI Manager → search "ComfyUI-Model-Bending" → install → restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/abuzreq/ComfyUI-Model-Bending
Dependencies: kornia and scikit-learn. The pack's conditioning_bending.json workflow is the fastest way to see it working - wire a CLIPTextEncode in, add a noise operation at 0.1, and run the same seed twice to watch the drift.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| cond | CONDITIONING | — | |
| operation | LATENT_OPERATION | — | |
| zero_out | BOOLEAN | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| CONDITIONING | CONDITIONING | — |