Seedream 5.0 Pro đã ra mắt | Thử trong Trình tạo ảnh →

Flux Kontext Dev Multi

wavespeed-ai /

Experimental FLUX.1 Kontext [dev] with multi-image handling for contextual multi-input inference and image workflows. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

image-to-image
Đầu vào

Chờ

A man standing by the ocean, wearing a crisp white shirt with sleeves casually rolled up.

$0.03cho mỗi lần chạy·~33 / $1

Tiếp theo:

Ví dụXem tất cả

A man standing by the ocean, wearing a crisp white shirt with sleeves casually rolled up.

A man standing by the ocean, wearing a crisp white shirt with sleeves casually rolled up.

Let the man drink the juice.

Let the man drink the juice.

Let's get a picture of these two together.

Let's get a picture of these two together.

Combine the two images into one. The man holds the woman, smiling, in a park

Combine the two images into one. The man holds the woman, smiling, in a park

Mô hình liên quan

README

FLUX Kontext Dev Multi — wavespeed-ai/flux-kontext-dev/multi

FLUX.1 Kontext Dev Multi extends instruction-based image editing to a multi-image workflow. You can provide up to 4 reference images alongside a text instruction, enabling richer context, stronger consistency, and more controllable edits across subjects, styles, and scenes—especially useful when one image alone is not enough to describe what you want.

Key capabilities

  • Multi-image contextual editing with up to 4 reference images
  • Better subject/style consistency by grounding edits in multiple references
  • Supports both local edits (specific changes) and global edits (overall look)
  • Ideal for iterative workflows: refine results step-by-step while keeping identity and style stable

Typical use cases

  • Multi-reference character consistency (face/hair/outfit cues from multiple photos)
  • Product edits with reference packs (angle, material, branding consistency)
  • Style guidance from multiple exemplars (illustration style + lighting reference + texture reference)
  • Scene recomposition while preserving subject identity
  • Branding/text edits that must match reference typography and layout

Pricing

$0.03 per generation.

If you generate multiple outputs in one run, total cost = num_images × $0.03 Example: num_images = 4 → $0.12

Inputs and outputs

Input:

  • Up to 4 reference images (upload or public URLs)
  • One edit instruction (prompt)

Output:

  • One or more edited images (controlled by num_images)

Parameters

  • prompt: Edit instruction describing what to change and what to keep
  • images: Up to 4 reference images
  • width / height: Output resolution
  • num_inference_steps: More steps can improve fidelity but increases latency
  • guidance_scale: Higher values follow the prompt more strongly; too high may over-edit
  • num_images: Number of variations generated per run
  • seed: Fixed value for reproducibility; -1 for random
  • output_format: jpeg or png
  • enable_base64_output: Return BASE64 instead of a URL (API only)
  • enable_sync_mode: Wait for generation and return results directly (API only)

Prompting guide

For multi-reference runs, be explicit about how each reference should be used:

Template: Use reference 1 for [identity]. Use reference 2 for [outfit/material]. Use reference 3 for [style/lighting]. Use reference 4 for [background/scene]. Keep [must-preserve]. Change [edit request]. Match [lighting/shadows/perspective].

Example prompts

  • Use reference 1 for face identity and reference 2 for hairstyle. Keep the pose from the base image. Replace the background with a modern office and match lighting direction.
  • Use reference 1 for the product shape and reference 2 for label design. Replace the label text with “WaveSpeedAI”, keeping typography, perspective, and print texture consistent.
  • Use reference 3 as the style guide (soft illustration look) and reference 4 for lighting mood (golden hour). Preserve the subject identity from reference 1.

Best practices

  • Provide clean references: sharp subjects, consistent lighting, minimal occlusion.
  • Assign roles to references (identity vs. style vs. scene) to avoid conflicting signals.
  • Make one change per run, then iterate for tighter control.
  • Fix seed when you need stable comparisons across prompt variants.
Lưu ý:Trang web này sử dụng các mô hình AI do bên thứ ba cung cấp.

Flux Kontext Dev Multi API — Quick start

Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/wavespeed-ai/flux-kontext-dev/multi 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 Flux Kontext Dev Multi 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",
    "num_inference_steps": 28,
    "guidance_scale": 2.5,
    "num_images": 1,
    "seed": -1,
    "output_format": "jpeg"
}
JSON
)

# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  -X POST "https://api.wavespeed.ai/api/v3/wavespeed-ai/flux-kontext-dev/multi" \
  -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=$(printf '%s' "$TASK" | jq -r '.urls.get // empty')
if [ -z "$RESULT_URL" ]; then
  RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/$PREDICTION_ID/result"
fi

# 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) printf '%s\n' "$RESULT" | jq . >&2; exit 1 ;;
    created|processing) sleep 2 ;;
    *) printf 'Unexpected status: %s
' "$STATUS" >&2; exit 1 ;;
  esac
done
Node.js example
const submitUrl = "https://api.wavespeed.ai/api/v3/wavespeed-ai/flux-kontext-dev/multi";
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",
        "num_inference_steps": 28,
        "guidance_scale": 2.5,
        "num_images": 1,
        "seed": -1,
        "output_format": "jpeg"
}),
});
const task = body.data ?? body;
if (!task.id) throw new Error("Submission response did not contain a prediction id");
const resultUrl = task.urls?.get ||
  `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"].includes(result.status)) throw new Error(JSON.stringify(result));
  if (!["created", "processing"].includes(result.status)) throw new Error("Unexpected status: " + result.status);
  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",
    "num_inference_steps": 28,
    "guidance_scale": 2.5,
    "num_images": 1,
    "seed": -1,
    "output_format": "jpeg"
}

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/wavespeed-ai/flux-kontext-dev/multi", 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 = task.get("urls", {}).get("get") or 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"}:
        raise RuntimeError(result)
    if status not in {"created", "processing"}:
        raise RuntimeError(f"Unexpected status: {status}")
    time.sleep(2)

Flux Kontext Dev Multi API — Frequently asked questions

What is the Flux Kontext Dev Multi API?

Flux Kontext Dev Multi is a WaveSpeedAI model for image editing, exposed as a REST API on WaveSpeedAI. Experimental FLUX.1 Kontext [dev] with multi-image handling for contextual multi-input inference and image 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 Flux Kontext Dev Multi 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 production-oriented Python, JavaScript, and cURL examples with timeouts, transient-error handling, and safe GET retries. Full request/response shape is documented at https://wavespeed.ai/docs/docs-api/wavespeed-ai/flux-kontext-dev-multi.

How much does Flux Kontext Dev Multi cost per run?

Flux Kontext Dev Multi starts at $0.030 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 Flux Kontext Dev Multi accept?

Key inputs: `prompt`, `images`, `size`, `seed`, `guidance_scale`, `num_inference_steps`. 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/wavespeed-ai/flux-kontext-dev-multi.

How long does Flux Kontext Dev Multi take to generate?

Median end-to-end generation time on WaveSpeedAI is around 15 seconds per request, based on recent successful runs. Queue time varies with global demand; live status is visible in the prediction record.

Can I use Flux Kontext Dev Multi outputs commercially?

Commercial usage rights depend on the model's license, set by its provider (WaveSpeedAI). The license summary appears on the model card above; see WaveSpeedAI's Terms of Service for platform-level conditions.

Flux Kontext Dev Multi | Fast Image Editing API | WaveSpeedAI