Krea2 Prompt–Moodboard Compiler
Getting a Style Card Into Your Conditioning
- Merged Prompt
The hosted Krea product has moodboards: pick a style card, get that look. The open weights don't - Krea's head of research said plainly in the release AMA that the moodboard and style-reference module weren't being open-sourced, "but when we ship future models we might consider releasing the older ones." So the community built one. ComfyUI-Krea-Moodboards gives you a Krea Moodboard Visual Browser node that hands out a title, a UUID, a metadata JSON and a positive string. What it doesn't give you is any idea how to turn those strings into something a diffusion model responds to.
That's this node. It is Stage 2, and it's where your moodboard actually enters the prompt.
What it builds
The output is a single structured document, not prose you wrote. It has three labelled blocks stacked on top of the embedded "Stage 2 V124-RB" system prompt (Base64 in the source, same packaging trick as Stage 1):
[ORIGINAL_MAIN_PROMPT]
your raw prompt, verbatim
[ENHANCED_MAIN_PROMPT]
the cleaned Stage 1 expansion
[MOODBOARD_STYLE_PROFILE_JSON]
{"style_channels": {...}}
The system prompt's rules are the interesting part, because they're what keeps a moodboard from hijacking your picture. The original main prompt is declared the only authority for concrete scene facts. The Stage 1 expansion is explicitly advisory - it can contribute a detail only where it's compatible with an explicit source fact and doesn't add a new noun, entity, weather, prop, camera choice or optical effect. Style-channel values "describe treatment, not things to add": world words like sky, glass, city, mountain or ocean get converted into colour, tone, surface and light behaviour on elements that already exist. And the output should lead with the original prompt, then append one cohesive style sentence of no more than four treatment clauses.
What happens to the metadata
Before anything reaches the text, an internal style adapter reshapes your metadata JSON into style_channels - palette, lighting, contrast, atmosphere, texture_medium, optics and so on - pulling from the card's style_axes, keywords and prompt_guidance. Its own description is refreshingly blunt: it "removes titles, examples, composition, and scene prose."
Composition is the one to notice. It is dropped, except for a short list of recognised optical words - fisheye, wide-angle, refraction, halation, panning, long exposure, barrel distortion - which get rewritten as localised effects on geometry that's already there. A style card cannot reshuffle your camera angle. Your composition stays yours.
Inputs and outputs
metadata_json- the moodboard data. All three inputs are forced connections, so nothing here is typed.main_prompt- your original prompt, the "source ledger."clean_prompt- the Stage 1 Clean Prompt from Krea2 Prompt Harness.- Merged Prompt - the whole package. Into a core TextGenerate node for Stage 2.
Where people get burned
Feed it the adapter's JSON, not the browser's. Use Krea2 Moodboard Adapter in between. The baseline browser doesn't carry the prompt_guidance field this pipeline expects; the adapter reconstructs it from the positive string, and the Stage 2 harness node's lighting repair reads that field from metadata_json. Wire the browser's raw output straight in and you get a thinner style profile and a slightly mangled lighting line.
Bad JSON is silent, not loud. If metadata_json isn't parseable, or parses to something that isn't a dict, the adapter yields no channels. The compiler still emits a perfectly valid prompt - just one with an empty style block. So the symptom of a wiring mistake is a normal-looking image that ignores your moodboard entirely. If the style isn't landing, print the metadata first.
Don't hand it the compiler's own channel JSON. The structured channels are produced inside this node for the language model. metadata_json on the downstream Krea2 Moodboard Harness follows different, legacy style_profile semantics, and the README is explicit that these are separate interfaces. Chain them wrong and you'll spend an evening wondering why Lighting matters on one side and not the other.
Installing it
ComfyUI Manager, search Krea2 Harness. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/ANe5s/ComfyUI-Krea2-Harness.git
Fully restart ComfyUI; the nodes show up under Nodes → ANe5s Nodes → Krea2. No extra Python dependencies, Python 3.10+, ComfyUI 0.3.0+.
The moodboard browser is a separate pack and this repo bundles none of it - install Andro-Meta/ComfyUI-Krea-Moodboards or the example workflows will show a missing node type. You'll also need the Krea 2 Turbo checkpoint, the Qwen3-VL text encoder and the Qwen-Image VAE for the graph around it; the example JSONs in the repo's examples/ folder carry the download links and target directories in a MarkdownNote. If you have no cards showing in the browser, that's the browser pack's problem, not this node's - it reads strings and nothing else.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| metadata_json | STRING | {} | Krea moodboard metadata JSON used to construct the style channels. |
| main_prompt | STRING | Original main prompt retained as the source ledger. | |
| clean_prompt | STRING | Stage 1 cleaned prompt used as the enhanced source. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| Merged Prompt | STRING | Complete Stage 2 V124-RB prompt sent to the text-generation node. |