From 5faff8a127052d5746319d7b5bc2b4b79ec0e527 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Fri, 22 May 2026 10:11:31 +0800 Subject: [PATCH] =?UTF-8?q?feat(seedance):=20=E5=8A=A0=20seedance=5F2=5Fpr?= =?UTF-8?q?o=20variant=20+=20smoke=20=E6=94=AF=E6=8C=81=20--variant=20?= =?UTF-8?q?=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - yaml 加 seedance_2_pro (model_id=doubao-seedance-2-0-260128, ¥46/Mtok 文生, 支持 480p/720p/1080p);放在 fast 后面,fast 仍是默认 (yaml 首位 = agent fallback) - Pro 出片慢,poll_timeout_s 拉到 900s (实测 480p 4s 等了 177s) - smoke_seedance.py 加 sys.argv[1] 选 variant:`smoke_seedance.py seedance_2_pro` - SKILL 把 "30-90s" 校准到 "Fast 30-90s / Pro 2-3min" (实测) smoke Pro 跑通:body schema 完全对,响应带真 usage.total_tokens (40594),tool _extract_tokens 命中走真值不估算;480p 4s 实测 ¥1.87,与官方源数据线性外推吻合。 Co-Authored-By: Claude Opus 4.7 (1M context) --- config/media/doubao.yaml | 30 ++++++++++++++++++++++++++++++ scripts/smoke_seedance.py | 10 +++++++++- skills/videogen/SKILL.md | 10 +++++----- 3 files changed, 44 insertions(+), 6 deletions(-) diff --git a/config/media/doubao.yaml b/config/media/doubao.yaml index 29955ba..1955fae 100644 --- a/config/media/doubao.yaml +++ b/config/media/doubao.yaml @@ -26,6 +26,7 @@ image: request_timeout_s: 60 # 出图慢于此判超时 video: + # fast 放第一个 → 默认 variant(成本敏感场景优先);开通了 Pro 的用户从顶栏下拉切。 seedance_2_fast: model_id: doubao-seedance-2-0-fast-260128 display_name: 豆包 Seedance 2.0 Fast @@ -61,3 +62,32 @@ video: request_timeout_s: 60 # submit POST 超时(异步,只是提交) poll_interval_s: 5 # 单次 GET 间隔(秒);典型 30-90s 出片 poll_timeout_s: 600 # 总等待上限(10min)→ 超时返 [Error] + + seedance_2_pro: + model_id: doubao-seedance-2-0-260128 + display_name: 豆包 Seedance 2.0 Pro + # 同 fast 一套异步 task + 轮询接口,只换 model_id + 单价 + 分辨率上限。 + endpoint_submit: /contents/generations/tasks + endpoint_poll: /contents/generations/tasks + + # 计费(per-token,公式同 fast): + # 文生视频: ¥46 / Mtok (vs fast ¥37) + # 图生视频: ¥28 / Mtok (vs fast ¥22) + # 实测档位(Pro, 5s, 文生视频, 24fps): + # 720p 16:9 → ¥4.97 (vs fast ¥4.00) + # 1080p 16:9 → 更高(Pro 独占,fast 不支持) + price_cny_per_mtoken_text2video: 46.0 + price_cny_per_mtoken_video2video: 28.0 + fps: 24 + + # 支持参数 — Pro 支持 1080p,默认仍 720p 控成本 + default_resolution: 720p # 480p / 720p / 1080p(Pro 独占) + default_ratio: "16:9" + default_duration: 5 + default_watermark: false + default_generate_audio: false + + # 轮询参数:Pro 出片慢于 Fast(更精细),拉长超时 + request_timeout_s: 60 + poll_interval_s: 5 + poll_timeout_s: 900 # Pro 上限拉到 15min 保险 diff --git a/scripts/smoke_seedance.py b/scripts/smoke_seedance.py index c327874..0e99332 100644 --- a/scripts/smoke_seedance.py +++ b/scripts/smoke_seedance.py @@ -48,7 +48,15 @@ def main() -> int: if not video_cfg: print("[SKIP] doubao.yaml 无 video 段") return 0 - variant_key, variant_cfg = next(iter(video_cfg.items())) + # 允许命令行指定 variant:`smoke_seedance.py seedance_2_pro`;不传走 yaml 第一个 + want_variant = sys.argv[1] if len(sys.argv) > 1 else "" + if want_variant: + if want_variant not in video_cfg: + print(f"[FAIL] variant {want_variant!r} 不在 yaml video 段, 已知: {list(video_cfg.keys())}") + return 2 + variant_key, variant_cfg = want_variant, video_cfg[want_variant] + else: + variant_key, variant_cfg = next(iter(video_cfg.items())) print(f"[setup] variant={variant_key} model={variant_cfg.get('model_id')}") print(f" price_text2video=¥{variant_cfg.get('price_cny_per_mtoken_text2video')}/Mtok") diff --git a/skills/videogen/SKILL.md b/skills/videogen/SKILL.md index 8141669..4d16d83 100644 --- a/skills/videogen/SKILL.md +++ b/skills/videogen/SKILL.md @@ -1,6 +1,6 @@ --- name: videogen -description: 用豆包 Seedance 2.0 Fast 生视频(`seedance` tool)。**任何生视频任务调 tool 前必须 load 本 skill**。触发词:视频 / 动画 / 动起来 / 做个 video / 做段视频 / 出段视频 / 生成视频 / mov / mp4 / 短片 / 镜头 / 运动镜头 / 演示视频 / 动效。核心:视频比图贵 10 倍(¥1.86-¥4+ / 段),且要等 30-90s,问清楚再画 + 强制确认。 +description: 用豆包 Seedance 2.0 Fast 生视频(`seedance` tool)。**任何生视频任务调 tool 前必须 load 本 skill**。触发词:视频 / 动画 / 动起来 / 做个 video / 做段视频 / 出段视频 / 生成视频 / mov / mp4 / 短片 / 镜头 / 运动镜头 / 演示视频 / 动效。核心:视频比图贵 10 倍(¥1.86-¥4+ / 段),且要等 Fast 30-90s / Pro 2-3min,问清楚再画 + 强制确认。 --- # Videogen @@ -20,7 +20,7 @@ description: 用豆包 Seedance 2.0 Fast 生视频(`seedance` tool)。**任何 - 用户**沉默 / 长时间不回 / 追问别的事** → 不算确认,**继续等**,不要自作主张 - 用户回 "看起来不错" / "差不多" / 模棱两可 → **主动追问一句"这就开烧 ¥X?"**,拿到明确"是"再调 -**为什么比 imagegen 还严**:视频单价 ¥4 起,比图贵 10 倍以上;一次失败相当于 18 张错图;且要等 30-90s,用户改方向的等待代价也很高。**装配 prompt 不等于授权调用** —— 装配是模型脑内运算,授权要落到用户的"嗯,画吧"上。 +**为什么比 imagegen 还严**:视频单价 ¥4 起,比图贵 10 倍以上;一次失败相当于 18 张错图;且要等 Fast 30-90s / Pro 2-3min,用户改方向的等待代价也很高。**装配 prompt 不等于授权调用** —— 装配是模型脑内运算,授权要落到用户的"嗯,画吧"上。 ## 何时用本 skill @@ -49,7 +49,7 @@ description: 用豆包 Seedance 2.0 Fast 生视频(`seedance` tool)。**任何 **模糊时主动问一句**: -> 你这是想要 **一张静态图**(seedream,¥0.22,3-5 秒出图),还是 **一段短视频**(seedance,¥4 起,等 30-90s)?静态图够的话省钱省时间。 +> 你这是想要 **一张静态图**(seedream,¥0.22,3-5 秒出图),还是 **一段短视频**(seedance,¥4 起,等 Fast 30-90s / Pro 2-3min)?静态图够的话省钱省时间。 ## 诊断模糊度 — 六维清单(运动是新增的必填维) @@ -78,7 +78,7 @@ description: 用豆包 Seedance 2.0 Fast 生视频(`seedance` tool)。**任何 > - **场景**:工地中景,远处有塔吊 > - **镜头**:固定俯视 + 缓慢推近模板中心 > - **风格**:写实工程纪录片 -> - **时长 / 分辨率 / 比例**:5s / 720p / 16:9(ppt 用) — ¥4.00,等 30-90s +> - **时长 / 分辨率 / 比例**:5s / 720p / 16:9(ppt 用) — ¥4.00,等 Fast 30-90s / Pro 2-3min > > 这样画可以吗?或者告诉我:想突出什么?(浇筑工艺细节 / 振动棒动作 / 大场面气势 / 慢动作) @@ -201,7 +201,7 @@ seedance( ) ``` -**调用是同步阻塞 30-90s** —— tool 内部 submit 后轮询直到 succeeded,期间 LLM 卡住。这不是 bug,告诉用户"提交了,等 30-90 秒"再耐心等返回。 +**调用是同步阻塞 Fast 30-90s / Pro 2-3min** —— tool 内部 submit 后轮询直到 succeeded,期间 LLM 卡住。这不是 bug,告诉用户"提交了,等 30-90 秒"再耐心等返回。 返回串首行是 `[seedance] model=... · resolution=... · ratio=... · duration=Xs · cost=¥... · elapsed=...s` —— 原样保留给用户(SPA 会 parse 挂徽章)。第二行 `saved: <相对路径>` 是产物路径,告诉用户。