Nano Banana 2.1 is LIVE — Google's Latest | Try Now →

krea/v3/edit

Krea V3 Image Edit edits and combines up to eight reference images with natural-language instructions, supporting quality and speed variants, custom dimensions, seed control, multi-image composition, creative edits, and production workflows. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

Image Editing
Input

Drag & drop or click to upload

preview

Optional output size as width*height, up to about 4 MP. Leave empty for automatic sizing.

Idle

Transform the inside of the cocktail glass into a tiny Mediterranean coastline with miniature cliffs, turquoise water, a small white villa, and one tiny sailboat. Keep the liquid surface, refraction, glass transparency, and garnish physically realistic.
Preserve the bartender’s exact identity, pose, clothing, glass shape, bar environment, and composition.
Luxury surreal product photography, detailed miniature world, elegant cinematic lighting.

$0.03per run·~33 / $1

Next:

ExamplesView all

Transform the inside of the cocktail glass into a tiny Mediterranean coastline with miniature cliffs, turquoise water, a small white villa, and one tiny sailboat. Keep the liquid surface, refraction, glass transparency, and garnish physically realistic.
Preserve the bartender’s exact identity, pose, clothing, glass shape, bar environment, and composition.
Luxury surreal product photography, detailed miniature world, elegant cinematic lighting.

Transform the inside of the cocktail glass into a tiny Mediterranean coastline with miniature cliffs, turquoise water, a small white villa, and one tiny sailboat. Keep the liquid surface, refraction, glass transparency, and garnish physically realistic. Preserve the bartender’s exact identity, pose, clothing, glass shape, bar environment, and composition. Luxury surreal product photography, detailed miniature world, elegant cinematic lighting.

Transform the botanical tattoo on the client’s forearm into an intricate raised metallic relief made of brushed silver and antique gold, following the exact original tattoo pattern. Add fine engraved leaves, tiny ornamental details, and realistic highlights while keeping the skin and surrounding scene unchanged.
Preserve the tattoo artist, client, poses, hands, studio layout, and camera angle.
Photorealistic material transformation, refined craftsmanship, highly detailed.

Transform the botanical tattoo on the client’s forearm into an intricate raised metallic relief made of brushed silver and antique gold, following the exact original tattoo pattern. Add fine engraved leaves, tiny ornamental details, and realistic highlights while keeping the skin and surrounding scene unchanged. Preserve the tattoo artist, client, poses, hands, studio layout, and camera angle. Photorealistic material transformation, refined craftsmanship, highly detailed.

Related Models

README

Krea V3 Edit

Krea V3 Edit edits and combines up to 8 reference images using natural-language instructions. Use berry for quality-focused editing or jam for faster results, and optionally set custom output dimensions for your target composition.

Why Choose This?

  • Multi-image editing
    Edit or combine up to 8 reference images in one request.

  • Reference-aware prompting
    Refer to inputs as <image-1>, <image-2>, and so on to describe how each image should be used.

  • Two generation variants
    Use berry for quality or jam for faster generation.

  • Custom output dimensions
    Set the output width and height when a specific layout is required.

  • Negative prompt support
    Use negative_prompt with Berry to reduce unwanted elements.

  • Seed control
    Use a fixed seed for more reproducible editing workflows.

Parameters

ParameterRequiredDescription
promptYesDescribe the desired edit. Refer to input images as <image-1>, <image-2>, and so on.
imagesYesBetween 1 and 8 reference image URLs, ordered according to their prompt references.
modelNoberry for quality-focused generation or jam for faster generation. Default: berry.
negative_promptNoOptional content to avoid. Used only by berry.
sizeNoOptional output dimensions in width*height format. Omit to let the model choose the output size automatically.
reasoning_levelNolow or medium. Default: low.
output_formatNopng or jpeg. Default: png.
seedNoOptional integer seed for reproducible generation.

How to Use

  1. Upload reference images — Provide between 1 and 8 images.
  2. Write the edit prompt — Describe the desired result and identify references as <image-1>, <image-2>, and so on.
  3. Choose a model — Select berry or jam.
  4. Set image size optional — Enter custom output dimensions or leave size empty for automatic sizing.
  5. Configure optional settings — Add a negative prompt, reasoning level, output format, or seed.
  6. Submit — Generate and retrieve the edited image.

