Nodes/ComfyUI-Neo-Nodes/Neo Prompt Encoder
ComfyUI Node

Neo Prompt Encoder

The prompt box and the CLIP encoder in one node

By neoneo-ai·Created 2 months ago·Updated a day ago· 1
Neo Prompt Encoder
  • clip
  • image
  • POSITIVE
  • PROMPT
text
disable_text_inputfalse
auto_generatefalse
quick_input
skill_id
quick_input_usedfalse
random_enabledfalse
random_count1
text_input
instance_uid

Neo Prompt Encoder is what you get if you take the pack's prompt agent and give it a clip input. Same editor, same preset library, same ✨ LLM button - but now it also encodes the finished text and hands you CONDITIONING you can wire straight into a sampler's positive slot. It replaces the classic CLIP Text Encode node in a standard txt2img graph instead of sitting next to it.

That's the decision, and it's a small one: Encoder if a KSampler eats your prompt, Agent if some other node does. The encoder is the one you use for your normal SDXL/Flux/Krea 2 pipeline. Its outputs are POSITIVE (CONDITIONING) and PROMPT (STRING) - the second one is genuinely useful, because you can send the same text you sampled with into a filename, a note, or a second graph without retyping it.

Why an LLM in front of the encoder helps at all

This pattern - a small language model rewriting your rough idea into a structured prompt before the encoder sees it - is mainstream now, not exotic. The reason is architectural: on a 2026 checkpoint the text encoder is a general-purpose LLM (Krea 2's is Qwen3-VL), so your prompt is an instruction, not a bag of tokens. Having one language model write the instruction another language model reads is a translation between two things that speak the same language.

It also means the old habits are worth re-checking. On LLM-encoded models, (word:1.4) attention weights are discarded, BREAK does nothing, and a long masterpiece, best quality negative is inert at CFG 1. On the SDXL lineage - Illustrious, NoobAI, Pony - tags and weights still work fine. The node enhances either way; knowing which encoder you're plugged into is what tells you whether you want a comma-separated tag list or a paragraph of prose out of it. Say which in the quick-input box, or build a preset skill that does it for you.

How it works

clip is required. The text field (text) is hidden in the node definition and driven by the rich editor in the UI, and a second string input, text_input, is a forced input - connect anything to it and the node goes EXTERNAL and samples that instead. auto_generate moves the LLM call into the queue run rather than the ✨ click, which is what you want for unattended batches.

Inside, encode_prompts resolves the text in order: if auto_generate is on and there's quick input (or an image), it calls the LLM synchronously and streams the result into the box; if you fed it an image, it uses a reverse-prompt/captioning skill first; otherwise it just concatenates the text box with the quick input. Then it encodes. Encodes are cached per-process (a small LRU, cap 50), so re-running without changing the prompt is cheap.

The supporting cast is the same as the agent node: 💾 saves presets with an AI-extracted title and tags, ☰ browses and searches them (pinyin included for Chinese names), 🎲 pulls a random prompt from a mixed pool, 👁 renders markdown live while streaming, ✕ clears without confirmation. Skills are markdown files with a system prompt in frontmatter, grouped in the picker as image/reverse-prompt, task, style template, and your own custom ones. The pack ships translation skills as tasks, which is a quiet win if you write in Chinese and sample on an English-trained base.

Install

Manager → search Neo Nodes. Or:

cd ComfyUI/custom_nodes
git clone https://github.com/neoneo-ai/ComfyUI-Neo-Nodes.git ComfyUI-Neo-Nodes

Then restart. Pip pulls openai, Pillow, PyYAML, pypinyin - note the README claims requests, which is wrong for this version. For the LLM side you either configure a provider and API key in the node settings (DeepSeek, Qwen/Bailian, Kimi, GLM, SiliconFlow, or OpenAI-compatible / LM Studio / Ollama / OpenRouter) or install llama_cpp_python and drop a GGUF in models/LLM/. Local is optional; the node encodes text perfectly well with no LLM configured, it just won't enhance anything.

Common issues

401 on cloud providers. The key is mandatory there, and leaving it blank saves happily and fails at run time. LM Studio, Ollama, vLLM and plain OpenAI-compatible endpoints don't need one.

Source-compiled llama-cpp-python. Skip it. Prebuilt wheels matching your Python/OS/CUDA are the documented path, and the ggml.dll startup error on Windows is a missing VC++ 2015-2022 redistributable.

Streaming looks stalled on reasoning models. That's the model thinking; the panel clears itself when the body text starts. There's a "disable thinking" switch next to ✨ if you'd rather it just answer.

A skill that produced nothing. If the skill's .md file can't be read the node silently falls back to the built-in smart_prompt task, so a typo in a custom skill looks like "the enhancement got dumber" rather than an error.

CategoryNeo-Nodes

Inputs (12)

NameTypeDefaultDescription
clipCLIP
textSTRING
disable_text_inputBOOLEANfalse
auto_generateBOOLEANfalse
quick_inputSTRING
skill_idSTRING
quick_input_usedBOOLEANfalse
random_enabledBOOLEANfalse
random_countINT11–16
text_inputoptSTRING
imageoptIMAGE
instance_uidoptSTRING

Outputs (2)

NameTypeDescription
POSITIVECONDITIONING
PROMPTSTRING