FaceNinja

Dezvoltatori · API REST

API-ul pentru capete MetaHuman, făcut pentru loturi.

Trimiteți fotografii ale unei persoane, aflați când capul este gata, preluați formatul de care aveți nevoie. Același apel creează un cap sau cinci sute. Fiecare cap este finalizat: piele 4K, recomandări de groom (păr MetaHuman), un gât adaptat și 52 de forme ARKit. Un cap durează aproximativ 4 minute, așa că API-ul este asincron prin design.

  • REST + JSON
  • Chei Bearer
  • Webhook-uri semnate
  • Chei de idempotență
  • OpenAPI 3.1
  • llms.txt

A nu se confunda cu API-urile Python și C++ MetaHuman de la Epic, care rulează în interiorul Unreal Engine. FaceNinja este un API web care creează capul pe care îl aduceți în ele.

Trimiteți. Primiți răspuns. Preluați.

  1. Trimiteți.

    POST /v1/heads cu 1 până la 15 fotografii ale unei persoane, ca fișiere multipart sau ca ID-uri ale fișierelor încărcate mai întâi. Adăugați un Idempotency-Key, iar o reîncercare nu creează și nu facturează niciodată un al doilea cap.

  2. Primiți răspuns.

    Alegeți cum: un webhook semnat către server, un canal de evenimente trimise de server sau un long poll ?wait=60 pentru scripturi.

  3. Preluați.

    Cereți glb, fbx, obj, stl, ply sau metahuman_zip, cu sau fără forme ARKit. Primiți un link semnat care nu necesită cheie. Păstrați ID-ul capului, nu linkul. Ce conține fiecare format

Creditele unui cap eșuat se întorc automat, iar error.code spune de ce.

Backendul are nevoie doar de un webhook.

Creați capul, păstrați-i ID-ul și acționați când vă apelăm. Aceasta este întreaga integrare, în Python.

Cod
# when the user confirms their photos
head = api.post("/v1/heads", files=photos,
                data={"webhook_url": "https://you.example/hooks/faceninja"},
                headers={"Idempotency-Key": str(uuid4())}).json()
save(user, head["id"])

# later, FaceNinja calls you
@app.post("/hooks/faceninja")
def on_head(event = verified(request)):        # check FaceNinja-Signature first
    if event["type"] == "head.completed":
        link = api.post(f"/v1/heads/{event['data']['id']}/files",
                        json={"format": "glb", "arkit": True}).json()
        store_on_your_cdn(link["url"])

Prescurtat pentru lectură. Referința EN conține cererea completă, verificarea semnăturii și toate erorile.

O distribuție dintr-un folder, sigur de rulat de două ori.

Un lot înseamnă mai multe creări individuale. Dați fiecăreia o cheie de idempotență derivată din propriile date, de exemplu numele folderului, și puteți rula din nou întregul script după o cădere, fără să creați sau să plătiți un cap de două ori. Apoi lăsați webhook-urile să vă spună care capete sunt gata.

Python
for person in sorted(Path("cast").iterdir()):            # one folder per person
    photos = [("photos", open(p, "rb")) for p in sorted(person.glob("*.jpg"))]
    api.post("/v1/heads", files=photos,
             data={"name": person.name, "webhook_url": HOOK},
             headers={"Idempotency-Key": f"cast-2026-10/{person.name}"})
  • Ritm: până la 30 de creări de capete pe minut pentru fiecare cont. La 429, așteptați Retry-After secunde și trimiteți din nou aceeași cheie.
  • Verificați mai întâi: ?dry_run verifică o creare și returnează o ofertă de preț, fără să creeze un cap. GET /v1/account arată soldul.
  • Urmăriți: GET /v1/heads listează capetele, pagină cu pagină, cu starea lor.
  • Eșuează unul, nu toate: un cap care eșuează raportează propriul error.code, iar creditele lui se întorc. Restul lotului continuă.

Sau lăsați agentul să scrie integrarea.

Referința API, fișierul OpenAPI și llms.txt sunt scrise pentru oameni și pentru modele de limbaj. Dați agentului skill-ul și vă poate crea direct capete sau poate scrie și testa scriptul de pipeline pentru stack-ul pe care îl folosiți.

Prompt de pipeline
Read https://faceninja.net/llms.txt and https://faceninja.net/skill/SKILL.md. Write a Python script for our pipeline: for each new folder in ./incoming, create one FaceNinja head from its photos with an Idempotency-Key derived from the folder name and a webhook_url I give you. Add a small web handler that checks the FaceNinja-Signature header, and on head.completed downloads the FBX to ./heads/<folder name>; on head.failed it logs error.code. Read the API key from FACENINJA_API_KEY. Don't run anything against my account until I say so.

Lăsați acest prompt în engleză: agentul are nevoie de adresa web exact așa cum este scrisă. Apoi îi puteți vorbi în limba dumneavoastră.

