डेवलपर्स · 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 है जो वह हेड बनाती है जिसे आप उनमें लाते हैं।
POST /v1/headsएक व्यक्ति की फ़ोटो- हेड id
head.completedपूरा होने पर साइन किया हुआ webhookPOST /v1/heads/{id}/filesफ़ॉर्मेट- कम समय के लिए साइन किया हुआ लिंक
भेजें। सूचना पाएँ। डाउनलोड करें।
भेजें।
POST /v1/headsके साथ एक व्यक्ति की 1 से 15 फ़ोटो, multipart फ़ाइलों के रूप में या पहले अपलोड की गई id के रूप में। एकIdempotency-Keyजोड़ें, और रीट्राई से कभी दूसरा हेड न बनता है, न बिल होता है।सूचना पाएँ।
तरीका चुनें: आपके सर्वर पर साइन किया हुआ webhook, server-sent event स्ट्रीम, या स्क्रिप्ट के लिए
?wait=60long poll।डाउनलोड करें।
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"])// when the user confirms their photos
const form = new FormData();
for (const p of photos) form.append("photos", p);
form.append("webhook_url", "https://you.example/hooks/faceninja");
const head = await api.post("/v1/heads", form,
{ headers: { "Idempotency-Key": crypto.randomUUID() } });
await save(user, head.id);
// later, FaceNinja calls you
app.post("/hooks/faceninja", async (req, res) => {
const event = verified(req); // check FaceNinja-Signature first
if (event.type === "head.completed") {
const link = await api.post(`/v1/heads/${event.data.id}/files`,
{ format: "glb", arkit: true });
await storeOnYourCdn(link.url);
}
res.sendStatus(204);
});पढ़ने के लिए छोटा किया गया है। रेफ़रेंस EN में पूरी रिक्वेस्ट, सिग्नेचर की जाँच और हर एरर है।
फ़ोल्डर से एक कास्ट, दो बार चलाना भी सुरक्षित।
बैच यानी कई अलग-अलग क्रिएट कॉल। हर एक को अपने डेटा से बनी idempotency key दें, जैसे फ़ोल्डर का नाम, और क्रैश के बाद पूरी स्क्रिप्ट दोबारा चलाने पर भी कोई हेड दो बार न बनेगा, न उसका दो बार भुगतान होगा। फिर webhook को बताने दें कि कौन-से हेड तैयार हैं।
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 में: एक ही सेशन की कई फ़ोटो से रीकंस्ट्रक्शन हर फ़ोटो की कैमरा पोज़िशन और फ़ोकल लेंथ भी लौटाता है। अपने कैप्चर सेट के साथ आज़माना चाहें तो हमें लिखें।