← 返回映序开发者文档 · v1下载文档

映序 API 接口文档

更新:2026-10-27 · 版本:v1

服务地址:https://yingxu.top

API 基础地址:https://yingxu.top/api/plugin/v1

支持视频生成,以及剧本工作台的资产提取、分镜文案、视频描述词、资产生图、编辑和结果导入。所有任务使用密钥所属账号的余额、权限与实际售价。

1. 访问密钥与通用约定

登录映序,在「密钥与接入」创建客户访问密钥。请求头:

Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

GET 无需 Content-Type。服务端调用不携带 Cookie,也不需要 CSRF Token。密钥只放在自己的服务端;撤销后立即停止访问。浏览器跨站请求不属于开放 CORS 范围。

金额单位为人民币「分」,100 分=¥1;不要把站内积分直接填入金额字段。使用接口返回的账号报价,提交金额、归属、状态等均由服务端核算。

创建视频任务使用 Idempotency-Key 请求头;剧本任务和资产生图使用正文中的 requestKey。一次业务请求固定使用同一编号,重试时保持正文一致;内容变化必须使用新编号。同编号但正文不同返回 409。

工作台采用异步处理,建议每 3~5 秒查询一次。当前每个密钥上限 600 次/分钟;工作台读取按账号 360 次/分钟、写入 240 次/分钟,付费处理入口另有 30 次/分钟限制,报价入口 60 次/分钟。视频提交按账号 30 次/分钟。遇到 429 请退避重试。

错误格式:

{"error":{"code":"WORKBENCH_CONFLICT","message":"记录已更新,请刷新后重试。"}}

常用状态码:400 参数有误;401 密钥缺失、无效或撤销;402 余额不足;403 权限或来源校验失败;404 记录不存在或接口未开放;409 版本、状态或幂等冲突;429 请求频繁;503 服务暂未就绪。

2. 视频生成

以下路径相对于 API 基础地址。

方法 路径 用途
GET /models 查询视频模型及当前账号售价
POST /tasks 创建视频任务
GET /tasks/{taskId} 查询任务进度、结果与结算状态
GET / HEAD /tasks/{taskId}/asset 读取已完成并结算的成片或生成图片
GET / HEAD /uploads/{uploadId} 读取当前账号的素材图片

先从 /models 返回的 models 数组选择模型,读取其 id、durations、resolutions、aspectRatios(若该模型返回 ratios,以实际字段为准)、limits 和 pricing。模型目录及售价会更新,使用实时返回值,不固定写死。

视频提交示例,模型 ID 和规格请替换成目录中的可用值:

curl 'https://yingxu.top/api/plugin/v1/tasks' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: VIDEO_REQUEST_UUID' \
  --data '{"modelId":"yingxu-video-009","prompt":"人物在窗边缓缓转身,神情由惊讶转为坚定。","duration":15,"resolution":"720p","aspectRatio":"16:9","maxCostCents":460}'

新建返回 201,重复请求返回 200,正文包含 task。maxCostCents 是本次允许的最高金额;若实际报价超过预算,提交会被拒绝。示例预算仅用于演示,专属价格以账号实时结果为准。

参考图片使用 imageUploadIds 或 imageUrls 数组。音频、视频参考分别为 audioUploadIds / audioUrls、videoUploadIds / videoUrls,仅在所选模型支持时使用。URL 须为公开可访问的 HTTPS 文件;数量、类型、时长、大小均以模型规格为准。已有工作台资产图片可直接使用其 uploadId。

curl 'https://yingxu.top/api/plugin/v1/tasks/TASK_ID' \
  -H 'Authorization: Bearer YOUR_API_KEY'

curl 'https://yingxu.top/api/plugin/v1/tasks/TASK_ID/asset' \
  -H 'Authorization: Bearer YOUR_API_KEY' -o result.mp4

常见视频状态:queued、running、processing、completed、failed、cancelled。提交失败或明确生成失败会自动退款;已受理的任务持续查询,成片同步异常会自动重试。下载前确认 completed 且已结算。查询及下载均校验密钥所属账号。

