FaceNinja

Vývojáři · REST API

API pro hlavy MetaHuman, postavené pro dávky.

Pošlete fotky jednoho člověka, ozveme se, až bude 3D hlava hotová, a vy si stáhnete formát, který potřebujete. Stejné volání vytvoří jednu hlavu i pět set. Každá hlava je hotová: pleť ve 4K, doporučené groomy (vlasy MetaHuman), přiléhavý krk a 52 blendshapů ARKit. Hlava trvá asi 4 minuty, takže API je záměrně asynchronní.

  • REST + JSON
  • Klíče Bearer
  • Podepsané webhooky
  • Klíče idempotence
  • OpenAPI 3.1
  • llms.txt

Nezaměňovat s Python a C++ API od Epicu pro MetaHuman, která běží uvnitř Unreal Engine. FaceNinja je webové API, které vytvoří hlavu, již do nich přinesete.

Odešlete. Počkejte na odpověď. Stáhněte.

  1. Odešlete.

    POST /v1/heads s 1 až 15 fotkami jednoho člověka, jako soubory multipart nebo id, která jste nahráli předem. Přidejte Idempotency-Key a opakování nikdy nevytvoří ani neúčtuje druhou hlavu.

  2. Počkejte na odpověď.

    Vyberte jak: podepsaný webhook na váš server, proud server-sent událostí, nebo dlouhý poll ?wait=60 pro skripty.

  3. Stáhněte.

    Požádejte o glb, fbx, obj, stl, ply nebo metahuman_zip, s tvary ARKit nebo bez nich. Dostanete podepsaný odkaz, který klíč nepotřebuje. Ukládejte id hlavy, ne odkaz. Co který formát obsahuje

Kredity za nezdařenou hlavu se vrátí automaticky a error.code řekne proč.

Váš backend potřebuje jen webhook.

Vytvořte hlavu, uložte její id a jednejte, až se vám ozveme. To je celá integrace, v Pythonu.

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

Zkráceno kvůli čitelnosti. Reference EN obsahuje celý požadavek, ověření podpisu i všechny chyby.

Obsazení ze složky, bezpečné spustit dvakrát.

Dávka je mnoho jednotlivých vytvoření. Dejte každému klíč idempotence odvozený z vašich dat, například z názvu složky, a celý skript můžete po pádu spustit znovu, aniž byste hlavu vytvořili nebo zaplatili dvakrát. Pak nechte webhooky, ať vám řeknou, které hlavy jsou hotové.

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: až 30 vytvoření hlav za minutu na účet. Při 429 počkejte Retry-After sekund a pošlete stejný klíč znovu.
  • Nejdřív zkontrolujte: ?dry_run zkontroluje vytvoření a vrátí cenovou nabídku, aniž vytvoří hlavu. GET /v1/account ukáže zůstatek.
  • Sledujte: GET /v1/heads vypíše vaše hlavy, stránku po stránce, s jejich stavem.
  • Selže jedna, ne všechny: hlava, která selže, hlásí vlastní error.code a její kredity se vrátí. Zbytek dávky pokračuje.

Nebo nechte svého agenta napsat integraci.

Reference API, soubor OpenAPI a llms.txt jsou psané pro lidi i pro jazykové modely. Dejte agentovi skill a může vám hlavy vytvářet přímo, nebo napsat a otestovat skript pipeline pro váš stack.

Prompt pro 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.

Ponechte tento prompt v angličtině: váš agent potřebuje webovou adresu přesně tak, jak je napsaná. Pak s ním můžete mluvit svým jazykem.

Postaveno pro opakování, fronty a špatné fotky.

Idempotentní vytvoření

Stejný Idempotency-Key do 24 hodin vrátí stejnou hlavu, nikdy druhou platbu.

Podepsané webhooky

head.completed a head.failed, s podpisem HMAC v FaceNinja-Signature.

Poctivá fronta

Čekající hlava hlásí své pořadí ve frontě a odhad.

Chyby, podle kterých lze větvit kód

Stabilní hodnoty error.code (no_face, not_same_person, content_rejected, …) a hint.

Vrácení bez tiketů

