Video Body Swap

Video Body Swap

Playground

Try it on WavespeedAI!

Video Body Swap replaces the body in a target video with your face. Upload a face image and a body video to get a seamless swap. Ready-to-use REST inference API, no coldstarts, affordable pricing.

Features

Video Body Swap

Video Body Swap replaces the body in a target video with your face. Upload a face image and a body video — AI seamlessly composites your likeness onto the moving subject, frame by frame, with natural blending and consistent identity throughout the clip.


Why Choose This?

  • Seamless face-to-body compositing Advanced AI tracks the subject across every frame and blends your face naturally onto the body in motion, maintaining consistent identity and lighting.

  • Simple two-input workflow Just a face image and a body video — no masking, no manual keyframing, no technical setup required.

  • Wide range of use cases Works across talking head videos, dancing clips, fitness content, and more.

  • Production-ready API No cold starts, predictable per-second pricing, and a ready-to-use REST endpoint for seamless integration.


Parameters

ParameterRequiredDescription
imageYesFace image to composite onto the body video.
videoYesTarget body video. Billing is based on this video’s duration.

How to Use

  1. Upload your face image — a clear, front-facing portrait with good lighting works best.
  2. Upload your body video — the video whose body you want to swap the face onto.
  3. Submit — AI processes the swap frame by frame and returns the finished video.

Pricing

$0.08 per second of input video, with a minimum charge of 5 seconds and a maximum billable duration of 120 seconds.

Video DurationCost
5s (minimum)$0.40
10s$0.80
30s$2.40
60s$4.80
120s (maximum)$9.60

Billing Rules

  • Minimum charge: 5 seconds
  • Maximum billable duration: 120 seconds
  • Videos longer than 120 seconds are capped at 120 seconds for billing purposes

Best Use Cases

  • Creative content — Place yourself into dance, performance, or action videos.
  • Marketing & advertising — Swap faces for personalized promotional video content.
  • Entertainment & social media — Generate fun, shareable body-swap clips for Reels and TikTok.
  • Developer integrations — Embed body swap functionality into apps and pipelines via the REST API.

Pro Tips

  • Use a high-quality, well-lit face photo with a clear, unobstructed view for the most natural compositing result.
  • Videos with a single clearly visible subject and stable lighting produce the cleanest swaps.
  • Avoid heavily cropped or low-resolution face images — the more facial detail the AI has, the better the blend.
  • For best results, the face in the image should be roughly front-facing and similar in angle to the subject in the video.

Notes

  • Both image and video are required fields.
  • Ensure URLs are publicly accessible if using links rather than direct uploads.
  • Videos longer than 120 seconds are accepted but billing is capped at 120 seconds.
  • Please ensure your content complies with WaveSpeed AI’s usage policies.

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-body-swap" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer ${WAVESPEED_API_KEY}" \
--data-raw '{}'

# 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
imagestringYes-The URL of the face/head image.
videostringYes-The URL of the target body video.

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.