Făcut pentru reîncercări, cozi și fotografii slabe.

Creări idempotente

Același Idempotency-Key în decurs de 24 de ore returnează același cap, niciodată o a doua taxare.

Webhook-uri semnate

head.completed și head.failed, cu o semnătură HMAC în FaceNinja-Signature.

Coadă transparentă

Cât timp așteaptă, un cap raportează locul în coadă și o estimare.

Erori după care puteți ramifica codul

Valori error.code stabile (no_face, not_same_person, content_rejected, …) și un hint.

Rambursări fără tichete

Creditele sunt rezervate la creare, taxate la finalizare și eliberate în caz de eșec sau de ștergere.

Ștergere la cerere

Ștergeți un cap și fotografiile lui oricând doriți. Fișierele expiră la 30 de zile după ce se termină capul.

Cifrele de care trebuie să țineți cont.

Limite
Fotografii per capDe la 1 la 15, o singură persoană; JPEG, PNG, WebP, HEIC/HEIF sau AVIF, până la 25 MiB fiecare
Durată per capAproximativ 4 minute, plus coada, dacă există
Long poll?wait până la 60 s per apel
Linkuri de descărcarePornire în 60 s; o descărcare pornită se termină
Limite de rată600 de cereri pe minut pentru fiecare cont; 30 de creări de capete pe minut
PăstrareFotografiile și fișierele, 30 de zile după ce se termină capul
Preț1.500 de credite (15 USD) per cap, toate formatele incluse

Referința este sursa de adevăr. Dacă un număr de aici diferă, are prioritate referința.

Fața jucătorului, din prima zi a fișierului de salvare.

Lăsați jucătorii să-și aducă propria față sau construiți o distribuție de NPC-uri din actori care și-au dat acordul. Fiecare cap este același mesh cu altă față, așa că un singur rig, un singur material și un singur set de animații se potrivesc tuturor. Cele 52 de forme ARKit primesc lip sync sau camera jucătorului.

Planificați așteptarea. Un cap durează aproximativ 4 minute, nu milisecunde. Porniți-l din timp, în timpul onboardingului sau al unui tutorial, afișați un înlocuitor și schimbați capul când sosește webhook-ul.

GLB pentru Unity, Godot și web; FBX și MetaHuman ZIP pentru Unreal. Automatizarea Unreal este în acces timpuriu: solicitați-o.

Termenii noștri cer permisiunea persoanei din fotografie și interzic fotografiile cu copii. Integrați aceeași regulă în aplicația dumneavoastră.

Fotografie sintetică a unui bărbat în vârstă, în lumină portocalie durăFotografie sintetică a unei femei care râde, cu ochelariFotografie sintetică a unui bărbat cu barbă, cu capul întorsFotografie sintetică a unei femei al cărei păr lung îi acoperă urechile
Patru subiecți de test sintetici, o singură topologie.

Folosiți deja un alt API de la fotografie la MetaHuman?

Dacă integrarea creează deja un cap, îl așteaptă și descarcă un fișier, își păstrează forma și aici. Căile, numele câmpurilor și pasul cu fișierul diferă, iar ghidul de migrare le pune în corespondență apel cu apel.

Întrebări ale dezvoltatorilor.

01Există un sandbox?
Adăugați ?dry_run la un apel de creare. Verifică cererea și returnează o ofertă de preț, fără să creeze un cap și fără să vă taxeze.
02Îl pot apela dintr-un browser sau dintr-o aplicație mobilă?
Nu. Păstrați cheia pe server. Linkurile semnate de încărcare și descărcare nu necesită cheie, așa că un client poate încărca sau descărca direct.
03Ce SDK-uri există?
HTTP simplu și un fișier OpenAPI 3.1 din care puteți genera un client. Referința are exemple cu curl, Node și Python. CLI-ul skill-ului pentru agenți este, de asemenea, un singur fișier Python pe care îl puteți citi și apela din scripturi.
04Câte capete pot crea simultan?
Până la 30 de creări de capete pe minut pentru fiecare cont, iar fiecare rulează în coadă. Pentru mai mult de 1.000 de capete, scrieți-ne despre facturare și capacitate.
05Este acesta API-ul MetaHuman al Epic?
Nu. API-urile MetaHuman ale Epic controlează prin script MetaHuman Creator în interiorul Unreal Engine. FaceNinja creează capul din fotografii, ca serviciu web, și vă dă fișierele și arhiva MetaHuman ZIP pe care să le duceți în Unreal.
06Poate crea un cap dintr-un set de fotografii?
Da, în beta: reconstrucția din mai multe fotografii ale unei sesiuni returnează și poziția camerei și distanța focală pentru fiecare fotografie. Scrieți-ne dacă doriți să o încercați cu propriul set de capturi.

Primul dumneavoastră cap este la un apel API distanță.