Kredity se při vytvoření zadrží, při dokončení účtují a při selhání nebo smazání uvolní.

Smazání na požádání

Smažte hlavu i její fotky, kdykoli chcete. Soubory vyprší 30 dní po dokončení hlavy.

Čísla, kolem kterých navrhovat.

Limity
Fotky na hlavu1 až 15, jedna osoba; JPEG, PNG, WebP, HEIC/HEIF nebo AVIF, každá do 25 MiB
Doba na hlavuAsi 4 minuty, plus případná fronta
Dlouhý poll?wait až 60 s na volání
Odkazy ke staženíZačněte do 60 s; zahájené stahování se dokončí
Limity rychlosti600 požadavků za minutu na účet; 30 vytvoření hlav za minutu
UchováváníFotky a soubory 30 dní po dokončení hlavy
Cena1 500 kreditů (15 US$) za hlavu, všechny formáty v ceně

Rozhodující je reference. Pokud se zde číslo liší, platí reference.

Obličej hráče od prvního dne jeho uložené hry.

Nechte hráče přinést vlastní obličej, nebo postavte obsazení NPC ze souhlasících herců. Každá hlava je stejná síť s jiným obličejem, takže jeden rig, jeden materiál a jedna sada animací sedí na všechny. 52 blendshapů ARKit zvládne lip sync nebo kameru hráče.

Počítejte s čekáním. Hlava trvá asi 4 minuty, ne milisekundy. Spusťte ji včas, při úvodu nebo v tutoriálu, zobrazte zástupnou hlavu a po příchodu webhooku hlavu vyměňte.

GLB pro Unity, Godot a web; FBX a MetaHuman ZIP pro Unreal. Automatizace pro Unreal je v předběžném přístupu: požádejte o ni.

Naše podmínky vyžadují svolení osoby na fotce a zakazují fotky dětí. Stejné pravidlo zabudujte do svého postupu.

Syntetická fotka staršího muže v ostrém oranžovém světleSyntetická fotka smějící se ženy s brýlemiSyntetická fotka vousatého muže s otočenou hlavouSyntetická fotka ženy, jejíž dlouhé vlasy zakrývají uši
Čtyři syntetické testovací subjekty, jedna topologie.

Už používáte jiné API z fotky na MetaHuman?

Pokud vaše integrace už vytváří hlavu, čeká na ni a stahuje soubor, zachová si tady svůj tvar. Cesty, názvy polí a krok se souborem se liší a průvodce migrací je mapuje volání po volání.

Otázky vývojářů.

01Je k dispozici sandbox?
Přidejte ?dry_run k volání vytvoření. Zkontroluje požadavek a vrátí cenovou nabídku, aniž by vytvořilo hlavu nebo vám cokoli účtovalo.
02Mohu to volat z prohlížeče nebo mobilní aplikace?
Ne. Klíč držte na svém serveru. Podepsané odkazy pro nahrání a stažení klíč nepotřebují, takže klient může nahrávat nebo stahovat přímo.
03Jaké jsou k dispozici SDK?
Čisté HTTP a soubor OpenAPI 3.1, z něhož můžete vygenerovat klienta. Reference má příklady v curl, Node a Pythonu. CLI skillu pro agenty je také jediný soubor v Pythonu, který si můžete přečíst a volat ze skriptů.
04Kolik hlav mohu vytvořit najednou?
Až 30 vytvoření hlav za minutu na účet a každé běží ve frontě. Pro více než 1 000 hlav napište nám kvůli fakturaci a kapacitě.
05Je to API MetaHuman od Epicu?
Ne. API MetaHuman od Epicu skriptují MetaHuman Creator uvnitř Unreal Engine. FaceNinja vytvoří hlavu z fotek jako webová služba a předá vám soubory a MetaHuman ZIP, které si vezmete do Unrealu.
06Dokáže vytvořit hlavu ze sady fotek?
Ano, v režimu Beta: rekonstrukce z několika fotek jedné relace vrací také polohu kamery a ohniskovou vzdálenost každé fotky. Napište nám, pokud to chcete vyzkoušet na své sadě snímků.

Vaše první hlava je na jedno volání API daleko.