FaceNinja

开发者 · REST API

面向批量处理的 MetaHuman 头部 API。

发送一个人的照片,头部完成时收到通知,再取你需要的格式。同一个调用,可以生成一个头部,也可以生成五百个。每个头部都是成品:4K 皮肤、毛发(Groom)推荐、贴合的脖子和 52 个 ARKit 混合变形。一个头部约需 4 分钟,所以这个 API 在设计上就是异步的。

  • REST + JSON
  • Bearer 密钥
  • 签名 webhook
  • 幂等键
  • OpenAPI 3.1
  • llms.txt

请不要和 Epic 的 MetaHuman Python 与 C++ API 混淆,那些 API 在 Unreal Engine 内部运行。FaceNinja 是一个 Web API,负责生成你带进它们里面的头部。

发送。等通知。取文件。

  1. 发送。

    POST /v1/heads,附上同一个人的 1 到 15 张照片,可以是 multipart 文件,也可以是你先前上传得到的 id。加上 Idempotency-Key,重试就不会生成或计费第二个头部。

  2. 等通知。

    选择方式:发到你服务器的签名 webhook、服务器推送事件流,或者给脚本用的 ?wait=60 长轮询。

  3. 取文件。

    请求 glb、fbx、obj、stl、ply 或 metahuman_zip,可以带或不带 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。

从一个文件夹生成一组角色,运行两次也安全。

批量就是许多次单个创建。给每一次创建一个由你自己的数据(比如文件夹名)派生出的幂等键,脚本崩溃后就可以整个重跑,不会重复生成,也不会重复付费。然后让 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 既写给人看,也写给语言模型看。把技能交给你的智能体,它可以直接替你生成头部,也可以为你的技术栈编写并测试管线脚本。

管线提示词
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.

请保留这段英文提示词:你的智能体需要原样读取其中的网址。之后你可以用中文和它交流。

为重试、队列和糟糕的照片而建。

幂等的创建

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 分钟,外加排队时间
长轮询?wait 每次调用最长 60 s
下载链接须在 60 s 内开始;已开始的下载会完成
速率限制每个账号每分钟 600 次请求;每分钟 30 次头部创建
保留期头部完成后,照片和文件保留 30 天
价格每个头部 1,500 积分(US$15),所有格式都包含

参考文档是权威来源。如果这里的数字有出入,以参考文档为准。

存档第一天,就有玩家自己的脸。

让玩家带上自己的脸,或者用同意出镜的演员搭建一组 NPC。每个头部都是同一个网格配不同的脸,所以一套绑定、一套材质和一套动画就适用于所有头部。52 个 ARKit 混合变形可以接口型同步,也可以接玩家的摄像头。

为等待做好计划。 一个头部需要约 4 分钟,不是几毫秒。尽早开始,比如在新手引导或教程期间,先显示一个替身,等 webhook 到达再换上这个头部。

GLB 用于 Unity、Godot 和网页;FBX 和 MetaHuman ZIP 用于 Unreal。Unreal 自动化处于抢先体验阶段:申请使用。

我们的条款要求照片中的人许可,并禁止使用儿童照片。请把同样的规则写进你自己的流程里。

一位老年男性在强烈橙色光线下的合成照片一位戴眼镜、正在大笑的女性的合成照片一位留着胡须、头部偏转的男性的合成照片一位长发遮住耳朵的女性的合成照片
四个合成的测试对象,同一套拓扑。

已经在用别的照片转 MetaHuman 的 API?

如果你的集成已经在创建头部、等待并下载文件,那么它在这里保持同样的结构。路径、字段名和文件步骤有所不同,迁移指南会逐个调用地对应起来。

开发者常见问题。

01有沙盒吗?
在创建调用上加 ?dry_run。它会检查请求并返回报价,不会生成头部,也不会扣你的费。
02能从浏览器或移动应用里调用吗?
不能。请把密钥放在你的服务器上。签名的上传和下载链接不需要密钥,所以客户端可以直接上传或下载。
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 调用。