Ideogram 4.5 Precise Edit

Ideogram 4.5 Precise Edit is the precision editing variant of Ideogram 4.5. It applies a natural-language instruction to a source image, optionally limited by a mask and guided by up to four reference images, and restores unchanged pixels from the source so framing, color, and surrounding detail stay intact across many rounds of edits. It keeps the dimensions of sources up to 4 megapixels, and an edit limited to one region keeps sources up to 8192x8192 at full resolution. It suits retouching, product and color changes, and multi-step design revisions.

Complete technical specification for integration
Ready-to-use code snippets for common workflows
Step-by-step tutorials for advanced use cases
← All GuidesRegion edits
How to edit one region of a large image with Ideogram 4.5 Precise Edit and settings.editRegion, so 4K and 8K sources come back at full resolution.
Introduction
Precise Edit returns at most 4,194,304 pixels. A larger source is scaled down before the edit, so an 8K listing photo comes back at 2720 × 1530 even when the instruction only changes one picture on the wall.
settings.editRegion limits the edit to one region of the source. Everything outside that region comes back unchanged, and the output keeps the source's own dimensions, up to 67,108,864 pixels, such as 8192 × 8192.
The source is 7680 × 4320, and the box covers the painting with a margin of wall around it. The result comes back at the full 7680 × 4320 with the coastline photograph in the frame, and everything outside the box, from the sofa to the bookshelf, is unchanged from the source.
This guide covers what a region keeps, drawing the box, fitting a region to a mask, the limits a box must meet and when to leave the region out.
What a region keeps
Without a region, the whole frame is scaled down, not only the part the instruction changed. The same edit ran twice on the source above, once without settings.editRegion and once with the box from the hero. Both crops show the same patch of the bookshelf, which the instruction never touched.

Replace the framed abstract painting above the sofa with a framed black and white photograph of a rocky coastline, in the same frame and at the same size. Keep everything else in the image exactly the same.

