LogoAICore Docs
图像API接口

Face-swap (AI换脸)

高精度AI换脸技术API接口,提供高精度的人脸替换功能,可以将目标图片中的人脸替换为指定的源人脸,保持自然逼真的效果

📋 基本信息

属性
接口地址POST /v1/chat/completions
模型名称face-swap

📝 请求参数

路径参数类型必填说明默认
-modelstring模型名称,固定为 face-swap-
-messagesarray消息数组,包含用户输入的文本和图片-
messages[]rolestring消息角色,固定为 user-
messages[]contentarray内容数组,包含文本和图片元素-
content[]typestring内容类型:textimage_url-
content[]textstring当 type 为 text 时的文本内容"a person"
content[]image_urlobject当 type 为 image_url 时的图片对象-
image_urlurlstring图片的URL地址(当type为image_url时必填)-

注意:face-swap 模型需要两个图片:

  • 第一个图片:要替换的人脸图片(swap_image)
  • 第二个图片:目标图片(input_image)

📝 请求示例

curl https://api.xty.app/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-xxxxx" \
  -d '{
    "model": "face-swap",
    "messages": [
      {
        "role": "user",
        "content": [
          {"type": "text", "text": "a person"},
          {
            "type": "image_url",
            "image_url": {
                "url": "https://file.xty.app/docs/msk.jpg"
            }
          },
          {
            "type": "image_url",
            "image_url": {
                "url": "https://file.xty.app/docs/lbt.jpg"
            }
          }
        ]
      }
    ]
  }'
import requests
import json

url = "https://api.xty.app/v1/chat/completions"
headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer sk-xxxxx"
}
data = {
    "model": "face-swap",
    "messages": [
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "a person"},
                {
                    "type": "image_url",
                    "image_url": {
                        "url": "https://file.xty.app/docs/msk.jpg"
                    }
                },
                {
                    "type": "image_url",
                    "image_url": {
                        "url": "https://file.xty.app/docs/lbt.jpg"
                    }
                }
            ]
        }
    ]
}

response = requests.post(url, headers=headers, data=json.dumps(data))
print(response.json())
from openai import OpenAI
import httpx

client = OpenAI(
    base_url="https://api.xty.app/v1",
    api_key="sk-xxxxx",
    http_client=httpx.Client(
        base_url="https://api.xty.app/v1",
        follow_redirects=True,
    ),
)

response = client.chat.completions.create(
    model="face-swap",
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "a person"},
                {
                    "type": "image_url",
                    "image_url": {
                        "url": "https://file.xty.app/docs/msk.jpg"
                    }
                },
                {
                    "type": "image_url",
                    "image_url": {
                        "url": "https://file.xty.app/docs/lbt.jpg"
                    }
                }
            ]
        }
    ]
)

print(response)
fetch('https://api.xty.app/v1/chat/completions', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer sk-xxxxx'
  },
  body: JSON.stringify({
    model: "face-swap",
    messages: [
      {
        role: "user",
        content: [
          {type: "text", text: "a person"},
          {
            type: "image_url",
            image_url: {
              url: "https://file.xty.app/docs/msk.jpg"
            }
          },
          {
            type: "image_url",
            image_url: {
              url: "https://file.xty.app/docs/lbt.jpg"
            }
          }
        ]
      }
    ]
  })
})
.then(response => response.json())
.then(data => console.log(data));

📤 响应示例

成功响应

{
  "id": "xty-1704067200000",
  "object": "chat.completion",
  "created": 1704067200,
  "model": "face-swap",
  "choices": [
    {
      "index": 0,
      "finish_reason": "stop",
      "message": {
        "role": "assistant",
        "content": "https://file.xty.app/docs/msk-face.jpg"
      }
    }
  ],
  "usage": {
    "prompt_tokens": 0,
    "completion_tokens": 0,
    "total_tokens": 0
  }
}

错误响应

{
  "error": {
    "message": "face-swap模型需要两个图片,请确保在请求中包含两个图片",
    "type": "invalid_request_error",
    "param": null,
    "code": null
  }
}

🖼️ 效果展示

输入示例

输入文字:a person

输入图片1(换脸源图片)输入图片1 - 换脸源图片

输入图片2(目标图片)输入图片2 - 目标图片

输出结果

输出图片输出图片 - 换脸后的结果

💡 使用技巧

图片质量要求

  • 源人脸图片(第一个图片):建议使用正面、清晰的人脸照片,光线均匀
  • 目标图片(第二个图片):确保人脸区域清晰可见,角度与源人脸相近
  • 分辨率:建议使用高分辨率图片以获得更好效果

最佳实践

  1. 光线条件:选择光线均匀的照片,避免过暗或过亮
  2. 角度匹配:源人脸角度与目标人脸角度相近效果更好
  3. 表情一致:相似的面部表情有助于提升自然度
  4. 图片顺序:第一个图片是要替换的人脸,第二个图片是目标图片

⚠️ 注意事项

  1. 图片数量:face-swap 模型必须提供两个图片,否则会返回错误
  2. 隐私保护:请确保有权使用所提供的人脸图像
  3. 合规使用:严禁用于非法用途或未经授权的身份冒用
  4. 图片格式:支持 JPEG、PNG、WebP 等格式
  5. 文件大小:建议每张图片不超过 10MB
  6. 处理时间:根据图片复杂度,处理时间在10-30秒之间
  7. URL有效期:返回的图像URL地址有效期为1个小时,请及时保存或下载

🔗 相关链接