Ideogram Visual Prompt Designer
The Node That Wants to Be a Canvas (and Isn't Yet)
- ideogram_prompt
- json_string
- designer_state
- is_valid
- report
Be honest about what IdeogramVisualPromptDesigner is before you build around it: it's Phase 1 of a bigger idea. The pack's README describes the full vision - a Figma/Blender-style visual editor where you drag and resize regions on a canvas, rearrange a scene hierarchy, undo/redo, all the polish - and then states plainly that none of that exists yet. The canvas needs a custom ComfyUI frontend extension, which isn't built. What you get today is the backend foundation: a node that builds or loads an Ideogram prompt, reconstructs an editable internal "designer state," applies an optional palette override, and re-validates the result. All through standard widgets.
That's still useful - it's the pack's attempt to make you think in subjects and composition instead of raw JSON shapes - but it's not a magic canvas. The README even has a FAQ entry for "Where's the visual canvas?" The answer is "not built yet." Set your expectations and it's a solid round-trip tool.
What it does in this phase
- Builds a prompt from scratch - give it a
high_level_descriptionand it produces a complete, validated Ideogram JSON prompt. - Loads an existing prompt - wire one in via
prompt_jsonand it reconstructs the editable state. Leavinghigh_level_descriptionblank preserves the loaded description; only a non-empty one overrides it. - Restores designer-only fields - notes, subjects, per-element depth/weight/lock/hide/group values, loaded back from a saved
designer_state_json. These are fields the Ideogram schema has no slot for, so they round-trip through the node's own state format. - Applies a palette override via
palette_json. - Re-validates on every run, reusing
IdeogramJSONValidator, with structured errors/warnings in the state.
Inputs and outputs
Required: high_level_description (multiline) and strict_mode (BOOLEAN, default False - same semantics as the validator's strict mode). Optional: prompt_json, designer_state_json, palette_json.
Outputs: ideogram_prompt and json_string (intentionally identical values in this phase - the distinction is reserved for a future structured type that would otherwise break interop with the pack's other STRING-JSON nodes), plus designer_state (for round-tripping), is_valid, and report.
The known limitation you'll actually hit
Composition elements are matched between the freshly loaded prompt and your saved designer state by position - 1st element ↔ 1st saved element, and so on. There's no persistent per-element ID yet. So editing the same elements in place round-trips fine, but reordering, inserting, or removing elements between saves will misalign which designer-only fields land on which element. The README is upfront about this; treat restructuring as "your designer metadata won't follow the right element."
Installing it
Part of the pack. ComfyUI Manager: search "Ideogram Palette and Prompt Tools". Or:
cd ComfyUI/custom_nodes
git clone https://github.com/SurrealByDesign/ComfyUI-Ideogram-Palette-and-Prompt-Tools
Restart ComfyUI. Only extra dependency: scikit-learn (Manager installs it, or pip install scikit-learn). Nodes under Ideogram/Palette, Python ≥ 3.10, tested on ComfyUI 0.24.0 / Python 3.12.
Gotchas and troubleshooting
- Palette override didn't change anything? Check
report. A malformedpalette_json(not valid JSON, or not an array of hex strings) is skipped with a warning rather than clearing your existing palette. The node won't silently nuke a good palette with a bad one. - Loaded prompt's description vanished? That happens when
high_level_descriptionis non-empty and overrides the loaded prompt. Leave it blank to preserve. - Designer fields didn't come back after reload? See the position-based matching limitation above. If you restructured the element list between saves, that's expected - this phase.
- Expecting a canvas? It's not there. This node is the JSON-layer foundation a future canvas will sit on. If you need to draw boxes with a mouse today, the Element Builder/Collector nodes with numeric coordinates are the working path.
One more note: the README mentions an earlier draft had a reference_image input that accepted an image and did nothing with it - it was removed rather than kept as a decoration. That's the pack's attitude in miniature: no fake inputs pretending to be features. The designer is honest about being a work in progress, and what it does do, it does reliably.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| high_level_description | STRING | — | |
| strict_mode | BOOLEAN | false | — |
| prompt_jsonopt | STRING | — | |
| designer_state_jsonopt | STRING | — | |
| palette_jsonopt | STRING | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| ideogram_prompt | STRING | — |
| json_string | STRING | — |
| designer_state | STRING | — |
| is_valid | BOOLEAN | — |
| report | STRING | — |