Introduzione
Trasferisce un volto da un’immagine alla persona di un’altra e, durante il trasferimento, uniforma l’incarnato tra le due. Quanto trasferire lo decide il motore: fonde solo il volto oppure l’intera testa, a seconda di cosa risulta più naturale per quella coppia, quindi l’attaccatura dei capelli non resta sempre intatta. Posa, abiti, luce e sfondo della destinazione restano com’erano.
Face Swap Plus è il livello regolabile della linea Face Swap. Oltre alle due immagini accetta una breve istruzione scritta, un formato di file di output e un seed, e si invia a spicyapi/face-swap-v1-plus/edit. La chiamata è asincrona: restituisce un id di task, interroghi quel task e ogni richiesta restituisce un’immagine, con costo per immagine prodotta qualunque sia il formato richiesto.
Caratteristiche principali
L’incarnato viene uniformato per te
Il punto in cui uno scambio di volto si tradisce più spesso è il bordo: un riferimento scattato con luce calda inserito in una destinazione illuminata a luce fredda lascia un alone attorno alla mandibola e un collo che non appartiene più alla testa. Questo motore uniforma il tono tra le due foto durante il trasferimento, così una coppia simile ma non identica di solito funziona senza una correzione colore manuale. La direzione della luce conta ancora — un volto illuminato dal lato opposto sembra comunque sbagliato —, ma il disaccordo più comune è già risolto.
La profondità della fusione si decide coppia per coppia
È uno scambio di testa intelligente: per ogni coppia il motore valuta se sia più naturale fondere solo il volto o l’intera testa, e non esiste un’impostazione per imporre l’una o l’altra. È la differenza pratica rispetto al resto della linea, dove l’attaccatura dei capelli resta sempre quella della destinazione. Ed è anche il motivo per cui un risultato può tornare con un’attaccatura un po’ diversa da quella attesa: il motore ha giudicato più credibile la fusione completa.
Parametri della richiesta
| Parametro | Obbligatorio | Nota |
|---|---|---|
image_url | Sì | L'immagine che cambia. almeno 1 caratteri |
reference_image_url | Sì | L'immagine che fornisce i lineamenti. almeno 1 caratteri |
prompt | No | Facoltativo, ma progetta come se non ci fosse. al massimo 200 caratteri |
output_format | No | Il formato file dell'immagine restituita. |
output_quality | No | Qualità dell’immagine richiesta per il risultato, da 10 a 100 (predefinito 95). Non cambia il prezzo. |
seed | No | Riusa un seed per confrontare due esecuzioni sulla stessa coppia di immagini a parità di estrazione, così l'unica cosa che si muove è quella che hai cambiato. |
Prezzi
$0.16 / immagine
Casi d’uso
Pipeline di avatar e foto profilo su larga scala
Un elenco di coppie destinazione-riferimento passa dall’endpoint in modo programmatico, una chiamata per coppia. Fissa un seed per coppia quando un nuovo tentativo deve restare confrontabile con il primo, e scegli WebP quando i risultati vanno direttamente sul web.
Funzioni consumer dietro un modulo di caricamento
L’interazione è una foto dell’utente e un’immagine che fornisci tu. L’utente non ha nulla da configurare né prompt da scrivere, quindi l’intera funzione è un campo del modulo più un job in background.
Cataloghi e template
Lo stesso volto di riferimento su una serie di immagini preparate dà una serie coerente senza rigenerarne nessuna. L’impostazione del formato consegna i file nella forma che la tua pipeline si aspetta già; qualsiasi accessorio richiesto da un template deve essere nell’immagine prima dello scambio.
Immagini senza censura, dove il limite è il consenso e non il soggetto
SpicyAPI non aggiunge filtri di contenuto propri e non chiede alcun flag di maturità, quindi il corpo della richiesta contiene sempre gli stessi campi, qualunque cosa mostri l’immagine. Quello che non si allenta è l’autorizzazione: ti serve il consenso esplicito e informato della persona ritratta per quel volto specifico in quel materiale specifico, e il fatto che una foto sia pubblica non implica mai consenso.
Consigli avanzati
Qui il campo dell’istruzione non fa nulla
Il modello sottostante accetta prompt con un limite di 200 caratteri, ma non siamo riusciti a fargli cambiare nulla.
| Cosa abbiamo inviato | Cosa è tornato |
|---|---|
add mirrored aviator sunglasses | Niente occhiali da sole; identico a una richiesta senza istruzione |
wearing black sunglasses | Niente occhiali da sole; identico a una richiesta senza istruzione |
restyle the hair into a sleek straight bob | Capelli invariati |
soften the expression into a faint half smile | Espressione invariata |
a wide open-mouthed laugh | Espressione invariata |
Cinque chiamate reali il 20 settembre 2026, ciascuna confrontata con la stessa richiesta con il campo vuoto. Nessun errore e nessun avviso, quindi la risposta non ti dice che il valore è stato ignorato. Lavora senza: se ti serve un accessorio o un’altra espressione, mettili nell’immagine di destinazione prima dello scambio.
Cosa decide il motore al posto tuo
Due esecuzioni su questo endpoint sono tornate con decisioni opposte, ed è il modo più chiaro per vederlo:
| Destinazione | Cosa è stato trasferito |
|---|---|
| Una coda di cavallo nera tirata | L’intera testa: i capelli rossi del riferimento sono arrivati insieme ai tratti |
| Capelli bagnati pettinati all’indietro | Solo il volto: i capelli della destinazione sono rimasti come nello scatto |
Se ti serviva un accessorio o un’altra espressione
Il campo dell’istruzione non ti ci porta, quindi la modifica deve esistere prima dello scambio:
| Cosa volevi | Dove farlo invece |
|---|---|
| Occhiali da sole, un cappello, gioielli | Mettili alla persona dell’immagine di destinazione prima della chiamata |
| Un’altra espressione o un’altra acconciatura | Scatta o genera così l’immagine di destinazione; lo scambio conserva entrambe |
Scegliere formato di output e seed
Imposta output_format quando il tipo di file conta a valle, perché convertire dopo costa una nuova codifica: PNG per un file senza perdita da ritoccare ancora, WebP per risultati che vanno direttamente sul web, JPEG se non indichi nulla. Nessuno dei tre cambia il prezzo, quindi scegli quello che serve alla tua pipeline, non quello che pensi costi meno. Fissa un seed solo quando vuoi confrontare esecuzioni: due esecuzioni sulla stessa coppia ricevono la stessa estrazione, e l’unica cosa che si muove è la variabile cambiata. È uno strumento di confronto, non la promessa di un’immagine identica byte per byte. In produzione di solito vuoi un’estrazione nuova ogni volta.
Quando il risultato non è quello che volevi
| Cosa vedi | Cosa cambiare per primo |
|---|---|
| Una cucitura sulla mandibola nonostante l’accordo del tono | Usa un riferimento illuminato dalla stessa direzione: il tono viene uniformato, la direzione no |
| L’attaccatura dei capelli è cambiata e volevi mantenerla | Qui è previsto; usa Face Swap o Face Swap Pro |
| L’istruzione non ha avuto alcun effetto visibile | È previsto: il campo qui non agisce; cambia invece l’immagine di destinazione |
| È cambiata la persona sbagliata | Ritaglia la destinazione su una sola persona |
| Tratti morbidi o approssimativi | Usa un riferimento con il volto più grande e più nitido |
Scegliere l’endpoint giusto
| Cosa ti serve | Endpoint |
|---|---|
| Accordo dell’incarnato e scelta del formato di file | Questo endpoint |
| Precisione sui punti del volto e texture originale, senza regolazioni | Face Swap Pro |
| Lo scambio semplice con seed, capelli sempre intatti | Face Swap |
| L’intera testa, capelli inclusi, ogni volta | Head Swap |
| Un volto lungo tutta una clip in movimento | Video Face Swap |
Usarlo in batch
Due campi obbligatori e tre valori predefiniti fanno di un batch un semplice ciclo sulle coppie. Invia ogni chiamata di creazione con un Idempotency-Key e salva l’id del task accanto al record che l’ha generato; se una connessione cade, ripetere la richiesta con la stessa chiave restituisce il task originale invece di avviarne un secondo con un secondo addebito. Interroga ogni pochi secondi e copia ogni risultato nel tuo archivio: i file generati vengono eliminati dopo 14 giorni, le immagini sorgente caricate dopo uno.
Avvio rapido dell’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"
Nel riferimento dell’API trovi autenticazione, schema completo, polling e gestione degli errori.









