Skip to main content
image.edit takes one to four reference images and a written instruction, then produces a new image on a hosted diffusion model. No masks and no coordinates. You describe the change in plain language and the model applies it. The result is a webp file returned as a signed URL. This is one product in Rendobar’s Generation API.

Edit an image

Reference images go in inputs.images as an array of URLs. The instruction goes in params.prompt.
Each URL can be a public link or an uploaded asset’s content URL. The output size follows the first reference image unless you set width and height.

Reference images

inputs.images accepts one to four URLs. The per-model cap is tighter than the schema ceiling, so a request that clears the schema can still be rejected against the resolved model. Passing more images than the resolved model accepts returns VALIDATION_ERROR before anything is billed. Multiple references let you compose a scene, for example a product from one image on a background from another.

Tiers and models

Set model to a tier alias or pin an exact model id. Omit it and you get the economy tier. Aliases can be re-pointed as the catalog grows, so pin an exact id when you need a result to stay stable. Every image.edit model is reachable through a tier. There is no pin-only model on this job type today.
Price is the model’s priceTier, a relative comparison from $ to $$$$. It is not a per-image charge. Jobs bill on the compute they actually use, cost-plus. See credits and billing.

Model-specific controls

Tier aliases accept the base fields only. To use steps, guidance, or negativePrompt, pin an exact model id. Only qwen-image-edit-2511 accepts guidance and negativePrompt. flux-2-klein-4b fixes its own step count and exposes the base fields only.

The output

A completed job carries a single webp file in output.file, typed image. output.data is null.
The full output shape is the same for every job type.

Watch it render

An edit job emits job.preview events while the model denoises, each carrying a small webp frame. Subscribe with the SDK to show the edit resolving instead of a spinner.
Previews are decoration and never hold up a job. The standard tier finishes in four steps, so it usually completes before a frame is worth showing. See the field reference on the generate page.

Parameters

string[]
required
One to four reference image URLs. A public link or an uploaded asset’s content URL. The per-model cap applies.
string
required
The change to make, in plain language. No masks, no coordinates. Up to 4000 characters.
string
default:"economy"
A tier alias (economy, standard, premium) or an exact model id. A tier lets the platform pick the model. A pinned id unlocks that model’s own controls.
integer
Requested output width in pixels, up to 4096. Defaults to the first reference image. Snapped to what the model can render.
integer
Requested output height in pixels, up to 4096. Defaults to the first reference image.
integer
A fixed seed makes the result reproducible. Omit it for a fresh result each time.
boolean
Rewrite the instruction for the model before editing. Off by default on every model in the catalog today. The default is per model (enhanceDefault in GET /models), so omit it to keep whatever the model ships with.
integer
Denoise steps. More steps means more detail and more time. Requires a pinned model that exposes steps. The accepted range depends on the model.
number
How strictly to follow the instruction. Higher is stricter. Range 1 to 10. Requires qwen-image-edit-2511.
string
What to keep out of the edited image. Up to 1000 characters. Requires qwen-image-edit-2511.

Discover models

GET /models?job=image.edit lists the edit models with their reference-image caps, controls, and relative price. The response shape is the same for both generation job types.

See also

  • Generation API: the modalities and the shared model catalog
  • Image generate: make an image from a text prompt
  • Job output: the output shape every job returns
  • SDK: jobs.run, uploads, and reading the output
  • Webhooks: receive job.completed instead of polling