FaceNinja

Developer · REST API

API kepala MetaHuman, dibuat untuk batch.

Kirim foto seseorang, dapatkan kabar saat kepalanya selesai, ambil format yang Anda perlukan. Panggilan yang sama membuat satu kepala atau 500. Setiap kepala sudah jadi: kulit 4K, rekomendasi groom (rambut MetaHuman), leher yang pas, dan 52 blendshape ARKit. Satu kepala butuh sekitar 4 menit, jadi API ini sengaja dirancang asinkron.

  • REST + JSON
  • Kunci Bearer
  • Webhook ditandatangani
  • Kunci idempotensi
  • OpenAPI 3.1
  • llms.txt

Jangan tertukar dengan API Python dan C++ MetaHuman milik Epic, yang berjalan di dalam Unreal Engine. FaceNinja adalah API web yang membuat kepala yang Anda bawa ke dalamnya.

Kirim. Dikabari. Ambil.

  1. Kirim.

    POST /v1/heads dengan 1 sampai 15 foto satu orang, sebagai file multipart atau id yang Anda unggah lebih dulu. Tambahkan Idempotency-Key, dan percobaan ulang tidak akan membuat atau menagih kepala kedua.

  2. Dikabari.

    Pilih caranya: webhook bertanda tangan ke server Anda, aliran server-sent event, atau long poll ?wait=60 untuk skrip.

  3. Ambil.

    Minta glb, fbx, obj, stl, ply, atau metahuman_zip, dengan atau tanpa shape ARKit. Anda mendapat tautan bertanda tangan yang tidak memerlukan kunci. Simpan id kepalanya, bukan tautannya. Isi tiap format

Kredit kepala yang gagal kembali secara otomatis, dan error.code menjelaskan penyebabnya.

Webhook adalah semua yang dibutuhkan backend Anda.

Buat kepalanya, simpan id-nya, dan bertindaklah saat kami memanggil Anda. Inilah seluruh integrasinya, dalam 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"])

Dipersingkat agar mudah dibaca. Referensi EN memuat permintaan lengkap, pemeriksaan tanda tangan, dan setiap error.

Satu cast dari folder, aman dijalankan dua kali.

Batch adalah banyak pembuatan tunggal. Beri masing-masing kunci idempotensi yang Anda turunkan dari data Anda sendiri, seperti nama folder, dan Anda bisa menjalankan ulang seluruh skrip setelah crash tanpa membuat atau membayar sebuah kepala dua kali. Lalu biarkan webhook memberi tahu kepala mana yang sudah selesai.

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}"})
  • Laju: hingga 30 pembuatan kepala per menit per akun. Pada 429, tunggu Retry-After detik lalu kirim kunci yang sama lagi.
  • Cek dulu: ?dry_run memeriksa sebuah permintaan pembuatan dan mengembalikan perkiraan biaya tanpa membuat kepala. GET /v1/account menampilkan saldo.
  • Lacak: GET /v1/heads mendaftar kepala Anda, per halaman, beserta statusnya.
  • Gagal satu, bukan semua: kepala yang gagal melaporkan error.code-nya sendiri, dan kreditnya kembali. Sisa batch tetap berjalan.

Atau minta agen Anda menulis integrasinya.

Referensi API, file OpenAPI, dan llms.txt ditulis untuk manusia dan untuk model bahasa. Beri agen Anda skill-nya dan ia bisa langsung membuat kepala untuk Anda, atau menulis dan menguji skrip pipeline untuk stack Anda.

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

Biarkan prompt ini dalam bahasa Inggris: agen Anda memerlukan alamat web persis seperti yang tertulis. Setelah itu, Anda bisa berbicara dengannya dalam bahasa Anda sendiri.

Dibuat untuk retry, antrean, dan foto yang buruk.

Pembuatan idempoten

Idempotency-Key yang sama dalam 24 jam mengembalikan kepala yang sama, tanpa tagihan kedua.

Webhook bertanda tangan

head.completed dan head.failed, dengan tanda tangan HMAC di FaceNinja-Signature.

Antrean yang jujur

Selagi menunggu, sebuah kepala melaporkan urutannya dalam antrean dan perkiraan waktunya.

Error yang bisa ditangani lewat kode

Nilai error.code yang stabil (no_face, not_same_person, content_rejected, …) dan sebuah hint.

Pengembalian tanpa tiket dukungan

