CLIP Text Encode SDXL Enhanced (Inline Tags)
Cutoff isolation with inline <REGION> tags — no giant node face required
- clip
- latent
- conditioning
- upscaled_conditioning
- reference_full_prompt
Every other node in the enhanced-encoder family makes you fill in a wall of section widgets. This one takes a different approach: one plain text field, and you mark regions inline with angle-bracket tags. The neat part is that the natural prompt is just your text with the tags stripped - so prompts stay copy-pasteable to and from any stock CLIP encoder.
The tag syntax
Two tags, both required as open/close pairs, case-insensitive:
<REGION>...body...</REGION>- marks a contiguous span as a Cutoff-style region. The body becomes part of the base prompt verbatim (tags stripped). The model reads exactly what's between the tags.<DETAIL>...text...</DETAIL>- used inside a region. Marks words that should be masked from other regions' encoding passes - the distinctive details that shouldn't bleed. Whitespace-split into individual target words.
Text outside any region is passthrough: it appears in the base prompt but gets no cutoff treatment.
Example:
<REGION>a <DETAIL>gnarled old</DETAIL> tree <DETAIL>with a wicked face</DETAIL></REGION>, <REGION>a bird <DETAIL>massive, red eyes, flying</DETAIL></REGION>
CLIP encodes a gnarled old tree with a wicked face, a bird massive, red eyes, flying, and the detail words get masked out of each other's regions. Paste the same text into stock CLIPTextEncode and you get the same plain prompt - the angle brackets are valid-but-inert CLIP attention markup, so nothing breaks when you move between nodes.
The timestep-range tie-in
Since this pack cares about timestep ranges, the <REGION> opening tag accepts optional attributes: start_timestep:0.0 end_timestep:0.5, or a compact time:0.0-1.0 form. Give a region a window and it only asserts its influence during those denoising steps. That's the family DNA showing.
Inputs that matter
clip and inline_tagged_prompt_text are the core. Then:
enable_region_detail_processing(default on) - off, and the node strips the tags and encodes the plain text with no isolation. Handy for A/B-testing whether Cutoff is actually helping your prompt.convert_newlines_to_commas(default on) - collapses newline runs into single commas, so you can write one region per line.join_separator(default ",") - inserted between parsed sections in the base prompt.- The A1111 embedding trio:
support_a1111_style_embedding_text,remove_text_for_unsupported_embeddings, andfilter_known_a1111_embedding_tags_not_installed_locally(that last one reads a list you can edit in the pack folder). zoom,offset_x,offset_y, andupscaled_conditioning_multiplier- the usual SDXL crop-zoom metadata group. Optionallatentinput sets target W/H.
Outputs: conditioning, upscaled_conditioning, and reference_full_prompt (the cleaned base prompt the model encoded).
Install
ComfyUI Manager → search "Unified Conditioning", or:
cd ComfyUI/custom_nodes
git clone https://github.com/RandyHaylor/unified-conditioning-combine-with-timestep-range.git unified-conditioning-merge
Restart ComfyUI; it lives under unified-conditioning-merge. No models, no external plugin, no pip deps - the Cutoff math is bundled in the pack.
Troubleshooting
- A region that "does nothing" is usually a typo'd tag - both opening and closing tags are required.
- If you're not sure isolation is helping, flip
enable_region_detail_processingoff and compare. It's the built-in A/B switch. reference_full_promptshows you the exact text that got encoded - the fastest way to catch a tag that stripped something it shouldn't have.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | CLIP | — | |
| inline_tagged_prompt_text | STRING | — | |
| upscaled_conditioning_multiplier | FLOAT | 1.00 | — |
| enable_region_detail_processing | BOOLEAN | true | ON: parse REGION/DETAIL tags and apply cutoff isolation math. OFF: strip tags from the prompt and encode the plain text as a single passthrough (no isolation). Useful for A/B comparing the isolation effect against plain CLIP encoding of the same prompt. |
| convert_newlines_to_commas | BOOLEAN | true | ON: any run of newlines (with adjacent commas/spaces/tabs) in the prompt collapses to a single comma before parsing. Lets you write each region/tag on its own line for readability and have them comma-joined automatically. OFF: newlines pass through as-is (CLIP treats them as whitespace). |
| support_a1111_style_embedding_text | BOOLEAN | true | — |
| remove_text_for_unsupported_embeddings | BOOLEAN | true | — |
| filter_known_a1111_embedding_tags_not_installed_locally | BOOLEAN | true | List can be modified in custom node folder: known_a1111_embedding_names_to_filter_when_not_installed_locally.txt |
| join_separator | STRING | , | String inserted between parsed sections in the base prompt when the prior section did not already end with this separator. Default ','. Empty = no separator inserted; single commas still preserved from any trailing punctuation the user typed in the section. |
| zoom | FLOAT | 1.001–100 | — |
| offset_x | FLOAT | 0.00-1–1 | — |
| offset_y | FLOAT | 0.00-1–1 | — |
| latentopt | LATENT | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| conditioning | CONDITIONING | — |
| upscaled_conditioning | CONDITIONING | — |
| reference_full_prompt | STRING | — |