Enhancer Prompt
The 'Enhancer Prompt' Node That Doesn't Enhance Anything (Yet)
- enhanced_prompt
The name oversells this one, and knowing that up front is half the battle. Sage_EnhancerPrompt ("Enhancer Prompt" in the node menu) doesn't enhance anything itself. It doesn't call an API, it doesn't need a key, and it doesn't download a model. What it does is build the message you hand to an LLM that does the enhancing - it's a prompt template with a hardcoded system prompt bolted on, and the whole node is one input and one output.
It lives inside arcum42's Sage Utils pack, which is better known for its metadata plumbing (A1111/Civitai-style tags on your saved images) and its built-in LLM chat tab that talks to local providers like LM Studio and Ollama. This node is the "prompt prep" half of that story: you type a short, rough idea, and it wraps it so an LLM knows exactly what job you want done.
How it works
The mechanism is boring in the best way. From the source, the node returns exactly:
f"{system_prompt}\n\nUser's Input:\n{prompt}"
That system_prompt is a long, opinionated block of instructions - you are an expert prompt engineer for text-to-image models, expand this into an effective image prompt, preserve every subject and color, honor the user's stated medium, write for machine parsing, no bullets or JSON in the output, keep any LoRA keywords. It's the same kind of "your prompt is a chat message" thinking the KB's prompt-engineering essay flags for LLM-encoded models: modern encoders read natural-language instructions, so you write instructions. The source even carries a comment, "Enhancer prompt: will expand out later" - treat it as work-in-progress.
The one input, the one output
- user_prompt - required, multiline, and marked force-input, so there's no default and no typing directly into a widget. You have to wire a text source into it (a primitive, or any string-producing node). An empty string still works; the node just outputs the bare system prompt.
- enhanced_prompt - a STRING, the assembled chat message. Wire it into whatever LLM you're using: Sage's own chat integration, core's TextGenerate node, or copy-paste it into LM Studio/Ollama. Take the LLM's reply and feed that to your CLIP/TextEncode node.
Install
ComfyUI Manager: search "Sage Utils" and hit install. Or the manual way:
cd ComfyUI/custom_nodes
git clone https://github.com/arcum42/ComfyUI_SageUtils
cd ComfyUI_SageUtils
pip install -r requirements.txt
Then restart ComfyUI. The requirements.txt is just dynamicprompts - this node drags in nothing heavy and no model files.
Where people get burned
The trap is wiring enhanced_prompt straight into a Text Encode and wondering why your image is garbage. You'd be conditioning on a giant system prompt instead of an image description. It's text for an LLM, not a finished prompt - skip the LLM step and the whole node is pointless. Also don't confuse it with the sibling Ernie Prompt Enhancer Prompt (Sage_ErniePromptEnhancerPrompt), which formats for Ernie's specific fine-tuned enhancer model template instead. And one small comfort: because Sage Utils only talks to local LLM providers, this is the rare LLM-adjacent node that can't leak a cloud key - a welcome contrast after the ecosystem's LLMVISION incident.
Honestly? It's a niche helper that saves you writing the same "expand this prompt" preamble by hand. If you already run an LLM for prompt work, it's a convenience. If you don't, skip it - the output has no value outside that flow.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| user_prompt | STRING | The user prompt to append after the separator. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| enhanced_prompt | STRING | The enhanced prompt generated for the enhancer model. |