Introduction
Le modèle transpose un visage d’une image sur la personne d’une autre et accorde le teint entre les deux au passage. L’ampleur du transfert est décidée pour vous : le moteur fond soit le visage seul, soit la tête entière, selon ce qui paraît le plus naturel pour cette paire ; l’implantation des cheveux n’est donc pas toujours préservée. La pose, la tenue, la lumière et l’arrière-plan de la cible restent tels quels.
Face Swap Plus est le palier réglable de la gamme Face Swap. En plus des deux images, il accepte une courte consigne écrite, un format de fichier de sortie et un seed, et s’envoie à spicyapi/face-swap-v1-plus/edit. L’appel est asynchrone : il renvoie un identifiant de tâche, vous interrogez cette tâche, et chaque requête renvoie une image, facturée à l’image produite quel que soit le format demandé.
Fonctionnalités et points forts
Le teint est accordé pour vous
C’est à la frontière qu’un échange de visage se trahit le plus souvent : une référence prise sous une lumière chaude, placée dans une cible éclairée froidement, laisse un halo autour de la mâchoire et un cou qui n’appartient plus à la tête. Ce moteur accorde le teint des deux photos pendant le transfert ; une paire proche mais pas identique tombe donc généralement juste sans retouche colorimétrique manuelle. La direction de la lumière compte toujours — un visage éclairé de l’autre côté paraît encore faux —, mais le désaccord le plus fréquent est réglé pour vous.
La profondeur de fusion est décidée paire par paire
C’est un échange de tête intelligent : pour chaque paire, le moteur juge s’il est plus naturel de fondre le visage seul ou la tête entière, et aucun réglage ne permet d’imposer l’un ou l’autre. C’est la différence concrète avec le reste de la gamme, où l’implantation des cheveux reste toujours celle de la cible. C’est aussi pourquoi un résultat peut revenir avec une implantation un peu différente de celle attendue : le moteur a jugé la fusion complète plus crédible.
Paramètres de requête
| Paramètre | Obligatoire | Description |
|---|---|---|
image_url | Oui | L’image modifiée. 1 caractères minimum |
reference_image_url | Oui | L’image qui fournit les traits du visage. 1 caractères minimum |
prompt | Non | Facultatif, mais concevez comme s’il n’était pas là. 200 caractères maximum |
output_format | Non | Le format de fichier de l’image renvoyée. Sans réglage, c’est JPEG ; prenez PNG pour un fichier sans perte à retoucher et WebP quand le résultat part directement sur le web. |
output_quality | Non | Qualité d’image demandée pour le résultat, de 10 à 100 (95 par défaut). Sans effet sur le prix. |
seed | Non | Réutilisez une graine pour comparer deux exécutions sur le même couple d’images contre un tirage identique, de sorte que la seule chose changée soit la seule qui bouge. |
Tarification
$0.16 / image
Cas d’utilisation
Chaînes d’avatars et de photos de profil en volume
Une liste de paires cible-référence passe par le point de terminaison de façon programmatique, un appel par paire. Fixez un seed par paire quand une nouvelle tentative doit rester comparable à la première, et choisissez WebP quand les résultats partent directement sur le web.
Fonctions grand public derrière un formulaire d’envoi
L’interaction se résume à une photo de l’utilisateur et une image que vous fournissez. L’utilisateur n’a rien à régler ni de prompt à écrire : toute la fonction tient en un champ de formulaire et une tâche en arrière-plan.
Catalogues et gabarits
Un même visage de référence sur une série d’images préparées donne un ensemble cohérent sans en régénérer aucune. Le réglage de format livre les fichiers sous la forme qu’attend déjà votre chaîne ; tout accessoire qu’exige un gabarit doit se trouver dans l’image avant l’échange.
Images sans censure : la limite est le consentement, pas le sujet
SpicyAPI n’ajoute aucun filtre de contenu et ne demande aucun indicateur de maturité ; le corps de la requête contient les mêmes champs, quoi que montre l’image. Ce qui ne se relâche pas, c’est l’autorisation : il vous faut le consentement explicite et éclairé de la personne représentée pour ce visage précis dans ce contenu précis, et une photo publique n’implique jamais de consentement.
Guide de prompt et conseils pratiques
Le champ de consigne n’a ici aucun effet
Le modèle sous-jacent accepte prompt, limité à 200 caractères, mais nous n’avons jamais réussi à lui faire changer quoi que ce soit.
| Ce que nous avons envoyé | Ce qui est revenu |
|---|---|
add mirrored aviator sunglasses | Pas de lunettes de soleil ; identique à une requête sans consigne |
wearing black sunglasses | Pas de lunettes de soleil ; identique à une requête sans consigne |
restyle the hair into a sleek straight bob | Cheveux inchangés |
soften the expression into a faint half smile | Expression inchangée |
a wide open-mouthed laugh | Expression inchangée |
Cinq appels réels le 20 septembre 2026, chacun comparé à la même requête avec le champ vide. Aucune erreur, aucun avertissement : la réponse ne permet pas de savoir que la valeur a été ignorée. Construisez sans ce champ : s’il vous faut un accessoire ou une autre expression, placez-les dans l’image cible avant l’échange.
Ce que le moteur décide pour vous
Deux passages sur ce point de terminaison ont donné des décisions opposées, et c’est la façon la plus claire de le voir :
| Cible | Ce qui a été transféré |
|---|---|
| Une queue de cheval noire bien serrée | La tête entière : les cheveux roux de la référence sont arrivés avec les traits |
| Des cheveux mouillés plaqués en arrière | Le visage seul : les cheveux de la cible sont restés tels quels |
S’il vous fallait un accessoire ou une autre expression
Le champ de consigne ne vous y mènera pas ; le changement doit donc exister avant l’échange :
| Ce que vous vouliez | Où le faire à la place |
|---|---|
| Lunettes de soleil, chapeau, bijoux | Les mettre sur la personne de l’image cible avant l’appel |
| Une autre expression ou une autre coiffure | Photographier ou générer l’image cible ainsi ; l’échange conserve les deux |
Choisir le format de sortie et le seed
Réglez output_format quand le type de fichier compte en aval, car une conversion après coup impose un réencodage : PNG pour un fichier sans perte que vous retravaillerez, WebP pour des résultats qui partent directement sur le web, JPEG si vous ne précisez rien. Aucun des trois ne change le prix ; choisissez donc celui qu’attend votre chaîne, pas celui que vous croyez moins cher. Ne fixez seed que si vous comptez comparer des passages : deux passages sur la même paire reçoivent le même tirage, et seule la variable modifiée bouge. C’est un outil de comparaison, pas la promesse d’une image identique à l’octet près. En production, un nouveau tirage à chaque appel est généralement ce qu’il vous faut.
Quand le résultat n’est pas celui attendu
| Ce que vous voyez | Ce qu’il faut changer d’abord |
|---|---|
| Une couture à la mâchoire malgré l’accord du teint | Prendre une référence éclairée du même côté : le teint est accordé, pas la direction |
| L’implantation des cheveux a changé alors que vous vouliez la garder | Normal ici ; utilisez Face Swap ou Face Swap Pro |
| La consigne n’a eu aucun effet visible | Normal : le champ n’agit pas ici, modifiez plutôt l’image cible |
| La mauvaise personne a été modifiée | Recadrer la cible sur une seule personne |
| Des traits flous ou approximatifs | Prendre une référence où le visage est plus grand et plus net |
Choisir le bon point de terminaison
| Ce dont vous avez besoin | Point de terminaison |
|---|---|
| L’accord du teint et le choix du format de fichier | Ce point de terminaison |
| La précision des repères du visage et la texture d’origine, sans réglage | Face Swap Pro |
| L’échange simple avec seed, sans jamais toucher aux cheveux | Face Swap |
| La tête entière, cheveux compris, à chaque fois | Head Swap |
| Un visage sur tout un clip en mouvement | Video Face Swap |
Traiter par lot
Deux champs obligatoires et trois valeurs par défaut font d’un lot une simple boucle sur des paires. Envoyez chaque appel de création avec un Idempotency-Key et stockez l’identifiant de tâche à côté de l’enregistrement qui l’a déclenché ; si une connexion tombe, répéter la requête avec la même clé renvoie la tâche d’origine au lieu d’en lancer une seconde, facturée une seconde fois. Interrogez toutes les quelques secondes, puis copiez chaque résultat dans votre propre stockage : les fichiers générés sont supprimés après 14 jours, les images sources envoyées après un jour.
Démarrage rapide de l’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-plus/edit",
"input": {
"image_url": "https://example.com/reference.png",
"output_format": "jpeg",
"reference_image_url": "https://example.com/reference.png"
}
}'
# 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"
La référence API détaille l’authentification, le schéma complet, le polling et la gestion des erreurs.









