VELVET VICE KREA — Vision Prompt Director v2
The prompt director that turns a rough idea into a Krea render
- mode_override
- final_prompt
- word_count
- character_count
- profile
- status
- prompt_package
- validation
"VELVET VICE KREA - Vision Prompt Director v2" is the flagship node of this pack, and it earns the title. It's the thing that takes your rough, half-formed idea - a few keywords, a sentence in whatever language, a badly-typed thought - and turns it into a clean, production-ready positive prompt for Krea 2. It does this two ways: MANUAL, which passes your text through untouched, and ASSISTED, which makes exactly one call to a local LLM running in Ollama to compose the prompt for you. The difference from a generic "prompt enhancer" is the discipline around that LLM call - one call, tightly scoped, with the result validated before it ever reaches the sampler.
Why this pattern makes sense for Krea
Krea 2 is an LLM-encoded model - its text encoder is a Qwen3-VL variant - so it natively reads natural-language instructions, not tag soup. Having a second, uncensored LLM write those instructions is a translation between two models that speak the same language, and it's the pattern the community converged on for local prompting: an 8–9B abliterated Qwen running through Ollama is free, offline, and unconstrained per call. No API key, no subscription, no cloud. The director's default model is a user-published Qwen3.5 9B (fredrezones55/Qwen3.5-Uncensored-HauhauCS-Aggressive:9b), which tells you exactly what kind of content this workflow is comfortable not refusing.
How ASSISTED mode actually works
The moment you hit ASSISTED, the node does something most prompt nodes skip: it unloads all currently-loaded ComfyUI models, runs a garbage collection, and soft-empties the cache. That's the VRAM handoff - it makes room for the Qwen model before it spawns the Ollama call, because the diffusion model and the LLM are about to time-share the card.
Then it makes exactly one POST /api/generate call to Ollama. The system prompt is chosen by your profile (CREATE, NATIVE EDIT, or CLASSIC IMG2IMG) and layered with the director's rules: the source text is authoritative, hard constraints (subject counts, poses, colors, spatial relationships) must never be changed, and output must be strict JSON with a final_prompt, intent summary, and constraint lists. The length target is adaptive - it scales with how detailed your source idea is and how much director_freedom you grant (STRICT makes the smallest useful intervention, CREATIVE adds stronger art direction, BALANCED sits between). After the response, the node parses the JSON, falls back to cleaned text if the model didn't cooperate, and runs a validation pass that flags short, overlong, markdown-laced, or non-JSON results.
The README's sharpest guarantee is this: MANUAL mode "never creates or contacts an Ollama client," and the source backs it up - the MANUAL branch builds the prompt package with release_required: false and zero Ollama calls. If you want the director as a glorified text box, it costs you nothing extra.
Inputs that matter
You'll set a handful and ignore the rest:
- profile - CREATE / NATIVE EDIT / CLASSIC IMG2IMG. Picks the system prompt.
- prompt_mode - MANUAL or ASSISTED.
- manual_prompt / short_idea - your input text. Which one matters depends on the mode; both are lazy so only the one you're using is pulled.
- director_freedom - STRICT / BALANCED / CREATIVE.
- ollama_url / ollama_model - where Ollama lives and which model to call.
The rest (temperature 0.22, top_p 0.85, num_ctx 4096, num_predict 600, seed, timeout) are tucked under advanced with sensible defaults. unload_after_generation (on by default) is worth knowing: it tells Ollama to release the Qwen model from VRAM the moment generation finishes, which is what lets the render start without an OOM.
Outputs
Seven of them: final_prompt (the string that feeds the sampler), word_count and character_count, profile, a human-readable status that tells you whether Ollama was contacted and the word target, prompt_package - the structured bundle that the Ollama Release Barrier consumes downstream - and validation ("VALID" or "CHECK · ..."). The node is marked as an output node, so its UI panel shows the produced prompt and stats on the queue.
Installing and troubleshooting
You need two things installed: the pack and Ollama.
cd ComfyUI/custom_nodes
git clone https://github.com/Velvet-Vice/velvet-vice-krea
# and on your machine, once:
ollama pull fredrezones55/Qwen3.5-Uncensored-HauhauCS-Aggressive:9b
Restart ComfyUI (or install via ComfyUI Manager, search "VELVET VICE - KREA"). The pack itself has zero pip dependencies.
Failures cluster into three shapes. Ollama unreachable - the classic, when ollama_url points at nothing; make sure the Ollama service is running. Model not found - you haven't pulled the model named in ollama_model, or it's misspelled. And empty short idea - ASSISTED requires a short_idea; the lazy inputs won't save you from typing nothing. If validation comes back "CHECK · JSON fallback," the local model emitted prose instead of JSON and the node salvaged it - worth looking at, rarely worth panicking about. Swap in a better 8–9B model via ollama_model and it usually tightens up.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| profile | COMBO | 3 options: CREATE, NATIVE EDIT, CLASSIC IMG2IMG | |
| prompt_mode | COMBO | 2 options: MANUAL, ASSISTED | |
| manual_prompt | STRING | — | |
| short_idea | STRING | — | |
| ollama_url | STRING | http://127.0.0.1:11434 | — |
| ollama_model | STRING | fredrezones55/Qwen3.5-Uncensored-HauhauCS-Aggressive:9b | — |
| unload_after_generation | BOOLEAN | true | — |
| num_ctx | INT | 4096512–131072 | — |
| num_predict | INT | 60032–4096 | — |
| temperature | FLOAT | 0.220–2 | — |
| repeat_penalty | FLOAT | 1.100–2 | — |
| top_p | FLOAT | 0.850–1 | — |
| ollama_seed | INT | 7284610–2147483647 | — |
| timeout_seconds | INT | 3005–1800 | — |
| director_freedom | COMBO | BALANCED | 3 options: STRICT, BALANCED, CREATIVE |
| mode_overrideopt | VELVET_VICE_KREA_MODE | — |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| final_prompt | STRING | — |
| word_count | INT | — |
| character_count | INT | — |
| profile | STRING | — |
| status | STRING | — |
| prompt_package | VELVET_VICE_KREA_PROMPT_PACKAGE | — |
| validation | STRING | — |