# MoneyPrinterTurbo API 教程：提交任务、轮询状态与下载成片

用本地服务 OpenAPI 确认路由后提交视频任务，保存 task_id、轮询真实状态，再下载并校验成片。

## 本包身份

所有 reference 音轨是原创程序合成，旁白是 macOS Tingting 系统朗读，杯子/门是脚本绘制输入；头像是 AI 生成原创虚构成人。官方 driving.mp4 明确标源。未执行 MoneyPrinterTurbo 推理/账号生成，不包含伪造的模型成功音频或成片。

## 使用

1. 通过官方接口上传片段，配音走已配置 TTS

在本机 /docs 找到 POST video_materials，逐个上传本包 clip，保存响应 data.file。HTTP 的 custom_audio_file 默认只允许当前任务目录文件，不能把任意主机绝对路径塞进去；自备配音改走已有 WebUI/CLI 教程。本题 request.json 不发送该字段。

2. 从当前 OpenAPI 核对真实前缀

启动官方 API 服务，保存本机 /openapi.json。不要凭旧文章硬编码 /api/v1；run-api.py 会从实际 paths 中寻找唯一的 /videos 与 /tasks/{task_id} 路由，歧义时停止，请人工核对。

3. 配置最小请求并只提交一次

保持 video_source=local，把 video_materials 的 url 填为上传返回的文件 key；voice_name 选本机已验证可用的 TTS 音色，关闭字幕与配乐。脚本拒绝所有 REPLACE_WITH 占位，并在 POST 前写 pending-submit.json；响应丢失时先核实服务任务，不自动重发。

4. 轮询真实状态并设置截止时间

按脚本间隔读取 task.data.state：当前源码 1 完成、-1 失败，其它状态继续等。记录每次实际 JSON，超过截止时间退出并保留 task_id，后续用 --task-id 查询原任务，不能自己填 100% 进度。

5. 从返回字段下载真实结果

成功后使用响应 videos 文件 URL，限制为同一本地服务来源，以流方式写临时文件；检查 Content-Type，再用 ffprobe 验证有效视频流、时长与容器后才替换 final.mp4。404、空文件和错误 JSON/HTML 不命名为成功 MP4。

6. 回读 MP4 与任务对应关系

运行 check.py --result final.mp4，检查时长、视频流与输入是否相同，再播放首尾。示例 runtime.json 初始为 not-executed；本站没有开启 MPT API、排队或下载该软件产物。

```
# 在 MoneyPrinterTurbo 仓库按官方 README 启动 API
uv run python main.py
# 在本机 /docs 的 POST video_materials 上传片段
# 将返回 data.file 与真实可用 voice_name 填入 request.json，再运行
python run-api.py --origin http://127.0.0.1:8080
# 查询既有任务而不重复提交
python run-api.py --origin http://127.0.0.1:8080 --task-id 你的真实任务ID
```

## 离线检查

`python check.py --self-test` 实读并校验输入与坏文件；真正软件输出后用 `python check.py --result 实际文件` 检查格式并人工回听/看图。结果与已知输入/参考完全相同时会拒绝，不能改名充当生成。格式通过不证明模型调用和内容质量。

## 来源

- https://github.com/harry0703/MoneyPrinterTurbo
- https://github.com/harry0703/MoneyPrinterTurbo/blob/main/app/controllers/v1/video.py
- https://github.com/harry0703/MoneyPrinterTurbo/blob/main/app/controllers/v1/base.py
