๐งฌ Encoding Enchantress
Where Violet Tools actually becomes conditioning
- clip
- quality
- scene
- glamour
- body
- aesthetic
- pose
- override
- nullifier
- positive
- negative
- tokens
- pos
- neg
Every other node in the Violet Tools pack gives you pretty prompt text. Encoding Enchantress is the one that makes that text actually matter - it takes your CLIP model plus the optional outputs from Quality Queen, Scene Seductress, Glamour Goddess, Body Bard, Aesthetic Alchemist, Pose Priestess, Negativity Nullifier, and Oracle's Override, and turns the whole pile into positive and negative conditioning you can feed a sampler. It's the hub. Build a workflow without it and you're just generating strings.
What it does. The clean way to think about it: all those *_STRING outputs (quality, scene, glamour, body, aesthetic, pose, nullifier) are optional inputs, and you can wire in as many or as few as you like. The mode dropdown decides how they get combined, and the README's sample outputs show all four modes on identical prompts - smooth blend, closeup, portrait, and compete combine. Smooth blend is the default and the beginner pick: everything gets encoded together as one conditioning for a cohesive result. Closeup and portrait split the character stuff (glamour, body, pose) from the vibe stuff (quality, scene, aesthetic) and add framing keywords - closeup even strips framing terms out of your scene text so they don't fight. Compete combine is the experimental one: it encodes each element as its own conditioning and lets them compete for attention. Same inputs, visibly different character.
The inputs that matter.
mode- smooth blend, closeup, portrait, or compete combine. Start with smooth blend.body_strength,vibe_strength,negative_strength- 0 to 3, how hard each group is pushed (body_strength and vibe_strength don't apply in smooth blend).optimize_prompt- the "Essence Algorithm": a pure algorithmic pass (no LLM, no API) that uses rapidfuzz to collapse redundant tokens and canonicalize aliases so your key concepts get more attention. Default off.token_report- emits a per-node breakdown of how many of your 77-token chunks each prompt actually uses.
How it works, mechanically. Strength sliders aren't just prompt text multiplication - the node walks the tokenized sequence and multiplies each token's weight by your strength before encoding. That's (tag:1.2)-style attention, but done at the token level. Which is your cue: this node is built for the CLIP world (SDXL, Illustrious, NoobAI, Pony). On LLM-encoded models the whole weighting model doesn't exist, and its negative prompt output is inert - the negative prompt died on guidance-distilled models, not on SDXL-lineage ones. Check what your checkpoint's encoder is before judging results.
The outputs: positive and negative are CONDITIONING - wire them into your sampler. tokens is the text report (or a gentle nudge to turn the toggle on). pos and neg are the raw strings, which are gold for debugging what actually got built.
Install. Via ComfyUI Manager, search "ComfyUI-Violet-Tools". Or:
cd ComfyUI/custom_nodes
git clone https://github.com/leylahkrell/ComfyUI-Violet-Tools
Restart ComfyUI. No model downloads. Dependencies are light - PyYAML (ships with ComfyUI), rapidfuzz (needed for the Essence Algorithm), requests. The README's clone command shows the author's older GitHub handle; the repo is at leylahkrell now.
Troubleshooting. If the Essence Algorithm throws an ImportError, rapidfuzz didn't make it in - let Manager install dependencies or pip install rapidfuzz into your ComfyUI Python environment. If tokens says there was a problem with CLIP, check your CLIP connection. And if your negatives seem to do nothing, it's probably the model, not the node.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | CLIP | โ | |
| mode | COMBO | smooth blend | 4 options: closeup, portrait, compete combine, smooth blend |
| body_strength | FLOAT | 1.000โ3 | Strength for body-related prompts (not used in smooth blend) |
| vibe_strength | FLOAT | 1.000โ3 | Strength for quality + aesthetic prompts (not used in smooth blend) |
| negative_strength | FLOAT | 1.000โ3 | โ |
| optimize_prompt | BOOLEAN | false | Optimize tags using the Essence Algorithm |
| token_report | BOOLEAN | false | Generate detailed token usage report for each prompt |
| qualityopt | QUALITY_STRING | โ | |
| sceneopt | SCENE_STRING | โ | |
| glamouropt | GLAMOUR_STRING | โ | |
| bodyopt | BODY_STRING | โ | |
| aestheticopt | AESTHETIC_STRING | โ | |
| poseopt | POSE_STRING | โ | |
| overrideopt | OVERRIDE_STRING | โ | |
| nullifieropt | NULLIFIER_STRING | โ |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | โ |
| negative | CONDITIONING | โ |
| tokens | STRING | โ |
| pos | STRING | โ |
| neg | STRING | โ |