Video Prompt Expander
One idea in, a shootable video prompt out
- positive_prompt_1
- positive_prompt_2
- positive_prompt_3
- negative_prompt
- breakdown
- status
You've got an idea - "a cat playing piano in a cozy room" - and you're staring at Wan 2.2's prompt box knowing that five words will come back as a static, stiff clip. This node fixes that specific gap. Feed it the short idea, and it hands back a proper shot-by-shot video prompt: lighting, camera movement, atmosphere, the whole cinematic vocabulary the video models were trained on. No API key, no cloud, no subscription. It just needs a local LLM running on your machine.
It's the simplest node in Eric's Prompt Enhancers pack (one of five that all live under Add Node → Eric Prompt Enhancers), and it's the one I'd reach for when I want a decent Wan or LTX prompt without thinking. The catch, as always with local-LLM helpers: you have to have an LLM running first.
How it works
The node has no model of its own. It takes your basic_prompt, wraps it in a system prompt built from your chosen style preset and expansion tier, and POSTs it to an OpenAI-compatible chat endpoint. LM Studio's http://localhost:1234/v1 is the default; Ollama works too. Whatever 7-8B model you have loaded does the actual writing.
Two details are worth knowing. First, expansion_tier (auto/basic/enhanced/advanced/cinematic) is how long you want the result - roughly 150 words up to a 600-1000 word director's note. Second, the node understands the pack's emphasis and alternation syntax: (keyword:1.5) boosts weight and {red|blue|green} makes the LLM pick a random option, which is a cheap way to get variety across a batch.
The inputs that matter
Most of the fields you can leave alone. The ones that actually do something:
- basic_prompt - your raw idea. One sentence is fine; that's the whole point.
- preset - cinematic, surreal, action, stylized, noir, or random. This is your style lever; it changes the system prompt the LLM works from.
- num_variations - 1 to 3. Bump it to 3 and pick the best; the node runs the LLM once per variation.
- temperature - 0.7 default. Lower for consistency, nudge toward 1.0 when variations start looking too similar.
- llm_backend / api_endpoint - leave
lm_studioand the default URL unless you run Ollama (then it'shttp://localhost:11434).
The outputs
positive_prompt_1, positive_prompt_2, positive_prompt_3 are the money outputs - wire one into your video model's positive conditioning. negative_prompt is auto-generated and usually worth keeping on Wan. breakdown tells you what tier and preset were actually applied (useful because auto picks for you), and status reports success or the file path if you enable save_to_file.
One honest gotcha: there's a mode dropdown offering image-to-video, but this node has no image input - so that mode just frames the prompt as if a starting frame exists. If you actually want vision analysis of a reference image, use the dedicated Image-to-Video Prompt Expander or the Advanced node's reference_image socket.
Install
Shared with the whole pack. In ComfyUI Manager, search "Local LLM Prompt Enhancer" (the pack title is Eric's Prompt Enhancers for ComfyUI) and hit install. Or clone it yourself:
cd ComfyUI/custom_nodes/
git clone https://github.com/EricRollei/Local_LLM_Prompt_Enhancer.git video_prompter
cd video_prompter
pip install -r requirements.txt
Restart ComfyUI. The requirements file is tiny - just requests - because ComfyUI already ships torch, numpy and Pillow. What the README doesn't always make obvious: you still need an LLM backend. Install LM Studio, load a model (Llama 3 8B class or similar), start the server, done. The only heavy dependency is the optional Qwen3-VL vision backend (transformers, accelerate, bitsandbytes), and you don't need that for this node.
Troubleshooting
- "LLM connection failed" - the endpoint doesn't match your running server. Test
http://localhost:1234/v1in a browser; if it errors, LM Studio's server isn't started. - Empty output - check temperature isn't above ~1.5, and confirm a model is actually loaded in the backend.
- Everything looks samey across variations - raise temperature or switch the preset to
random.
This is a low-stakes utility, and it's at its best when you pair it with the pack's Advanced node once you outgrow it - that one gives you actual per-category control over the shot.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| basic_prompt | STRING | A cat playing piano in a cozy room | — |
| preset | COMBO | cinematic | 7 options: custom, cinematic, surreal, action, stylized, noir, +1 |
| expansion_tier | COMBO | auto | 5 options: auto, basic, enhanced, advanced, cinematic |
| mode | COMBO | text-to-video | 2 options: text-to-video, image-to-video |
| llm_backend | COMBO | lm_studio | lm_studio: Uses currently loaded model in LM Studio ollama: Uses currently loaded model in Ollama qwen3_vl: Auto-detects local Qwen3-VL model (no API server needed) |
| api_endpoint | STRING | http://localhost:1234/v1 | lm_studio/ollama: API endpoint URL qwen3_vl: Leave default, or specify custom model path like 'A:\path\to\model' |
| temperature | FLOAT | 0.70.1–2 | — |
| positive_keywords | STRING | — | |
| negative_keywords | STRING | — | |
| num_variations | INT | 11–3 | — |
| save_to_file | BOOLEAN | false | — |
| filename_base | STRING | video_prompt | — |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| positive_prompt_1 | STRING | — |
| positive_prompt_2 | STRING | — |
| positive_prompt_3 | STRING | — |
| negative_prompt | STRING | — |
| breakdown | STRING | — |
| status | STRING | — |