Kredit ditahan saat pembuatan, ditagih saat selesai, dan dilepas saat gagal atau dihapus.

Hapus kapan saja

Hapus kepala beserta fotonya kapan pun Anda mau. File kedaluwarsa 30 hari setelah kepala selesai.

Angka-angka yang perlu Anda jadikan acuan desain.

Batas
Foto per kepala1 sampai 15, satu orang; JPEG, PNG, WebP, HEIC/HEIF, atau AVIF, hingga 25 MiB per foto
Waktu per kepalaSekitar 4 menit, ditambah antrean jika ada
Long poll?wait hingga 60 s per panggilan
Tautan unduhanMulai dalam 60 s; unduhan yang sudah dimulai akan selesai
Rate limit600 permintaan per menit per akun; 30 pembuatan kepala per menit
RetensiFoto dan file selama 30 hari setelah kepala selesai
Harga1.500 kredit (US$15) per kepala, semua format termasuk

Referensi adalah sumber kebenaran. Jika ada angka di sini yang berbeda, yang berlaku adalah referensi.

Wajah pemain sudah ada sejak hari pertama file simpanan.

Biarkan pemain membawa wajah mereka sendiri, atau bangun cast NPC dari aktor yang setuju. Setiap kepala adalah mesh yang sama dengan wajah berbeda, jadi satu rig, satu material, dan satu set animasi cocok untuk semuanya. 52 blendshape ARKit bisa digerakkan oleh lip sync atau kamera pemain.

Rencanakan waktu tunggunya. Satu kepala butuh sekitar 4 menit, bukan milidetik. Mulai lebih awal, saat onboarding atau tutorial, tampilkan pengganti sementara, dan tukar dengan kepalanya begitu webhook tiba.

GLB untuk Unity, Godot, dan web; FBX dan MetaHuman ZIP untuk Unreal. Otomatisasi Unreal tersedia dalam akses awal: minta aksesnya.

Ketentuan kami mewajibkan izin dari orang di foto dan melarang foto anak-anak. Terapkan aturan yang sama di alur Anda.

Foto sintetis seorang pria lanjut usia dalam cahaya oranye yang kerasFoto sintetis seorang wanita berkacamata yang sedang tertawaFoto sintetis seorang pria berjenggot dengan kepala menolehFoto sintetis seorang wanita yang rambut panjangnya menutupi telinga
Empat subjek uji sintetis, satu topologi.

Sudah memakai API foto-ke-MetaHuman lain?

Kalau integrasi Anda sudah membuat kepala, menunggunya, dan mengunduh file, bentuknya tetap sama di sini. Path, nama field, dan langkah file berbeda, dan panduan migrasi memetakannya panggilan demi panggilan.

Pertanyaan developer.

01Apakah ada sandbox?
Tambahkan ?dry_run ke panggilan pembuatan. Ia memeriksa permintaan dan mengembalikan perkiraan biaya tanpa membuat kepala atau menagih Anda.
02Bisakah saya memanggilnya dari browser atau aplikasi seluler?
Tidak. Simpan kuncinya di server Anda. Tautan unggah dan unduh bertanda tangan tidak memerlukan kunci, jadi klien bisa mengunggah atau mengunduh langsung.
03SDK apa saja yang tersedia?
HTTP biasa dan file OpenAPI 3.1 yang bisa Anda pakai untuk membuat klien. Referensi memuat contoh curl, Node, dan Python. CLI skill agen juga berupa satu file Python yang bisa Anda baca dan panggil dari skrip.
04Berapa kepala yang bisa saya buat sekaligus?
Hingga 30 pembuatan kepala per menit per akun, dan masing-masing berjalan di antrean. Untuk lebih dari 1.000 kepala, tulis ke kami soal invoice dan kapasitas.
05Apakah ini API MetaHuman milik Epic?
Bukan. API MetaHuman milik Epic menjalankan skrip MetaHuman Creator di dalam Unreal Engine. FaceNinja membuat kepala dari foto, sebagai layanan web, dan memberi Anda file serta MetaHuman ZIP untuk dibawa ke Unreal.
06Bisakah ia membuat kepala dari sekumpulan foto?
Bisa, dalam beta: rekonstruksi dari beberapa foto dalam satu sesi juga mengembalikan posisi kamera dan panjang fokus tiap foto. Tulis ke kami kalau Anda ingin mencobanya dengan set foto Anda.

Kepala pertama Anda tinggal satu panggilan API lagi.