Pricing

Pricing is based on the output image size and the number of reference images.

The rate is $0.03 per megapixel for the output image and for each supplied reference image.

Output SizeReference ImagesPrice
1024 × 10241$0.06
1024 × 10243$0.12
2048 × 20481$0.24
2048 × 20488$1.08

berry and jam use the same pricing. negative_prompt, reasoning_level, output_format, and seed do not add separate charges.

Best Use Cases

  • Multi-reference compositions — Combine subjects, products, scenes, or visual elements from several images.
  • Product editing — Place products into new environments or create new campaign compositions.
  • Character and subject edits — Use references to guide appearance, clothing, or visual identity.
  • Style transformation — Change colors, materials, lighting, or overall visual direction.
  • Creative image editing — Build new compositions from existing visual assets.
  • Marketing content — Create campaign, social, and promotional imagery from multiple references.

Pro Tips

  • Refer to each important image explicitly as <image-1>, <image-2>, and so on.
  • Clearly explain the role of each reference image.
  • Use fewer references when several images provide conflicting guidance.
  • Use berry when image quality is the priority.
  • Use jam when faster iteration is preferred.
  • Use negative_prompt only with Berry.
  • Set a fixed seed when comparing prompt or reference changes.

Notes

  • prompt and images are required.
  • images supports between 1 and 8 references.
  • model defaults to berry.
  • size is optional; when omitted, the model selects the output dimensions automatically.
  • Supported custom dimensions range from 256 to 4096 pixels per side, subject to the maximum output pixel limit.
  • negative_prompt applies only to Berry.
  • Custom output dimensions are subject to a maximum total pixel count of 4,220,160 pixels. Some width-and-height combinations may be unavailable even when both dimensions are individually within the supported range.

Related Models

Note:This website uses AI models provided by third parties. Documentation prices are for reference and may be outdated. The Generate button shows an estimate; the final task charge prevails.

v3 Edit API — Quick start

Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/krea/v3/edit with your input as JSON. The endpoint returns a prediction id. Start polling the result endpoint around every 2 seconds, increase the interval for long-running tasks, and stop on any terminal status. On completed, read output values from data.outputs. Examples for v3 Edit below.

HTTP example
set -euo pipefail

: "${WAVESPEED_API_KEY:?Set WAVESPEED_API_KEY}"

REQUEST_BODY=$(cat <<'JSON'
{
    "prompt": "A cinematic shot of a city at sunset, soft golden light",
    "images": [
        "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg"
    ],
    "reasoning_level": "low",
    "model": "berry",
    "output_format": "png"
}
JSON
)

# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  -X POST "https://api.wavespeed.ai/api/v3/krea/v3/edit" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $WAVESPEED_API_KEY" \
  -d "$REQUEST_BODY")

TASK=$(printf '%s' "$SUBMIT_RESPONSE" | jq 'if has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "$TASK" | jq -r '.id')
if [ -z "$PREDICTION_ID" ] || [ "$PREDICTION_ID" = "null" ]; then
  printf 'Submission response did not contain a prediction id
' >&2
  exit 1
fi
RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/$PREDICTION_ID/result"

# 2. Poll until the prediction finishes.
while true; do
  RESPONSE=$(curl --silent --show-error --fail-with-body "$RESULT_URL" \
    -H "Authorization: Bearer $WAVESPEED_API_KEY")
  RESULT=$(printf '%s' "$RESPONSE" | jq 'if has("data") then .data else . end')
  STATUS=$(printf '%s' "$RESULT" | jq -r '.status')
  case "$STATUS" in
    completed) printf '%s\n' "$RESULT" | jq '.outputs'; break ;;
    failed|cancelled|timeout|deleted) printf '%s\n' "$RESULT" | jq . >&2; exit 1 ;;
    *) sleep 2 ;;
  esac
done
Node.js example
const submitUrl = "https://api.wavespeed.ai/api/v3/krea/v3/edit";
const apiKey = process.env.WAVESPEED_API_KEY;
if (!apiKey) throw new Error('Set WAVESPEED_API_KEY');

async function requestJson(url, options = {}) {
  const response = await fetch(url, options);
  if (!response.ok) throw new Error(await response.text());
  return response.json();
}

