นักพัฒนา · REST API
API ศีรษะ MetaHuman ที่สร้างมาเพื่องานเป็นชุด
ส่งภาพถ่ายของคนคนหนึ่ง รอรับแจ้งเมื่อศีรษะ 3D เสร็จ แล้วดึงรูปแบบไฟล์ที่ต้องการ การเรียกแบบเดียวกันสร้างได้ทั้ง 1 ศีรษะหรือ 500 ศีรษะ ทุกศีรษะเสร็จสมบูรณ์ ได้แก่ผิว 4K, คำแนะนำ groom (เส้นผม MetaHuman), คอที่พอดี และ blendshape ARKit 52 แบบ ศีรษะหนึ่งใช้เวลาประมาณ 4 นาที API จึงถูกออกแบบให้เป็นแบบอะซิงโครนัส
- REST + JSON
- คีย์แบบ Bearer
- Webhook ที่ลงลายเซ็น
- Idempotency key
- OpenAPI 3.1
- llms.txt
อย่าสับสนกับ MetaHuman Python และ C++ API ของ Epic ซึ่งรันอยู่ภายใน Unreal Engine FaceNinja เป็น web API ที่สร้างศีรษะ 3D ซึ่งคุณนำเข้าไปใช้ในนั้น
POST /v1/headsภาพถ่ายของคนคนเดียว- id ของศีรษะ
head.completedwebhook ที่ลงลายเซ็นเมื่อเสร็จPOST /v1/heads/{id}/filesรูปแบบไฟล์- ลิงก์ที่ลงลายเซ็นและหมดอายุเร็ว
ส่ง รับแจ้ง ดึงไฟล์
ส่ง
POST /v1/headsพร้อมภาพถ่าย 1 ถึง 15 ภาพของคนคนเดียว เป็นไฟล์ multipart หรือ id ที่คุณอัปโหลดไว้ก่อน ใส่Idempotency-Keyแล้วการลองใหม่จะไม่สร้างหรือเรียกเก็บเงินศีรษะที่สองรับแจ้ง
เลือกวิธีได้ ได้แก่ webhook ที่ลงลายเซ็นไปยังเซิร์ฟเวอร์ของคุณ สตรีม server-sent event หรือ long poll ด้วย
?wait=60สำหรับสคริปต์ดึงไฟล์
ขอ
glb,fbx,obj,stl,plyหรือmetahuman_zipจะมีหรือไม่มี blendshape ARKit ก็ได้ คุณจะได้ลิงก์ที่ลงลายเซ็นซึ่งไม่ต้องใช้คีย์ ให้เก็บ 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แล้วส่งคีย์เดิมอีกครั้ง - ตรวจก่อน:
?dry_runตรวจการสร้างและส่งการประเมินราคากลับมาโดยไม่สร้างศีรษะGET /v1/accountแสดงยอดคงเหลือ - ติดตามสถานะ:
GET /v1/headsแสดงรายการศีรษะของคุณทีละหน้า พร้อมสถานะ - ล้มเหลวทีละตัว ไม่ใช่ทั้งชุด: ศีรษะที่ล้มเหลวจะรายงาน
error.codeของตัวเอง และเครดิตของศีรษะนั้นจะกลับคืน ส่วนที่เหลือของชุดยังทำงานต่อ
หรือให้เอเจนต์เขียนการเชื่อมต่อให้
เอกสารอ้างอิง API ไฟล์ OpenAPI และ llms.txt เขียนไว้สำหรับทั้งคนและโมเดลภาษา ให้ skill แก่เอเจนต์ แล้วเอเจนต์จะสร้างศีรษะ 3D ให้คุณโดยตรง หรือเขียนและทดสอบสคริปต์ไปป์ไลน์สำหรับสแตกของคุณก็ได้
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
Idempotency-Key เดียวกันภายใน 24 ชั่วโมงจะได้ศีรษะเดิม ไม่มีการเรียกเก็บเงินครั้งที่สอง
Webhook ที่ลงลายเซ็น
head.completed และ head.failed พร้อมลายเซ็น HMAC ใน FaceNinja-Signature
คิวที่บอกตามจริง
ระหว่างรอ ศีรษะจะรายงานลำดับในคิวและเวลาโดยประมาณ
ข้อผิดพลาดที่ใช้แตกเงื่อนไขได้
ค่า error.code ที่คงที่ (no_face, not_same_person, content_rejected, …) และ hint
คืนเครดิตโดยไม่ต้องเปิดทิกเก็ต
เครดิตถูกกันไว้ตอนสร้าง หักตอนเสร็จ และปล่อยคืนเมื่อล้มเหลวหรือลบ
ลบได้ตามต้องการ
ลบศีรษะและภาพถ่ายของมันได้ทุกเมื่อ ไฟล์จะหมดอายุ 30 วันหลังศีรษะ 3D เสร็จ
ตัวเลขที่ควรใช้ออกแบบ
| ภาพถ่ายต่อศีรษะ | 1 ถึง 15 ภาพของคนคนเดียว · JPEG, PNG, WebP, HEIC/HEIF หรือ AVIF ไฟล์ละไม่เกิน 25 MiB |
|---|---|
| เวลาต่อศีรษะ | ประมาณ 4 นาที บวกเวลารอคิว |
| Long poll | ?wait ได้สูงสุด 60 s ต่อการเรียก |
| ลิงก์ดาวน์โหลด | ต้องเริ่มภายใน 60 s การดาวน์โหลดที่เริ่มแล้วจะทำจนเสร็จ |
| ขีดจำกัดอัตราการเรียก | 600 คำขอต่อนาทีต่อบัญชี สร้างศีรษะได้ 30 ครั้งต่อนาที |
| ระยะเก็บรักษา | ภาพถ่ายและไฟล์ 30 วันหลังศีรษะ 3D เสร็จ |
| ราคา | 1,500 เครดิต (US$15) ต่อศีรษะ รวมทุกรูปแบบไฟล์ |
เอกสารอ้างอิงคือแหล่งข้อมูลที่ถูกต้องที่สุด หากตัวเลขที่นี่ต่างออกไป ให้ยึดตามเอกสารอ้างอิง
ใบหน้าของผู้เล่นตั้งแต่วันแรกของไฟล์เซฟ
ให้ผู้เล่นนำใบหน้าของตัวเองเข้ามา หรือสร้างนักแสดง NPC ทั้งชุดจากนักแสดงที่ยินยอม ทุกศีรษะเป็นเมชเดียวกันที่มีใบหน้าต่างกัน rig เดียว material เดียว และชุดแอนิเมชันเดียวจึงใช้ได้กับทุกตัว blendshape ARKit 52 แบบรองรับ lip sync หรือกล้องของผู้เล่น
วางแผนรับมือกับการรอ ศีรษะ 3D หนึ่งตัวใช้เวลาประมาณ 4 นาที ไม่ใช่มิลลิวินาที เริ่มสร้างตั้งแต่เนิ่น ๆ เช่นระหว่างการเริ่มต้นใช้งานหรือบทสอน แสดงตัวแทนชั่วคราว แล้วสลับเป็นศีรษะจริงเมื่อ webhook มาถึง
GLB สำหรับ Unity, Godot และเว็บ ส่วน FBX และ MetaHuman ZIP สำหรับ Unreal ระบบอัตโนมัติใน Unreal อยู่ในช่วงทดลองใช้ก่อน: ขอใช้งาน
ข้อกำหนดของเราระบุว่าต้องได้รับอนุญาตจากคนในภาพถ่าย และห้ามใช้ภาพถ่ายของเด็ก ให้ใส่กฎเดียวกันนี้ไว้ในโฟลว์ของคุณด้วย




