Introducción
Face Swap traslada los rasgos faciales de una imagen a la persona de otra. Solo viajan los rasgos: el peinado, el nacimiento del pelo, la silueta de la cabeza, la pose, la ropa, la luz y el fondo del destino quedan como estaban, y por eso el resultado se integra en la foto original en lugar de quedar pegado encima.
La solicitud son dos URL de imagen y un seed opcional: image_url es la foto que se modifica y reference_image_url aporta el rostro. No hay campo de prompt que redactar, y cada solicitud devuelve una imagen.
Funciones y aspectos destacados
Se conserva la toma, cambia la identidad
Es la opción acotada cuando la foto de destino ya tiene el pelo, la pose, la ropa, el encuadre y el entorno correctos. Traslada la identidad facial y protege el resto de la composición aprobada, así que cambiar a la persona no se convierte en una generación completa de la imagen.
Pensado para pares de imágenes repetibles
El flujo es simple a propósito: prepara un destino y una referencia con derechos aclarados y con ángulo y luz compatibles, y luego revisa la mandíbula, los ojos y la transición de la piel. Eso lo hace útil para variantes controladas de avatares, catálogos y campañas en las que la toma debe seguir siendo reconocible.
Decide el alcance del intercambio antes de empezar
Usa Face Swap cuando el peinado y la silueta de la cabeza del destino forman parte de la composición. Si la identidad que llega tiene que traer su pelo y toda la forma de la cabeza, envía el trabajo a Head Swap; elegir bien el alcance evita repetir la ejecución sin necesidad.
Parámetros de la solicitud
| Parámetro | Obligatorio | Descripción |
|---|---|---|
image_url | Sí | La imagen que se modifica. La forma de cabeza, el peinado, la pose, el vestuario y el fondo de esa persona se conservan: solo se reemplazan sus rasgos faciales. mínimo 1 caracteres |
reference_image_url | Sí | La imagen que aporta los rasgos faciales. Solo se toma la cara, no la forma de la cabeza ni el pelo. mínimo 1 caracteres |
face_mapping | No | Para fotos de grupo: indica qué rostro de la referencia va sobre qué rostro del destino, un par por entrada, con los rostros numerados desde 0 en el orden de detección. máximo 10 elementos |
style | No | Acabado del rostro intercambiado: realistic (por defecto) conserva el tono y la textura naturales de la piel, beautify la suaviza e ilumina, lossless conserva el máximo detalle… |
face_enhance | No | Aplica una pasada de mejora facial al rostro intercambiado para darle más resolución. Desactivado por defecto. Valor predeterminado: |
seed | No | Reutiliza una seed para comparar dos corridas sobre el mismo par de imágenes contra un sorteo idéntico; déjala vacía o en 0 para un sorteo aleatorio cada vez. |
Precios
$0.013 / imagen
Casos de uso
Un rostro nuevo para un retrato cuyo pelo ya funciona
Usa este endpoint cuando el peinado, el nacimiento del pelo y la silueta de la cabeza de la foto de destino forman parte de la composición y solo deben cambiar los rasgos. Envía el destino como image_url y el rostro como reference_image_url, y compara ojos y mandíbula con el original a tamaño completo antes de aceptar el resultado.
Cambiar a la persona de una toma de banco o generada
Toma una imagen cuya luz, pose y set ya funcionan y pon otro rostro en ella, en lugar de regenerar toda la imagen y perder la composición que ya habías aprobado.
Flujos masivos de avatares y fotos de perfil
Como no hay prompt que escribir, una lista de pares destino-referencia puede pasar por el endpoint de forma programática. Fija un seed por par cuando un reintento tenga que ser comparable con la primera ejecución.
Personajes coherentes en toda una sesión
Genera una serie de escenas con cualquier modelo y luego lleva un mismo rostro a todas para que la serie se lea como la misma persona. Como el pelo y la ropa se quedan con cada imagen de destino, la variedad que generaste sobrevive a la pasada.
Guía de prompts y consejos prácticos
Confirma que tienes los derechos de ambos rostros
Antes de cualquier cosa técnica: el destino y la referencia muestran a personas, y necesitas autorización tanto para el rostro que trasladas como para la imagen a la que lo llevas. Guarda la autorización junto al registro del trabajo.
Aloja ambas imágenes y envía el par
image_url es la imagen que se modifica; reference_image_url aporta el rostro. No interviene ningún prompt. Un editor general necesitaría una instrucción como: «Face swap: take the face and hairline of the woman in the second image and place it onto the woman in the first image. Keep the first image's pose, outfit, magazine layout, lighting, framing and colour grade completely unchanged. Match skin tone and lighting so the result reads as one photograph.»; este endpoint no necesita ni lo uno ni lo otro.
Revisa el resultado antes de iterar
Ambas imágenes deben mostrar un rostro bien visible, más o menos de frente y bien iluminado; los perfiles muy marcados, el desenfoque de movimiento, las oclusiones densas y los rostros muy pequeños son donde el traslado se degrada o falla por completo. Una gran diferencia de dirección de la luz o de tono de piel entre las dos imágenes se nota en la mandíbula, así que elige una referencia cuya luz se parezca a la del destino. Por defecto se intercambia un rostro por imagen; en una foto de grupo, indica los pares en face_mapping (qué rostro de la referencia va sobre qué rostro del destino, numerados desde 0). No hay prompt, máscara ni control de intensidad: si el resultado está mal, la solución es otro par de imágenes, no una solicitud reformulada.
Inicio rápido de la API
# Generate the idempotency key once; reuse it when retrying after a lost response.
export SPICY_IDEMPOTENCY_KEY="${SPICY_IDEMPOTENCY_KEY:-$(uuidgen)}"
curl -X POST https://api.spicyapi.ai/api/v1/jobs/createTask \
-H "Authorization: Bearer $SPICY_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $SPICY_IDEMPOTENCY_KEY" \
-d '{
"model": "spicyapi/face-swap-v1/edit",
"input": {
"image_url": "https://example.com/reference.png",
"reference_image_url": "https://example.com/reference.png",
"style": "realistic"
}
}'
# Copy data.taskId from the response into TASK_ID, then poll the status.
TASK_ID="TASK_ID_FROM_RESPONSE"
curl "https://api.spicyapi.ai/api/v1/jobs/recordInfo?taskId=$TASK_ID" \
-H "Authorization: Bearer $SPICY_API_KEY"
Consulta la referencia de la API para autenticación, el esquema completo, sondeo y gestión de errores.











