FaceNinja

Geliştiriciler · REST API

Toplu işler için tasarlanmış MetaHuman kafa API'si.

Bir kişinin fotoğraflarını gönderin, kafa bittiğinde haber alın, ihtiyacınız olan biçimi indirin. Aynı çağrı bir kafa da yapar, beş yüz de. Her kafa tamamlanmıştır: 4K cilt, groom önerileri, kişiye uyarlanmış bir boyun ve 52 ARKit şekli. Bir kafa yaklaşık 4 dakika sürer; bu yüzden API tasarım gereği eşzamansızdır.

  • REST + JSON
  • Bearer anahtarları
  • İmzalı webhook'lar
  • Idempotency anahtarı
  • OpenAPI 3.1
  • llms.txt

Epic'in Unreal Engine içinde çalışan MetaHuman Python ve C++ API'leriyle karıştırılmamalıdır. FaceNinja, onlara getireceğiniz kafayı üreten bir web API'sidir.

Gönderin. Haber alın. İndirin.

  1. Gönderin.

    Tek bir kişiye ait 1 ila 15 fotoğrafla, multipart dosyalar ya da önceden yüklediğiniz kimliklerle POST /v1/heads. Bir Idempotency-Key ekleyin; yeniden deneme asla ikinci bir kafa üretmez ya da faturalandırmaz.

  2. Haber alın.

    Yöntemi seçin: sunucunuza imzalı bir webhook, bir server-sent event akışı ya da betikler için ?wait=60 long poll.

  3. İndirin.

    glb, fbx, obj, stl, ply ya da metahuman_zip isteyin; ARKit şekilleriyle veya şekilsiz. Anahtar gerektirmeyen imzalı bir bağlantı alırsınız. Bağlantıyı değil, kafa kimliğini saklayın. Her biçimde ne var

Başarısız bir kafanın kredileri otomatik olarak geri döner ve error.code nedenini söyler.

Arka ucunuzun ihtiyacı olan tek şey bir webhook.

Kafayı oluşturun, kimliğini saklayın ve biz sizi aradığımızda harekete geçin. Entegrasyonun tamamı bu, Python ile.

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

Okumak için kısaltılmıştır. Referansta EN tam istek, imza kontrolü ve her hata bulunur.

Bir klasörden kadro; iki kez çalıştırması güvenli.

Toplu iş, birçok tekil oluşturmadır. Her birine kendi verinizden, örneğin klasör adından türettiğiniz bir idempotency anahtarı verin; böylece betiğin tamamını bir çökmeden sonra, bir kafayı iki kez üretmeden ya da ödemeden yeniden çalıştırabilirsiniz. Sonra hangi kafaların bittiğini webhook'ların söylemesine izin verin.

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}"})
  • Hız: hesap başına dakikada en çok 30 kafa oluşturma. 429 alırsanız Retry-After saniye bekleyin ve aynı anahtarı yeniden gönderin.
  • Önce kontrol: ?dry_run bir oluşturmayı kontrol eder ve kafa üretmeden bir fiyat teklifi döndürür. GET /v1/account bakiyeyi gösterir.
  • İzleme: GET /v1/heads kafalarınızı durumlarıyla birlikte sayfa sayfa listeler.
  • Biri başarısız olur, hepsi değil: başarısız olan kafa kendi error.code değerini bildirir ve kredileri döner. Toplu işin geri kalanı sürer.

Ya da entegrasyonu ajanınız yazsın.

API referansı, OpenAPI dosyası ve llms.txt hem insanlar hem dil modelleri için yazılmıştır. Ajanınıza skill'i verin; sizin için doğrudan kafa üretebilir ya da teknoloji yığınınıza uygun işlem hattı betiğini yazıp test edebilir.

İşlem hattı istemi
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.

Bu istemi İngilizce bırakın: ajanınızın web adresini tam yazıldığı gibi alması gerekir. Sonrasında onunla kendi dilinizde konuşabilirsiniz.

Yeniden denemeler, kuyruklar ve kötü fotoğraflar için tasarlandı.

Idempotent oluşturma

24 saat içinde aynı Idempotency-Key, aynı kafayı döndürür; ikinci bir ücret asla alınmaz.

İmzalı webhook'lar

head.completed ve head.failed, FaceNinja-Signature içinde bir HMAC imzasıyla.

Dürüst kuyruk

Beklerken bir kafa, sıradaki yerini ve bir tahmini bildirir.

Kodunuzun ayırt edebileceği hatalar

Sabit error.code değerleri (no_face, not_same_person, content_rejected, …) ve bir hint.

Destek talebi açmadan iade

Krediler oluşturma anında ayrılır, tamamlanınca tahsil edilir; başarısızlıkta ya da silmede serbest bırakılır.

