FaceNinja

Utviklere · REST API

API-et for MetaHuman-hoder, bygget for batcher.

Send foto av en person, få beskjed når hodet er ferdig, hent formatet du trenger. Det samme kallet lager ett hode eller fem hundre. Hvert hode er ferdig: 4K-hud, anbefalinger for groom (MetaHuman-hår), en hals som passer og 52 ARKit-blendshapes. Et hode tar omtrent 4 minutter, så API-et er asynkront av design.

  • REST + JSON
  • Bearer-nøkler
  • Signerte webhooks
  • Idempotency-nøkler
  • OpenAPI 3.1
  • llms.txt

Ikke å forveksle med Epics MetaHuman Python- og C++-API-er, som kjører inne i Unreal Engine. FaceNinja er et web-API som lager hodet du tar med inn i dem.

Send. Få svar. Hent.

  1. Send.

    POST /v1/heads med 1 til 15 foto av én person, som multipart-filer eller id-er du har lastet opp først. Legg til en Idempotency-Key, så lager eller fakturerer et nytt forsøk aldri et ekstra hode.

  2. Få svar.

    Velg hvordan: en signert webhook til serveren din, en strøm av server-sent events, eller long polling med ?wait=60 for skript.

  3. Hent.

    Be om glb, fbx, obj, stl, ply eller metahuman_zip, med eller uten ARKit-blendshapes. Du får en signert lenke som ikke trenger nøkkel. Lagre id-en til hodet, ikke lenken. Hva hvert format inneholder

Kreditene for et mislykket hode kommer tilbake automatisk, og error.code sier hvorfor.

En webhook er alt backenden din trenger.

Opprett hodet, lagre id-en, og handle når vi kaller deg. Dette er hele integrasjonen, i Python.

Kode
# 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"])

Forkortet for lesing. Referansen EN har hele forespørselen, signatursjekken og alle feilene.

Et rollegalleri fra en mappe, trygt å kjøre to ganger.

En batch er mange enkeltopprettinger. Gi hver av dem en idempotency-nøkkel du utleder fra dine egne data, for eksempel mappenavnet, så kan du kjøre hele skriptet på nytt etter en krasj uten å lage eller betale for et hode to ganger. La deretter webhooks fortelle deg hvilke hoder som er ferdige.

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}"})
  • Tempo: opptil 30 hodeopprettinger i minuttet per konto. Ved 429 venter du Retry-After sekunder og sender samme nøkkel på nytt.
  • Sjekk først: ?dry_run sjekker en oppretting og gir et prisoverslag uten å lage et hode. GET /v1/account viser saldoen.
  • Følg med: GET /v1/heads lister opp hodene dine, side for side, med status.
  • Ett feiler, ikke alle: et hode som mislykkes, melder sin egen error.code, og kreditene kommer tilbake. Resten av batchen fortsetter.

Eller la agenten din skrive integrasjonen.

API-referansen, OpenAPI-filen og llms.txt er skrevet for både mennesker og språkmodeller. Gi agenten din skillen, så kan den lage hoder for deg direkte, eller skrive og teste pipeline-skriptet for stacken din.

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.

La prompten stå på engelsk: agenten din trenger nettadressen nøyaktig slik den er skrevet. Etterpå kan du snakke med den på ditt eget språk.

Bygget for nye forsøk, køer og dårlige foto.

Idempotente opprettinger

Samme Idempotency-Key innen 24 timer gir samme hode, aldri en ekstra belastning.

Signerte webhooks

head.completed og head.failed, med en HMAC-signatur i FaceNinja-Signature.

Ærlig kø

Mens det venter, melder et hode plassen sin i køen og et anslag.

Feil du kan styre koden etter

Stabile error.code-verdier (no_face, not_same_person, content_rejected, …) og et hint.

Refusjon uten supportsaker

Kreditter reserveres ved oppretting, belastes ved fullføring og frigis ved feil eller sletting.

