KoO.IdeogramBoxy (Legacy)
The \"Legacy\" Ideogram Node Is Literally the Same Node With an Old Name
- layout_json
- final_json_prompt
- preview_image_with_boxes
- width
- height
If you opened somebody's Ideogram workflow and it dropped in KoO.IdeogramBoxy (Legacy), nothing is wrong. It isn't a deprecated node you need to swap out, and it isn't a second implementation that fell behind. In the pack's own source it is one line:
IdeogramLayoutComposer = KoOIdeogramBoxy
That's the whole file section. IdeogramLayoutComposer is an alias for the same Python class registered under a second node ID, and both IDs are registered to the same class with different display names - KoO.IdeogramBoxy for the new one, KoO.IdeogramBoxy (Legacy) for this one. Same inputs, same outputs, same frontend canvas, same JSON. The reason it exists is boring and good: ComfyUI resolves saved workflows by node ID, so anyone who built a layout before the rename would otherwise get a red box on reload.
Why you'd reach for it anyway
Ideogram 4 is trained on structured JSON captions, not prose, so a natural-language prompt measurably underperforms on it. The schema is the whole interface: a high_level_description, a style_description, and a compositional_deconstruction holding elements, each with a type, a pixel bbox and a desc. Writing that by hand in a text box is possible and miserable, which is why every Ideogram workflow you'll find has a canvas node in front of the encoder. This node is that canvas: draw boxes, label them, get the JSON.
If you're new to the model itself, the short version from our Ideogram 4 panel is that the JSON isn't a shortcut, it's the documented conditioning path - and it's also the path that sidesteps the refusal image baked into the weights. The node doesn't call any API and needs no key; it formats text.
What it actually outputs
One input, layout_json - a serialized layout you're meant to edit with the canvas widget, not by typing. Under it the tooltip says as much: "Edit it with the canvas widget."
Four outputs, and they're the interesting part:
final_json_prompt- the Ideogram-style structured JSON string. Wire this into your prompt/CLIP text encode. It's pretty-printed withindent=2.preview_image_with_boxes- an IMAGE of the rendered canvas with guides and the visible boxes drawn on it. Handy as a quick sanity check; it is not the generation and it is not meant to be saved.widthandheight- the resolved pixel dimensions of the layout, as INTs. Feed them into your empty-latent node so the boxes' pixel coordinates and the image you actually render agree.
That last pair is where people get burned. The bboxes are converted from normalized canvas coordinates to real pixels using the layout's width and height, so if you plan a 1536×864 layout and then generate at 1024×1024, your boxes still describe the 1536×864 grid and the composition drifts. Wire the INTs through.
Boxes of type background don't become elements - they get concatenated into compositional_deconstruction.background. Everything else maps through a type table (text stays text, logo/product/object/foreground/atmosphere all collapse to obj). Composition presets ship with the node - Golden Ratio, Rule of Thirds, Archviz Hero, Cinematic Close-Up, Luxury Product, Fashion Editorial, Character Sheet, Movie Poster, YouTube Thumbnail, Product Ad - and each carries "prompt DNA" text that fills the style fields if you leave them blank.
Installing it
Standard custom-node install, no models, no downloads:
cd ComfyUI/custom_nodes
git clone https://github.com/kevintronchin-blip/koo-nodes-pack
Restart ComfyUI and hard-refresh the browser. The pack's declared dependencies are torch, numpy, Pillow, aiohttp - all of which ComfyUI already ships, so requirements.txt normally has nothing to do. Registry/Manager listing is gated on moderation approval, so if Manager search comes up empty that's why; the README's own route is the source ZIP, extracted as ComfyUI/custom_nodes/koo-nodes-pack with __init__.py directly inside, not one folder deeper.
Troubleshooting
The canvas doesn't draw. This pack's custom canvas widgets need the Legacy / LiteGraph renderer. Under the Nodes 2.0 frontend the node registers fine but the drawing and mouse hooks don't run - you get an empty box. Switch renderer, don't reinstall.
Red node on load. Check for a second, older KoO folder in custom_nodes. Several of these node IDs used to ship as separate repos (ComfyUI-KoO-IdeogramBoxy among them), and two copies registering the same ID is the documented failure.
"Layout JSON is invalid." You edited the widget by hand and broke the JSON. VALIDATE_INPUTS parses it before the run, so you get a clean error instead of a traceback mid-queue - but the fix is to re-open the canvas, not to patch the string.
Both this node and its non-legacy twin produce identical output. Pick whichever your workflow already has and stop thinking about it.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| layout_json | IDEOGRAM_LAYOUT | Serialized visual layout. Edit it with the canvas widget. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| final_json_prompt | STRING | Ideogram-style structured JSON prompt. |
| preview_image_with_boxes | IMAGE | Rendered canvas preview with guides and visible boxes. |
| width | INT | Resolved output width. |
| height | INT | Resolved output height. |