FaceNinja

डेवलपर्स · REST API

MetaHuman हेड API, बैच के लिए बनी।

किसी व्यक्ति की फ़ोटो भेजें, हेड पूरा होने पर सूचना पाएँ, और ज़रूरी फ़ॉर्मेट डाउनलोड करें। एक ही कॉल से एक हेड बनता है या 500। हर हेड तैयार मिलता है: 4K त्वचा, groom (MetaHuman बाल) के सुझाव, फ़िट की गई गर्दन और 52 ARKit शेप। एक हेड में लगभग 4 मिनट लगते हैं, इसलिए API शुरू से ही असिंक्रोनस है।

  • REST + JSON
  • Bearer key
  • साइन किए webhook
  • Idempotency key
  • OpenAPI 3.1
  • llms.txt

इसे Epic के MetaHuman Python और C++ API से न मिलाएँ, जो Unreal Engine के अंदर चलते हैं। FaceNinja एक वेब API है जो वह हेड बनाती है जिसे आप उनमें लाते हैं।

भेजें। सूचना पाएँ। डाउनलोड करें।

  1. भेजें।

    POST /v1/heads के साथ एक व्यक्ति की 1 से 15 फ़ोटो, multipart फ़ाइलों के रूप में या पहले अपलोड की गई id के रूप में। एक Idempotency-Key जोड़ें, और रीट्राई से कभी दूसरा हेड न बनता है, न बिल होता है।

  2. सूचना पाएँ।

    तरीका चुनें: आपके सर्वर पर साइन किया हुआ webhook, server-sent event स्ट्रीम, या स्क्रिप्ट के लिए ?wait=60 long poll।

  3. डाउनलोड करें।

    glb, fbx, obj, stl, ply या metahuman_zip माँगें, 52 ARKit शेप के साथ या उनके बिना। आपको साइन किया हुआ लिंक मिलता है जिसे key की ज़रूरत नहीं। लिंक नहीं, हेड की id सहेजें। हर फ़ॉर्मेट में क्या है

फ़ेल हुए हेड के क्रेडिट अपने आप वापस आ जाते हैं, और error.code बताता है कि क्यों।

आपके बैकएंड को बस एक webhook चाहिए।

हेड बनाएँ, उसकी id सहेजें, और जब हम आपको कॉल करें तब कार्रवाई करें। पूरा इंटीग्रेशन यही है, Python में।

कोड
# 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"])

पढ़ने के लिए छोटा किया गया है। रेफ़रेंस EN में पूरी रिक्वेस्ट, सिग्नेचर की जाँच और हर एरर है।

फ़ोल्डर से एक कास्ट, दो बार चलाना भी सुरक्षित।

बैच यानी कई अलग-अलग क्रिएट कॉल। हर एक को अपने डेटा से बनी idempotency key दें, जैसे फ़ोल्डर का नाम, और क्रैश के बाद पूरी स्क्रिप्ट दोबारा चलाने पर भी कोई हेड दो बार न बनेगा, न उसका दो बार भुगतान होगा। फिर webhook को बताने दें कि कौन-से हेड तैयार हैं।

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}"})
  • रफ़्तार: हर अकाउंट पर प्रति मिनट 30 हेड क्रिएशन तक। 429 पर Retry-After सेकंड रुकें और वही key दोबारा भेजें।
  • पहले जाँचें: ?dry_run एक create को जाँचता है और हेड बनाए बिना कोटेशन लौटाता है। GET /v1/account बैलेंस दिखाता है।
  • ट्रैक करें: GET /v1/heads आपके हेड को पेज-दर-पेज उनकी स्थिति के साथ सूचीबद्ध करता है।
  • एक फ़ेल हो, सब नहीं: जो हेड फ़ेल होता है वह अपना error.code बताता है, और उसके क्रेडिट लौट आते हैं। बाक़ी बैच चलता रहता है।

या अपने एजेंट से इंटीग्रेशन लिखवाएँ।

API रेफ़रेंस, OpenAPI फ़ाइल और llms.txt लोगों और भाषा मॉडल, दोनों के लिए लिखे गए हैं। अपने एजेंट को स्किल दें तो वह आपके लिए सीधे हेड बना सकता है, या आपके स्टैक के लिए पाइपलाइन स्क्रिप्ट लिखकर टेस्ट कर सकता है।

पाइपलाइन प्रॉम्प्ट
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.

यह प्रॉम्प्ट अंग्रेज़ी में ही रहने दें: आपके एजेंट को वेब पता ठीक वैसा ही चाहिए जैसा लिखा है। इसके बाद आप उससे अपनी भाषा में बात कर सकते हैं।

रीट्राई, कतार और खराब फ़ोटो के लिए बना।

Idempotent क्रिएट

24 घंटे के अंदर वही Idempotency-Key वही हेड लौटाती है, दूसरी बार कभी चार्ज नहीं।

साइन किए हुए webhook

head.completed और head.failed, FaceNinja-Signature में HMAC सिग्नेचर के साथ।

ईमानदार कतार

इंतज़ार के दौरान हेड कतार में अपनी जगह और अनुमानित समय बताता है।

ऐसे एरर जिन पर कोड फ़ैसला ले सके

स्थिर error.code वैल्यू (no_face, not_same_person, content_rejected, …) और एक hint।

बिना टिकट के रिफ़ंड

क्रेडिट क्रिएट के समय होल्ड होते हैं, पूरा होने पर चार्ज होते हैं और फ़ेल होने या डिलीट करने पर रिलीज़ हो जाते हैं।

जब चाहें डिलीट करें

