AI Face Swap
Using AI Face Swap for hyper-realistic effect with multiple faces supported. Our face swap artificial intelligence supports swapping one or multiple faces. Either for creating funny pictures of faces, or need a professional tool, we've got you covered.
How to implement AI Face Swap
Step 1: Upload source and reference images
- Request upload URLs from the API:
POST https://yce-api-01.makeupar.com/s2s/v2.0/file Authorization: Bearer YOUR_API_KEY Content-Type: application/jsonBody:
{ "files": [ { "file_name": "target.jpg", "file_size": 123456, "content_type": "image/jpeg" } ] }The response provides a pre-signed upload URL and a
file_id.Upload your file with an HTTP PUT request to the given URL.
Store the
file_idfor later use. Repeat this for both target and reference images.Upload the actual file to the upload URL.
Step 2: Pre-process the source and reference images (face detection)
- Create a pre-process task:
POST https://yce-api-01.makeupar.com/s2s/v2.0/task/face-swap/pre-process Authorization: Bearer YOUR_API_KEY Content-Type: application/jsonBody:
{ "request_id": 1, "payload": { "file_sets": { "src_ids": ["TARGET_FILE_ID"] }, "actions": [ { "id": 0 } ] } }- The API returns a
task_id. - Poll task status at:
GET https://yce-api-01.makeupar.com/s2s/v2.0/task/face-swap/pre-process?task_id=TASK_ID- When finished, you receive a list of detected faces with bounding boxes.
Step 3: Run the face swap task
- Define which reference image will substitute each source image The
face_mappingarray defines how faces in the Source Image are replaced by faces from the Reference Images. It acts as a link list connecting detected faces in the source to specific reference images.
Structure
Each element in the array is an object containing two properties:
Parameter Type Description positionintegerThe index of the face detected in the Source Image (e.g., 0, 1, 2). indexintegerThe index of the face image in the Reference Image List to swap with. - Logic Rules
Index Mapping: The
indexmaps directly to the order of images provided in your reference list.0: First Reference Image.1: Second Reference Image.
Skipping Swaps: To skip swapping a specific face detected in the source, set both
indexandpositionto-1.Array Order: The order of objects in the array should match based on
position.- Example Use Case
Scenario:
- Reference List: 2 images provided (Image A, Image B).
- Source Image: Contains 3 faces detected (Face 0, Face 1, Face 2).
Goal:
- Swap Face 0 (Source) with Image 1 (Reference).
- Skip swapping Face 1 (Source).
- Swap Face 2 (Source) with Image 0 (Reference).
Configuration:
"face_mapping": [ { "index": 1, // Use the second reference image "position": 0 // Apply to the first detected face in source }, { "index": -1, // Skip swapping "position": -1 // Skip swapping }, { "index": 0, // Use the first reference image "position": 2 // Apply to the third detected face in source } ]
- Send the main task request:
POST https://yce-api-01.makeupar.com/s2s/v2.0/task/face-swap Authorization: Bearer YOUR_API_KEY Content-Type: application/jsonBody:
{ "request_id": 2, "payload": { "file_sets": { "src_ids": ["TARGET_FILE_ID"], "ref_ids": ["REFERENCE_FILE_ID"] }, "actions": [ { "id": 0, "params": { "face_mapping": [ { "index": 0, "position": 0 }, { "index": -1, "position": -1 } ] } } ] } }- The response returns a
task_id.
- Define which reference image will substitute each source image The
Step 4: Poll task status and retrieve result It’s necessary to implement a timed loop that queries the task status at regular intervals within the allowed polling window.
- Poll at:
GET https://yce-api-01.makeupar.com/s2s/v2.0/task/face-swap?task_id=TASK_ID- When
statusissuccess, the response contains a URL for the generated image. - Download or display the image from that URL.
Step 5: Integrate into your platform
- On a web frontend, you can directly implement this with JavaScript using fetch or Axios.
- On a backend (Node.js, Python, Java, PHP, etc.), you can use the same endpoints with standard HTTP libraries.
- Implement retry and error handling since the tasks run asynchronously.
- Debugging Guide
Invalid TaskId Error
Why: You’ll receive an InvalidTaskId error if you attempt to check the status of a task that has timed out. Therefore, once an AI task is initiated, you’ll need to poll for its status within the polling_interval until the status changes to either success or error.
Solution: To avoid the task becoming invalid, it’s necessary to implement a timed loop that queries the task status at regular intervals within the allowed polling window.Why are some faces not detected in my source image
Why: Reason: The face must be clearly visible, not covered or obstructed, and large enough within the image
Solution: Try taking a photo where the face appears larger and is clearly visible without any covering or obstruction
- Supported Formats & Dimensions
| AI Feature | Supported Dimensions | Supported File Size | Supported Formats |
|---|---|---|---|
| AI Face Swap | Input and output: the long side must be less than or equal to 4096 pixels | < 10MB | jpg/jpeg/png |
- Error Codes
| Error Code | Description |
|---|---|
| exceed_max_filesize | The input file size exceeds the maximum limit |
| invalid_parameter | The parameter value is invalid |
| error_download_image | There was an error downloading the source image |
| error_download_mask | There was an error downloading the mask image |
| error_decode_image | There was an error decoding the source image |
| error_decode_mask | There was an error decoding the mask image |
| error_download_video | There was an error downloading the source video |
| error_decode_video | There was an error decoding the source video |
| error_nsfw_content_detected | NSFW content was detected in the source image |
| error_no_face | No face was detected in the source image |
| error_pose | Failed to detect pose in the source image |
| error_face_parsing | Failed to perform face parsing on the source image |
| error_inference | An error occurred in the inference pipeline |
| exceed_nsfw_retry_limits | Retry limits exceeded to avoid generating NSFW image |
| error_upload | There was an error uploading the result image |
| error_multiple_people | People count exceeds the maximum limit |
| error_no_shoulder | Shoulders are not visible in the source image |
| error_large_face_angle | The face angle in the uploaded image is too large |
| error_unsupport_ratio | The aspect ratio of the input image is unsupported |
| unknown_internal_error | Other internal errors |


