(Deno) Ideogram Director
Ideogram 4's JSON prompt format, drawn on a canvas instead of typed by hand
- backdrop
- prompt
- width
- height
- seed
- bboxes
Here's the thing nobody warns you about Ideogram 4: it doesn't prompt like any other model you own. It was trained on structured JSON captions - bounding boxes, hex color palettes, typed text elements - and plain natural-language prose underperforms badly. (Deno) Ideogram Director is a visual builder for exactly that format: you draw and edit bbox regions directly on the ComfyUI canvas, describe each region, and the node minifies the whole board into the JSON prompt Ideogram 4 actually wants. No hand-authoring JSON, no guessing the schema.
How it works
The board is your working surface. You set high_level_description (short whole-scene summary) and background, then place boxes on the canvas with their own descriptions. A style_mode of none, photo, or art adds a structured style block, with aesthetics, lighting, medium, photo, and art_style fields feeding whichever mode is active. The backdrop input is deliberately just a layout backdrop to trace over - it is not used for generation. Style and layout preset galleries give you starting points with lightweight previews.
Two features matter for real use. First, the Language view: you can read and edit board descriptions in your own language while the final output stays model-ready English - literal TEXT box words like signs and headlines are preserved exactly. translate_output and view_language control this, with Google as the default translation engine (or a custom LibreTranslate server). Second, import_json: you can feed in a JSON prompt from an upstream source - the README explicitly pairs this with the (Deno) Local LLM Loader - and import_mode decides whether it asks before replacing your existing board.
Outputs: prompt (the minified Ideogram JSON, wired into a positive CLIPTextEncode), plus width, height, seed, and bboxes (your drawn boxes as downstream BBOX data). There's also a seed_lock Fixed/Random control and optional auto_save with save_prefix for turning the latest generation into a saved file.
Why the format matters (and the filter thing)
Prompting Ideogram 4 through its documented JSON schema isn't just better quality - it's also the community's noted workaround when the model's trained-in safety filter objects to a prompt. The guard keys on prompt format rather than content, so a workflow that always emits structured JSON rarely trips it. Worth knowing if you run into a grey "refusal image" and wonder what broke.
Install and caveats
cd ComfyUI/custom_nodes
git clone https://github.com/Deno2026/comfyui-deno-custom-nodes.git
# restart ComfyUI
The node builds the prompt; it doesn't run Ideogram 4 itself - you need the Ideogram 4 weights (non-commercial license, so check the terms before any commercial use) and a ComfyUI path for the model. And set expectations on speed: Ideogram 4 is slow - roughly 3–4 minutes per image on consumer hardware - so this node is a composing tool, not a sketchpad for fast iteration. Build the board carefully, then generate. For quick exploration you'll probably still reach for something faster and come back here to compose the keeper.
Inputs (29)
| Name | Type | Default | Description |
|---|---|---|---|
| width | INT | 102464–16384 | Output image width passed downstream. |
| height | INT | 102464–16384 | Output image height passed downstream. |
| seed | INT | 00–18446744073709550000 | Seed value passed downstream. The Director Fixed/Random control manages it. |
| high_level_description | STRING | Short whole-scene summary used in the Ideogram JSON prompt. | |
| background | STRING | Background or setting description used in the Ideogram JSON prompt. | |
| style_mode | COMBO | none | Choose no style block, photo style, or art style. |
| aesthetics | STRING | General visual mood or aesthetic notes for the style block. | |
| lighting | STRING | Lighting notes for the style block. | |
| medium | STRING | Medium/material notes for art-style prompts. | |
| photo | STRING | Photography notes used when Photo style is active. | |
| art_style | STRING | Art style notes used when Art style is active. | |
| backdropopt | IMAGE | Shown on the board as a layout backdrop to trace over. It is not used for generation. | |
| import_modeopt | COMBO | Ask Before Replacing | How connected JSON should handle an existing board. |
| caption_dataopt | STRING | Internal saved board state managed by the editor. Do not edit it by hand. | |
| seed_lockopt | BOOLEAN | true | Saved Fixed/Random seed state used by the Director UI. |
| auto_saveopt | BOOLEAN | false | Save the latest generated result automatically when enabled. |
| save_prefixopt | STRING | Ideogram_Director | Filename prefix used by Save Image / Auto-save. |
| aspect_ratioopt | STRING | 1:1 | Ratio label derived from the selected output size. |
| include_aspect_ratioopt | BOOLEAN | false | Advanced compatibility toggle. Normally off because width/height carry the real shape. |
| translate_outputopt | COMBO | English | Final prompt language mode. Board text can stay in your language while output becomes English. |
| view_languageopt | COMBO | English | Language used to read and edit the board UI descriptions. |
| translation_engineopt | COMBO | Translation engine used when refreshing board language or final English output. | |
| libretranslate_urlopt | STRING | Custom LibreTranslate server URL, used only when the custom engine is selected. | |
| import_jsonopt | STRING | Optional connected JSON prompt from an upstream LLM or Prompt Text node. | |
| input_widthopt | INT | 256–4096 | Optional connected output width. Snaps to a multiple of 16 and wins when width and height are both connected. |
| input_heightopt | INT | 256–4096 | Optional connected output height. Snaps to a multiple of 16 and wins when width and height are both connected. |
| input_megapixelsopt | FLOAT | 0.05–10 | Optional connected megapixel budget. Used with the current aspect ratio when width and height are not both connected. |
| input_summaryopt | STRING | Optional connected Summary override. It affects this execution only; the saved Director board value remains available when disconnected. | |
| input_backgroundopt | STRING | Optional connected Background override. It affects this execution only; the saved Director board value remains available when disconnected. |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| prompt | STRING | Minified Ideogram JSON prompt to connect into positive CLIPTextEncode. |
| width | INT | Selected output width in pixels. |
| height | INT | Selected output height in pixels. |
| seed | INT | Selected seed value. |
| bboxes | BBOX,BOUNDING_BOX | Drawn board boxes as downstream BBOX data. |