FaceNinja

นักพัฒนา · 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 ซึ่งคุณนำเข้าไปใช้ในนั้น

ส่ง รับแจ้ง ดึงไฟล์

  1. ส่ง

    POST /v1/heads พร้อมภาพถ่าย 1 ถึง 15 ภาพของคนคนเดียว เป็นไฟล์ multipart หรือ id ที่คุณอัปโหลดไว้ก่อน ใส่ Idempotency-Key แล้วการลองใหม่จะไม่สร้างหรือเรียกเก็บเงินศีรษะที่สอง

  2. รับแจ้ง

    เลือกวิธีได้ ได้แก่ webhook ที่ลงลายเซ็นไปยังเซิร์ฟเวอร์ของคุณ สตรีม server-sent event หรือ long poll ด้วย ?wait=60 สำหรับสคริปต์

  3. ดึงไฟล์

    ขอ 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"])

ย่อให้อ่านง่าย เอกสารอ้างอิง 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 แล้วส่งคีย์เดิมอีกครั้ง
  • ตรวจก่อน: ?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 อยู่ในช่วงทดลองใช้ก่อน: ขอใช้งาน

ข้อกำหนดของเราระบุว่าต้องได้รับอนุญาตจากคนในภาพถ่าย และห้ามใช้ภาพถ่ายของเด็ก ให้ใส่กฎเดียวกันนี้ไว้ในโฟลว์ของคุณด้วย

ภาพถ่ายสังเคราะห์ของชายสูงอายุภายใต้แสงแข็งสีส้มภาพถ่ายสังเคราะห์ของผู้หญิงใส่แว่นที่กำลังหัวเราะภาพถ่ายสังเคราะห์ของชายมีเคราที่หันศีรษะภาพถ่ายสังเคราะห์ของผู้หญิงที่ผมยาวปิดหู
ตัวอย่างทดสอบที่เป็นบุคคลสังเคราะห์ 4 คน โทโพโลยีเดียว

ใช้ 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 การสร้างจากภาพถ่ายหลายภาพในเซสชันเดียวกันจะส่งตำแหน่งกล้องและความยาวโฟกัสของแต่ละภาพกลับมาด้วย หากต้องการลองกับชุดภาพที่คุณถ่ายเอง ให้ เขียนถึงเรา

ศีรษะ 3D แรกของคุณอยู่ห่างแค่การเรียก API หนึ่งครั้ง