📝 Krea2 BBOX Prompter
Where the color slots get their words
- prompt_ui_data
If Krea2 BBOX Canvas is the whiteboard, this node is the caption writing under each drawing. Krea2 BBOX Prompter is where you type what should actually appear in each colored region - and given how Krea 2 behaves, how you write those captions matters more than where you put the boxes.
Quick context for why this exists: Krea 2 is a natural-language model, the kind you prompt like you'd describe a scene to a person. Its bounding-box understanding is a happy accident - it's zero-shot from the Qwen3-VL text encoder, which was trained on boxes - so it's not as precise as Ideogram 4's native bbox prompting. That's exactly what community testing of this suite found: "it doesn't work as accurately as Ideogram4, but the choice of background, style, and pose can expand your potential." The text you feed it is the difference between "kinda works" and "wait, that's actually positioned right."
How it works
The node gives you five parallel slots - RED, BLUE, YELLOW, GREEN, MAGENTA - matching the five colors you drew on the Canvas. Each slot gets a prompt plus two optional hints. Nothing happens until the Krea2 BBOX Export node merges these with the layout, but this is where the content is authored. There's no LLM here, no auto-expansion, no translation: the Python just gathers your text and repackages it as a structured blob (output prompt_ui_data) for the next node.
The inputs that matter
- scene and background - the two global fields. Scene is the overall image intent ("a professional office portrait composition"), background is the environment ("a bright modern office with soft daylight"). The README's one hard rule: don't leave both empty. Coordinates alone are not enough scene context for Krea2, and this is the #1 cause of "my layout did nothing" complaints.
<color>_prompt- one per slot. Write a short description, not a label. "a young adult woman in a business suit, natural seated pose, upper-body view" beats "woman." Short labels get interpreted as visible text burned into the image, which is almost never what you want.<color>_type-obj(object/person, the default) ortext. Usetextonly when the image should contain actual writing. For text, the preferred format isvisible text | appearance description, e.g.SALE | large red text with a white outline. The part before the|becomes the rendered words; the part after becomes the visual style.<color>_framingand<color>_angle- optional composition hints per slot, defaulting toAuto. Framing runs the gamut fromHeadshotandBust-upthroughFull bodytoMacro detail; angle coversFront view,Side view,Low angle,POVand more. If you set them, keep them consistent within a slot - the README warns that conflicting framing or angle hints weaken the result.
The rest - the five prompt_ui_data-adjacent hidden fields and the internal prompt_ui_data widget - are serialized JSON the front-end writes for you. Leave them alone.
How to install it
Same story as every node in this pack: it's pure Python with zero dependencies, so installation is just cloning once for the whole suite.
cd ComfyUI/custom_nodes
git clone https://github.com/ukr8b3g-cmyk/Krea2-BBOX-Prompter.git Krea2-BBOX-Prompter-Suite
Restart ComfyUI, hard-refresh with Ctrl + F5 if the UI looks stale. ComfyUI Manager users can search the pack title "Krea2 BBOX Prompter Suite." No model files, no API keys, no downloads.
Where people get burned
The two failure modes that actually send people to Reddit: leaving scene/background empty, and writing single-word prompts. Both are fixable in the node, not the model. The other thing worth knowing - the suite is bilingual (English/Japanese), it does not translate Japanese or expand short prompts for you, so if you're feeding it Japanese text expecting an English Krea2 prompt, that's on you. And remember the pipeline: Prompter's prompt_ui_data output goes into Krea2 BBOX Export, which is what finally produces the JSON string you can actually encode.
Inputs (23)
| Name | Type | Default | Description |
|---|---|---|---|
| scene | STRING | — | |
| background | STRING | — | |
| red_prompt | STRING | — | |
| blue_prompt | STRING | — | |
| yellow_prompt | STRING | — | |
| green_prompt | STRING | — | |
| magenta_prompt | STRING | — | |
| red_type | COMBO | obj | 2 options: obj, text |
| blue_type | COMBO | obj | 2 options: obj, text |
| yellow_type | COMBO | obj | 2 options: obj, text |
| green_type | COMBO | obj | 2 options: obj, text |
| magenta_type | COMBO | obj | 2 options: obj, text |
| prompt_ui_data | STRING | — | |
| red_framing | COMBO | Auto | 11 options: Auto, Cowboy shot, Full body, Upper body, Bust-up, Headshot, +5 |
| blue_framing | COMBO | Auto | 11 options: Auto, Cowboy shot, Full body, Upper body, Bust-up, Headshot, +5 |
| yellow_framing | COMBO | Auto | 11 options: Auto, Cowboy shot, Full body, Upper body, Bust-up, Headshot, +5 |
| green_framing | COMBO | Auto | 11 options: Auto, Cowboy shot, Full body, Upper body, Bust-up, Headshot, +5 |
| magenta_framing | COMBO | Auto | 11 options: Auto, Cowboy shot, Full body, Upper body, Bust-up, Headshot, +5 |
| red_angle | COMBO | Auto | 24 options: Auto, Front view, 3/4 right, 3/4 left, Eye level, POV, +18 |
| blue_angle | COMBO | Auto | 24 options: Auto, Front view, 3/4 right, 3/4 left, Eye level, POV, +18 |
| yellow_angle | COMBO | Auto | 24 options: Auto, Front view, 3/4 right, 3/4 left, Eye level, POV, +18 |
| green_angle | COMBO | Auto | 24 options: Auto, Front view, 3/4 right, 3/4 left, Eye level, POV, +18 |
| magenta_angle | COMBO | Auto | 24 options: Auto, Front view, 3/4 right, 3/4 left, Eye level, POV, +18 |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| prompt_ui_data | KREA2_ELEMENT_PROMPT_DATA | — |