Skip to main content
Image editing on Venice is synchronous. Send your source image to /image/edit or /image/multi-edit and the edited result comes back in the same response as an image file. For cutouts, /image/background-remove returns a transparent PNG.
The image edit endpoints are experimental and model-specific behavior may change over time.

Endpoints

Venice has no OpenAI-compatible /images/edits endpoint, so OpenAI SDK calls such as client.images.edit() return 404. Send edits to /image/edit instead.

When to use which endpoint

  • Use /image/edit when you have one source image and want to change, remove, or restyle part of it with a prompt.
  • Use /image/multi-edit when you need to condition the edit on additional reference images.
  • Use /image/background-remove when you only want a clean foreground subject with transparency.
For inpainting, use /image/edit or /image/multi-edit. The old inpaint parameter on /image/generate is deprecated.
Set enhance_prompt: true on either edit endpoint to have a vision-aware enhancer analyze the input image or images and rewrite your instruction before editing. See Prompt Enhancement for behavior, pricing, and response-header details.

Step 1: Edit a single image

Single-image edit is the simplest inpainting flow. Send one image plus a short prompt such as “remove the sign”, “change the sky to sunrise”, or “replace the background with a studio backdrop”. Request:
Response (200): The response body is raw image binary data. Save it directly to a file. The format is PNG for 1K edits and JPEG for 2K and 4K edits, or PNG at any resolution when transparent_background is true. Set output_format to jpeg, png, or webp to choose it explicitly. The edit endpoints have no response_format parameter, so they can’t return the image as base64 JSON. If you need base64, encode the response bytes yourself.

Step 2: Use multi-edit with reference images

/image/multi-edit accepts multiple images, and the cap is model-specific. Read model_spec.constraints.maxInputImages from GET /models?type=inpaint to get the cap for a given model. When the field is absent, the cap is 3, or 1 when combineImages is false. The first image is the base image. The remaining images are additional references that condition the edit.
The public endpoint has no mask channel. Additional images act as references across the whole image, not as region maps — there is no mask parameter, and sending one returns a 400. Prompt precisely to constrain where the edit lands.
This is the better choice when you want to:
  • combine an existing composition with an additional reference image
  • give the model examples of the style, object, or texture to apply
  • constrain the edit more tightly than a single-image prompt can
JSON request:
Multipart request:
Like /image/edit, the response body is raw image data, and the output format follows the same rules.
/image/multi-edit currently uses the modelId field rather than model in the request schema.

Inpainting tips

Prompt-based inpainting works best when the instruction is short and local:
  • remove the tree
  • change the sky to sunset
  • replace the logo with a blank sign
  • restore the torn corner of the photo
For broader scene changes, describe what should stay the same:
If the edit keeps affecting the wrong area, switch from /image/edit to /image/multi-edit and supply an additional reference image showing the desired result, then describe the intended change precisely in the prompt.

Step 3: Remove the background

Use /image/background-remove when you want the foreground subject isolated on a transparent background. This endpoint returns a PNG with alpha transparency. Using an image URL:
Using a local file upload:
Use background removal for:
  • ecommerce product photos
  • profile photos and portraits
  • assets you plan to place over a new background
If you are generating or editing the image anyway, you can skip this second call: /image/generate, /image/edit, and /image/multi-edit accept transparent_background: true on supported models and return the alpha channel directly. See Transparent Background Images for the comparison.

Request Parameters

/image/edit

/image/multi-edit

/image/background-remove

/image/background-remove uses a fixed internal model. It does not accept a model field. Sending one (for example "model": "bria-bg-remover") returns 400 because model is not a recognized field.

Adult content and safe mode

Both /image/edit and /image/multi-edit accept safe_mode (default: true). When enabled, adult content in the edited output is blurred, so send safe_mode: false to receive unblurred output:
Unblurred adult (NSFW) output is available to every API user. You don’t need a Pro subscription, and the mature filter setting in the Venice app does not affect image requests made through the API. Content policies vary by edit model and apply regardless of safe_mode. For uncensored editing, use qwen-edit-uncensored. The moderation-name difference between endpoints trips people up: Passing safe_mode to /images/generations returns 400 with Unrecognized key(s) in object: 'safe_mode'.

Supported input formats

For edit endpoints, images must be at least 256×256 pixels, and the total pixel count must not exceed 33,177,600 (8K resolution). Uploaded files must be under 25MB.

Models and pricing

The default edit model is firered-image-edit, priced at $0.04 per edit**. Other edit-capable models may have different pricing and constraints. Prompt enhancement adds **$0.04 per applied rewrite to the edit price. See:

Errors

Some edit models have stricter content policies than image generation models. Requests that violate the selected model’s policy are rejected with 422.