Nodes/Ideogram 4 Quad Storyboard/Ideogram 4 Quad Prompt Builder
ComfyUI Node

Ideogram 4 Quad Prompt Builder

Assembling Ideogram 4's JSON prompt from four storyboard frames

By reality-comes·Created 2 months ago·Updated 2 months ago· 1
Ideogram 4 Quad Prompt Builder
  • layout
  • frame_a
  • frame_b
  • frame_c
  • frame_d
  • prompt
enforce_consistencytrue
high_level_description
aestheticscinematic, moody, high-contrast
lightingdramatic directional light, deep shadows
mediumcinematic photograph, 35mm film still
backgroundIdentical set in every panel.
shared_palette

Here's the dirty secret about Ideogram 4 that makes this whole pack exist: it was trained almost exclusively on structured JSON captions, and plain prose prompts underperform badly on it. You condition it with hex color palettes, bounding boxes in a 0–1000 coordinate space, and per-element descriptions. That's a genuine superpower - precise layout control no other open model offers - but hand-writing that JSON is miserable. Ideogram4QuadPromptBuilder is the node that writes it for you, from a layout and up to four frames.

What it does

It takes the geometry from Ideogram4QuadLayout and the story from your Frame nodes, and emits the complete structured prompt as a single string:

  • layout (required) - the QUAD_LAYOUT, which carries each cell's bounding box in Ideogram's 0–1000 space. The builder places each frame's text into the correct panel bbox, so panel positions are enforced spatially, not just described.
  • frame_a through frame_d (optional) - up to four QUAD_FRAMEs, one per panel.
  • Global fields: high_level_description (a scene-level summary), aesthetics, lighting, medium, background, and shared_palette for hex colors the whole storyboard inherits.

The single prompt output is a JSON string - wire it into the text conditioning of your Ideogram 4 workflow the same way you'd feed the prompt into CLIPTextEncode.

The consistency trick

This is the node's best feature, and it's per-subject rather than per-panel. The builder walks the frames in reading order and tracks which subjects it has seen. The first time a character appears it's established - phrased as "Mara: [description]". Every later appearance is stamped with recurrence language:

  • subject → the EXACT SAME Mara, identical face and outfit
  • location → the SAME diner setting
  • object → the SAME briefcase, identical

So multiple characters can recur in different combinations across the four panels, and each one stays locked to its own description instead of bleeding into a neighbor. That's the direct application of what makes Ideogram 4 special - it has the best character and IP recall of any open model without a LoRA, and this node is built to exploit it. Flip enforce_consistency off and it stops stamping, which you might do for a frame where a character genuinely changes.

It even fills in high_level_description for you if you leave it empty, generating a summary like "A four-panel 2×2 storyboard featuring Mara, The Diner…" from the cast - a nice touch that means you can get a working prompt from frames alone.

Installing

cd ComfyUI/custom_nodes
git clone https://github.com/reality-comes/comfyui-ideogram4-quad-storyboard

Restart ComfyUI; it appears under image/ideogram4 (ComfyUI Manager: search "Ideogram 4 Quad Storyboard"). No extra Python dependencies, no model downloads - the pack runs on ComfyUI's bundled torch and comfy. The model you render with is Ideogram 4 itself (fp8 or nf4, non-commercial license), which you load and schedule separately.

Where people get burned

The defaults are opinionated - cinematic, moody, high-contrast aesthetics, 35mm film still medium, "Identical set in every panel" background - and that's actually a coherent look for a storyboard, but it'll fight you if you want bright and clean. Override medium, lighting, and aesthetics early. Second gotcha: a Frame whose position isn't one of the four real cells gets silently skipped, so check your positions if a panel's text is missing from the JSON. And don't be surprised the output is JSON, not prose - that's the format the model was trained on, and the whole reason this node exists. Preview the string once, marvel, then feed it in.

Categoryimage/ideogram4

Inputs (12)

NameTypeDefaultDescription
layoutQUAD_LAYOUT
enforce_consistencyBOOLEANtrue
high_level_descriptionSTRING
aestheticsSTRINGcinematic, moody, high-contrast
lightingSTRINGdramatic directional light, deep shadows
mediumSTRINGcinematic photograph, 35mm film still
backgroundSTRINGIdentical set in every panel.
shared_paletteSTRING
frame_aoptQUAD_FRAME
frame_boptQUAD_FRAME
frame_coptQUAD_FRAME
frame_doptQUAD_FRAME

Outputs (1)

NameTypeDescription
promptSTRING