LLM++ Prompt
A no-GPU shortcut from vague idea to ready image prompt
- image
- prompt
You've got a rough idea - "cyberpunk street, rain, neon" - and you want a real image prompt that'll make a checkpoint actually do something with it. LLM++ Prompt is the node that does the typing for you: it hands your idea to a language model, gets back a structured prompt, and feeds it straight into CLIP Text Encode. No local LLM, no GPU for inference, no model downloads. The whole "LLM in the graph" pattern exists to kill the blank-page problem, and this is one of the few nodes that solves it entirely in the cloud.
How it works
Despite the name, the node itself doesn't contain a model - it's a chat-completions client with a friendly face. You pick a provider and model from the dropdown, and on every queue it builds a request and calls the API:
- Mistral -
mistral-large-2512 - Gemini - a whole row of free-tier flashes (
gemini-3.6-flash,-2.5-pro, and friends), all sharing one Google API key - Groq -
qwen/qwen3.6-27b, which is fast and handles images - LM Studio - your own local models through its OpenAI-compatible server at
http://127.0.0.1:1234/v1
That last one is the sleeper feature. If you already run LM Studio for uncensored or offline prompting, this node talks to it like any other provider - no cloud, no per-call cost, no content filter. The API path is there for when you want frontier quality and don't care about either of those things.
Wire an image in and it earns its keep: the node converts the IMAGE tensor to PIL, drops it to RGB, resizes so the longest side hits your configured cap (default 768px), JPEG-compresses it toward ~400KB, base64-encodes it, and stuffs it into the request. Batch of up to 30 images works; Groq caps at three. That image input is what turns the node from a prompt improver into a captioner, which makes it a decent img2img assistant in the same graph.
The inputs that actually matter
The node ships a big parameter list, but you'll live in two or three fields:
prompt- the instruction you send the model ("Describe the image as a detailed English image prompt"). This is the what you want it to do, not the content.Prompt to Improve- an optional existing prompt to rewrite or expand, sent alongside your instruction. This is the field that makes "enhance my last prompt" a one-tap loop.Every run- default on, meaning a fresh API call on every queue. Flip it off and the node caches its result and only re-calls when one of its inputs changes - so you can generate ten images from one prompt without paying for ten prompts.
temperature, max_tokens, and top_p are the standard LLM dials; leave them alone until you see the node's output getting stale or random. The output is a single prompt STRING, which you plug into CLIP Text Encode, a translator, or any text input.
Installing it
It's a small pack with an honest install. Via ComfyUI Manager, search Comfyui_LLM-; or:
cd ComfyUI/custom_nodes
git clone https://github.com/abzaloff/Comfyui_LLM-
Then restart ComfyUI and refresh the browser. Dependencies are just requests, Pillow, and numpy - you almost certainly already have them, and there are zero model downloads. One gotcha: the README's install path says Comfyui_LLM++, but the repo clones as Comfyui_LLM- (trailing dash) and that's the folder the Python module imports from. Don't rename it.
Setup is under Settings → LLM++ → API and image settings: paste your Mistral, Gemini, or Groq key (all stored locally in llm_prompt_config.json in the pack folder - it's gitignored, but don't share that file). For LM Studio: start the server, confirm the base URL, click Refresh LM Studio models on the node, and pick an lmstudio: model.
Common gotchas
- "API key is not set" - the selected provider's key is empty in Settings. Each provider has its own field.
- No LM Studio models in the dropdown - the server isn't running, the base URL is wrong, or you forgot to click Refresh after starting it. The list isn't live.
- LM Studio model rejects your image - you picked a text-only model. Use a vision model or disconnect
image. - Prompt regenerates every run / never regenerates - that's the
Every runtoggle doing exactly what it says. It's the node's most useful trap.
A last honest word: this pack is brand-new (last commit late July 2026) and barely has a community footprint yet, so glance at the code before you trust it with anything - LLM nodes that reach the network are exactly the category that got weaponized once, and reading a fresh pack is a habit worth keeping.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Describe the image | — |
| model | COMBO | mistral: mistral-large-2512 | 9 options: mistral: mistral-large-2512, groq: qwen/qwen3.6-27b, gemini: gemini-3.6-flash, gemini: gemini-3.5-flash, gemini: gemini-3.5-flash-lite, gemini: gemini-3.1-flash-lite, +3 |
| temperature | FLOAT | 0.70–1.5 | — |
| max_tokens | INT | 40961–32768 | — |
| top_p | FLOAT | 1.000–1 | — |
| Prompt to Improve | STRING | — | |
| auto_unload_lmstudio | BOOLEAN | false | — |
| Every run | BOOLEAN | true | — |
| imageopt | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| prompt | STRING | — |