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 video 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 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 skull shape.
-
Pose and expression preservation Uses the base video 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 Smooth edges around neck, hair, and accessories, minimizing visible artifacts across frames.
💰 Pricing
| Resolution | Price per second | Min 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 (longer clips are capped at 120 s per run)
🔧 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 the generation:
-1or empty → random seed each run- Any positive integer → reproducible results for the same inputs
(Exact field name may differ slightly between Playground and API, but the behavior is the same.)
🎯 Designed For
- Creators & influencers – Turn one performance into many “identities” without reshooting the whole video.
- Marketing & brands – Rapidly localize or personalize talking-head content while keeping the same body and scene.
- Film, TV & post-production – Quick mockups and concept tests for head replacement shots.
- Privacy & compliance – Replace real heads with synthetic or authorized identities while preserving context.
▶️ How to Use
- Upload or paste the URL of the video to edit.
- Upload a face/head reference image for the identity you want to swap in.
- Choose the desired resolution (480p or 720p).
- (Optional) Set a seed if you need reproducible results.
- Click Run to generate the swapped video.
- Review the result; if needed, adjust the reference portrait or seed and re-run.
📌 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 shot you’re editing for the cleanest match.
- Avoid mixing very different lighting conditions (e.g., dark blue stage lighting in video vs. warm daylight in the portrait) unless you want stylized results.
- Always ensure you have the legal right and consent to use all input 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
| Parameter | Type | Required | Default | Range | Description |
|---|---|---|---|---|---|
| video | string | Yes | - | The video that contains the face to be replaced. | |
| face_image | string | Yes | - | - | The face image as reference. |
| prompt | string | No | - | The prompt to guide the model's behavior. | |
| resolution | string | No | 480p | 720p, 480p | The resolution of the output video. |
| seed | integer | No | -1 | -1 ~ 2147483647 | The seed used for the prediction. |
Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data.id | string | Unique identifier for the prediction, Task Id |
| data.model | string | Model ID used for the prediction |
| data.outputs | array | Array of URLs to the generated content (empty when status is not completed) |
| data.urls | object | Object containing related API endpoints |
| data.urls.get | string | URL to retrieve the prediction result |
| data.has_nsfw_contents | array | Array of boolean values indicating NSFW detection for each output |
| data.status | string | Status of the task: created, processing, completed, or failed |
| data.created_at | string | ISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”) |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |