powertokens-video
用一份零依赖的 Python 引擎,跨 Claude Code / Cursor / Trae / VS Code / Windsurf / Cline / Zed 等 40+ agent 调用 PowerTokens 的图片、视频、Seedance 模型。
仓库 · 快速开始 · Agent Skills 接入 · MCP 接入 · Seedance 专题
English: A tool-agnostic CLI + MCP server that drives PowerTokens image / video / Seedance models through the official REST API (no Node, no
powertokens-cli). One engine, two shells (Agent SkillsSKILL.md+ MCPmcp_server.py). Works across any agent that supports the Agent Skills open standard or MCP.
目录
- 这是什么
- 为什么做这个
- 快速开始(CLI)
- 能力总览:image / video / seedance 三类型
- 支持的模型与定价
- 前置要求
- 安装
- 配置 API Key
- 命令参考(全参数)
- Seedance 专题(独立类型)
- 跨账户资产共享与安全注意
- 输出与下载
- 接入方式 A:Agent Skills
- 接入方式 B:MCP server
- 定价与消耗估算
- API 直连参考
- 常见问题 / 排错
- 已知限制与路线图
- 贡献
- License
- Changelog
1. 这是什么
powertokens-video 是一个跨 agent 的图片 / 视频生成工具,把 PowerTokens 的模型能力,封装成「一份引擎 + 两种接入壳」:
- 引擎
pt_video.py:纯 Python 标准库,零外部依赖、直连官方 REST API、不需要 Node、也不需要 powertokens-cli。 - 壳 A · Agent Skills(
SKILL.md):符合开放标准,直接被 40+ 支持该标准的 agent 读取(Claude Code、Cursor、GitHub Copilot、Codex、Trae、Zed、Kiro、Junie、Roo Code …)。 - 壳 B · MCP server(
mcp_server.py):被任何 MCP 客户端当作「工具」调用(Claude Desktop、Cursor、Trae、VS Code、Windsurf、Cline、Zed …)。
三种壳共用同一个引擎,所有生成逻辑只维护一份(单一真相源)。
官方 REST 直连,没有中间层:
| 类型 | 提交端点 | 机制 |
|---|---|---|
视频(video / seedance) |
POST /v1/videos |
异步:提交后每 10 秒轮询 GET /v1/videos/{task_id},直到 succeeded/completed 拿到链接 |
图片(image) |
POST /v1/images/generations |
同步:提交后直接返回 data[].url,不轮询,可一次返回多张 |
默认模型为 auto(按你账号真实可用的模型自动挑选,视频/图片/seedance 分开),也可显式指定任意模型,并可查询每个模型的定价与支持的参数。
2. 为什么做这个
- 跨 agent 通用:不想每次换 agent(Claude / Cursor / Trae …)都重写一遍调用代码。本仓库同时输出 Agent Skills 标准 与 MCP 标准 两份接入,覆盖市面上绝大多数 agent 客户端。
- 开源、零依赖:只依赖 Python 标准库,任何人
git clone后python pt_video.py即可跑,无需装 Node、无需装 powertokens 的 CLI。 - 官方 API 直连:不依赖任何第三方中转/网关,调用行为可预测、可审计,出问题直接对照官方端点排查。
- 踩坑已沉淀:Seedance 协议签署、asset:// 素材格式、文生视频的 media-text 提交方式、跨账户资产共享等坑,都已实测并写入
docs/pitfall-archive.md与本文档。
3. 快速开始(CLI)
git clone https://github.com/tjj1234/powertokens-video.git
cd powertokens-video
export POWERTOKENS_API_KEY="sk-pt-xxxx" # 推荐用环境变量(见 §8)
python pt_video.py check # Key 体检
python pt_video.py models -t all --json # 列出模型 + 定价 + 参数
# 视频(默认 auto,按账号可用模型自动选)
python pt_video.py generate -p "一只猫在蒙古草原跳舞" -d 5 -r 720p
python pt_video.py generate -m kling-v2-1-master -p "一只猫跳舞" -d 5 -r 1080p
# 图片(加 --type image)
python pt_video.py generate -p "赛博城市夜景" --type image --aspect-ratio 16:9
python pt_video.py generate -m seedream-5-0-260128 -p "赛博城市" --type image --aspect-ratio 16:9
python pt_video.py estimate -m seedance-1-5-pro-251215 -d 5 -r 720p # 仅估算消耗(不扣费)
# Seedance 全系(1.0/1.5/2.0/2.5 均可,独立类型:--type seedance,需先签协议,见 §10)
python pt_video.py models -t seedance --json
python pt_video.py generate --type seedance -m seedance-1-5-pro-251215 -p "一只猫在草地上走" -d 5 -r 720p --no-download # 文生视频:纯 -p 即可
python pt_video.py upload -f ./first_frame.png # 上传素材拿 asset://<id>(免费)
python pt_video.py generate --type seedance -m seedance-1-5-pro-251215 -p "镜头推进" --first-frame asset://<id> --no-download # 图生视频
python pt_video.py seedance enable # 签好协议后标记,不再弹开通引导
工作原理:
- 视频
generate提交后进入异步轮询——每 10 秒查一次状态,直到成功拿到视频链接(默认自动下载到out/<task_id>.mp4并打印链接)。真实出片通常 1–3 分钟。 - 图片
generate --type image提交后同步返回data[].url(通常几秒),默认下载到out/<model>_<n>.png。
4. 能力总览:image / video / seedance 三类型
本项目把生成能力分成三种并列类型(这是经过实测后刻意的设计,见 §10):
| 类型 | 子命令 --type |
说明 | 协议前置 | 素材格式 | 生成机制 |
|---|---|---|---|---|---|
image |
--type image |
文生图 | 无 | — | 同步(/v1/images/generations) |
video |
--type video(默认) |
普通视频模型(Kling / Wan / Hailuo / Vidu / HappyHorse) | 无 | http(s) 或 asset:// |
异步轮询(/v1/videos) |
seedance |
--type seedance |
Seedance 全系(ByteDance:1.0/1.5/2.0/2.5,含 Mini/Fast) | 需签《Asset Library User Agreement》 | 仅 asset://(图生);文生无需素材 |
异步轮询(/v1/videos) |
关键设计点:Seedance 被拆成独立类型,而不是塞进普通
video。原因:它有三大独有前置(签协议 / 素材走资产库asset:/// 文生靠media-text而非顶层prompt),与普通视频模型系统性不同。普通video的auto候选已剔除 Seedance,--type seedance才显式走它。
5. 支持的模型与定价
价格为 PT 预扣单价(美元,$),基于
5s / 720p探测;时长与分辨率按系数换算(见 §15)。图片单价 PT 未公开 API,表中标n/a,以仪表盘为准。 实际可用模型以python pt_video.py models -t all --json在你账号下查到的为准(不同账号额度/白名单不同)。
视频模型(--type video,auto 候选)
| 模型 ID | 5s/720p 单价 | 时长上限 | 分辨率 | 主要输入 |
|---|---|---|---|---|
wan3.0-video |
$0.20 | 10s | 720p/1080p | text, image |
wan3.0-video-prime |
$0.70 | 10s | 720p/1080p | text, image |
wan2.7-t2v |
$0.475 | 10s | 720p/1080p | text, image |
kling-v3 |
$0.42 | 10s | 720p/1080p | text, image, audio |
kling-video-o1 |
$0.42 | 10s | 720p/1080p | text, image |
kling-v2-1-master |
$1.40 | 10s | 720p/1080p | text, image, audio(运镜) |
Seedance 模型(--type seedance,实测 7 个全部 available)
| 模型 ID | 5s/720p 单价 | 时长上限 | 分辨率 | 主要输入 |
|---|---|---|---|---|
seedance-1-5-pro-251215 |
$0.247 | 10s | 720p/1080p | text, image(first-frame), start-end, video+audio ref |
dreamina-seedance-2-0-fast-260128 |
$0.605 | 10s | 720p/1080p | 同上 |
dreamina-seedance-2-0-260128 |
$0.756 | 10s | 720p/1080p | 同上 |
dreamina-seedance-2-0-mini-260615 |
n/a | 10s | 720p/1080p | 同上 |
dreamina-seedance-2-5-260628 |
n/a | 10s | 720p/1080p | 同上 |
seedance-1-0-pro-fast-251015 |
n/a | 10s | 720p/1080p | 同上 |
seedance-1-0-pro-250528 |
n/a | 10s | 720p/1080p | 同上 |
图片模型(--type image,auto 候选)
| 模型 ID | 单价 | 宽高比 | 输入 |
|---|---|---|---|
seedream-5-0-260128(auto 默认) |
n/a | 1:1/16:9/4:3/3:2/2:3/3:4/9:16/21:9 | text |
qwen-image / image-01 / kling-image / wan 等 |
n/a | 同上 | text |
6. 前置要求
- Python 3.9+(仅标准库;只有 MCP server 需要可选的
mcp包)。 - PowerTokens API Key:打开 https://powertokens.ai/zh-Hans/dashboard → 注册/登录 → 充值 → 创建 Key(形如
sk-pt-xxxx)。 - (仅 Seedance):使用
--type seedance前,需在仪表盘手动签署《Asset Library User Agreement》(https://powertokens.ai/assets-library?tab=1)。该协议无 API 端点可程序化签署,只能网页手签。
7. 安装
方式一:直接用(推荐,零安装)
git clone https://github.com/tjj1234/powertokens-video.git
cd powertokens-video
python pt_video.py check
引擎只用标准库,python pt_video.py <子命令> 即可,无需 pip install。
方式二:作为 MCP server 安装(可选)
仅当你要用「接入方式 B(MCP)」时才需要装 mcp 依赖:
pip install -e ".[mcp]" # 或 pip install "mcp[cli]>=1.2"
python mcp_server.py # stdio;agent 客户端会自动拉起
8. 配置 API Key
三种配置方式,优先级从高到低:
- 环境变量
POWERTOKENS_API_KEY(推荐,任何 agent 通用)export POWERTOKENS_API_KEY="sk-pt-xxxx" - 本地配置文件(权限 0600,推荐在共享机器上用)
python pt_video.py config --set-key "sk-pt-xxxx" # 保存在 ~/.config/powertokens-video/config.json(用户级,不在仓库内) - 仓库级配置(可选):
PT_VIDEO_CONFIG环境变量可覆盖配置文件路径。
⚠️ Key 属于敏感凭据:不要写进任何会被提交的文件。
.gitignore已忽略config.json与.env。
9. 命令参考(全参数)
所有命令形式:python pt_video.py <子命令> [参数]。
| 子命令 | 作用 | 备注 |
|---|---|---|
check |
Key 体检 | exit 0=就绪,2=缺 Key |
config --set-key <k> |
保存 Key 到 config.json | — |
config --set-model <id|auto> |
保存默认模型 | 默认 auto |
config --show |
查看配置(Key 脱敏) | — |
auto-model [--type image|video|seedance] |
打印 auto 首选模型(不生成) | — |
models [-t video|image|seedance|all] [--json] |
列出模型 + 定价 + 支持参数 | 无 Key 也能看公开目录 |
estimate -m <id> -d <s> -r <p> |
仅估算消耗(美元) | 不扣费 |
generate -m <id|auto> -p ... [--type ...] |
生成(视频轮询 / 图片同步) | 核心命令 |
upload -f <图片路径> [--group-name <组名>] |
上传素材到资产库,拿 asset://<id> |
免费 |
seedance enable|disable|status |
管理 Seedance 协议本地标记 | 见 §10 |
generate 完整参数
通用:
-p/--prompt(必填,文生/图生提示词)-m/--model(默认auto;也可写具体模型 ID)--type(默认按模型 ID 推断;显式video/image/seedance)-o/--output(输出路径;不传则落到out/)--no-download(只拿链接,不下载文件)--timeout(轮询总上限秒,默认 600)
视频(video / seedance):
-d/--duration(2–30s,默认 5)-r/--resolution(480P/720P/1080P,默认 720P)--ratio(如16:9/9:16/adaptive)--seed(整数,可复现)--first-frame/--last-frame(首帧/尾帧,asset://或http(s))--ref-image/--ref-video/--ref-audio(参考素材,可多次)--no-audio(关闭生成音频)--no-prompt-extend(关闭提示词扩展)--watermark(开启水印)
图片(image):
--aspect-ratio(1:1/16:9/4:3/3:2/2:3/3:4/9:16/21:9,默认1:1)--n(1–9 张,默认 1)--response-format(url/base64,默认url)
upload 参数
-f/--file(图片路径,必填;资产库要求宽 300–6000px)--group-name(资产分组名,可选;不可与已存在组名重复)
10. Seedance 专题(独立类型)
10.1 为什么是独立类型
Seedance 全系模型(ByteDance,1.0 / 1.5 / 2.0 / 2.5 及 Mini/Fast 变体)有三个与其他视频模型系统性不同的前置:
- 必须签《Asset Library User Agreement》(仪表盘手签,无 API);
- 图生视频的素材必须走资产库,以
asset://<ASSET_ID>传入; - 文生视频的 prompt 必须放进
media:[{type:text, text:...}],服务端不认顶层prompt字段。
因此把它提升为独立类型 --type seedance,而不是在 video 里打补丁。普通 video 的 auto 候选已剔除它。
10.2 协议签署流程(本地标记 + 报错回退)
PT 没有「查询协议是否已签」的 API 端点,所以 skill 用本地标记 + 报错回退近似判断:
- 未标记时,生成前会打印 4 步「跳转 PT 开通」引导(不阻断提交);
- 你签好后跑
python pt_video.py seedance enable标记已签,之后不再弹引导; - 若提交仍被服务端判「未签」(关键词命中),skill 自动
reset标记并重新弹引导; - 首次成功生成后自动记为已签。
python pt_video.py seedance status # 查看当前标记
python pt_video.py seedance enable # 签好后标记
python pt_video.py seedance disable # 取消标记
10.3 文生视频 vs 图生视频(实测澄清)
- 文生视频只需
-p,无需任何 media:提交时引擎自动把 prompt 放进media:[{type:text}]。 - 图生视频(首帧/参考图)才需要素材,且素材必须经资产库上传后以
asset://<ASSET_ID>格式传入。
⚠️ 纠正旧认知:网络/早期文档有「BytePlus 系文生视频必须带 media」的说法,是误判——当初用假
asset://占位符才触发BytePlus video models only accept media;换成真实 Key 实测,纯 prompt 文生视频可正常走到扣费校验(余额不足时返回pre-consume quota failed)。
10.4 素材上传闭环(upload,免费)
图生视频必须用 asset:// 素材。两步拿到:
# 1) 上传本地图(资产库要求宽 300–6000px),免费,返回 asset://<id>
python pt_video.py upload -f ./first_frame.png
# 2) 用 asset id 做首帧
python pt_video.py generate --type seedance -m seedance-1-5-pro-251215 -p "镜头缓慢推进" --first-frame asset://<id>
Seedance 类型下,
--first-frame等媒体只收asset://;传公网http(s)会在前置校验被拒绝(避免绕过协议)。
11. 跨账户资产共享与安全注意
实测结论(2026-10-27,真实双账户):PowerTokens 的 asset:// 资产 id 是跨账户可解析、读路径不做账户隔离的共享引用。
- 用账户 A 上传的
asset://xxx,可以直接在账户 B 的 Key 下作为首帧生成视频,生成任务完整跑完、消耗记在账户 B。 - 安全含义:不要把涉密 / PII 内容放进 asset 却指望「账户隔离」——任何知道 asset id 的人都能在自有 Key 下引用它做生成(只要过预扣费)。asset id 应视作「不可猜测但可共享」的 token。
- 产品机会:这也意味着「上传一次素材、多人/多账户复用生成」是平台原生支持的能力,可在协作类产品里直接利用。
12. 输出与下载
- 视频:轮询成功后默认下载到
out/<task_id>.mp4并打印链接;--no-download只返回链接。 - 图片:同步返回后默认下载到
out/<model>_<n>.png(多张自动加_1/_2序号);--no-download只返回data[].url。 - 图片 URL 有效期:
data[].url是临时签名地址(约 24 小时),请及时下载或转存。 - 所有生成产物落在仓库内
out/目录(已加入.gitignore,不会被提交)。
13. 接入方式 A:Agent Skills
本仓库根目录本身就是一个 Agent Skill 文件夹(含 SKILL.md),复制到 agent 的 skills 目录即可被读取。
| Agent | skills 目录 |
|---|---|
| Claude Code | ~/.claude/skills/powertokens-video/ |
| Cursor | <project>/.cursor/skills/powertokens-video/ 或用户级 skills 目录 |
| GitHub Copilot | 项目内 .github/skills/ 或按 Copilot skills 文档 |
| Codex (OpenAI) | ~/.codex/skills/powertokens-video/ |
| Trae / Zed / Kiro / Junie / Roo Code | 对应 skills 目录(参考各工具文档) |
# 例:Claude Code
mkdir -p ~/.claude/skills
cp -r . ~/.claude/skills/powertokens-video
目录结构(本仓库根即 skill 文件夹):
powertokens-video/
├── SKILL.md # Agent Skills 清单(name + description + 指令)
├── pt_video.py # 引擎(直连官方 REST,零依赖)
├── mcp_server.py # MCP server(可选)
├── LICENSE
├── README.md
├── pyproject.toml
└── docs/
├── publish.md # 注册表提交清单
└── pitfall-archive.md # 踩坑档案
SKILL.md 的 description 使用工具无关的触发语(如 “generate a video with PowerTokens”),不含任何单一 agent 专有字眼,因此可被 40+ agent 通用。
14. 接入方式 B:MCP server
仅 MCP server 需要 mcp 依赖(见 §7 方式二)。运行:
python mcp_server.py # stdio;agent 客户端自动拉起
在各 MCP 客户端的配置里加上(把路径换成你的绝对路径,并带上 Key 环境变量):
{
"mcpServers": {
"powertokens-video": {
"command": "python",
"args": ["/abs/path/to/powertokens-video/mcp_server.py"],
"env": { "POWERTOKENS_API_KEY": "sk-pt-xxxx" }
}
}
}
各客户端配置入口:
| 客户端 | 入口 |
|---|---|
| Claude Desktop | 设置 → 开发者 → Edit Config(claude_desktop_config.json) |
| Claude Code | claude mcp add powertokens-video -- python /abs/path/mcp_server.py |
| Cursor | Settings → MCP → Add |
| Trae | 设置 → MCP → 添加 |
| VS Code (Copilot) | 命令面板 → MCP: Add Server |
| Windsurf / Cline / Zed | 对应 MCP 配置面板 / JSON |
MCP 暴露的工具
| 工具 | 说明 |
|---|---|
check_key |
检查 API Key 是否就绪 |
list_models(kind) |
列出模型 + 定价 + 参数;kind=all|video|image|seedance |
estimate_cost(model, duration_s, resolution) |
估算一次生成消耗(美元) |
generate_video(prompt, model, duration_s, resolution, output, timeout_s) |
生成视频(异步自动轮询) |
generate_image(prompt, model, aspect_ratio, n, output) |
生成图片(同步) |
generate_seedance(prompt, model, duration_s, resolution, first_frame, output, timeout_s) |
生成 Seedance 视频(独立类型) |
注:
upload(资产上传)目前仅 CLI 提供,MCP 工具未暴露;Seedance 图生视频所需的asset://可先通过 CLIupload拿到,再传给generate_seedance的first_frame。
15. 定价与消耗估算
- 视频基于 PT 预扣单价估算;系数:时长线性(5s→10s = ×2),1080p = 720p ×2。
例:
seedance-1-5-pro-2512155s/720p = $0.247 → 10s/720p = $0.494 → 5s/1080p = $0.494。 - 图片按张计费,PT 未开放单价 API,表中标
n/a,以仪表盘为准。 estimate子命令只估算、不扣费,也不进入生成流程。- PT 额度按美元计;生成前服务端会做
pre-consume quota failed预扣校验——校验不通过不会扣费。
16. API 直连参考
所有端点 Base:https://api.powertokens.ai,鉴权:Authorization: Bearer <POWERTOKENS_API_KEY>。
| 用途 | 方法 + 路径 | 要点 |
|---|---|---|
| 提交视频 | POST /v1/videos |
body:model / prompt(顶层,普通视频用;Seedance 用 media:[{type:text}])/ size(720P) / ratio / seconds(字符串) / generate_audio / media[] |
| 轮询视频 | GET /v1/videos/{task_id} |
状态 succeeded/completed 后取 metadata.url |
| 文生图 | POST /v1/images/generations |
OpenAI 风格,同步返回 data[].url(带 /generations 后缀) |
| 列出可用模型 | GET /v1/models |
返回当前 Key 可调用的模型列表(用于 auto 候选 / 预校验) |
| 上传资产 | POST powertokens.ai/api/.../upload |
异步:返回 task_id → 轮询 get-asset-id 拿 asset_id → 引用 asset://<id> |
常见错误:
cannot unmarshal number into ... seconds of type string:服务端seconds是enum<string>,必须传字符串(引擎已处理)。pre-consume quota failed:余额不足,预扣校验未通过,未扣费。BytePlus video models only accept media:多为传了无效/假asset://导致(详见 §10.3)。404于/v1/images:正确路径是带/generations后缀的/v1/images/generations。
17. 常见问题 / 排错
Q:视频生成一直停在某个状态?
A:视频是异步生成,真实出片 1–3 分钟。脚本每 10s 轮询,默认总上限 600s;超时可加 --timeout。若长时间 unknown,多半是服务端排队,可稍后拿 task_id 用 GET /v1/videos/{id} 复查(后续版本会补 status 子命令)。
Q:图片 URL 打不开?
A:data[].url 是临时签名地址(约 24 小时)。请及时用 --no-download 之外的默认行为下载,或自行 curl 保存。
Q:Seedance 提示要签协议?
A:去 https://powertokens.ai/assets-library?tab=1 手签,然后 python pt_video.py seedance enable。
Q:为什么我的 auto 没选到 Seedance?
A:Seedance 是独立类型,普通 video 的 auto 不含它;要显式 --type seedance。
Q:跨账户能用同一个 asset id 吗? A:可以(见 §11)——asset id 跨账户可解析,但注意安全含义。
Q:MCP server 启动报缺 mcp?
A:pip install -e ".[mcp]" 或 pip install "mcp[cli]>=1.2"。
18. 已知限制与路线图
- 轮询熔断:429 退避 / 5xx 熔断为已知待办(见
docs/pitfall-archive.mdA.02/A.03)。 status子命令:按task_id单独复查状态未实现。- 图片单价:PT 未开放单价 API,
estimate对图片返回n/a。 - Seedance 协议无 API 签署:只能仪表盘手签 + 本地标记近似。
- 结果视频直连下载:部分 result URL 在本机直连 R2 可能返回 403(桶热链/访问策略),生成任务 server-side 完成不受影响;下载链路策略待进一步确认。
19. 贡献
欢迎 Issue / PR。改动请保持「引擎单一真相源」原则:CLI / SKILL / MCP 三处共用 pt_video.py,不要在 MCP 或 SKILL 里重复实现生成逻辑。新增踩坑请同步更新 docs/pitfall-archive.md。
20. License
21. Changelog
- 0.4.1 — 纠正「Seedance 文生视频必须带 media」误判(实测纯 prompt 可行);补充跨账户资产共享发现(A.14);
upload资产上传闭环;文档对齐。 - 0.4.0 — Seedance 拆为独立类型(
image/video/seedance并列);协议「本地标记 + 报错回退」开通流程;force_asset媒体校验;MCPgenerate_seedance工具。 - 0.3.0 — 补齐图片生成(同步
/v1/images/generations);REST 直连替代 CLI。 - 0.2.0 — 异步视频提交 + 轮询;
auto模型选择;定价/参数查询。 - 0.1.0 — 初始引擎骨架。