3. 剧本工作台:推荐流程

工作台前缀:/studio/workbench。

  1. POST 创建剧本,target: "assets",先提取人物、场景、物品。
  2. GET 轮询任务,直到 status: "assets_ready";读取 state.assets 和 projectAssets。
  3. 按需要编辑资产描述、生成资产图片。
  4. POST /{jobId}/storyboard,选择 15 秒或 30 秒分镜。
  5. GET 轮询到 completed;读取 state.frames[].text 和 state.frames[].videoPrompt。
  6. POST /{jobId}/import,同步到本站项目和批量视频;也可直接取描述词调用视频 /tasks。

若无需在资产阶段停下来检查,创建时使用 target: "complete",连续执行资产、分镜与视频描述词。该选项生成文字结果,视频文件仍需单独提交视频任务。

3.1 查询列表与文字价格

GET /studio/workbench?page=1

返回 jobs、total、page、pages、configured、prices。每页 30 条。当前文字价格如下,实际以接口及任务 billing.prices 快照为准:

prices 字段 项目 单价
assets 每个剧本的资产提取 120 分
storyboard 每条分镜文案 5 分
video 每条视频描述词 5 分
regenerate 单条视频描述词重新生成 20 分

费用按步骤冻结,完成后结算;未完成或取消的部分退回。同一已交付步骤不会因普通恢复重试而重复收费。资产生图、视频生成另行计费。

3.2 创建剧本任务

curl 'https://yingxu.top/api/plugin/v1/studio/workbench' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  --data '{"requestKey":"SCRIPT_REQUEST_UUID","jobs":[{"name":"雨夜归来","script":"室内,夜。张岚推门进入。\n张岚:这笔钱,我一分也不会拿。","template":"classic","style":"真人短剧,RAW 照片级真实感","target":"assets"}]}'
字段 说明
requestKey 必填,1~80 字符;推荐 UUID
jobs 必填,至少一个剧本对象
jobs[].name 必填,1~120 字符
jobs[].script 必填,1~100000 字符;建议明确人物、台词与动作
jobs[].template 必填;classic 对应 15 秒,modern 对应 30 秒
jobs[].style 可选,默认「真人短剧」,最多 800 字符
jobs[].target 可选;assets 或 complete,默认 assets

整个工作台请求 JSON 上限 2 MiB,大批量剧本请分次提交。提交返回 202:

{"jobs":[{"id":"JOB_ID","name":"雨夜归来","status":"queued","target":"assets","revision":0}]}

以上为响应字段节选;实际还包含计费、时间、进度等字段。

3.3 查询结果

GET /studio/workbench/{jobId}

返回 { "job": {...} }。主要字段:

字段 说明
id / name / script / style / template 任务编号、剧本与配置
status / phase / note / errorCode 状态、处理阶段、说明、错误码
revision 最新记录版本,编辑和部分操作须回传
billing prices、currency、settledCents、frozenCents、releasedCents
state.assets.characters 人物数组:name、description、personality,以及可选 identity、costumeEvidence
state.assets.scenes / items 场景、物品数组:name、description
state.plan 分镜大纲:index、scene、roles、summary、dialogueLines,部分含 silentBeats
state.frames 已生成的分镜:index、text、videoPrompt;尚未完成的字段可能缺省
projectId / projectAssets 项目和资产库记录,含资产 id、kind、description、uploadId、imageUrl、revision
imageModels / imageJobs 当前可用图片模型及最近资产生图任务
storyboardDurations 按分镜编号返回的时长
frameCount / plannedCount / videoPromptCount 已完成文案数、大纲数、描述词数
needsStoryboards / needsVideoPrompts 是否还缺文案或描述词

personality 为人物声线/表演资料;同一人物不同服装可分别作为独立人物资产,保留返回的完整名称。

工作台时间字段是 Unix 毫秒。状态包括 queued、running、assets_ready、completed、failed、paused、cancelled。assets_ready 等待调用方确认;failed 应先查看错误和已保存内容,再恢复或重试。

响应只交付创作结果与操作所需信息,不返回访问凭据、上游地址或内部处理记录。

3.4 开始分镜与视频描述词

POST /studio/workbench/{jobId}/storyboard
{"revision":12,"duration":15}

仅 assets_ready 可开始;duration 为 15 或 30。revision 使用最新 GET 的值。该操作会继续生成分镜文案和视频描述词。返回 200,job.status 进入队列。

3.5 编辑、恢复和导入

以下均为 POST,路径相对于 /studio/workbench/{jobId};无参数也发送 {}。

路径 JSON 正文 用途
/save-asset revision、kind、name、description;人物可加 personality 编辑单项资产;kind 为 characters/scenes/items
/save-assets revision、assets 资产就绪阶段整批编辑,保留全部原始资产名称
/save-frame revision、index、text 和/或 videoPrompt 编辑一条分镜,index 从 1 开始
/save revision、assets、storyboard 完成后整批编辑;storyboard 为整份视频描述词文本,已导入时应在项目中编辑
/delete-asset revision、kind、name 删除指定资产;处理中先等待完成
/retry revision 重试失败或暂停的未完成步骤
/cancel {} 停止文字处理,保留已完成内容,释放未完成冻结费用
/resume {} 继续失败、暂停或取消的文字任务
/video-prompts {} 恢复未完成处理,或为已完成但缺描述词的任务补全
/regenerate-video revision、index、requestKey 付费重新生成指定分镜的视频描述词,保留原结果直到新结果完成
/rebuild-script revision、script、duration、requestKey 复用资产创建修订任务,duration 为 15/30;requestKey 最多 60 字符
/import {} 完成后同步资产与分镜至本站项目;返回 projectId、assets、shots、repeated
/delete {} 删除已停止的工作台记录;处理中先取消

大多数操作返回 {job: ...};rebuild-script 新建时返回 202;import、delete 返回各自结果。WORKBENCH_CONFLICT 表示版本已更新,应重新 GET 并核对修改内容。普通恢复和 retry 保留已有交付结果;regenerate-video 是新的付费交付。

4. 资产生图

4.1 模型和设置

GET /studio/workbench/image-models

返回 models 数组,每项有 id、name、status、resolutions、ratios、prices、revision 等公开字段。prices 按规格列出当前账号价格,单位为分。

设置示例:

{"modelId":"yingxu-image-实际模型ID","resolution":"1K","characterLayout":"three-view","sceneLayout":"single","propLayout":"white-background","showName":true}

modelId 必须使用目录返回值。resolution 使用模型支持的 1K、2K、4K、1080p 或 native。人物布局支持 three-view、four-view、concept;场景支持 single、four-view、board、concept;物品使用 white-background。比例按布局生成:人物四视图 3:4,其他布局 16:9;模型需支持对应比例。

可通过 POST /studio/workbench/{jobId}/image-settings 保存 { "revision": 12, "settings": {...} }。

4.2 先报价,再生成

POST /studio/workbench/{jobId}/image-quote
{"assetIds":["ASSET_ID"],"interactionVersion":2,"settings":{"modelId":"IMAGE_MODEL_ID","resolution":"1K","characterLayout":"three-view","sceneLayout":"single","propLayout":"white-background","showName":true}}

assetIds 使用任务 projectAssets[].id,1~900 项,不能重复。返回 quoteHash、totalCents、currency、settings、modelName、items。每项含资产 ID、实际生图提示词、比例和价格。

随后用相同 assetIds、settings、interactionVersion,并增加 quoteHash、UUID 格式的 requestKey:

POST /studio/workbench/{jobId}/images
{"assetIds":["ASSET_ID"],"interactionVersion":2,"settings":{"modelId":"IMAGE_MODEL_ID","resolution":"1K","characterLayout":"three-view","sceneLayout":"single","propLayout":"white-background","showName":true},"quoteHash":"QUOTE_HASH","requestKey":"IMAGE_REQUEST_UUID"}

