Ideogram 4.5 Precise Edit
Change one thing, keep everything else
- seedImage
- maskImage
- referenceImages
- advancedFeatures.watermark.image
- image
The problem this node solves
Instruction editors are amazing right up until the moment they subtly repaint the whole picture. You ask for a jacket colour change and the face drifts, the wall texture changes, the grain shifts, and the image is now a cousin of the one you liked. The local Edit models do this structurally: they re-emit the whole frame, so untouched regions come back close but not identical and the error compounds down a chain of edits. The community's workaround is to bolt a mask back on - Inpaint Crop into the edit, stitch the result back - because these models kept the convenience of masked editing without the pixel guarantee.
Ideogram 4.5 Precise Edit is the hosted, masked answer to that. You hand it the image, you tell it what to change, and it's built to leave the rest alone. The difference between it and the plain Ideogram 4.5 node is simple: Precise Edit requires a source image (seedImage), while 4.5 renders from a prompt and can only take a mask to constrain a fresh generation. If you have a picture and want it modified, this is the node; if you want a new picture, that's the other one.
And it's an API node - same category-wide bargain as every node in this pack: the prompt and the image leave your machine, the call is metered, and the model's filter is Ideogram's rather than something you can patch. That's a bigger deal here than usual, because the whole point is feeding it a real image of yours.
How it works
The node builds a Runware request (model: ideogram:4.5@precise-edit, taskType: imageInference), turns every IMAGE you wire in into an inline base64 PNG data URI - the seed image, the mask, and any references all travel inside the JSON - posts it through the runware-sdk over REST, then downloads the returned imageURL and gives you a torch IMAGE tensor. Dependencies are runware-sdk, pillow and soundfile; nothing loads into VRAM.
Key resolution is RUNWARE_API_KEY → ComfyUI Settings → ~/.runware/config.yaml. Cost and NSFW status show up on the node's title bar after each run, which is your only feedback on what a session is costing.
The inputs that matter
- seedImage - required. The image being edited. Wire an
IMAGE; aLoad Imagenode works fine. - positivePrompt - required. Write it as an instruction ("replace the mug with a glass of milk"), not as a caption of the whole scene. The model already has the scene.
- maskImage - optional, and the difference between "precise" and "mostly precise". Mask the region you want touched and everything outside it stops being negotiable.
- referenceImages - an
IMAGEto guide style or subject alongside the edit. - settings.quality -
very_low/low/medium/high(defaulthigh). Iterate cheap onmedium, render onhigh. - settings.copyrightDetection - off by default; opts into Hive likeness and logo checks post-generation.
- seed and numberResults (1–20) behave as everywhere else in the pack: variations come back batched into one
IMAGE.
Notice what isn't here: no width, no height, no sampler, no steps, and no magic prompt. A precise edit doesn't get to choose a new resolution, and it doesn't rewrite your instruction behind your back. Output is a single image (IMAGE) - wire it to Preview, Save Image, or into a local detail/upscale pass.
Installing it
ComfyUI Manager → search Runware → install → restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/Runware/ComfyUI-Runware
pip install -r ComfyUI-Runware/requirements.txt
Then set ComfyUI Settings → Runware API key, or export RUNWARE_API_KEY. Runware bills by top-up with a card on file, so the first hour is also the moment to decide whether per-call metering suits how you work.
Where people get burned
- The image you wired in is ignored.
seedImageis required and there is no default - an unconnected seed image is a validation stop, not a silent fallback. - The edit leaks past the mask. If you offered a mask, expect the model to respect it; if you didn't, expect it to be more conservative than a local editor but not surgical. Masking is the fix, and it's the whole reason this node exists separately.
- Prompt shape errors. The commonest bad prompt is a full scene description. You're steering an existing image; describe the delta.
No Runware API key, verbatim, on queue - nothing in env, Settings or the CLI config.- Terse errors by design.
Runware: ... [parameter 'maskImage', code …, HTTP 400]is the full message.RUNWARE_DEBUG=1before launching gets you the stack. - Batches sneak up on you.
numberResultsabove 1 is a singleIMAGEwith multiple frames, and each frame was a separate billed generation.
Inputs (22)
| Name | Type | Default | Description |
|---|---|---|---|
| seedImage | IMAGE | — | |
| positivePrompt | STRING | Text prompt describing elements to include in the generated output. | |
| maskImageopt | IMAGE | — | |
| referenceImagesopt | IMAGE | — | |
| advancedFeatures.watermark.imageopt | IMAGE | — | |
| seedopt | INT | 00–2147483647 | Random seed for reproducible generation. When not provided, a random seed is generated in the unsigned 32-bit range. |
| 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. | |
| settings.copyrightDetectionopt | BOOLEAN | false | Opt into post-generation copyright detection using Hive likeness and logo checks. |
| settings.qualityopt | COMBO | high | Rendering quality. |
| 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. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |