Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Transform existing images with Venice. Covers POST /image/edit (prompt-driven single-image edit), /image/multi-edit (compose 1-3 images), /image/upscale (2-4x upscale + enhance), and /image/background-remove. Accepts base64, file upload, or HTTPS URL.
.claude/skills/sediman-agent-venice-image-edit/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 33% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 82% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 82% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 156% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 76% | 0% |
Four endpoints, all operating on existing images:
| Endpoint | Purpose | |---|---| | POST /image/edit | Transform one image with a text prompt. | | POST /image/multi-edit | Composite / layer 2–3 images with a single prompt. Also has a multipart/form-data variant. | | POST /image/upscale | Upscale 2–4× and/or enhance quality. | | POST /image/background-remove | Produce a transparent cutout. |
For text-to-image generation, see venice-image-generate.
/image/multi-edit), or HTTPS URL (for edit + multi-edit + background-remove).image/png — there is no return_binary field on edit / multi-edit / upscale / background-remove (that flag only exists on /image/generate)./image/editEdit one image with a short, descriptive prompt.
bashcurl https://api.venice.ai/api/v1/image/edit \ -H "Authorization: Bearer $VENICE_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "qwen-edit", "prompt": "Change the color of the sky to a sunrise", "image": "iVBORw0KGgoAAAANSUhEUg...", "aspect_ratio": "16:9", "safe_mode": true }'
| Field | Notes | |---|---| | model | Default qwen-edit. See GET /models?type=inpaint for edit-capable models. modelId is accepted for backwards compatibility but deprecated on /image/edit — prefer model. | | prompt | Required, ≤ 32 768 chars (usually 1500 is plenty). Short & specific works best. | | image | Required. Base64 string, file upload, or https:// URL. | | aspect_ratio | Optional: auto, 1:1, 3:2, 16:9, 21:9, 9:16, 2:3, 3:4, 4:5. Supported values vary per model — check constraints on GET /models. | | safe_mode | Default true; blurs adult content. |
Good prompts: "remove the tree", "add sunglasses to the cat", "make the sky a vivid orange sunrise".
/image/multi-editCombine up to 3 images into one with a prompt. The first image is the base; the rest are layers / masks / references.
> Field name: /image/multi-edit takes modelId, not model. This is the only image endpoint that uses modelId as the primary field name.
json{ "modelId": "qwen-edit", "prompt": "Place the person from image 2 onto the beach in image 1", "images": [ "https://example.com/beach.jpg", "data:image/png;base64,iVBOR..." ], "safe_mode": true }
POST /image/multi-edit
Content-Type: multipart/form-data
--boundary
Content-Disposition: form-data; name="modelId"
qwen-edit
--boundary
Content-Disposition: form-data; name="prompt"
Place the person from image 2 onto the beach in image 1
--boundary
Content-Disposition: form-data; name="images"; filename="base.jpg"
Content-Type: image/jpeg
<bytes>
--boundary
Content-Disposition: form-data; name="images"; filename="subject.png"
Content-Type: image/png
<bytes>
--boundary--| Field | Notes | |---|---| | modelId | Required field name (multi-edit does not accept model). Default qwen-edit. | | prompt | Required, ≤ 32 768 chars. | | images | Required. 1–3 items. JSON variant accepts base64 or HTTPS URLs; multipart variant accepts raw file parts. | | safe_mode | Default true. |
/image/upscaleUpscale by 1–4×, optionally running Venice's enhancer. Set enhance: true + scale: 1 to enhance without scaling.
bashcurl https://api.venice.ai/api/v1/image/upscale \ -H "Authorization: Bearer $VENICE_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "image": "iVBORw0KGgo...", "scale": 2, "enhance": true, "enhanceCreativity": 0.5, "enhancePrompt": "gold", "replication": 0.35 }'
| Field | Type | Default | Notes | |---|---|---|---| | image | base64 or file | — | Required. Must be ≥ 65 536 px² to start. | | scale | 1..4 | 2 | 1 requires enhance: true. 4 on large images auto-scales down to stay within 16 MP. | | enhance | bool / "true" / "false" | "false" | Turn on Venice's enhancer. Required when scale === 1. | | enhanceCreativity | 0..1 | 0.5 | Higher = more AI reinterpretation. 1 essentially produces a new image. | | enhancePrompt | string, ≤ 1500 | — | Short stylistic cue: "gold", "marble", "angry, menacing". | | replication | 0..1 | 0.35 | Preserve original lines/noise. Higher = less plastic / less AI-feel. |
Response is the upscaled image as binary (image/png typically).
/image/background-removeProduce a transparent PNG cutout.
bash# With base64 curl https://api.venice.ai/api/v1/image/background-remove \ -H "Authorization: Bearer $VENICE_API_KEY" \ -H "Content-Type: application/json" \ -d '{"image": "iVBOR..."}' # With a URL curl https://api.venice.ai/api/v1/image/background-remove \ -H "Authorization: Bearer $VENICE_API_KEY" \ -H "Content-Type: application/json" \ -d '{"image_url": "https://example.com/photo.jpg"}'
Send either image (base64 / file) or image_url. Response is image/png with alpha channel.
| Code | Cause | |---|---| | 400 | Bad params — image dims out of range, file too large, unknown model, unsupported aspect ratio for the model, content-policy refusal. | | 401 | Auth failed. (Pro-gating on these paths surfaces as 400 / 402 depending on condition.) | | 402 | Insufficient balance. Bearer: plain { "error": "Insufficient balance" }. x402: PAYMENT_REQUIRED body + PAYMENT-REQUIRED header. | | 415 | Wrong Content-Type (e.g. JSON sent to a multipart endpoint, or vice versa). | | 429 | Rate limited. | | 500 / 503 | Inference / capacity issue — retry with jitter. |
(413 and 422 are not documented for these image paths in the OpenAPI spec — a 413 from the platform may still appear if you exceed ingress limits, but treat 400 / 415 as the primary failure surface.)
/image/multi-edit images[] explicitly accepts data:image/...;base64,... URLs or plain base64. For /image/edit and /image/upscale, send base64 as a plain string unless the docs say otherwise — if your client adds a data: prefix and you get a 400, strip it./image/multi-edit, the field name is images and you send multiple parts with the same field name — order matters (base first)./image/edit prefers model (modelId is a deprecated alias). /image/multi-edit accepts only modelId. Get the name right per endpoint — sending the wrong one is a 400./image/upscale with scale=4 on a large input is silently clamped to stay under 16 MP.safe_mode: true can blur otherwise valid inputs if the source image trips content classifiers; switch to false (and handle the legal/ToS consequences yourself) when you control the input./image/background-remove takes either image or image_url, not both.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 15,017 | 5,210 | -65% | 1 | 1 | 0% | 2,465 | 3,290 | +33% | 0 | 0 | — |
case-02 | fail→pass | 10,482 | 5,011 | -52% | 1 | 1 | 0% | 1,780 | 3,232 | +82% | 0 | 0 | — |
case-03 | fail→pass | 10,385 | 5,956 | -43% | 1 | 1 | 0% | 1,858 | 3,378 | +82% | 0 | 0 | — |
case-04 | pass→pass | 5,614 | 6,699 | +19% | 1 | 1 | 0% | 1,097 | 3,610 | +229% | 0 | 0 | — |
case-05 | fail→pass | 6,179 | 2,360 | -62% | 1 | 1 | 0% | 1,049 | 2,681 | +156% | 0 | 0 | — |
case-06 | pass→pass | 8,873 | 5,818 | -34% | 1 | 1 | 0% | 1,638 | 3,278 | +100% | 0 | 0 | — |
case-07 | fail→pass | 9,707 | 2,733 | -72% | 1 | 1 | 0% | 1,598 | 2,818 | +76% | 0 | 0 | — |
case-08 | fail→pass | 10,469 | 2,852 | -73% | 1 | 1 | 0% | 1,792 | 2,783 | +55% | 0 | 0 | — |
case-09 | fail→pass | 6,992 | 2,424 | -65% | 1 | 1 | 0% | 1,074 | 2,758 | +157% | 0 | 0 | — |
case-10 | pass→pass | 6,290 | 2,953 | -53% | 1 | 1 | 0% | 971 | 2,804 | +189% | 0 | 0 | — |
case-11 | fail→pass | 17,848 | 4,961 | -72% | 1 | 1 | 0% | 2,713 | 3,133 | +15% | 0 | 0 | — |
case-12 | pass→pass | 10,211 | 4,722 | -54% | 1 | 1 | 0% | 1,741 | 3,111 | +79% | 0 | 0 | — |
case-13 | fail→pass | 7,568 | 2,606 | -66% | 1 | 1 | 0% | 1,217 | 2,729 | +124% | 0 | 0 | — |
case-14 | fail→pass | 15,138 | 3,244 | -79% | 1 | 1 | 0% | 2,562 | 2,862 | +12% | 0 | 0 | — |
case-15 | pass→pass | 10,606 | 2,864 | -73% | 1 | 1 | 0% | 1,372 | 2,776 | +102% | 0 | 0 | — |
case-16 | pass→pass | 12,428 | 5,337 | -57% | 1 | 1 | 0% | 2,034 | 3,344 | +64% | 0 | 0 | — |
case-21 | pass→pass | 4,024 | 1,766 | -56% | 1 | 1 | 0% | 581 | 2,593 | +346% | 0 | 0 | — |
case-17 | pass→pass | 8,383 | 2,018 | -76% | 1 | 1 | 0% | 1,287 | 2,627 | +104% | 0 | 0 | — |
case-18 | pass→pass | 11,316 | 2,582 | -77% | 1 | 1 | 0% | 1,755 | 2,723 | +55% | 0 | 0 | — |
case-19 | fail→pass | 12,830 | 2,890 | -77% | 1 | 1 | 0% | 2,251 | 2,798 | +24% | 0 | 0 | — |
case-20 | fail→pass | 5,724 | 2,474 | -57% | 1 | 1 | 0% | 838 | 2,702 | +222% | 0 | 0 | — |
case-22 | pass→pass | 6,851 | 2,617 | -62% | 1 | 1 | 0% | 1,154 | 2,732 | +137% | 0 | 0 | — |
case-23 | fail→pass | 7,898 | 2,085 | -74% | 1 | 1 | 0% | 1,135 | 2,659 | +134% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +57 percentage points is the difference between those two pass rates over the 23 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.