Replace the framed abstract painting above the sofa with a framed black and white photograph of a rocky coastline, in the same frame and at the same size. Keep everything else in the image exactly the same.
The crop on the left is 170 pixels across and the one on the right is 480, the same stack of books at a third of the resolution. The page edges and the lettering on the spines are crisp on the right and smeared on the left.
The request is an ordinary edit with the box added under settings:
import { createClient } from '@runware/sdk'
const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()
const [result] = await client.run({
model: 'ideogram:4.5@precise-edit',
positivePrompt: 'Replace the framed abstract painting above the sofa with a framed black and white photograph of a rocky coastline, in the same frame and at the same size. Keep everything else in the image exactly the same.',
inputs: {
seedImage: 'https://example.com/living-room-8k.jpg'
},
settings: {
editRegion: [
3168,
704,
4608,
2368
]
}
})import asyncio
import os
from runware import Runware
async def main():
async with Runware(api_key=os.environ["RUNWARE_API_KEY"]) as client:
results = await client.run({
"model": "ideogram:4.5@precise-edit",
"positivePrompt": "Replace the framed abstract painting above the sofa with a framed black and white photograph of a rocky coastline, in the same frame and at the same size. Keep everything else in the image exactly the same.",
"inputs": {
"seedImage": "https://example.com/living-room-8k.jpg"
},
"settings": {
"editRegion": [
3168,
704,
4608,
2368
]
}
})
asyncio.run(main())curl https://api.runware.ai/v1 \
-H "Authorization: Bearer $RUNWARE_API_KEY" \
-H "Content-Type: application/json" \
-d '[
{
"taskType": "imageInference",
"taskUUID": "8d2f4a61-5c3e-4b9a-a7f0-1e6c9b3d2a58",
"model": "ideogram:4.5@precise-edit",
"positivePrompt": "Replace the framed abstract painting above the sofa with a framed black and white photograph of a rocky coastline, in the same frame and at the same size. Keep everything else in the image exactly the same.",
"inputs": {
"seedImage": "https://example.com/living-room-8k.jpg"
},
"settings": {
"editRegion": [
3168,
704,
4608,
2368
]
}
}
]'runware run ideogram:4.5@precise-edit \
positivePrompt="Replace the framed abstract painting above the sofa with a framed black and white photograph of a rocky coastline, in the same frame and at the same size. Keep everything else in the image exactly the same." \
inputs.seedImage=https://example.com/living-room-8k.jpg \
settings.editRegion.0=3168 \
settings.editRegion.1=704 \
settings.editRegion.2=4608 \
settings.editRegion.3=2368{
"taskType": "imageInference",
"taskUUID": "8d2f4a61-5c3e-4b9a-a7f0-1e6c9b3d2a58",
"model": "ideogram:4.5@precise-edit",
"positivePrompt": "Replace the framed abstract painting above the sofa with a framed black and white photograph of a rocky coastline, in the same frame and at the same size. Keep everything else in the image exactly the same.",
"inputs": {
"seedImage": "https://example.com/living-room-8k.jpg"
},
"settings": {
"editRegion": [
3168,
704,
4608,
2368
]
}
}Response
[
{
"taskType": "imageInference",
"taskUUID": "8d2f4a61-5c3e-4b9a-a7f0-1e6c9b3d2a58",
"imageUUID": "c71e0b9d-3a4f-4e62-8d15-6f2a9c4b7e03",
"imageURL": "https://im.runware.ai/image/os/a14d18/ws/2/ii/c71e0b9d-3a4f-4e62-8d15-6f2a9c4b7e03.jpg"
}
]Drawing the box
The box is [x1, y1, x2, y2] in pixels of the source: the left and top edges, then the right and bottom edges. Take the coordinates from the full-size file, because a box measured on a 1920-pixel preview of an 8K photo lands in the wrong place.
A box is also a hard boundary. A mask guides the edit and the result can grow past it, but nothing outside the box can change. A box drawn too tight stops the edit in a straight line at its edge.
The narrow box covers only a band through the middle of the armchair, so the mustard velvet stops in straight lines at both edges of the box and the arms on either side stay teal. The second box takes in the whole chair with floor around it, and the chair comes back mustard from arm to arm while the teal headboard across the room is untouched.
So draw the box around the whole object, its shadow included, the same way you would paint a generous mask in Masked edits.
Fitting the region to a mask
When you already have a mask, set settings.editRegion to auto and Precise Edit fits the region around the mask, so there are no coordinates to work out. auto needs inputs.maskImage, and the mask works the way it always does, white over the part to change.
The mask covers the cap and the region is fitted around it. The packshot comes back at 7680 × 4320, large enough for print, with a matte black cap on the same bottle.
import { createClient } from '@runware/sdk'
const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()
const [result] = await client.run({
model: 'ideogram:4.5@precise-edit',
positivePrompt: 'Change the gold cap of the perfume bottle to a matte black cap of the same shape and size. Keep everything else in the image exactly the same.',
inputs: {
seedImage: 'https://example.com/perfume-8k.jpg',
maskImage: 'https://example.com/perfume-cap-mask.png'
},
settings: {
editRegion: 'auto'
}
})import asyncio
import os
from runware import Runware
async def main():
async with Runware(api_key=os.environ["RUNWARE_API_KEY"]) as client:
results = await client.run({
"model": "ideogram:4.5@precise-edit",
"positivePrompt": "Change the gold cap of the perfume bottle to a matte black cap of the same shape and size. Keep everything else in the image exactly the same.",
"inputs": {
"seedImage": "https://example.com/perfume-8k.jpg",
"maskImage": "https://example.com/perfume-cap-mask.png"
},
"settings": {
"editRegion": "auto"
}
})
asyncio.run(main())curl https://api.runware.ai/v1 \
-H "Authorization: Bearer $RUNWARE_API_KEY" \
-H "Content-Type: application/json" \
-d '[
{
"taskType": "imageInference",
"taskUUID": "4b9e2c17-8f3a-4d06-b5e1-9a7c3f2d6e84",
"model": "ideogram:4.5@precise-edit",
"positivePrompt": "Change the gold cap of the perfume bottle to a matte black cap of the same shape and size. Keep everything else in the image exactly the same.",
"inputs": {
"seedImage": "https://example.com/perfume-8k.jpg",
"maskImage": "https://example.com/perfume-cap-mask.png"
},
"settings": {
"editRegion": "auto"
}
}
]'runware run ideogram:4.5@precise-edit \
positivePrompt="Change the gold cap of the perfume bottle to a matte black cap of the same shape and size. Keep everything else in the image exactly the same." \
inputs.seedImage=https://example.com/perfume-8k.jpg \
inputs.maskImage=https://example.com/perfume-cap-mask.png \
settings.editRegion=auto{
"taskType": "imageInference",
"taskUUID": "4b9e2c17-8f3a-4d06-b5e1-9a7c3f2d6e84",
"model": "ideogram:4.5@precise-edit",
"positivePrompt": "Change the gold cap of the perfume bottle to a matte black cap of the same shape and size. Keep everything else in the image exactly the same.",
"inputs": {
"seedImage": "https://example.com/perfume-8k.jpg",
"maskImage": "https://example.com/perfume-cap-mask.png"
},
"settings": {
"editRegion": "auto"
}
}Response
[
{
"taskType": "imageInference",
"taskUUID": "4b9e2c17-8f3a-4d06-b5e1-9a7c3f2d6e84",
"imageUUID": "e2a7d4c9-6b1f-4f38-9e05-3c8b1a6d2f71",
"imageURL": "https://im.runware.ai/image/os/a14d18/ws/2/ii/e2a7d4c9-6b1f-4f38-9e05-3c8b1a6d2f71.jpg"
}
]A box and a mask also work together. Send both, and the mask must sit inside the box.
Limits of a box
A box the API accepts meets five rules:
- Inside the source. Every coordinate is a whole number from 0 to the width or height of
inputs.seedImage. - At least 256 pixels per side.
- An aspect ratio between 1:6 and 6:1.
- At most 4,194,304 pixels, such as 2048 × 2048. On a 7680 × 4320 source that is about an eighth of the frame.
- Room for the mask. A mask sent with the box has to sit inside it.
When to leave the region out
A change meant for the whole frame, such as relighting or a change of season, does not fit in one region on a large source. Without settings.editRegion it comes back at about 4 megapixels, so keep regions for the local changes and run the global pass last, the order Iterative editing recommends for any chain.
A source at or under 4,194,304 pixels already comes back at its own size. There a region is only worth it as a hard boundary around the edit.
Tips
-
Box the whole object. The edit stops at the edge of the box, so leave a margin for the shadow and anything else the change touches.
-
Measure on the full-size source. The coordinates count pixels of
inputs.seedImageitself, not of a preview. -
One region per request. For two areas far apart, run two edits in a row, each with its own box, and the image keeps its full size through both.
-
Use
autowhen the mask exists. It saves working out a box, and the region stays fitted to the target.