返回 202,含 taskIds、totalCents(首次提交)、repeated。轮询工作台详情的 imageJobs,或 /tasks/{taskId}。图片成功后通常自动绑定到资产;若资产期间被编辑而未绑定,确认最新版本后调用:

POST /studio/workbench/{jobId}/apply-image
{"taskId":"IMAGE_TASK_ID","assetRevision":3}

同一人物的多套着装可调用 POST /studio/workbench/{jobId}/primary-character;同一地点的多个时段场景可调用 POST /studio/workbench/{jobId}/primary-scene。正文为 { "assetId": "主参考资产ID", "revision": 12 }。其他人物造型或同组场景会引用主参考;可先生成主参考,也可同批提交。

图片下载使用返回的 imageUrl,加本站域名并携带 Bearer 密钥;路径通常为 /api/plugin/v1/uploads/{uploadId}。不要将密钥放进 URL。

5. 项目与素材衔接

方法 路径 用途
GET /studio/connection 检查密钥连接,返回账号及脱敏邮箱
GET /studio/projects 列出项目;支持 limit、cursor
GET /studio/projects/{projectId} 项目、资产和分页分镜
GET /studio/assets?projectId=PROJECT_ID 项目资产;支持 limit、cursor
POST /studio/projects 创建项目,常用 name、source、externalId
POST /studio/uploads 上传图片,正文 { "dataUrl": "data:image/png;base64,..." },完整 JSON 上限 8 MiB
POST /studio/assets 创建资产:projectId、kind、name、description、uploadId、source、externalId;kind 为 character/scene/prop
POST /studio/assets/{assetId}/save 编辑资产:revision,及 name/kind/description/uploadId 中需修改的字段
POST /studio/projects/{projectId}/shots/import 导入分镜:source、shots;每次 1~100 条

分镜导入每项可含 externalId、label、prompt、assetIds、excludedAssetIds、settings。按 source + externalId 去重。工作台的 /import 已完成关联时,直接读取返回 projectId 即可。

从工作台制作视频:读取项目分镜 prompt 和对应资产 uploadId,按需填写视频 /tasks 的 imageUploadIds,使用实时模型参数与预算提交。任务之间的归属、版本和引用由服务端校验。

6. Python 接入示例

安装依赖:pip install requests。设置环境变量 YINGXU_API_KEY 后执行。以下示例会创建一个收费的资产提取任务:

import os, time, uuid, requests

base = "https://yingxu.top/api/plugin/v1"
session = requests.Session()
session.headers.update({"Authorization": "Bearer " + os.environ["YINGXU_API_KEY"]})

def call(method, path, body=None):
    response = session.request(method, base + path, json=body, timeout=60)
    response.raise_for_status()
    return response.json()

payload = {
    "requestKey": str(uuid.uuid4()),  # 网络重试时复用同一个 payload
    "jobs": [{
        "name": "雨夜归来", "script": "室内,夜。张岚:这笔钱,我一分也不会拿。",
        "template": "classic", "style": "真人短剧,RAW 照片级真实感", "target": "assets"
    }]
}
job_id = call("POST", "/studio/workbench", payload)["jobs"][0]["id"]
deadline = time.monotonic() + 1800
while time.monotonic() < deadline:
    job = call("GET", f"/studio/workbench/{job_id}")["job"]
    if job["status"] == "assets_ready":
        print(job["state"]["assets"])
        break
    if job["status"] in {"failed", "paused", "cancelled"}:
        raise RuntimeError(f"{job.get('errorCode')}: {job.get('note')}")
    time.sleep(5)
else:
    raise TimeoutError(f"轮询超时,请继续查询原任务 {job_id},勿新建重复任务")

# 确认资产后再执行以下收费步骤:
# call("POST", f"/studio/workbench/{job_id}/storyboard",
#      {"revision": job["revision"], "duration": 15})

联网超时不等于业务失败。创建请求超时后使用原 requestKey 和原正文重试;已拿到 jobId/taskId 的任务继续查询原编号。遇到余额不足,已完成内容会保留,充值后使用原任务恢复入口。