FaceNinja

Fejlesztők · REST API

A MetaHuman-fej API, kötegekre építve.

Küldd el egy ember fotóit, értesülj, amikor a fej elkészült, és töltsd le a szükséges formátumot. Ugyanaz a hívás egy fejet vagy ötszázat készít. Minden fej kész: 4K bőr, ajánlott groomok (MetaHuman-haj), illeszkedő nyak és 52 ARKit blendshape. Egy fej körülbelül 4 percig készül, ezért az API tervezésénél fogva aszinkron.

  • REST + JSON
  • Bearer-kulcsok
  • Aláírt webhookok
  • Idempotencia-kulcsok
  • OpenAPI 3.1
  • llms.txt

Nem tévesztendő össze az Epic MetaHuman Python és C++ API-jaival, amelyek az Unreal Engine-en belül futnak. A FaceNinja egy webes API, amely azt a fejet készíti el, amelyet aztán ezekbe viszel be.

Küldés. Visszajelzés. Letöltés.

  1. Küldés.

    POST /v1/heads egy személy 1–15 fotójával, multipart fájlokként vagy előbb feltöltött azonosítókkal. Adj hozzá egy Idempotency-Key fejlécet, és az újrapróbálás soha nem készít és nem számláz második fejet.

  2. Visszajelzés.

    Te választod a módját: aláírt webhook a szerveredre, server-sent event stream, vagy ?wait=60 long poll szkriptekhez.

  3. Letöltés.

    Kérj glb, fbx, obj, stl, ply vagy metahuman_zip formátumot, ARKit blendshape-ekkel vagy nélkülük. Aláírt linket kapsz, amelyhez nem kell kulcs. A fej azonosítóját tárold el, ne a linket. Mit tartalmaz mindegyik formátum

A sikertelen fej kreditje automatikusan visszajár, az error.code pedig megmondja az okot.

Egy webhook elég a backendednek.

Hozd létre a fejet, tárold el az azonosítóját, és cselekedj, amikor hívunk. Ez a teljes integráció, Pythonban.

Kód
# 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"])

Olvashatóság kedvéért lerövidítve. A teljes kérést, az aláírás-ellenőrzést és az összes hibát lásd a referenciában EN.

Szereplőgárda egy mappából, kétszer is biztonságosan futtatható.

A köteg sok önálló létrehozás. Adj mindegyiknek egy idempotencia-kulcsot, amelyet a saját adataidból származtatsz, például a mappa nevéből, és az egész szkriptet újrafuttathatod egy összeomlás után anélkül, hogy kétszer készítenél vagy fizetnél egy fejért. Aztán a webhookok megmondják, mely fejek készültek el.

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}"})
  • Tempó: fiókonként percenként legfeljebb 30 fej létrehozása. 429 esetén várj Retry-After másodpercet, és küldd el újra ugyanazt a kulcsot.
  • Előbb ellenőrizz: A ?dry_run ellenőriz egy létrehozást, és árajánlatot ad vissza fej készítése nélkül. A GET /v1/account megmutatja az egyenleget.
  • Követés: A GET /v1/heads oldalanként listázza a fejeidet az állapotukkal.
  • Egy hibázik, nem az összes: a sikertelen fej a saját error.code értékét jelzi, és a kreditjei visszakerülnek. A köteg többi része halad tovább.

Vagy írassa meg az ügynököd az integrációt.

Az API-referencia, az OpenAPI-fájl és az llms.txt emberekre és nyelvi modellekre is szabva van. Add oda az ügynöködnek a skillt, és közvetlenül készíthet neked fejeket, vagy megírhatja és letesztelheti a pipeline-szkriptet a te stackedhez.

Pipeline-prompt
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.

Hagyd angolul ezt a promptot: az ügynöknek pontosan így kell megkapnia a webcímet. Utána a saját nyelveden beszélhetsz vele.

Újrapróbálásra, sorokra és rossz fotókra építve.

Idempotens létrehozás

Ugyanaz az Idempotency-Key 24 órán belül ugyanazt a fejet adja vissza, soha nem terhel kétszer.

Aláírt webhookok

head.completed és head.failed, HMAC-aláírással a FaceNinja-Signature fejlécben.

Őszinte sor

Várakozás közben a fej jelzi a helyét a sorban és egy becslést.

Hibák, amelyekre elágazhatsz

Stabil error.code értékek (no_face, not_same_person, content_rejected, …) és egy hint.

Visszatérítés ticket nélkül

