Nodes/ComfyUI Ideogram Palette and Prompt Tools/Ideogram Visual Prompt Designer
ComfyUI Node

Ideogram Visual Prompt Designer

The Node That Wants to Be a Canvas (and Isn't Yet)

By SurrealByDesign·Created 2 months ago·Updated 2 months ago· 3
Ideogram Visual Prompt Designer
    • ideogram_prompt
    • json_string
    • designer_state
    • is_valid
    • report
    high_level_description
    strict_modefalse
    prompt_json
    designer_state_json
    palette_json

    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_description and it produces a complete, validated Ideogram JSON prompt.
    • Loads an existing prompt - wire one in via prompt_json and it reconstructs the editable state. Leaving high_level_description blank 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 malformed palette_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_description is 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.

    CategoryIdeogram/Palette

    Inputs (5)

    NameTypeDefaultDescription
    high_level_descriptionSTRING
    strict_modeBOOLEANfalse
    prompt_jsonoptSTRING
    designer_state_jsonoptSTRING
    palette_jsonoptSTRING

    Outputs (5)

    NameTypeDescription
    ideogram_promptSTRING
    json_stringSTRING
    designer_stateSTRING
    is_validBOOLEAN
    reportSTRING