// 1. Submit the prediction.
const body = await requestJson(submitUrl, {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
        "prompt": "A cinematic shot of a city at sunset, soft golden light",
        "images": [
                "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg"
        ],
        "reasoning_level": "low",
        "model": "berry",
        "output_format": "png"
}),
});
const task = body.data ?? body;
if (!task.id) throw new Error("Submission response did not contain a prediction id");
const resultUrl = `https://api.wavespeed.ai/api/v3/predictions/${task.id}/result`;

// 2. Poll until the prediction finishes.
while (true) {
  const resultBody = await requestJson(resultUrl, {
    headers: { "Authorization": `Bearer ${apiKey}` },
  });
  const result = resultBody.data ?? resultBody;
  if (result.status === "completed") {
    console.log(result.outputs);
    break;
  }
  if (["failed", "cancelled", "timeout", "deleted"].includes(result.status)) throw new Error(JSON.stringify(result));
  await new Promise(resolve => setTimeout(resolve, 2000));
}
Python example
import json
import os
import time
from urllib.request import Request, urlopen

api_key = os.environ["WAVESPEED_API_KEY"]
headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
payload = {
    "prompt": "A cinematic shot of a city at sunset, soft golden light",
    "images": [
        "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg"
    ],
    "reasoning_level": "low",
    "model": "berry",
    "output_format": "png"
}

def request_json(url, data=None):
    request = Request(url, data=data, headers=headers, method="POST" if data else "GET")
    with urlopen(request) as response:
        return json.load(response)

# 1. Submit the prediction.
body = request_json("https://api.wavespeed.ai/api/v3/krea/v3/edit", json.dumps(payload).encode())
task = body.get("data", body)
if not task.get("id"):
    raise RuntimeError("Submission response did not contain a prediction id")
result_url = f"https://api.wavespeed.ai/api/v3/predictions/{task['id']}/result"

# 2. Poll until the prediction finishes.
while True:
    result_body = request_json(result_url)
    result = result_body.get("data", result_body)
    status = result.get("status")
    if status == "completed":
        print(result.get("outputs", []))
        break
    if status in {"failed", "cancelled", "timeout", "deleted"}:
        raise RuntimeError(result)
    time.sleep(2)

v3 Edit API — Frequently asked questions

What is the v3 Edit API?

v3 Edit is a Krea model for image editing, exposed as a REST API on WaveSpeedAI. Krea V3 Image Edit edits and combines up to eight reference images with natural-language instructions, supporting quality and speed variants, custom dimensions, seed control, multi-image composition, creative edits, and production workflows. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing. You can call it programmatically or try it from the playground above.

How do I call the v3 Edit API?

POST your input parameters to the model's REST endpoint (shown in the API tab of this playground) with your WaveSpeedAI API key in the Authorization header. Submission returns a prediction ID. Poll the result endpoint starting around every 2 seconds, increase the interval for long-running tasks, and stop on any terminal status. The playground generates Python, JavaScript, and cURL examples for submitting requests and polling results. Full request/response shape is documented at https://wavespeed.ai/docs/docs-api/krea/krea-v3-edit.

How much does v3 Edit cost per run?

v3 Edit starts at $0.03 per run. That figure is the base price — the final charge scales with the parameters you set in the form (output size, length, count, references, or whatever knobs this model exposes), so a higher-quality or larger output costs more than a minimal one. The exact cost for your current input is shown live next to the Generate button before you submit, and the actual per-call charge is recorded on the prediction afterwards.

What inputs does v3 Edit accept?

Key inputs: `prompt`, `images`, `seed`, `negative_prompt`, `model`, `output_format`. The full JSON schema (types, defaults, allowed values) is rendered above the Generate button and mirrored in the API reference at https://wavespeed.ai/docs/docs-api/krea/krea-v3-edit.

How do I get started with the v3 Edit API?

Sign up for a free WaveSpeedAI account to claim starter credits, copy your API key from /accesskey, then call the endpoint shown in the API tab of the playground. The playground also auto-generates a code sample in Python, JavaScript, or cURL for the parameters you've set.

Can I use v3 Edit outputs commercially?

Commercial usage rights depend on the model's license, set by its provider (Krea). Check the provider's applicable terms and WaveSpeedAI's Terms of Service before commercial use.

llms.txt — krea/v3/edit for AI agents and LLMs