Ideogram 4 Prompt Builder Pro (based on the KJ node)
A friendlier Ideogram 4 prompt builder
- prompt
- preview
- width
- height
- guid
The name is a lie in the best way: this node doesn't call any API and needs no key. Ideogram 4 - the open-weights model, the file on your disk - is trained on structured JSON captions, and plain prose prompting both underperforms badly and is exactly what trips the refusal image the weights shipped with. The community's answer within a day was Kijai's prompt builder in KJNodes: a canvas where you draw boxes, each box becomes a region in the JSON, and suddenly you have regional control no other open model offers. This pack is that node, rebuilt with workflow-quality-of-life on top. Drop-in replacement, same output format, same wireup.
How it works
You get a little canvas. You draw boxes on it, type a description into each, and mark some as text elements with actual strings to render. Everything you set - the boxes' geometry, per-box colors and fonts, the scene background, the style - gets serialized into the compositional_deconstruction caption that Ideogram 4 expects. The node also renders a preview image of your box layout so you can eyeball composition without generating a thing. That's the whole loop: draw, hit run, wire the JSON into the sampler.
The inputs that matter
Most of the fields are set by the editor, not by you. The few you actually touch:
- background - the scene's background description. Required. This is what fills the caption's
backgroundfield. - width / height - canvas aspect, 64 to 16384. Edits don't apply until you click Update Size, and
scale_modedecides whether your regions stretch, anchor, or rescale from their bounding box when you do. Default isstretch; for existing layouts pick one of the anchor modes or you'll squish everything. - high_level_description - optional one-line overview of the whole image; blank omits it.
- style - a dynamic combo with
none,photo, andart_style, each carryingaesthetics,lighting, andmediumdescriptors underneath. Sets the caption'sstyle_description.
The serialized state (elements_data, style_palette_data, bg_guid) is socketless and set automatically by the editor - leave it alone. One genuine gotcha: the optional import_json input, when connected, overrides the editor entirely. Handy for scripting; confusing when you're mid-draw and wondering why your canvas edits vanished.
Outputs
Four you'll actually wire, one that's for plumbing:
- prompt (STRING) - the full JSON caption. This is the important one; feed it to your Ideogram 4 text-encoder/sampler path.
- preview (IMAGE) - the box-layout diagram, not the generated result. Wire it to a preview or Save Image and thank yourself later.
- width / height (INT) - separate sockets so your sampler can mirror the canvas exactly. A small touch the original KJ node lacked.
- guid (STRING) - identifies this editor instance. Connect it to the Preview BG Update companion node to push a workflow image into your canvas as a live background.
Installing it
No requirements.txt, no model files, no KJNodes required - despite the name, this is a self-contained fork. Either use ComfyUI Manager (search ComfyUI-ByAE-IdeogramTools) or:
cd ComfyUI/custom_nodes
git clone https://github.com/by-ae/ComfyUI-ByAE-IdeogramTools.git
Then restart ComfyUI. The heavy part is separate: you still need the Ideogram 4 checkpoints themselves (ideogram-ai/ideogram-4-fp8 or the CUDA-only nf4 on HuggingFace), which ComfyUI Manager's model downloader can grab. It's a GPL-3.0 derivative of Kijai's work, and the model it drives is non-commercial - worth remembering before you sell anything you render with it.
Common issues
The box preview is a layout diagram, so if the generated image doesn't match it, that's the model, not the node - Ideogram 4 follows boxes loosely and rewards per-box descriptions. Width/height changes "not working" usually means you skipped Update Size. And if the editor background stays black, you haven't connected the Preview BG Update companion yet, or its background_opacity is at zero. Both are covered by the next node.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| width | INT | 102464–16384 | Canvas aspect width. |
| height | INT | 102464–16384 | Canvas aspect height. |
| scale_mode | COMBO | stretch | How regions move when Update Size is clicked. |
| high_level_description | STRING | Optional one-line overview of the whole image (blank = omitted). | |
| background | STRING | Required scene background description. | |
| style | COMBO | 3 options: [object Object], [object Object], [object Object] | |
| aesthetics | STRING | Style descriptor (blank = omitted). | |
| lighting | STRING | Style descriptor (blank = omitted). | |
| medium | STRING | Style descriptor (blank = omitted). | |
| background_opacity | FLOAT | 0.500–1 | Canvas background image opacity (0 = hidden, 1 = full). |
| bg_guid | STRING | Background file id (set automatically by the editor). | |
| style_palette_data | STRING | Serialized style color palette from the editor. | |
| elements_data | STRING | Serialized regions from the editor. | |
| import_jsonopt | STRING | Optional: a full caption JSON. When connected, overrides the editor. |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| prompt | STRING | — |
| preview | IMAGE | — |
| width | INT | — |
| height | INT | — |
| guid | STRING | — |