Creative Art Prompt Generator
Turn a bare caption into a prompt somebody would actually use
- model
- STRING
Here's the thing about image captions: they're usually terrible prompts. A VLM will tell you "a woman in a red dress standing next to a car at dusk," and then you paste that into a KSampler and get something flat. This node exists to close that gap. You feed it the raw description - a caption, a keyword list, whatever you scraped off your input image - and it returns one polished, production-ready art prompt you can actually run.
What it is
CreativeArtPromptGenerator is part of the prompt-generation family in gokayfem's VLM Nodes pack. It's an LLM node, not a vision node: it doesn't look at any image itself. Instead it takes the prompt input (a STRING) and asks the language model to develop that raw idea into a "coherent visual concept." The output is a single STRING that reads like a prompt - subject, style, technique, the works - instead of a rambling description.
The inputs that matter
Only three, and you'll touch all of them:
- prompt - your raw material. A caption from an LLaVa sampler, keywords from the pack's keyword extractor, or just text you typed. The more honest this is, the better the result.
- model - the GGUF LLM (or LLaVa model) you've loaded through the pack's model loader. This is the "CUSTOM" input; there's no point trying to run it without one.
- temperature - default 0.15. This is your creativity dial. Low keeps output tight and consistent with your input; crank it up and the model free-styles more. The README's advice for the whole prompt-gen family holds here: higher temperature, more creative, less predictable.
How it works
Under the hood it runs a structured chat - the pack's same "return only the requested JSON object" trick you'll see across its prompt nodes. The model answers with a JSON spec, and the node picks the best creative description out of it and hands it back as clean text. If the structured output fails, it falls back to assembling the theme, techniques, and style into a text prompt anyway, so you basically always get a usable string out. That string plugs straight into a CLIP Text Encode or a text display node.
Install and gotchas
This is a pack-level install: ComfyUI Manager, search for "VLM Nodes" (or the repo name), or clone it manually:
cd ComfyUI/custom_nodes
git clone https://github.com/gokayfem/ComfyUI_VLM_nodes
Then restart ComfyUI. You'll need Python 3.9+, and any GGUF model you point at lives in models/LLavacheckpoints. For LLM-only work you don't need a vision projector, but the moment you use a LLaVa model as your model source, you need its matching mmproj clip file too - every model's projector is different, and mismatching them is the classic silent-failure mode.
Where people get burned: the model stack runs on llama-cpp-python, and on Windows the wheels are the usual pain point - "invalid wheel filename" errors and missing llama.dll import failures are the two big ones people hit in the wild. If the node errors at load or your model runs on CPU when it should be on GPU, reinstall llama-cpp-python with the right build args for your backend (CUDA, Metal, ROCm) per the abetlen/llama-cpp-python docs; the README links it for exactly this reason.
One more tip: if the output ever shows up as raw JSON text, pipe it through the pack's JsonToText node to render it cleanly.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | — | |
| model | CUSTOM | — | |
| temperature | FLOAT | 0.150–2 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| STRING | STRING | — |