Neo Prompt Encoder
The prompt box and the CLIP encoder in one node
- clip
- image
- POSITIVE
- PROMPT
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.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | CLIP | — | |
| text | STRING | — | |
| disable_text_input | BOOLEAN | false | — |
| auto_generate | BOOLEAN | false | — |
| quick_input | STRING | — | |
| skill_id | STRING | — | |
| quick_input_used | BOOLEAN | false | — |
| random_enabled | BOOLEAN | false | — |
| random_count | INT | 11–16 | — |
| text_inputopt | STRING | — | |
| imageopt | IMAGE | — | |
| instance_uidopt | STRING | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| POSITIVE | CONDITIONING | — |
| PROMPT | STRING | — |