A kreditek létrehozáskor zárolódnak, a befejezéskor terhelődnek, sikertelenségkor vagy törléskor felszabadulnak.

Törlés kérésre

Törölj egy fejet a fotóival együtt, amikor csak akarod. A fájlok a fej elkészülte után 30 nappal lejárnak.

A számok, amelyekhez igazodnod kell.

Korlátok
Fotó fejenként1–15, egy személy; JPEG, PNG, WebP, HEIC/HEIF vagy AVIF, fotónként legfeljebb 25 MiB
Idő fejenkéntKörülbelül 4 perc, plusz az esetleges sor
Long poll?wait hívásonként legfeljebb 60 s
Letöltési linkek60 s-on belül el kell indulni; az elindult letöltés befejeződik
Kérési korlátokFiókonként percenként 600 kérés; percenként 30 fej létrehozása
MegőrzésA fotók és fájlok a fej elkészülte után 30 napig
ÁrFejenként 1500 kredit (15 USD), minden formátummal együtt

A referencia a mérvadó. Ha egy itteni szám eltér, a referencia az érvényes.

A játékos arca a mentés első napjától.

Hagyd, hogy a játékosok a saját arcukat hozzák, vagy építs NPC-szereplőgárdát beleegyező színészekből. Minden fej ugyanaz a fejháló más arccal, ezért egyetlen rig, egyetlen anyag és egyetlen animációkészlet illik mindegyikhez. Az 52 ARKit blendshape lip syncet vagy a játékos kameráját fogadja.

Számolj a várakozással. Egy fej körülbelül 4 percig készül, nem ezredmásodpercekig. Indítsd korán, a bevezetés vagy a tutorial közben, mutass helyettesítőt, és cseréld be a fejet, amikor megérkezik a webhook.

GLB: Unity, Godot és web; FBX és MetaHuman ZIP: Unreal. Az Unreal-automatizálás korai hozzáférésben van: kérd el.

A feltételeink megkövetelik a fotón szereplő személy engedélyét, és tiltják a gyerekekről készült fotókat. Építsd be ugyanezt a szabályt a saját folyamatodba.

Szintetikus fotó egy idős férfiról kemény, narancsos fénybenSzintetikus fotó egy nevető, szemüveges nőrőlSzintetikus fotó egy szakállas férfiról, elfordított fejjelSzintetikus fotó egy nőről, akinek a hosszú haja eltakarja a fülét
Négy szintetikus tesztalany, egyetlen topológia.

Már használsz másik fotóból MetaHuman-fejet készítő API-t?

Ha az integrációd már létrehoz egy fejet, megvárja, és letölt egy fájlt, itt is megtartja az alakját. Az útvonalak, a mezőnevek és a fájllépés eltér, az átállási útmutató pedig hívásról hívásra megfeleltet.

Fejlesztői kérdések.

01Van sandbox?
Fűzd a ?dry_run paramétert a létrehozási híváshoz. Ellenőrzi a kérést, és árajánlatot ad vissza fej készítése és terhelés nélkül.
02Hívhatom böngészőből vagy mobilalkalmazásból?
Nem. A kulcsot tartsd a szervereden. Az aláírt feltöltési és letöltési linkekhez nem kell kulcs, így egy kliens közvetlenül tölthet fel vagy le.
03Milyen SDK-k vannak?
Sima HTTP, és egy OpenAPI 3.1 fájl, amiből klienst generálhatsz. A referenciában curl, Node és Python példák vannak. Az ügynök-skill CLI-je is egyetlen Python-fájl, amelyet elolvashatsz és szkriptekből hívhatsz.
04Hány fejet készíthetek egyszerre?
Fiókonként percenként legfeljebb 30 fej létrehozása, és mindegyik a sorban fut. 1000 fejnél többhöz írj nekünk a számlázásról és a kapacitásról.
05Ez az Epic MetaHuman API-ja?
Nem. Az Epic MetaHuman API-jai az Unreal Engine-en belül a MetaHuman Creator használatát szkriptelik. A FaceNinja webszolgáltatásként fotókból készíti a fejet, és átadja a fájlokat és a MetaHuman ZIP-et, amelyeket az Unreal Engine-be vihetsz.
06Fel tud építeni egy fejet egy fotósorozatból?
Igen, Beta állapotban: egy munkamenet több fotójából történő rekonstrukció az egyes fotók kamerapozícióját és gyújtótávolságát is visszaadja. Írj nekünk, ha ki szeretnéd próbálni a saját felvételsorozatoddal.

Az első fejed egyetlen API-hívás távolságra van.