Sletting når du vil

Slett et hode og fotoene til det når du vil. Filene utløper 30 dager etter at hodet er ferdig.

Tallene du må planlegge etter.

Grenser
Foto per hode1 til 15, én person; JPEG, PNG, WebP, HEIC/HEIF eller AVIF, opptil 25 MiB hver
Tid per hodeOmtrent 4 minutter, pluss eventuell kø
Long polling?wait opptil 60 s per kall
NedlastingslenkerMå startes innen 60 s; en påbegynt nedlasting fullføres
Rategrenser600 forespørsler i minuttet per konto; 30 hodeopprettinger i minuttet
LagringstidFoto og filer i 30 dager etter at hodet er ferdig
Pris1 500 kreditter (15 USD) per hode, alle formater inkludert

Referansen er fasit. Hvis et tall her avviker, gjelder referansen.

En spillers ansikt fra dag én i savefilen.

La spillere ta med sitt eget ansikt, eller bygg et NPC-rollegalleri av skuespillere som har samtykket. Hvert hode er det samme meshet med et annet ansikt, så én rigg, ett materiale og ett animasjonssett passer til alle. De 52 ARKit-blendshapes kan styres av lipsync eller spillerens kamera.

Planlegg for ventetiden. Et hode tar omtrent 4 minutter, ikke millisekunder. Start det tidlig, under onboarding eller en opplæring, vis et midlertidig hode, og bytt inn det ferdige hodet når webhooken kommer.

GLB for Unity, Godot og nettet; FBX og MetaHuman ZIP for Unreal. Unreal-automatisering er i tidlig tilgang: be om tilgang.

Vilkårene våre krever tillatelse fra personen på fotoet og forbyr foto av barn. Bygg den samme regelen inn i flyten din.

Syntetisk foto av en eldre mann i hardt oransje lysSyntetisk foto av en leende kvinne med brillerSyntetisk foto av en mann med skjegg og hodet vendt til sidenSyntetisk foto av en kvinne med langt hår som dekker ørene
Fire syntetiske testpersoner, én topologi.

Bruker du allerede et annet API fra foto til MetaHuman?

Hvis integrasjonen din allerede oppretter et hode, venter på det og laster ned en fil, beholder den formen her. Stier, feltnavn og filtrinnet er forskjellige, og migreringsguiden kobler dem kall for kall.

Spørsmål fra utviklere.

01Finnes det en sandkasse?
Legg ?dry_run til et opprettingskall. Det sjekker forespørselen og gir et prisoverslag uten å lage et hode eller belaste deg.
02Kan jeg kalle det fra en nettleser eller en mobilapp?
Nei. Hold nøkkelen på serveren din. Signerte opplastings- og nedlastingslenker trenger ingen nøkkel, så en klient kan laste opp eller ned direkte.
03Hvilke SDK-er finnes?
Vanlig HTTP og en OpenAPI 3.1-fil du kan generere en klient fra. Referansen har eksempler i curl, Node og Python. CLI-en i agent-skillen er også én enkelt Python-fil du kan lese og kalle fra skript.
04Hvor mange hoder kan jeg lage samtidig?
Opptil 30 hodeopprettinger i minuttet per konto, og hvert av dem kjører i køen. For mer enn 1 000 hoder, skriv til oss om fakturering og kapasitet.
05Er dette Epics MetaHuman-API?
Nei. Epics MetaHuman-API-er skripter MetaHuman Creator inne i Unreal Engine. FaceNinja lager hodet fra foto, som en nettjeneste, og gir deg filene og MetaHuman ZIP-en du kan ta med inn i Unreal.
06Kan det bygge et hode fra et sett med foto?
Ja, i beta: rekonstruksjon fra flere foto fra én opptaksøkt gir også kameraposisjonen og brennvidden for hvert foto. Skriv til oss hvis du vil prøve det med opptakssettet ditt.

Det første hodet ditt er ett API-kall unna.