Nodes/comfyui_AcademiaSD/Academia SD CLIP Text Encode (Negative) ๐Ÿ”ด
ComfyUI Node

Academia SD CLIP Text Encode (Negative) ๐Ÿ”ด

The red negative box that remembers your history โ€” and runs the stock encoder underneath

By AcademiaSDยทCreated about a year agoยทUpdated 3 days agoยท 76
Academia SD CLIP Text Encode (Negative) ๐Ÿ”ด
  • clip
  • CONDITIONING
  • STRING
โ—„textโ€”โ–บ

Let's get the honest bit out first: Academia SD CLIP Text Encode (Negative) ๐Ÿ”ด is not a new way to write negative prompts. It's ComfyUI's stock CLIP Text Encode node wearing a very nice suit. The underlying math is identical, line for line. What the suit buys you is a prompt box that keeps a history of your last ten queues, a favorites vault, and JSON presets - so you stop retyping the same "low quality, blurry, bad hands, watermark" block every time you build a workflow.

It ships in the comfyui_AcademiaSD pack from the Academia SD YouTube channel, a tutorial-focused creator whose pack is a grab-bag of small UX nodes (an auto-downloader, a multi-LoRA loader, a resolution calculator, and a lot more). The CLIP encoders are the tamest thing in there - pure frontend polish on top of stock ComfyUI, no API keys, no model files, no downloads.

How it works

If you read the Python, it's almost anticlimactic. The class calls clip.tokenize(text) and then clip.encode_from_tokens(tokens, return_pooled=True) - the same two calls the native CLIPTextEncode makes - and hands back the conditioning. The entire value-add lives in academia_clip_text_encode.js, which hides ComfyUI's default textarea and draws its own collapsible box with a recents tray (last 10 queued prompts, FIFO, duplicates pushed to the top), a heart-button favorites vault, and preset list files.

A quick sanity note before you trust it with real work: because the encode path is a straight copy of the native node, everything you know about CLIPTextEncode applies here, no more and no less. Prompt weighting still works on CLIP-era models, it still doesn't on LLM-encoded 2026 models, and the 77-token limit is whatever your encoder's is.

Inputs and outputs

Only two inputs, both required:

  • text - your negative prompt, multiline.
  • clip - the CLIP model socket from your checkpoint or CLIP loader.

And two outputs:

  • CONDITIONING - wire this to the negative input on your sampler.
  • STRING - the exact text you typed, passed through as a plain string. Handy if you want to log prompts or feed the same text into another node without a separate text node.

Installing it

ComfyUI Manager, search comfyui_AcademiaSD, install, restart. Or by hand:

cd ComfyUI/custom_nodes
git clone https://github.com/AcademiaSD/comfyui_AcademiaSD

Then restart ComfyUI. No pip dependencies, no model downloads - this node needs nothing beyond stock ComfyUI.

Where people get burned

The big one is a misconception, not a bug: this node cannot make your negative prompt stronger than the sampler allows. Negatives only steer the generation while CFG is above 1. On guidance-distilled models - Flux Dev, Schnell, Z-Image Turbo, most of what people run in 2026 - the negative pass is skipped entirely at CFG 1. The red box renders, the text sits there, nothing happens. If that's your setup, restate what you want to avoid as positive constraints, or install NAG. No UI can fix that, and this one doesn't pretend to.

Second: your recents, favorites, and presets are JSON files in custom_nodes/comfyui_AcademiaSD/prompt_lists/. Uninstalling the pack deletes them. Export a JSON backup before you rip it out, and don't try to delete default_negative_prompt.json - the server deliberately refuses.

Finally, the polish is a DOM-level patch on ComfyUI's native textarea. If you ever see the box render oddly right after a ComfyUI frontend update, that's the patch losing a fight with newer ComfyUI, not your graph. Update the pack and move on. And remember the red/green split is a convention, not enforcement - if you wire the red node into your positive slot, nothing stops you.

CategoryAcademia SD/Conditioning

Inputs (2)

NameTypeDefaultDescription
textSTRINGโ€”
clipCLIPโ€”

Outputs (2)

NameTypeDescription
CONDITIONINGCONDITIONINGโ€”
STRINGSTRINGโ€”