toobusy Ideogram Layout Builder
Draw boxes on a canvas, get an Ideogram-ready layout — no JSON gymnastics
- image
- ideogram_json
- width
- height
- text_json
Ideogram 4's local weights are the odd one out among 2026 image models: they basically refuse to do anything unless you prompt them with a specific JSON schema - type, bbox, desc, per-element color_palette, the works. Hand-writing that by hand is misery. This node is a little editor canvas that lets you draw boxes on a layout, type what goes in each, and exports the exact ideogram_json Ideogram 4 expects. It's the "plan the poster before you generate the poster" step in the toobusy Ideogram flow, and once you've used it you won't go back to pasting JSON.
How it works
The Layout Builder isn't calling an API - there's no key, no network. It assembles the structured JSON locally and, like every node in this pack, it's opinionated about the format. Ideogram wants a fixed key order per element type: an object is type → bbox → desc, a text element is type → bbox → text → desc, with an optional color_palette. The node enforces that order and sorts elements top-to-bottom then left-to-right, which is the reading order Ideogram recommends. The canvas is the front-end; the ideogram_json output is the actual product.
The one setting worth understanding before anything else is text_overlay_mode. Ideogram 4 is the best at rendering English text, and still garbles Korean. Flip this on and the node strips text elements out of the generation JSON entirely and routes them to the text_json output instead - you generate art-only, then overlay crisp real text (the toobusy Layout Text Overlay node is built for exactly that). Off is fine for English; on is the Korean cheat code.
The inputs that matter
Most of the required fields are plain-English descriptions that ship with sane defaults: high_level_description, aesthetics, lighting, photo, medium, and background become the prose parts of the JSON. global_palette (default #111111, #FFFFFF, #D8C7A3) colors the whole layout unless you untick include_global_palette. strict_text and reinforce_text tighten how text elements are phrased - keep them on unless Ideogram is mangling a phrase.
The fiddly one is elements_json, which is where your drawn boxes live as a JSON array - you normally never touch it directly; the canvas writes it. width/height cap at 2048.
Two optional inputs make the flow nice. imported_json takes a draft from elsewhere (the toobusy Ideogram Prompt Polish node, or ComfyUI's Image → Ideogram Layout) - run upstream, then hit the "⟳ Pull from input" button on the node to load it onto the canvas. image drops an analyzed photo under the canvas as a backdrop, so your boxes line up on the real image.
Outputs and where they go
ideogram_json- feed this straight intotoobusy Ideogram4 T2I's prompt input.width/height- wire into the T2I node's width/height so your canvas resolution is what actually renders.text_json- only populated in overlay mode; goes to Layout Text Overlay.
Install and gotchas
Install the pack once - ComfyUI Manager (search "toobusy") or:
cd ComfyUI/custom_nodes
git clone https://github.com/nicekriss/toobusy.git toobusy
Restart ComfyUI and hard-refresh the browser so the canvas JS loads.
Two things bite people. First, Ideogram 4 itself is a non-commercial model with a trained-in refusal image, and the T2I node will fail at runtime if your ComfyUI build doesn't have the local Ideogram4 nodes - this node only builds the prompt. Second, don't fight the canvas; if you want a precise poster layout, the box-drawing here is genuinely faster than any text prompt, and it's the whole reason the node exists.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| high_level_description | STRING | A clean editorial poster with deliberate layout. | — |
| aesthetics | STRING | clean commercial design, sharp focus, balanced negative space | — |
| lighting | STRING | soft studio lighting with gentle shadows | — |
| photo | STRING | professional product photography, 85mm lens | — |
| medium | STRING | photography | — |
| global_palette | STRING | #111111, #FFFFFF, #D8C7A3 | — |
| include_global_palette | BOOLEAN | true | — |
| strict_text | BOOLEAN | true | — |
| reinforce_text | BOOLEAN | true | — |
| background | STRING | minimal studio background with subtle depth and a clean surface | — |
| elements_json | STRING | [] | — |
| width | INT | 2048256–2048 | — |
| height | INT | 2048256–2048 | — |
| text_overlay_mode | BOOLEAN | false | On: drop text elements from ideogram_json (Ideogram generates art only) and route them to the text_json output for Layout Text Overlay — crisp Korean instead of garbled rendering. Off: text stays in the generated image (fine for English). |
| imported_jsonopt | STRING | Connect an Ideogram JSON draft (e.g. from Image → Ideogram Layout). Run upstream, then press '⟳ Pull from input' on the node to load it onto the canvas. | |
| imageopt | IMAGE | Optional: the analyzed image. Pulling lays it under the canvas as the reference backdrop so boxes land on the real image. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| ideogram_json | STRING | — |
| width | INT | — |
| height | INT | — |
| text_json | STRING | — |