ใช้ API แปลงภาพถ่ายเป็น MetaHuman ของเจ้าอื่นอยู่แล้วใช่ไหม
หากการเชื่อมต่อของคุณสร้างศีรษะ รอ แล้วดาวน์โหลดไฟล์อยู่แล้ว โครงสร้างนั้นยังใช้ต่อได้ที่นี่ พาธ ชื่อฟิลด์ และขั้นตอนไฟล์จะต่างกัน และคู่มือการย้ายแมปให้ทีละการเรียก
คำถามจากนักพัฒนา
- 01มี sandbox ไหม
- เพิ่ม
?dry_runในการเรียกสร้าง ระบบจะตรวจคำขอและส่งการประเมินราคากลับมา โดยไม่สร้างศีรษะและไม่เรียกเก็บเงิน - 02เรียกจากเบราว์เซอร์หรือแอปมือถือได้ไหม
- ไม่ได้ ให้เก็บคีย์ไว้บนเซิร์ฟเวอร์ของคุณ ลิงก์อัปโหลดและดาวน์โหลดที่ลงลายเซ็นไม่ต้องใช้คีย์ ไคลเอนต์จึงอัปโหลดหรือดาวน์โหลดโดยตรงได้
- 03มี SDK อะไรบ้าง
- HTTP ธรรมดา และไฟล์ OpenAPI 3.1 ที่คุณใช้สร้างไคลเอนต์ได้ เอกสารอ้างอิงมีตัวอย่าง curl, Node และ Python CLI ของ skill เอเจนต์ก็เป็นไฟล์ Python ไฟล์เดียวที่คุณอ่านและเรียกจากสคริปต์ได้เช่นกัน
- 04สร้างศีรษะพร้อมกันได้กี่ตัว
- สูงสุด 30 ครั้งต่อนาทีต่อบัญชี และแต่ละงานจะเข้าคิวทำงาน หากต้องการมากกว่า 1,000 ศีรษะ ให้ เขียนถึงเรา เรื่องการออกใบแจ้งหนี้และกำลังรองรับ
- 05นี่คือ MetaHuman API ของ Epic หรือไม่
- ไม่ใช่ โดย MetaHuman API ของ Epic ใช้สคริปต์สั่ง MetaHuman Creator ภายใน Unreal Engine ส่วน FaceNinja สร้างศีรษะ 3D จากภาพถ่ายในรูปแบบบริการเว็บ และส่งไฟล์กับ MetaHuman ZIP ให้คุณนำเข้า Unreal
- 06สร้างศีรษะจากภาพถ่ายชุดหนึ่งได้ไหม
- ได้ ในรุ่น Beta การสร้างจากภาพถ่ายหลายภาพในเซสชันเดียวกันจะส่งตำแหน่งกล้องและความยาวโฟกัสของแต่ละภาพกลับมาด้วย หากต้องการลองกับชุดภาพที่คุณถ่ายเอง ให้ เขียนถึงเรา