Combined Conditioning From Colors (Texturaizer)
Regional prompting driven by a flat-color ID pass
- clip
- image
- scene_data
- CONDITIONING
- DATA
- MASK
This node is the machinery behind one of Texturaizer's headline features: per-object and per-material prompting from a 3D scene. Blender can render a scene where every object or material gets its own flat, solid color - an "ID pass" or segmentation map, in the language the pack's own Get Image Data node uses for its segment obj/segment mat outputs. Feed that color-coded image in here, along with a scene dictionary mapping colors to prompt text, and it builds one combined conditioning where each colored region gets its own prompt - no attribute bleeding between the couch and the character sitting on it, because they were never in the same prompt to begin with.
How it works
This is regional prompting, just driven by pixels instead of hand-drawn masks or bounding boxes. The standard version of the technique - splitting an image into regions and giving each its own prompt so a scene with multiple distinct subjects doesn't smear their attributes together - normally means manually painting masks or defining coordinate boxes. Here, the mask is the render: Blender assigns each object or material a distinct flat color when it renders the ID pass, and this node reads that image, groups pixels by color (within threshold of each other, so anti-aliasing at region edges doesn't fragment a single object into a dozen tiny regions), looks up the prompt text associated with each color group in scene_data, encodes each region's text with CLIP, and combines the results into one conditioning that respects all the regional boundaries at once.
The inputs and outputs that matter
clip- the CLIP model doing the text encoding for each region.image- the flat-color ID/segmentation pass. This is the node's whole trick - get this image right (clean, flat colors per region, no gradients or anti-aliasing artifacts if you can help it) and the regional split works; get it wrong and regions bleed into each other.scene_data(default"{}") - a dictionary, presumably mapping each color to its per-region prompt text; this is what Blender's export populates.threshold(0–127, default 4) - how close two pixel colors need to be to count as the same region. Raise it if anti-aliased edges are fragmenting what should be one clean region; lower it if genuinely distinct colors are getting merged into one.
Outputs: CONDITIONING (the combined regional conditioning, straight into your sampler), DATA (presumably the parsed per-region breakdown, useful for debugging which color mapped to which prompt), and MASK - likely the region boundaries as a mask, handy if you want to feed it into something like a regional latent blend downstream instead of relying purely on the conditioning.
Installing it
ComfyUI Manager → search Texturaizer → Install → restart, or:
cd ComfyUI/custom_nodes
git clone https://github.com/LatentSpaceDirective/ComfyUI-Texturaizer
then restart ComfyUI. No extra dependencies beyond CLIP, which your checkpoint already provides.
Where people get burned
Regional prompting generally has a known limit: it reduces attribute bleed, it doesn't eliminate it, and the community's own read on newer techniques doing the same job is that some bleed is still expected even from purpose-built implementations. If two adjacent regions still trade details, that's the technique's normal ceiling, not necessarily a config mistake. More specific to this node: threshold is a single global value applied across the whole image, so a scene with both very close and very distinct colors in it may need you to re-render the ID pass with more color separation between objects rather than trying to tune threshold to satisfy every region at once.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | CLIP | — | |
| image | IMAGE | — | |
| scene_data | DICTIONARY | {} | — |
| threshold | INT | 40–127 | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| CONDITIONING | CONDITIONING | — |
| DATA | DATA | — |
| MASK | MASK | — |