Nodes/Krea2 Harness/Krea2 Moodboard Harness
ComfyUI Node

Krea2 Moodboard Harness

The Last Stop Before Your Positive Conditioning

By ANe5s·Created 30 days ago·Updated 2 days ago· 6
Krea2 Moodboard Harness
    • Clean Prompt
    ◄prompt—►
    ◄fallback_prompt—►
    ◄original_main_prompt►
    ◄metadata_json►
    ◄style_only_positive►

    This is the end of the pipeline. Stage 2 has written a prompt with your moodboard baked into it, and now that text needs one final pass before it becomes conditioning. Krea2 Moodboard Harness does two jobs: it cleans and sanity-checks the Stage 2 result, and it optionally appends your moodboard's style-only block as a tidy labelled sentence.

    Get this node right and your moodboard shows up. Get it wrong and you'll get perfectly nice images with none of the style you picked.

    How the cleaning differs from Stage 1

    It's the same sanitizer core as Krea2 Prompt Harness, running under a different fixed profile - and the differences are the whole reason both nodes exist.

    Stage 2 turns on the guards that Stage 1 leaves off. Subject count is preserved. Unrequested focus blur is stripped. Profile facial detail is protected. Entity and medium guards stay on, unrequested hand actions get stripped, and source optical anchors are kept. Read that as: Stage 1 is allowed to invent focus and depth language, Stage 2 is not allowed to let it through to the image model. The pack's own README calls this out - "source focus and conditional profile-face-detail protections are fixed on" here, and disabled one stage earlier.

    The fallback is also different, and smarter. On Stage 1 the fallback is your raw prompt, because there's nothing else. Here the fallback is the Stage 1 Clean Prompt - a Stage 2 failure costs you the moodboard, not the expansion. Refusals, protocol transcripts and obviously-broken returns drop back to the enhanced prompt and carry on.

    The optional style append

    If you wire something into style_only_positive, the node parses it into labelled sections - Palette:, Lighting:, Contrast:, Atmosphere:, Medium and texture:, Era or movement:, Optical treatment: - normalises each into Label: (body). with parentheses around the tonal ones, and appends the whole block after a blank line. It also repairs one known delimiter bug where an inner phrase like "No naturalistic. lighting:" would otherwise be parsed as a second Lighting header.

    The append happens after sanitization, which is a detail worth understanding rather than a bug: the style block is not run through the entity guards, because it's supposed to be style prose, not scene description. That's exactly why the upstream Krea2 Moodboard Adapter exists - it extracts the style-only portion and drops subject matter. Hand the node a raw paragraph of card text and you can push nouns into your conditioning.

    Inputs and outputs

    • prompt (required) - the Stage 2 TextGenerate result.
    • fallback_prompt - the Stage 1 Clean Prompt.
    • original_main_prompt - your raw prompt, used by the focus and profile guards.
    • metadata_json - moodboard metadata under legacy style_profile semantics. Not the compiler's channels.
    • style_only_positive - the adapter's second output.
    • Clean Prompt - wire it to your positive CLIPTextEncode. That's it.

    Where people get burned

    This is prompt-side style transfer, not IP-Adapter. Everything here reaches the model as text through Qwen3-VL. The hosted Krea moodboard module is a different animal and Krea isn't releasing it, so don't expect pixel-level reference transfer; expect a strongly-worded style sentence. In practice that's a lot - Krea 2 reads natural language well and the Stage 2 prompt is engineered to make the palette visibly decisive - but set expectations at "persuasive description," not "style injection."

    The browser's negative output does not belong here. The pack doesn't route it at all. Connect it straight from the moodboard browser to your negative conditioning node.

    Wrong metadata socket, again. metadata_json here reads the raw prompt_guidance field (including nested qwen_guidance and style_profile shapes) to repair the Lighting body. The compiler's style_channels JSON is a different interface feeding a different consumer. Both files say so; the cost of ignoring it is a subtler lighting line and a couple of hours.

    Empty style output is your tell. If the final prompt looks like your prompt with no moodboard sentence, check whether style_only_positive actually carries text. An empty string is legal, and the node just returns the sanitized prompt - no warning.

    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 browser refresh won't reload Python nodes. Everything appears under Nodes → ANe5s Nodes → Krea2. No additional Python dependencies; Python 3.10+ and ComfyUI 0.3.0+.

    The moodboard browser itself comes from a separate repo (Andro-Meta/ComfyUI-Krea-Moodboards) and this pack ships neither the browser nor any cards. Neither does it ship model weights: the example workflows need a Krea 2 Turbo checkpoint, qwen3vl_4b_bf16.safetensors and the Qwen-Image VAE, and the JSONs in examples/ each carry a MarkdownNote listing the files and their directories. Load those before you debug anything else.

    CategoryANe5s Nodes/Krea2

    Inputs (5)

    NameTypeDefaultDescription
    promptSTRINGStage 2 V124-RB generated prompt.
    fallback_promptoptSTRINGFallback prompt used when Stage 2 returns a protocol or refusal transcript.
    original_main_promptoptSTRINGOriginal main prompt used by the focus and profile guards.
    metadata_jsonoptSTRINGMoodboard metadata passed through with the legacy style-profile semantics.
    style_only_positiveoptSTRINGOptional style-only moodboard positive appended after final prompt sanitization.

    Outputs (1)

    NameTypeDescription
    Clean PromptSTRINGSanitized final Stage 2 prompt.