जब चाहें किसी हेड और उसकी फ़ोटो को डिलीट करें। हेड पूरा होने के 30 दिन बाद फ़ाइलें एक्सपायर हो जाती हैं।

जिन संख्याओं के हिसाब से डिज़ाइन करें।

सीमाएँ
प्रति हेड फ़ोटो1 से 15, एक व्यक्ति; JPEG, PNG, WebP, HEIC/HEIF या AVIF, हर एक 25 MiB तक
प्रति हेड समयलगभग 4 मिनट, कतार अलग से
Long poll?wait हर कॉल पर 60 s तक
डाउनलोड लिंक60 s के अंदर शुरू करें; शुरू हुआ डाउनलोड पूरा होता है
रेट लिमिटप्रति अकाउंट 600 रिक्वेस्ट प्रति मिनट; 30 हेड क्रिएशन प्रति मिनट
रिटेंशनहेड पूरा होने के 30 दिन बाद तक फ़ोटो और फ़ाइलें
कीमतप्रति हेड 1,500 क्रेडिट ($15), हर फ़ॉर्मेट शामिल

रेफ़रेंस ही अंतिम स्रोत है। अगर यहाँ की कोई संख्या उससे अलग हो, तो रेफ़रेंस की बात मानी जाएगी।

सेव फ़ाइल के पहले दिन से खिलाड़ी का चेहरा।

खिलाड़ियों को अपना चेहरा लाने दें, या सहमति देने वाले कलाकारों से NPC कास्ट बनाएँ। हर हेड वही मेश है, बस चेहरा अलग, इसलिए एक रिग, एक मटीरियल और एक एनिमेशन सेट सब पर फ़िट होता है। 52 ARKit शेप लिप सिंक या खिलाड़ी के कैमरे से चल सकती हैं।

इंतज़ार की योजना बनाएँ। एक हेड में मिलीसेकंड नहीं, लगभग 4 मिनट लगते हैं। उसे जल्दी शुरू करें, ऑनबोर्डिंग या ट्यूटोरियल के दौरान, कोई स्टैंड-इन दिखाएँ, और webhook आने पर हेड बदल दें।

GLB Unity, Godot और वेब के लिए; FBX और MetaHuman ZIP Unreal के लिए। Unreal ऑटोमेशन अर्ली ऐक्सेस में है: इसे माँगें।

हमारी शर्तों के अनुसार फ़ोटो वाले व्यक्ति की अनुमति ज़रूरी है और बच्चों की फ़ोटो मना है। यही नियम अपने फ़्लो में भी लगाएँ।

तेज़ नारंगी रोशनी में एक बुज़ुर्ग आदमी की सिंथेटिक फ़ोटोचश्मा पहने हँसती हुई महिला की सिंथेटिक फ़ोटोसिर घुमाए दाढ़ी वाले आदमी की सिंथेटिक फ़ोटोलंबे बालों से कान ढके हुए एक महिला की सिंथेटिक फ़ोटो
चार सिंथेटिक टेस्ट सब्जेक्ट, एक टोपोलॉजी।

पहले से कोई दूसरी फ़ोटो-से-MetaHuman API इस्तेमाल कर रहे हैं?

अगर आपका इंटीग्रेशन पहले से हेड बनाता है, उसका इंतज़ार करता है और फ़ाइल डाउनलोड करता है, तो यहाँ भी उसका ढाँचा वही रहता है। पाथ, फ़ील्ड के नाम और फ़ाइल वाला चरण अलग हैं, और माइग्रेशन गाइड उन्हें कॉल-दर-कॉल मिलाती है।

डेवलपर के सवाल।

01क्या सैंडबॉक्स है?
क्रिएट कॉल में ?dry_run जोड़ें। वह रिक्वेस्ट को जाँचता है और हेड बनाए बिना, बिना चार्ज किए कोटेशन लौटाता है।
02क्या इसे ब्राउज़र या मोबाइल ऐप से कॉल किया जा सकता है?
नहीं। key अपने सर्वर पर रखें। साइन किए हुए अपलोड और डाउनलोड लिंक को key नहीं चाहिए, इसलिए क्लाइंट सीधे अपलोड या डाउनलोड कर सकता है।
03कौन-से SDK हैं?
सादा HTTP और एक OpenAPI 3.1 फ़ाइल जिससे आप क्लाइंट जनरेट कर सकते हैं। रेफ़रेंस में curl, Node और Python के उदाहरण हैं। एजेंट स्किल का CLI भी एक अकेली Python फ़ाइल है जिसे आप पढ़ सकते हैं और स्क्रिप्ट से कॉल कर सकते हैं।
04एक साथ कितने हेड बनाए जा सकते हैं?
हर अकाउंट पर प्रति मिनट 30 हेड क्रिएशन तक, और हर एक कतार में चलता है। 1,000 से ज़्यादा हेड के लिए इनवॉइसिंग और क्षमता पर हमें लिखें।
05क्या यह Epic की MetaHuman API है?
नहीं। Epic की MetaHuman API Unreal Engine के अंदर MetaHuman Creator को स्क्रिप्ट करती हैं। FaceNinja वेब सेवा के रूप में फ़ोटो से हेड बनाती है और आपको फ़ाइलें और MetaHuman ZIP देती है, जिन्हें आप Unreal में ले जा सकते हैं।
06क्या फ़ोटो के सेट से हेड बन सकता है?
हाँ, Beta में: एक ही सेशन की कई फ़ोटो से रीकंस्ट्रक्शन हर फ़ोटो की कैमरा पोज़िशन और फ़ोकल लेंथ भी लौटाता है। अपने कैप्चर सेट के साथ आज़माना चाहें तो हमें लिखें।

आपका पहला हेड बस एक API कॉल दूर है।