Video Head Swap

Video Head Swap

Playground

Try it on WavespeedAI!

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

Features

WaveSpeedAI Video Head Swap

WaveSpeedAI Video Head Swap is an advanced AI model for replacing the entire head (face + hair + outline) of a person in a video using a reference portrait. The model keeps the body, pose, and background intact while reconstructing a new, realistic head that matches the original 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 overall 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 entire head contour instead of only facial features, avoiding mismatched hairlines or distorted skull shapes.

  • Pose and expression preservation Follows the motion in the source video so head angle, gaze direction, and expression remain consistent with the original performance.

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

  • High-resolution blending Smooth transitions around hair, neck, and accessories, minimizing visible seams or flicker across frames.


💰 Pricing

Pricing is based on video duration and output resolution, with a 5-second minimum and 120-second cap.

ResolutionPrice per secondMin charge (5 s)Max charge (120 s)
480p$0.040$0.200$4.800
720p$0.080$0.400$9.600
  • Minimum billed duration: 5 seconds
  • Maximum billed duration: 120 seconds per run (longer clips are capped at 120 s)

🔧 Input Parameters

video (required)

The source video whose head you want to replace. This defines body motion, framing, and background.

face_image / head_image (required)

A clear portrait of the target identity. Frontal or three-quarter views with good lighting work best.

resolution

Output resolution for the processed video, for example:

  • 480p – more affordable drafts or quick previews
  • 720p – higher-quality output suitable for most publishing workflows

seed (optional)

Controls stochastic variation in generation:

  • -1 or empty → random seed each run
  • Any positive integer → reproducible results for the same inputs

(Exact field name may differ between Playground and API, but behavior is identical.)


🎯 Designed For

  • Creators & influencers – Turn one performance into many identities without reshooting.
  • Marketing & brands – Localize or personalize talking-head content while keeping the same body and scene.
  • Film, TV & post-production – Rapid previs, mockups, and concept tests for head-replacement shots.
  • Privacy & compliance – Replace real heads with synthetic or authorized identities while preserving situational context.

▶️ How to Use

  1. Upload or paste the URL of the video to edit.
  2. Upload a face/head reference image for the identity you want to swap in.
  3. Select the output resolution (480p or 720p).
  4. (Optional) Set a seed if you need reproducible results.
  5. Click Run to generate the swapped video.
  6. Review the result; if needed, adjust the reference portrait or seed and run again.

📌 Tips & Notes

  • Use sharp, well-lit videos where the face is not heavily occluded or motion-blurred.
  • For the reference portrait, keep expression and angle reasonably close to the target shot for the cleanest match.
  • Avoid extreme mismatches in lighting (e.g., dark blue stage light in video vs. warm daylight portrait) unless you want a stylized look.
  • Ensure you have the legal right and consent to use all uploaded videos and portraits.

Authentication

For authentication details, please refer to the Authentication Guide.

API Endpoints

Submit Task & Query Result


# Submit the task
curl --location --request POST "https://api.wavespeed.ai/api/v3/wavespeed-ai/video-head-swap" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer ${WAVESPEED_API_KEY}" \
--data-raw '{
    "resolution": "480p",
    "seed": -1
}'

# Get the result
curl --location --request GET "https://api.wavespeed.ai/api/v3/predictions/${requestId}/result" \
--header "Authorization: Bearer ${WAVESPEED_API_KEY}"

Parameters

Task Submission Parameters

Request Parameters

ParameterTypeRequiredDefaultRangeDescription
videostringYes-The video that contains the face to be replaced.
face_imagestringYes--The face image as reference.
promptstringNo-The prompt to guide the model's behavior.
resolutionstringNo480p720p, 480pThe resolution of the output video.
seedintegerNo-1-1 ~ 2147483647The seed used for the prediction.

Response Parameters

ParameterTypeDescription
codeintegerHTTP status code (e.g., 200 for success)
messagestringStatus message (e.g., “success”)
data.idstringUnique identifier for the prediction, Task Id
data.modelstringModel ID used for the prediction
data.outputsarrayArray of URLs to the generated content (empty when status is not completed)
data.urlsobjectObject containing related API endpoints
data.urls.getstringURL to retrieve the prediction result
data.has_nsfw_contentsarrayArray of boolean values indicating NSFW detection for each output
data.statusstringStatus of the task: created, processing, completed, or failed
data.created_atstringISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”)
data.errorstringError message (empty if no error occurred)
data.timingsobjectObject containing timing details
data.timings.inferenceintegerInference time in milliseconds

Result Request Parameters

ParameterTypeRequiredDefaultDescription
idstringYes-Task ID

Result Response Parameters

ParameterTypeDescription
codeintegerHTTP status code (e.g., 200 for success)
messagestringStatus message (e.g., “success”)
dataobjectThe prediction data object containing all details
data.idstringUnique identifier for the prediction, the ID of the prediction to get
data.modelstringModel ID used for the prediction
data.outputsstringArray of URLs to the generated content (empty when status is not completed).
data.urlsobjectObject containing related API endpoints
data.urls.getstringURL to retrieve the prediction result
data.statusstringStatus of the task: created, processing, completed, or failed
data.created_atstringISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”)
data.errorstringError message (empty if no error occurred)
data.timingsobjectObject containing timing details
data.timings.inferenceintegerInference time in milliseconds
© 2025 WaveSpeedAI. All rights reserved.