Seedance 2.5 अब उपलब्ध | वीडियो जनरेटर में आज़माएँ →
साइन इन

wavespeed-ai/

Instant online AI head & face swap for photos with no watermark, delivering realistic, shareable results in seconds. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

portrait-transfer
इनपुट

निष्क्रिय

$0.025प्रति रन·~40 / $1

उदाहरणसभी देखें

संबंधित मॉडल

README

WaveSpeedAI Image Head Swap

WaveSpeedAI Image Head Swap is an advanced AI model for replacing the entire head (face + hair + outline) of a person in a static image using a reference portrait. It keeps body, pose and background intact while rebuilding a new, realistic head that matches the scene’s lighting and perspective.

🎬 What this model does

  • Replaces the full head region of the subject (face, hair, silhouette, accessories)
  • Preserves body pose, clothing, background and general composition
  • Adapts the new head to scene lighting, color tone and camera angle
  • Produces clean, watermark-free outputs ready for editing or publication

⚙️ Why it looks realistic

  • Full-head geometry replacement Swaps the whole head contour instead of only facial features, avoiding mismatched hairlines or skull shape.

  • Pose and expression preservation Uses the base image to keep head angle, gaze direction and expression consistent with the original shot.

  • Lighting and color matching Automatically adjusts skin tone, shadows and highlights so the new head sits naturally in the scene.

  • High-resolution blending Seamless edges around neck, hair and accessories, minimizing visible artifacts.

🧾 Inputs and Parameters

Required fields:

  • image: Base image whose body, background and composition you want to keep.

  • face_image: Reference portrait that defines the new identity/head to be inserted.

Other options:

  • output_format: Choose the final image format:

  • jpeg

  • png

  • webp

💰 Pricing

OperationPrice (USD)
Full head swap (per image run)$0.025

💡 Best Use Cases

  • Casting and concept design Test different actors’ heads on the same body or costume for film, TV or advertising pitches.

  • Privacy and anonymization Replace real heads with synthetic or authorized identities while keeping scenes and actions intact.

  • Photo and key art exploration Quickly iterate on hero posters, thumbnails and cover images with different looks.

  • Social media and creator workflows Create stylized or character-based versions of yourself while preserving your original photos’ composition.

📎 Tips and Notes

  • Use clear, reasonably high-resolution portraits for both image and face_image.
  • Try to keep camera angle and approximate lighting similar between the two inputs for best results.
  • Avoid heavily occluded faces or extreme motion blur in the base image.
  • Always ensure you have the legal right and consent to use all images and likenesses involved in your edits.
नोट:यह वेबसाइट तृतीय पक्षों द्वारा प्रदान किए गए AI मॉडलों का उपयोग करती है। दस्तावेज़ की कीमतें केवल संदर्भ के लिए हैं और पुरानी हो सकती हैं। Generate बटन अनुमान दिखाता है; टास्क का अंतिम शुल्क ही मान्य होगा।

Image Head Swap API — Quick start

Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/wavespeed-ai/image-head-swap 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 Image Head Swap below.

HTTP example
set -euo pipefail

: "${WAVESPEED_API_KEY:?Set WAVESPEED_API_KEY}"

REQUEST_BODY=$(cat <<'JSON'
{
    "image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
    "face_image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
    "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/image-head-swap" \
  -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/image-head-swap";
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({
        "image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
        "face_image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
        "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 = {
    "image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
    "face_image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
    "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/image-head-swap", 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)

Image Head Swap API — Frequently asked questions

What is the Image Head Swap API?

Image Head Swap is a WaveSpeedAI model for AI inference, exposed as a REST API on WaveSpeedAI. Instant online AI head & face swap for photos with no watermark, delivering realistic, shareable results in seconds. 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 Image Head Swap 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/image-head-swap.

How much does Image Head Swap cost per run?

Image Head Swap starts at $0.025 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 Image Head Swap accept?

Key inputs: `image`, `enable_base64_output`, `enable_sync_mode`, `face_image`, `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/wavespeed-ai/image-head-swap.

How long does Image Head Swap take to generate?

Median end-to-end generation time on WaveSpeedAI is around 16 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 Image Head Swap 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.

Image Head Swap | AI Portrait Transfer API on WaveSpeedAI