Ideogram Suppress Artifacts
Ideogram 4's closest thing to a negative prompt — and it's free
- caption
There is no negative-prompt box in Ideogram 4. Its caption schema simply has no negative_prompts field like the SD/A1111 days - so how do you stop it from serving up noise, motion blur, or JPEG gunk? You don't say what you don't want. You state what you do, positively. That's what this node does: it bolts a pre-baked snippet of "clean signal, no grain, sharp focus, no compression artifacts" language onto any caption, and it works without an API key or a single network call.
It's the second node in the ComfyUI-AliAn-Ideogram-Magic-Prompt pack, and it serves two jobs. Standalone, it's a post-processor for captions you already have - hand-written, LLM-generated, or fresh out of the pack's IdeogramMagicPrompt node - when you don't want to re-run the magic-prompt API just to add suppression language. It's also the exact same engine behind IdeogramMagicPrompt's suppress_artifacts checkbox, extracted so you can apply it on your own schedule.
How it works
Two inputs, one output. caption takes either a stringified JSON caption or a plain prompt, and mode picks the strategy: auto (default), json, or plain text.
The clever bit is the auto mode's cheap heuristic - it parses as JSON if the input starts with { or [ and ends with } or ], otherwise it treats the input as prose. If you force json, it merges into the caption: it deep-copies your object, appends a "clean image, no visible noise, no grain..." postfix to high_level_description, and folds suppression language into style_description's aesthetics, lighting, photo, and medium fields. The merge appends rather than overwrites, so your own style descriptions always win. If you feed it a JSON array, it merges into each object element.
plain text mode is simpler: it just appends the snippet to your prompt, which covers noise, film grain, chromatic aberration, JPEG artifacts, motion blur, double exposure, lens flare, blown highlights, crushed shadows, and color banding. No JSON, no fuss.
Why phrasing matters
Ideogram 4 was trained on JSON caption language, not on exclusion lists, so "no blur" reads as a weak, vague signal while "sharp focus edge-to-edge, no motion blur" lands as a concrete instruction. This node is built around that quirk - the README frames it as "closest to a negative prompt" and that's honestly the right way to think about it. It's the same positive-constraint trick people use on Flux and other modern text-conditioned models.
Where you'd use it
A typical chain: IdeogramMagicPrompt with suppress_artifacts off → IdeogramSuppressArtifacts → Ideogram 4 generation. The node is also handy if you're pasting captions from an LLM you didn't write the rules for - run them through here before they hit the model and the artifact language is already baked in. It's free, local, and stateless: no key, no model download, nothing to configure beyond the mode dropdown.
Installing it
Same pack as its sibling, same trivial install:
cd ComfyUI/custom_nodes
git clone https://github.com/hardhant/ComfyUI-AliAn-Ideogram-Magic-Prompt
Restart ComfyUI and both nodes appear under Add Node → Ideogram. ComfyUI Manager works too - search for "Ideogram Magic Prompt" (the repo name is ComfyUI-AliAn-Ideogram-Magic-Prompt). There are no pip dependencies beyond what ComfyUI ships.
Gotchas from the source
The auto mode is a guess, and it can guess wrong. If your input looks like JSON but doesn't actually parse - a stray comma, a missing quote - the node throws a hard error, and the fix is to switch mode to plain text (or fix the JSON). Similarly, feeding it a bare JSON primitive like "42" gets rejected; it wants objects or arrays. The error messages are explicit about all of this, so you'll know exactly what to do. One more nicety: the snippet is idempotent, so running the same caption through twice won't double-append. It's a small tool with one clear job, and it does that job cleanly - which is more than you can say for a lot of custom nodes.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| caption | STRING | Either a stringified JSON caption or a plain prompt. | |
| mode | COMBO | auto | auto: parse as JSON if input looks like JSON object/array. json: force JSON merge. plain text: append the snippet to the input as-is. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| caption | STRING | Caption with the artifact-suppression snippet applied. |