İstediğinizde silme

Bir kafayı ve fotoğraflarını istediğiniz zaman silin. Dosyalar, kafa tamamlandıktan 30 gün sonra sona erer.

Tasarımda dikkate alınacak sayılar.

Sınırlar
Kafa başına fotoğraf1 ila 15, tek kişi; JPEG, PNG, WebP, HEIC/HEIF veya AVIF, her biri en çok 25 MiB
Kafa başına süreYaklaşık 4 dakika, artı varsa kuyruk
Long pollÇağrı başına en fazla 60 s ?wait
İndirme bağlantıları60 s içinde başlamalı; başlamış bir indirme tamamlanır
İstek sınırlarıHesap başına dakikada 600 istek; dakikada 30 kafa oluşturma
SaklamaFotoğraflar ve dosyalar, kafa tamamlandıktan 30 gün sonrasına kadar
FiyatKafa başına 1.500 kredi ($15), tüm biçimler dahil

Referans doğruluk kaynağıdır. Buradaki bir sayı farklıysa referans geçerlidir.

Kayıt dosyasının ilk gününde oyuncunun yüzü.

Oyuncuların kendi yüzlerini getirmesine izin verin ya da onay veren oyunculardan bir NPC kadrosu kurun. Her kafa, farklı bir yüze sahip aynı mesh'tir; bu yüzden tek bir rig, tek bir materyal ve tek bir animasyon seti hepsine uyar. 52 ARKit şekli dudak senkronunu ya da oyuncunun kamerasını alır.

Beklemeyi planlayın. Bir kafa milisaniye değil, yaklaşık 4 dakika sürer. Onu erken başlatın; oyuna giriş ya da öğretici sırasında, bir yer tutucu gösterin ve webhook geldiğinde kafayı değiştirin.

Unity, Godot ve web için GLB; Unreal için FBX ve MetaHuman ZIP. Unreal otomasyonu erken erişimdedir: erişim isteyin.

Koşullarımız, fotoğraftaki kişiden izin alınmasını şart koşar ve çocukların fotoğraflarını yasaklar. Aynı kuralı kendi akışınıza da yerleştirin.

Sert turuncu ışıkta yaşlı bir erkeğin sentetik fotoğrafıGözlüklü, gülen bir kadının sentetik fotoğrafıKafası dönük, sakallı bir erkeğin sentetik fotoğrafıUzun saçları kulaklarını örten bir kadının sentetik fotoğrafı
Dört sentetik test deneği, tek topoloji.

Zaten başka bir fotoğraftan MetaHuman API'si mi kullanıyorsunuz?

Entegrasyonunuz zaten bir kafa oluşturuyor, onu bekliyor ve bir dosya indiriyorsa, burada da aynı yapıyı korur. Yollar, alan adları ve dosya adımı farklıdır; geçiş kılavuzu bunları çağrı çağrı eşleştirir.

Geliştirici soruları.

01Bir test ortamı (sandbox) var mı?
Bir oluşturma çağrısına ?dry_run ekleyin. İsteği kontrol eder ve kafa üretmeden ya da sizden ücret almadan bir fiyat teklifi döndürür.
02Bir tarayıcıdan ya da mobil uygulamadan çağırabilir miyim?
Hayır. Anahtarı sunucunuzda tutun. İmzalı yükleme ve indirme bağlantıları anahtar gerektirmez; bu yüzden bir istemci doğrudan yükleyebilir veya indirebilir.
03Hangi SDK'lar var?
Düz HTTP ve bir istemci üretebileceğiniz OpenAPI 3.1 dosyası. Referansta curl, Node ve Python örnekleri vardır. Ajan skill'inin CLI'ı da okuyup betiklerden çağırabileceğiniz tek bir Python dosyasıdır.
04Aynı anda kaç kafa üretebilirim?
Hesap başına dakikada 30 kafa oluşturmaya kadar; her biri kuyrukta çalışır. 1.000 kafadan fazlası için faturalandırma ve kapasite hakkında bize yazın.
05Bu, Epic'in MetaHuman API'si mi?
Hayır. Epic'in MetaHuman API'leri, Unreal Engine içindeki MetaHuman Creator'ı betiklerle yönetmek içindir. FaceNinja ise kafayı fotoğraflardan bir web servisi olarak üretir ve Unreal'a götürmeniz için size dosyaları ve MetaHuman ZIP'i verir.
06Bir fotoğraf setinden kafa üretebilir mi?
Evet, beta olarak: tek bir oturumun birkaç fotoğrafından yeniden oluşturma, her fotoğrafın kamera konumunu ve odak uzaklığını da döndürür. Çekim setinizle denemek isterseniz bize yazın.

İlk kafanız tek bir API çağrısı uzağınızda.