Ideogram 4.0q
The text-in-image king, without the 24GB download
- lora
- advancedFeatures.watermark.image
- image
For three generations Ideogram was the closed benchmark nobody could touch on text-in-image. Posters with legible paragraphs. Brand logos that don't melt. When it finally released weights as Ideogram 4, the catch was the size: the only checkpoints that shipped are quantized fp8/nf4, and they still want a serious GPU to run comfortably. This node is the end run around all of that - it's Ideogram 4 running on Runware's cloud (the q is the quantized checkpoint, ideogram:4@q), so you get the best text renderer in the business with zero local VRAM and zero download. You just pay per image.
There's one thing you need to understand before you queue anything: Ideogram 4 is not prompted like a normal model. It was trained on structured JSON captions, not prose, and plain natural-language prompts underperform badly. That's baked into this node's interface. The one required input isn't a prompt - it's structuredPrompt.high_level_description, a one-or-two-sentence description of the full image including subject and style. That's the heart of the structured schema, and the rest of the structuredPrompt.* fields let you slice the description finer.
The inputs that matter
structuredPrompt.high_level_description(required) - your core sentence(s). This is the spine of the structured prompt; spend real time here.structuredPrompt.style_description.*-aesthetics,art_style,lighting,medium,photo. Fill in the ones that matter: art style for non-photo work, lighting and mood, photographic style for realism. These become the JSON nodes Ideogram 4 was actually trained on.structuredPrompt.compositional_deconstruction.background- environment, framing, and lighting context.positivePrompt/negativePrompt- free-text extras. The negative is ignored when guidance is off (see CFG below).width/height- 64 to 4096, step 16, default 1024. Ideogram 4 handles wild aspect ratios from one set of weights.CFGScale- a toggle, off by default, because this model has usage rules around it. Flip it on to expose theCFGScale_value(default 7).settings.renderingSpeed-TURBO,DEFAULT, orQUALITY. Your speed/quality tradeoff; the obvious place to start tuning.numberResults- up to 20 variations, each with its own seed.outputFormat/outputQuality-JPG/PNG/WEBP, quality 20–99.advanced_json- the escape hatch for the structured fields this node doesn't expose as widgets (compositional_deconstruction.elements,style_description.color_palette). If you want bounding boxes and typed text elements, this is where the schema goes.
The output is a single image (IMAGE), straight into Preview or Save.
Why you'd run it here instead of locally
The KB's history is worth remembering: Ideogram 4 is a non-commercial release with a refusal image trained into the weights, and the community's fix was routing prompts through the structured JSON schema. On Runware you're calling the hosted model, not the downloaded weights - which sidesteps the quantized-only download, the VRAM question, and the license paperwork in one move. You trade that for per-image cost and an API key.
Installing it
This node is part of the Runware/ComfyUI-Runware pack. Install via ComfyUI Manager (search Runware) and restart, or:
cd ComfyUI/custom_nodes
git clone https://github.com/Runware/ComfyUI-Runware
pip install -r ComfyUI-Runware/requirements.txt
No model files, light deps (runware-sdk, pillow, soundfile). You do need a Runware API key - Settings → Runware API key, RUNWARE_API_KEY, or runware auth login.
Gotchas
Where people get burned: they treat it like a normal text-to-image node and write a prompt, then wonder why the output ignores half of it. If your image has text or tight composition, work the structured fields. And remember it's a billed API - the title bar shows each run's cost, and the QUALITY rendering speed plus higher resolutions cost more.
Inputs (32)
| Name | Type | Default | Description |
|---|---|---|---|
| structuredPrompt.high_level_description | STRING | One or two sentences describing the full image, including subject and style. | |
| loraopt | RUNWARE_LORA | — | |
| advancedFeatures.watermark.imageopt | IMAGE | — | |
| positivePromptopt | STRING | Text prompt describing elements to include in the generated output. | |
| negativePromptopt | STRING | Prompt to guide what to exclude from generation. Ignored when guidance is disabled (CFGScale ≤ 1). | |
| widthopt | INT | 102464–4096 | Width of the generated media in pixels. |
| heightopt | INT | 102464–4096 | Height of the generated media in pixels. |
| seedopt | INT | 00–9223372036854776000 | Random seed for reproducible generation. When not provided, a random seed is generated in the unsigned 32-bit range. |
| CFGScaleopt | BOOLEAN | false | Enable to set CFGScale. This setting has usage rules in this model, so it is off unless you enable it. |
| CFGScale_valueopt | FLOAT | 7.000–30 | Guidance scale representing how closely the output will resemble the prompt. Higher values produce results more aligned with the prompt. |
| numberResultsopt | INT | 11–20 | Number of results to generate. Each result uses a different seed, producing variations of the same parameters. |
| advancedFeaturesopt | BOOLEAN | false | Enable to set advancedFeatures. Off uses the model's default. |
| advancedFeatures.watermark.bgColoropt | STRING | Background color in hex format. | |
| advancedFeatures.watermark.displayPositionopt | COMBO | (default) | Watermark position. |
| advancedFeatures.watermark.fontColoropt | STRING | Text color in hex format. | |
| advancedFeatures.watermark.opacityopt | BOOLEAN | false | Enable to set advancedFeatures.watermark.opacity. Off uses the model's default. |
| advancedFeatures.watermark.opacity_valueopt | FLOAT | 0.100.1–1 | Watermark opacity. |
| advancedFeatures.watermark.textopt | STRING | Watermark text. | |
| structuredPrompt.style_description.aestheticsopt | STRING | Overall aesthetic direction. | |
| structuredPrompt.style_description.art_styleopt | STRING | Art style for non-photographic images. | |
| structuredPrompt.compositional_deconstruction.backgroundopt | STRING | Environment, framing, and lighting context. | |
| structuredPrompt.style_description.lightingopt | STRING | Lighting setup and mood. | |
| structuredPrompt.style_description.mediumopt | STRING | Artistic medium or capture format. | |
| structuredPrompt.style_description.photoopt | STRING | Photographic style for photo-realistic images. | |
| settings.renderingSpeedopt | COMBO | DEFAULT | Generation speed/quality tradeoff. |
| safetyopt | BOOLEAN | false | Enable to set safety. Off uses the model's default. |
| safety.checkContentopt | BOOLEAN | false | Enable or disable content safety checking. Increases total generation time. |
| ttlopt | BOOLEAN | false | Enable to set ttl. Off uses the model's default. |
| ttl_valueopt | INT | 60 | Time-to-live (TTL) in seconds for generated content. Only applies when `outputType` is `URL`. |
| outputFormatopt | COMBO | JPG | File format for the generated image. |
| outputQualityopt | INT | 9520–99 | Compression quality of the output. Higher values preserve quality but increase file size. |
| advanced_jsonopt | STRING | Optional JSON merged into the request. For: structuredPrompt.compositional_deconstruction.elements, structuredPrompt.style_description.color_palette |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |