API 指南
本页汇总所有模型通用的调用须知;各模型的具体调用方式,见下方「各模型指南」。
调用前必读
鉴权与端点
所有模型共用同一个 API Key 与同一个端点,请求头带 Authorization: Bearer sk-xxxxxxxx。
模型列表 `GET /v1/models`
需带 Authorization: Bearer <API Key>;只返回当前账号可见的模型。文本模型会附带实际上下文上限与能力位,客户端应以这里的返回为准。
| 字段 | 类型 | 说明 |
|---|---|---|
object | string | 固定 `"list"` |
data[] | array | 模型列表 |
data[].id | string | 模型 ID(调用时填入 `model`,如 `deepseek-flash`) |
data[].object | string | 固定 `"model"` |
data[].created | integer | 固定 `0` |
data[].owned_by | string | 固定 `"trellis"` |
data[].max_model_len | integer? | **文本模型**:实际上下文上限(随部署调整,请以此为准;多模态模型不返回) |
data[].vision | boolean? | **文本模型**:图片理解是否开启(网关提供时返回;未返回表示未知,以实际请求为准) |
{
"object": "list",
"data": [
{
"id": "deepseek-flash",
"object": "model",
"created": 0,
"owned_by": "trellis",
"max_model_len": 524288,
"vision": false
},
{
"id": "trellis-qwen-image",
"object": "model",
"created": 0,
"owned_by": "trellis"
}
]
}max_model_len / vision 仅文本模型返回,且以网关实际值为准;deepseek-v4-flash 为 deepseek-flash 的兼容别名。
懒加载
模型按需加载:首次调用需等待加载(同步接口会变慢、视频会排队);空闲后资源可能被驱逐,再次调用需重新加载。请为长时间等待做好超时设置。
限流与排队
分两层:平台按 API Key 限流(超过返回 429),以及网关的容量排队(超过返回 503)。后端(模型/网关)不返回 `429`。
| 层 | 限制(当前值,可能调整) | 超限返回 |
|---|---|---|
| 平台(按 API Key) | 并发 **8**、**120 次/分钟** | `429` + `Retry-After` |
| 网关 / 引擎(LLM) | 并发 **4**、队列 **32**、单请求排队超时 **900s** | `503` `E_QUEUE_FULL` / `E_QUEUE_TIMEOUT` + `Retry-After` |
排队控制请求头:X-Trellis-Queue-Timeout: <秒>(默认 900;0 = 不等待,队列满立即 503)。当前为 FIFO,X-Trellis-Priority 暂不支持(网关会忽略)。
客户端务必遵守 `Retry-After` 退避,不要紧循环重试;并区分提示“排队中 / 限频”与“服务重启中”。
错误处理
错误响应为 JSON(含 error.message / error.type / error.code;部分接口为 message)。常见状态码:
| HTTP | code / 含义 | 建议 |
|---|---|---|
400 | 参数错误 / 模型不存在 / 图片理解未开启(`image input requires ...`) | 修正参数,不要重试 |
401 | `invalid_api_key`:API Key 无效 | 检查 Key |
402 | `insufficient_balance`:余额不足 | 充值后重试 |
403 | 账号不可用 | 联系管理员 |
404 | 任务 / 产物不存在(产物保留 7 天) | 不要重试,重新生成 |
409 | `E_MODE_MISMATCH`:当前模式不提供该接口 | 不要重试(需管理员切换模式) |
413 | `E_PAYLOAD_TOO_LARGE`:请求体过大 | 减小文件 / 内容 |
429 | 平台限流(并发 8 / 每分钟 120) | 按 `Retry-After` 退避重试 |
503 | `E_QUEUE_FULL` / `E_QUEUE_TIMEOUT` / `E_BACKEND_NOT_READY` / `E_RESOURCE_BUSY` | 按 `Retry-After` 退避重试 |
调用方式
同步:直接 POST 返回结果;各接口建议超时见下表,超时后请勿自动重试。LLM 仅同步(stream: true 为 SSE 流式)。
异步(推荐):除 LLM 与视频外,所有 POST 均支持——加请求头 X-Trellis-Async: 1 提交,返回 202 {id, poll},再轮询 GET /v1/jobs/{id}(间隔 3–5s),completed 时取 result (JSON)或 url(产物)。视频为原生异步:POST /v1/videos 返回 {id, status},状态同样轮询 `GET /v1/jobs/{id}`(/v1/videos/{id} 已移除)。二进制产物(如 TTS 裸 wav)经 /files/gw/<job>.wav 下载。异步不受长连接超时限制。
视频参数:num_frames 须为 4n+1,且决定耗时(帧越多越慢);fps 决定时长 = num_frames / fps、不影响耗时。用户给"时长 + 帧率"时,按 num_frames = 最近的 4n+1(秒 × fps) 换算并同时传 fps(不传 fps 时默认 16)。
取消任务
异步任务可中途取消:统一 POST /v1/jobs/{id}/cancel(视频与异步同一入口), 立即返回 canceling;对已结束任务返回其原状态(幂等)。取消为协作式(采样步/block 边界 ≤1 步生效;模型加载中则在加载完成后再生效),并非强杀。
调用方流程:① 用户取消 → 调 cancel;② 继续轮询 GET /v1/jobs/{id} 直到 status = canceled(期间为 canceling,不要提前结束);③ 收到 canceled 后清理状态、可重新发起。 不要依赖"关闭连接"来取消;取消 / 失败后不再产出产物、不计费。
任务状态统一为 queued / model_loading / in_progress / canceling / completed / failed / canceled(美式拼写 canceling/canceled;无 `phase` 字段,阶段只看 status); 并新增 progress(0–100,两位小数、单调)、eta_seconds、load_elapsed_seconds 字段,可用于展示进度与预计剩余时间。
| 轮询情况 | 处理 |
|---|---|
404 E_NOT_FOUND | 连续 ≥3 次(间隔 3–5s)均失败才判失败 |
503 E_BACKEND_NOT_READY | 可重试,遵循 Retry-After |
| 网络错误 / 超时 | 保留 job id,继续轮询 |
同步调用建议超时
若走同步,客户端超时必须大于「懒启动等待 + 推理耗时」;且超时后请勿自动重试——重试会让另一节点再次加载大模型并驱逐其它模型,雪上加霜。
| 接口 / 模型 | 建议客户端超时 |
|---|---|
| 对话 `POST /v1/chat/completions`(LLM,流式) | 120s(可更长) |
| 语音识别 `/v1/audio/transcriptions` | 300s |
| 语音合成 `/v1/audio/speech` | 600s |
| 图片编辑 `/v1/images/edits` | 1200s(20 分钟) |
| 文生图 `/v1/images/generations` | 1200s(20 分钟) |
| 说话视频 `/v1/avatar` | 2700s(45 分钟) |
| 口型同步 `/v1/lipsync` | 600s |
| 音乐生成 `/v1/music` | 建议异步;提交 60s,轮询间隔 3–5s、总 ≥1800s |
| 质检 `/v1/evaluations/audio | image` | 300s / 600s |
| 质检 `/v1/evaluations/video` | 900s |
| 视频 `/v1/videos`(原生异步) | 提交 60s;轮询间隔 10s、总 ≥1800s |
开启 qc:true 时,在原超时基础上再加 ≥300s。
输入限制
超限返回 413 E_PAYLOAD_TOO_LARGE(num_frames 不合规返回 400):
| 输入 | 限制 |
|---|---|
| 参考图(图 / 视频) | 最长边 ≤ 4096,张数 ≤ 3 |
| 参考音频(注册音色) | ≤ 20MB,时长 ≤ 30s,采样率 ≤ 48kHz |
| 参考视频(VACE / Animate) | ≤ 1080p,时长 ≤ 30s |
| 生成视频 num_frames | 须为 4n+1,范围 5~241 |
| 生成视频分辨率 | 边长 256~1920 |
| 请求体 | ≤ 64MB(超出返回 `413 E_PAYLOAD_TOO_LARGE`) |
可选质检 qc
图 / 视频 / TTS 生成接口均支持 qc: true(默认 false):开启后同步质检,指标随响应(图/TTS)或异步结果(视频)回显, 不额外收费,但耗时更长(图片 ≥25 分钟、TTS ≥5 分钟)。也可用独立接口单独质检:/v1/evaluations/image、 /v1/evaluations/video、/v1/evaluations/audio(按模态计费:图按张、音/视频按秒)。
产物与保留
产物保留 7 天,过期返回 404 E_NOT_FOUND(终态,不要重试;请提示"产物已过期,可重新生成")。 产物下载 /files/* 由独立常驻服务提供,模型被驱逐/停机后仍可下载。url 出现即表示文件已完整落盘, 请勿自行拼接文件名,只用接口返回的 url。产物 url 自带命名空间 (/files/image|video|audio|music/...、异步二进制 /files/gw/<job>.<ext>),请原样使用,勿再叠加 `image/` 等前缀。
异步任务 status=failed(如 E_RESOURCE_BUSY)时 url 为 null、产物不存在:不要取文件; 如需重试请重新提交新任务(新 id),不要轮询旧任务。404(过期/不存在)不要重试;5xx 可短暂重试。
模型选型(按场景选模型)
| 你的场景 | 推荐模型 | 要点 |
|---|---|---|
| 文字 → 图片(无参考图) | trellis-qwen-image | 文生图;size 建议 1328x1328(1024 会糊) |
| 有参考图 → 改图 / 锁脸 / 换装 | trellis-qwen-image-edit | 图生图,需 ≥1 张参考图 |
| 文字 → 视频 | trellis-wan-ti2v | t2v,草稿集,较快 |
| 图片 → 视频(高质量) | trellis-wan-i2v14 | 首帧图;14B,较慢 |
| 多参考图 / 视频续接 | trellis-wan-vace / trellis-wan-vace14b | 草稿集 / 成品集(14B) |
| 动作 / 表演迁移 | trellis-wan-animate | 需驱动视频(姿态/人脸) |
| 人像 + 配音 → 说话视频 | trellis-longcat-avatar | 图片 + 音频一次成片 |
| 视频 + 配音 → 对口型 | trellis-latentsync | 改口型,不动画面其余部分 |
| 文字 → 语音 | trellis-cosyvoice3 | 预置音色,选 voice |
| 文字 / 歌词 → 歌曲 | trellis-music | caption 必填;纯音乐设 instrumental |
| 严格按歌词 / 同段落同曲谱 | trellis-yue2 | style 必填;返回 ABC 曲谱可复用 |
| 音频 → 文字 | trellis-sensevoice | 中/粤/英/日/韩 |
| 质检(图 / 视频 / 语音) | trellis-qc-image / -video / -audio | 见各模型的 API 文档 |