NGs Conditioning - Better CLIP Text Encoder
Line-by-line prompts with a built-in percentage schedule
- clip
- CONDITIONING
This is the node the whole pack is actually named after, in a sense - the README's one-line pitch for the entire project is "an improved Clip Text Encoder, which smartly parses entries line-by-line." A standard CLIPTextEncode gives you one static prompt for the whole generation. If you want your prompt to change partway through - start wide, drift to a close-up; establish a subject, then layer in detail near the end - the normal ComfyUI way is a small chain: separate CLIPTextEncode nodes, a ConditioningSetTimestepRange on each to say when it's active, and a ConditioningCombine to merge them all. That's four-plus nodes of wiring for what's conceptually one idea. This node folds it into a single text box.
How it works
Flip usebetter on, and every line of your text field becomes its own sub-prompt. Prefix a line with a percentage range in square brackets and that line only contributes during that window of the generation:
[0.5,1.0]a photo of a cat and a dog- active from 50% to 100% of the run.[,0.8]a photo of a cat and a dog- active from 0% to 80%.[0.5]a photo of a cat and a dog- shorthand for 50% to 100%.- No brackets at all - the line defaults to the full
[0.0,1.0], active the entire time, same as a plain CLIPTextEncode line.
With usebetter off, treat it as an ordinary text encoder - the whole field goes in as one prompt, no scheduling, no bracket parsing.
Worth flagging: this bracket syntax is this node's own invention layered on top of CLIP conditioning. It's unrelated to A1111-style (word:1.4) weighting, and it's squarely a CLIP-family tool - SD 1.5/SDXL-era models. Newer LLM-encoder models (Flux, Z-Image, and friends) don't share CLIP's conditioning shape, and prompt weighting is disabled outright on those encoders regardless of what node you use to write it - so this node's value is specifically in the CLIP-conditioned part of the ecosystem.
The inputs and outputs that matter
clip- from your checkpoint or CLIP loader, same as any text encoder.text- multiline. This is where the per-line percentage syntax lives.usebetter- the on/off switch for the whole scheduling feature (default off).
Output is a single CONDITIONING, wired into your sampler's positive or negative slot exactly like a normal CLIPTextEncode output.
How to install it
ComfyUI Manager: search "NeoGriever," install, restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/NeoGriever/ComfyUI-NeoGriever
then restart. No extra dependencies for this node or anything else in the pack - it's built entirely on what ComfyUI already ships with.
Common issues & troubleshooting
Percentage tags show up as literal text in your image. This is the tell that you forgot to flip usebetter on - with it off, [0.5,1.0] gets encoded as part of the prompt string instead of being parsed as a schedule. If you're seeing garbled bracket text bleeding into generations, check that toggle first.
Ranges outside 0.0–1.0, or a start greater than the end. Nothing in the schema validates this for you - keep ranges sane (0.0 ≤ start < end ≤ 1.0) rather than assuming the node will correct an inverted or out-of-bounds range.
Double-scheduling. If your graph already has a separate ConditioningSetTimestepRange node in the chain downstream of this one, you can end up applying a percentage window twice. Check for that if timing looks off from what you configured here.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | CLIP | — | |
| text | STRING | — | |
| usebetter | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| CONDITIONING | CONDITIONING | — |