{"id":"e2bdeaea-f3f3-479a-b07a-06c6fcfc65c1","entityType":"agent","slug":"clawhub-zhaobod1-huo15-influencer-video-skill","name":"Huo15 Influencer Video Skill","canonicalUrl":"https://www.xpersona.co/agent/clawhub-zhaobod1-huo15-influencer-video-skill","canonicalPath":"/agent/clawhub-zhaobod1-huo15-influencer-video-skill","generatedAt":"2026-10-11T07:44:42.409Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T04:22:27.406Z","emptyReason":null},"description":"通过火山方舟Ark API调用Seedance 2.0生成第一人称带货短视频，v2 新增剧本驱动的配音（edge-tts/火山TTS）、背景音乐自动混音、字幕烧录，内置 8 套人设模板（传统女、时尚主播、老中医、厨房主妇、美妆博主、健身教练、户外探店、数码博主）。触发词：生成视频、带货视频、产品视频、拍视频、剧本... Skill: Huo15 Influencer Video Skill Owner: zhaobod1 Summary: 通过火山方舟Ark API调用Seedance 2.0生成第一人称带货短视频，v2 新增剧本驱动的配音（edge-tts/火山TTS）、背景音乐自动混音、字幕烧录，内置 8 套人设模板（传统女、时尚主播、老中医、厨房主妇、美妆博主、健身教练、户外探店、数码博主）。触发词：生成视频、带货视频、产品视频、拍视频、剧本... Tags: influencer:1.2.0, latest:2.0.0, social-media:1.2.0, video:1.2.0 Version history: v2.0.0 | 2026-04-27T11:34:35.819Z | user v2 大版本: 剧本驱动 + edge-tts/火山 TTS 配音 + ffmpeg 自动混 BGM + 字幕烧录 + 8 套人设模板(传统","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.2K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s17f6q72skfgyjycm2frgdc8dn83v5mk:huo15-influencer-video-skill","sourceUrl":"https://clawhub.ai/zhaobod1/huo15-influencer-video-skill","homepage":"https://clawhub.ai/zhaobod1/skills/huo15-influencer-video-skill","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/zhaobod1/huo15-influencer-video-skill","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/zhaobod1/skills/huo15-influencer-video-skill","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":61,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"通过火山方舟Ark API调用Seedance 2.0生成第一人称带货短视频，v2 新增剧本驱动的配音（edge-tts/火山TTS）、背景音乐自动混音、字幕烧录，内置 8 套人设模板（传统女、时尚主播、老中医、厨房主妇、美妆博主、健身教练、户外探店、数码博主）。触发词：生成视频、带货视频、产品视频、拍视频、剧本..."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T04:22:27.406Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T04:22:27.406Z","emptyReason":null},"stars":null,"forks":null,"downloads":1161,"packageName":null,"latestVersion":"2.0.0","tractionLabel":"1.2K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T04:22:27.344Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T04:22:27.406Z","lastCrawledAt":"2026-10-11T04:22:27.344Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T04:22:27.344Z","lastVerifiedAt":null,"highlights":[{"version":"2.0.0","createdAt":"2026-04-27T11:34:35.819Z","changelog":"v2 大版本: 剧本驱动 + edge-tts/火山 TTS 配音 + ffmpeg 自动混 BGM + 字幕烧录 + 8 套人设模板(传统女/时尚主播/老中医/厨房主妇/美妆博主/健身教练/户外探店/数码博主, 按品类自动选) + dry-run 省钱测剧本 + preflight 自检 + CLI 子命令","fileCount":10,"zipByteSize":21931},{"version":"1.2.2","createdAt":"2026-04-24T04:15:24.038Z","changelog":"No file changes detected in version 1.2.2. - No updates or modifications were made in this release. - All features and documentation remain unchanged from version 1.2.1.","fileCount":2,"zipByteSize":4978},{"version":"1.2.1","createdAt":"2026-04-23T03:21:29.546Z","changelog":"v1.2.1 把本地工作态同步到 clawhub（之前本地版本号落后于 clawhub）","fileCount":2,"zipByteSize":4978},{"version":"1.2.0","createdAt":"2026-04-20T15:08:21.327Z","changelog":"安全修复：API Key全部改为环境变量","fileCount":2,"zipByteSize":4979},{"version":"1.1.0","createdAt":"2026-04-20T15:04:37.185Z","changelog":"脱敏修复：API Key改为环境变量引用","fileCount":2,"zipByteSize":4979},{"version":"1.0.0","createdAt":"2026-04-20T14:47:58.717Z","changelog":"火15 AI 带货视频生成 Skill 初始发布： - 支持通过火山方舟 Ark API 调用 Seedance 2.0，将产品图一键生成带货短视频。 - 内置全流程安全与费用告知规则，自动计算生成费用并需用户确认。 - 自定义/自动化提示词拼接逻辑，支持灵活调整人物、动作、环境等要素。 - 提供标准 API 调用范例（含图片、音视频参考），参数配置清晰明确。 - 附赠完整 Python 工具函数，助力一键生成视频与自助集成。","fileCount":2,"zipByteSize":4795}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17f6q72skfgyjycm2frgdc8dn83v5mk:huo15-influencer-video-skill","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhaobod1-huo15-influencer-video-skill/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhaobod1-huo15-influencer-video-skill/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhaobod1-huo15-influencer-video-skill/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-zhaobod1-huo15-influencer-video-skill/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-zhaobod1-huo15-influencer-video-skill/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-zhaobod1-huo15-influencer-video-skill/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T07:44:42.408Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhaobod1-huo15-influencer-video-skill/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhaobod1-huo15-influencer-video-skill/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhaobod1-huo15-influencer-video-skill/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhaobod1-huo15-influencer-video-skill/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-11T04:22:27.406Z","emptyReason":null},"readme":"Skill: Huo15 Influencer Video Skill\n\nOwner: zhaobod1\n\nSummary: 通过火山方舟Ark API调用Seedance 2.0生成第一人称带货短视频，v2 新增剧本驱动的配音（edge-tts/火山TTS）、背景音乐自动混音、字幕烧录，内置 8 套人设模板（传统女、时尚主播、老中医、厨房主妇、美妆博主、健身教练、户外探店、数码博主）。触发词：生成视频、带货视频、产品视频、拍视频、剧本...\n\nTags: influencer:1.2.0, latest:2.0.0, social-media:1.2.0, video:1.2.0\n\nVersion history:\n\nv2.0.0 | 2026-04-27T11:34:35.819Z | user\n\nv2 大版本: 剧本驱动 + edge-tts/火山 TTS 配音 + ffmpeg 自动混 BGM + 字幕烧录 + 8 套人设模板(传统女/时尚主播/老中医/厨房主妇/美妆博主/健身教练/户外探店/数码博主, 按品类自动选) + dry-run 省钱测剧本 + preflight 自检 + CLI 子命令\n\nv1.2.2 | 2026-04-24T04:15:24.038Z | auto\n\nNo file changes detected in version 1.2.2.  \n- No updates or modifications were made in this release.  \n- All features and documentation remain unchanged from version 1.2.1.\n\nv1.2.1 | 2026-04-23T03:21:29.546Z | user\n\nv1.2.1 把本地工作态同步到 clawhub（之前本地版本号落后于 clawhub）\n\nv1.2.0 | 2026-04-20T15:08:21.327Z | user\n\n安全修复：API Key全部改为环境变量\n\nv1.1.0 | 2026-04-20T15:04:37.185Z | user\n\n脱敏修复：API Key改为环境变量引用\n\nv1.0.0 | 2026-04-20T14:47:58.717Z | auto\n\n火15 AI 带货视频生成 Skill 初始发布：\n\n- 支持通过火山方舟 Ark API 调用 Seedance 2.0，将产品图一键生成带货短视频。\n- 内置全流程安全与费用告知规则，自动计算生成费用并需用户确认。\n- 自定义/自动化提示词拼接逻辑，支持灵活调整人物、动作、环境等要素。\n- 提供标准 API 调用范例（含图片、音视频参考），参数配置清晰明确。\n- 附赠完整 Python 工具函数，助力一键生成视频与自助集成。\n\nArchive index:\n\nArchive v2.0.0: 10 files, 21931 bytes\n\nFiles: _meta.json (147b), examples/script_auto_template.json (378b), examples/script_fashion_host.json (391b), examples/script_traditional_lady.json (454b), scripts/bgm.py (4085b), scripts/pipeline.py (13529b), scripts/templates.py (5959b), scripts/tts.py (5466b), skill-card.md (2492b), SKILL.md (12223b)\n\nFile v2.0.0:SKILL.md\n\n---\nname: huo15-influencer-video-skill\ndisplayName: 火一五带货视频技能\ndescription: 通过火山方舟Ark API调用Seedance 2.0生成第一人称带货短视频，v2 新增剧本驱动的配音（edge-tts/火山TTS）、背景音乐自动混音、字幕烧录，内置 8 套人设模板（传统女、时尚主播、老中医、厨房主妇、美妆博主、健身教练、户外探店、数码博主）。触发词：生成视频、带货视频、产品视频、拍视频、剧本拍视频。\nversion: 2.0.0\naliases:\n  - 火一五带货视频技能\n  - 火一五AI带货视频技能\n  - 火一五产品视频技能\n  - 带货视频\n  - 剧本带货视频\n  - AI视频生成\n  - 产品视频\n---\n\n# 火15 AI 带货视频生成 Skill v2\n\n> 产品图 + 剧本 → 带配音、背景音乐、字幕的第一人称带货短视频。\n> 内置 8 套人设模板，一句话指定品类即可自动选模板。\n\n---\n\n## ⚠️ 安全规则\n\n1. 每次生成前**必须**告知用户预估费用（Seedance 视频部分；TTS edge-tts 免费、火山 TTS 单字 ≤¥0.0006）\n2. 用户确认后才可提交任务\n3. 单次最大时长 15 秒，默认按配音时长自动决定\n4. 优先使用最省 Token 的配置\n\n---\n\n## 一、能力总览\n\n| 模块 | v1 | v2（本次） |\n|---|---|---|\n| 视频生成 | Seedance 2.0 ✅ | Seedance 2.0 ✅ |\n| 配音 | ❌ | edge-tts（默认免费） / 火山 TTS（可选） ✅ |\n| 背景音乐 | ❌ | ffmpeg 自动循环+降音量+淡出 ✅ |\n| 字幕 | ❌ | 按行字数比例切时间轴 + 烧录 ✅ |\n| 人设模板 | 1 套（传统女） | **8 套**（按品类自动推荐） ✅ |\n| 剧本驱动 | ❌ | JSON 剧本一键端到端 ✅ |\n\n---\n\n## 二、文件结构\n\n```\nhuo15-influencer-video-skill/\n├── SKILL.md                           # 本文档\n├── _meta.json\n├── scripts/\n│   ├── templates.py                   # 8 套人设模板配置\n│   ├── tts.py                         # 配音引擎（edge-tts + 火山）\n│   ├── bgm.py                         # BGM 库 + 混音 + 视频/音频合并\n│   └── pipeline.py                    # 端到端 pipeline（推荐入口）\n└── examples/\n    ├── script_traditional_lady.json\n    ├── script_fashion_host.json\n    └── script_auto_template.json\n```\n\n---\n\n## 三、依赖与凭证\n\n```bash\n# 必需\nbrew install ffmpeg\npip install edge-tts requests\n\n# 视频生成\nexport ARK_API_KEY=ak-xxxxx                # 方舟控制台获取\n\n# 可选：火山 TTS（不设则降级到 edge-tts，免费但音质稍弱）\nexport VOLC_TTS_APP_ID=xxxxx\nexport VOLC_TTS_TOKEN=xxxxx\nexport VOLC_TTS_CLUSTER=volcano_tts\n\n# 可选：BGM 库目录（默认 ~/Music/huo15-bgm/）\nexport HUO15_BGM_DIR=~/Music/huo15-bgm\n```\n\n### BGM 文件准备（一次性）\n\n把 5 个免版税音乐放到 `~/Music/huo15-bgm/`（缺哪个跳过哪个，不影响视频生成）：\n\n| 文件名 | 风格 | 推荐用途 | 下载关键词 |\n|---|---|---|---|\n| `warm.mp3` | 温暖钢琴 | 养生/食品/手工 | warm piano background |\n| `energetic.mp3` | 活力电子 | 美妆/服装/直播 | upbeat electronic |\n| `asian.mp3` | 中国风古筝 | 中药/茶/古风 | chinese guzheng |\n| `soft.mp3` | 柔和氛围 | 数码/护肤 | soft ambient pad |\n| `cinematic.mp3` | 电影弦乐 | 户外/特产 | cinematic strings |\n\n下载渠道：[Pixabay Music](https://pixabay.com/music/)（CC0）、[Freesound](https://freesound.org/)、[Incompetech](https://incompetech.com/music/royalty-free/)（注明出处）。\n\n---\n\n## 四、8 套预设模板\n\n| key | 角色 | 推荐音色 | 推荐 BGM | 适用品类 |\n|---|---|---|---|---|\n| `traditional_lady` | 传统中年女性（默认） | 晓秋（沉稳） | warm | 养生 / 茶叶 / 手工 / 古法食品 |\n| `fashion_host` | 时尚女主播 | 晓晓（活泼） | energetic | 美妆 / 服装 / 饰品 / 数码配件 |\n| `tcm_doctor` | 老中医 | 云健（沉稳男） | asian | 中药 / 保健品 / 膏方 / 艾灸 |\n| `kitchen_mom` | 厨房主妇 | 晓涵（温暖） | warm | 调味料 / 食材 / 厨具 / 速食 |\n| `beauty_blogger` | 美妆博主 | 晓梦（活泼） | soft | 护肤 / 彩妆 / 香水 / 美容仪 |\n| `fitness_coach` | 健身教练 | 云皓（激情男） | energetic | 蛋白粉 / 运动器材 / 补剂 |\n| `outdoor_explorer` | 户外探店达人 | 云夏（轻快男） | cinematic | 地方特产 / 户外装备 / 民俗 |\n| `tech_geek` | 数码博主 | 云扬（专业男） | soft | 手机 / 耳机 / 智能家居 / 电脑 |\n\n### 自动选模板\n\n```json\n{ \"template\": \"auto\", \"category\": \"蛋白粉\", ... }\n```\n→ 命中 `fitness_coach`。无匹配回退 `traditional_lady`。\n\n---\n\n## 五、剧本格式\n\n```json\n{\n  \"template\": \"traditional_lady\",\n  \"image\": \"/path/to/product.jpg\",\n  \"lines\": [\n    {\"text\": \"姐妹们，今天给大家推一款好东西\", \"action\": \"举起产品给镜头\"},\n    {\"text\": \"古法配方，纯手工制作\",            \"action\": \"微笑展示产品细节\"},\n    {\"text\": \"用过的姐妹都说好\",                \"action\": \"点头肯定\"}\n  ],\n  \"bgm\": \"warm\",\n  \"bgm_volume\": 0.18,\n  \"subtitle\": true,\n  \"voice_override\": null,\n  \"rate_override\": null,\n  \"output\": \"/tmp/huo15/final.mp4\"\n}\n```\n\n| 字段 | 必填 | 说明 |\n|---|---|---|\n| `template` | ✅ | 模板 key 或 `\"auto\"`（配合 `category`） |\n| `category` | template=auto 时必填 | 品类关键词，自动选模板 |\n| `image` | ✅ | 产品图本地路径 |\n| `lines` | ✅ | 数组，每条 `{text, action}`。**首条 action 会写进 Seedance prompt** |\n| `bgm` | ❌ | BGM key（warm/energetic/...）或绝对路径；null=无 BGM |\n| `bgm_volume` | ❌ | 0~1，覆盖模板默认（0.18~0.25 较合适） |\n| `subtitle` | ❌ | 默认 true；烧录字幕到视频 |\n| `voice_override` | ❌ | 强制换音色，如 `\"zh-CN-XiaoxiaoNeural\"` |\n| `rate_override` | ❌ | 强制改语速，如 `\"+10%\"` |\n| `output` | ❌ | 成片路径 |\n\n### 台词长度上限\n\n整段配音必须 ≤ 14.5 秒（Seedance 单次最长 15s）。中文约 **50~70 字**。\n超长会抛错并提示精简，不强行截断。\n\n---\n\n## 六、调用方式\n\n### 6.1 命令行（最直接）\n\n```bash\ncd huo15-influencer-video-skill\n\n# 自检 — 第一次跑先做这一步\npython3 scripts/pipeline.py preflight\n\n# 列出 8 套人设模板 / 8 个推荐音色\npython3 scripts/pipeline.py templates\npython3 scripts/pipeline.py voices\n\n# dry-run — 只跑 TTS + 字幕，不调 Seedance（省 ¥）\n# 用于先验证剧本节奏、TTS 音色、字幕断句\npython3 scripts/pipeline.py dry-run examples/script_traditional_lady.json\n\n# 完整端到端\npython3 scripts/pipeline.py render examples/script_traditional_lady.json\n```\n\n### 6.2 Python 调用\n\n```python\nimport sys, json\nsys.path.insert(0, \"scripts\")\nfrom pipeline import render\n\nresult = render({\n    \"template\": \"auto\",\n    \"category\": \"蛋白粉\",\n    \"image\": \"/path/to/protein.jpg\",\n    \"lines\": [\n        {\"text\": \"兄弟们练完这一组\",   \"action\": \"拿起产品\"},\n        {\"text\": \"蛋白吸收率高得离谱\", \"action\": \"展示成分\"},\n    ],\n    \"subtitle\": True,\n})\nprint(result)\n# {'output': '/tmp/huo15_video/final.mp4', 'template': 'fitness_coach',\n#  'voice_duration': 6.2, 'video_duration': 8, 'tokens': 172800,\n#  'cost_yuan': 7.95, 'size_mb': 3.1}\n```\n\n### 6.3 仅生成无声视频（兼容 v1 用法）\n\n需要老接口的话，从 `pipeline._generate_silent_video` 直接调，跳过 TTS/BGM。\n\n---\n\n### 6.4 Dry-run（强烈建议先跑）\n\n```python\nresult = render(script, dry_run=True)\n# 返回：voice_path / srt_path / tokens 预估 / cost_yuan / prompt\n# 不调 Seedance，不计费；TTS 是免费的\n```\n\n用途：调剧本节奏、试音色、看字幕断行 —— 全部确认满意再跑 render(dry_run=False)。\nAgent 应该在用户首次给剧本时**默认先做 dry-run**，把生成的 voice.mp3 路径告诉用户试听。\n\n---\n\n## 七、Agent 工作流\n\n当用户说\"用这张图按这个剧本拍带货视频\"时，按下面的步骤走：\n\n1. **收集要素**\n   - 产品图路径\n   - 剧本（多句台词）；如未给可主动起草\n   - 品类关键词（用于自动选模板）\n2. **选模板**\n   - 用户没明说就调 `templates.suggest_template(category)`\n   - 给用户看一眼\"我准备用 XX 模板（XX 角色 + XX 音色 + XX BGM）\"\n3. **预算确认**\n   - 算配音预估时长（80字 ≈ 9~10s）\n   - 算视频费用（`estimate_cost`），告知用户\n4. **执行**\n   - `render(script)` 端到端\n5. **交付**\n   - 文件路径、实际时长、Seedance tokens、¥ 费用\n\n### 对话示例\n\n```\n用户: 用 product.jpg 拍个卖蛋白粉的，3 句台词，自己想词\nAgent: 我帮您起草剧本，按健身教练模板（云皓男声 + energetic BGM）：\n        1) 兄弟们，练完这一组\n        2) 蛋白吸收率高得离谱\n        3) 练大一年，从这罐开始\n       预估视频时长 8s ≈ ¥7.95，配音免费。确认生成？\n用户: 行\nAgent: [render] → /tmp/huo15/protein.mp4 (3.1MB)，实际 ¥7.95\n```\n\n---\n\n## 八、Seedance API 速查（保留 v1）\n\n| 项 | 值 |\n|---|---|\n| 模型 | `doubao-seedance-2-0-260128` |\n| 端点 | `https://ark.cn-beijing.volces.com/api/v3` |\n| 计费 | `Token = 秒 × 720 × 1280 × 24 / 1024`，`¥ = Token × 46 / 1e6` |\n| 比例 | `9:16` 竖屏带货 |\n| 时长 | 4 ~ 15 秒 |\n\n| 时长 | Token | 费用 |\n|---|---|---|\n| 4s  | ~86,400  | ¥3.97 |\n| 5s  | ~108,000 | ¥4.97 |\n| 10s | ~216,000 | ¥9.94 |\n| 15s | ~324,000 | ¥14.90 |\n\ncontent 中的 role：\n\n| role | 用途 |\n|---|---|\n| `reference_image` | 默认；AI 参考产品外观 |\n| `first_frame` | 视频必须从这张图开始 |\n| `last_frame` | 指定结束画面 |\n| `reference_video` | 运动风格参考 |\n| `reference_audio` | 音频风格参考 |\n\n---\n\n## 九、混音参数（bgm.py）\n\n```\nvoice 主轨 ──┐\n              ├─ amix(duration=first) ─ afade(out, 0.5s) ─→ mixed.mp3\nBGM 副轨 ────┘    （BGM aloop 到与 voice 等长，volume=bgm_volume）\n```\n\n- `bgm_volume` 默认 0.18~0.25。模板已按角色调过，一般不用改。\n- `voice_volume` 默认 1.0；想突出 BGM 可降到 0.85。\n- 末尾统一 0.5 秒淡出，避免硬切。\n\n成片合成：`mux_video_audio(silent.mp4, mixed.mp3, final.mp4)` —\n`-c:v copy -c:a aac -shortest`，无视频重编码，秒出。\n\n---\n\n## 十、字幕（pipeline._build_srt + _burn_subtitles）\n\n- 按每行台词字数比例切时间轴生成 SRT\n- 用 ffmpeg `subtitles` 滤镜烧录到视频\n- 默认字体 PingFang SC、字号 14、白字黑边、底部 80px\n- 想关字幕：剧本里 `\"subtitle\": false`\n\n字体不可用时报 `Fontconfig error`，换 `font: \"Heiti SC\"` 或装 `brew install --cask font-noto-sans-cjk-sc`。\n\n---\n\n## 十一、降级策略（哪步失败也别全废）\n\n| 失败 | 降级行为 |\n|---|---|\n| 火山 TTS 凭证缺失 | 自动用 edge-tts |\n| edge-tts 也挂 | 抛错，提示 `pip install edge-tts` 并检查网络 |\n| BGM 文件找不到 | 跳过 BGM，仅人声 + 0.5s 淡出 |\n| 字体找不到 | `subtitle: false` 重跑，或装中文字体 |\n| Seedance 超时 | 默认 20 分钟轮询，超时抛 TimeoutError |\n\n---\n\n## 十二、常见问题\n\n### Q: 配音不准 / 多音字读错怎么办？\nA: 在 `lines.text` 里用谐音字。edge-tts 不支持 SSML phoneme tag。\n\n### Q: BGM 太响盖过人声？\nA: 剧本里 `\"bgm_volume\": 0.12` 进一步压低，或换 soft.mp3。\n\n### Q: 想纯人声没 BGM？\nA: 剧本里 `\"bgm\": null`。\n\n### Q: 想要长视频（>15 秒）？\nA: 当前版本不支持。建议拆段：每段 ≤15s 单独生成，再用 ffmpeg `concat` 拼接。\n\n### Q: 视频画面和剧本对不上？\nA: 把第一句的 `action` 写得更具体（\"举起产品贴近镜头\"比\"展示\"准）。\n   剧本中段的 action 仅用于字幕节奏参考，不会写进 Seedance prompt。\n\n### Q: 想保留 v1 的纯视频生成？\nA: 直接调 `pipeline._generate_silent_video(image, prompt, duration, output)`。\n\n---\n\n## 十三、版本历史\n\n- **v2.0.0**（2026-04-27）— 剧本驱动 + 配音 + BGM + 字幕 + 8 套模板 + dry-run + preflight\n- v1.2.x — 单一传统女模板 + 无声视频\n\nFile v2.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn7byevkn40d6z4p7ghdb097z983tj33\",\n  \"slug\": \"huo15-influencer-video-skill\",\n  \"version\": \"2.0.0\",\n  \"publishedAt\": 1777289675819\n}\n\nFile v2.0.0:skill-card.md\n\n## Description:\n\nGenerates short first-person product marketing videos from a product image and JSON script, with TTS voiceover, optional background music mixing, subtitles, template selection, dry-run checks, and cost estimates.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[zhaobod1](https://clawhub.ai/user/zhaobod1)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal creators, marketers, and agents use this skill to prepare short product sales videos from a local product image and script. It supports persona templates, voiceover, background music, subtitles, dry-run validation, and cost-aware rendering before producing the final media file.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Product images and scripts may be sent to external video and TTS services.\n\nMitigation: Use non-sensitive inputs, dedicated provider keys, and an isolated environment.\n\nRisk: FFmpeg processing and output paths use loosely validated, overwrite-capable inputs.\n\nMitigation: Use a controlled output directory and review script JSON paths before execution.\n\nRisk: Full rendering can incur provider costs.\n\nMitigation: Confirm estimated costs before rendering and use dry-run mode to validate scripts before paid video generation.\n\n## Reference(s):\n\n- [ClawHub release page](https://clawhub.ai/zhaobod1/skills/huo15-influencer-video-skill)\n- [Volcano Ark API endpoint](https://ark.cn-beijing.volces.com/api/v3)\n- [ByteDance OpenSpeech TTS endpoint](https://openspeech.bytedance.com)\n- [Pixabay Music](https://pixabay.com/music/)\n- [Freesound](https://freesound.org/)\n- [Incompetech Royalty-Free Music](https://incompetech.com/music/royalty-free/)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance, files]\n\n**Output Format:** [Markdown guidance with JSON script examples, shell commands, and generated media file paths]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Can create MP4 video, MP3 voice or mixed audio, SRT subtitles, token estimates, and cost estimates; dry-run avoids the paid video generation step.]\n\n## Skill Version(s):\n\n2.0.0 (source: frontmatter and server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v2.0.0:examples/script_auto_template.json\n\n{\n  \"template\": \"auto\",\n  \"category\": \"蛋白粉\",\n  \"image\": \"/path/to/protein.jpg\",\n  \"lines\": [\n    {\"text\": \"兄弟们，练完这一组\", \"action\": \"拿起产品\"},\n    {\"text\": \"蛋白吸收率高得离谱\", \"action\": \"展示成分\"},\n    {\"text\": \"练大一年，从这罐开始\", \"action\": \"握拳鼓励\"}\n  ],\n  \"subtitle\": true,\n  \"output\": \"/tmp/huo15/protein.mp4\"\n}\n\nFile v2.0.0:examples/script_fashion_host.json\n\n{\n  \"template\": \"fashion_host\",\n  \"image\": \"/path/to/cosmetic.jpg\",\n  \"lines\": [\n    {\"text\": \"宝贝们看这个！\", \"action\": \"活力举起产品\"},\n    {\"text\": \"上脸超服帖，颜值直接拉满\", \"action\": \"比心展示\"},\n    {\"text\": \"今天直播间还有买二送一\", \"action\": \"OK 手势\"}\n  ],\n  \"bgm\": \"energetic\",\n  \"subtitle\": true,\n  \"output\": \"/tmp/huo15/fashion.mp4\"\n}\n\nFile v2.0.0:examples/script_traditional_lady.json\n\n{\n  \"template\": \"traditional_lady\",\n  \"image\": \"/path/to/product.jpg\",\n  \"lines\": [\n    {\"text\": \"姐妹们，今天给大家推一款好东西\", \"action\": \"举起产品给镜头\"},\n    {\"text\": \"古法配方，纯手工制作\", \"action\": \"微笑展示产品细节\"},\n    {\"text\": \"用过的姐妹都说好，赶紧拍\", \"action\": \"点头肯定\"}\n  ],\n  \"bgm\": \"warm\",\n  \"bgm_volume\": 0.18,\n  \"subtitle\": true,\n  \"output\": \"/tmp/huo15/traditional.mp4\"\n}\n\nArchive v1.2.2: 2 files, 4978 bytes\n\nFiles: _meta.json (147b), SKILL.md (12088b)\n\nFile v1.2.2:SKILL.md\n\n---\nname: huo15-influencer-video-skill\ndisplayName: 火15 AI带货视频生成\ndescription: 通过火山方舟Ark API调用Seedance 2.0，产品图一键生成第一人称带货短视频。支持自定义人物、动作、场景，默认传统服饰中年女性展示产品。触发词：生成视频、带货视频、产品视频、拍视频。\nversion: 1.2.1\naliases:\n  - 带货视频\n  - AI视频生成\n  - 产品视频\n---\n\n# 火15 AI 带货视频生成 Skill\n\n> 通过火山方舟 Ark API 调用 Seedance 2.0，产品图 → 第一人称带货短视频\n\n---\n\n## ⚠️ 安全规则\n\n1. 每次生成前**必须**告知用户预估费用\n2. 用户确认后才可提交任务\n3. 单次最大时长 15 秒，默认 5 秒\n4. 优先使用最省 Token 的配置\n\n---\n\n## 一、API 凭证\n\n| 参数 | 值 |\n|------|---|\n| API Key | 环境变量 `ARK_API_KEY`（从方舟控制台获取） |\n| 模型 | `doubao-seedance-2-0-260128` |\n| 端点 | `https://ark.cn-beijing.volces.com/api/v3` |\n| 认证 | `Authorization: Bearer {ARK_API_KEY}` |\n\n---\n\n## 二、计费\n\n```\nToken = 秒数 × 720 × 1280 × 24 / 1024\n费用 = Token × ¥46 / 1,000,000\n```\n\n| 时长 | Token | 费用 |\n|------|-------|------|\n| 4秒 | ~86,400 | ¥3.97 |\n| **5秒** | **~108,000** | **¥4.97** |\n| 10秒 | ~216,000 | ¥9.94 |\n| 15秒 | ~324,000 | ¥14.90 |\n\n---\n\n## 三、提示词规范\n\n### 固定模板\n\n```\n第一人称视角带货短视频。一位身穿中式传统服饰的中年女性，手持图片中的产品，{展示动作}。{灯光和环境}。\n```\n\n### 默认提示词（无需用户额外描述）\n\n```\n第一人称视角带货短视频。一位身穿中式传统服饰的中年女性，手持图片中的产品，面带微笑展示给镜头。柔和暖色灯光，背景干净简约。\n```\n\n### 规则\n\n1. **视角**：固定第一人称，不改\n2. **人物**：默认\"身穿中式传统服饰的中年女性\"，用户可覆盖\n3. **产品**：固定说\"图片中的产品\"，不用文字描述产品，让 AI 从 `reference_image` 自动识别\n4. **动作**：默认\"面带微笑展示给镜头\"，用户可自定义\n5. **环境**：默认\"柔和暖色灯光，背景干净简约\"\n\n### 用户自定义时的拼接逻辑\n\n用户只需提供变化的部分，Agent 自动拼接：\n\n```python\n# 默认值\nVIEW = \"第一人称视角带货短视频\"\nCHARACTER = \"一位身穿中式传统服饰的中年女性\"\nPRODUCT = \"手持图片中的产品\"\nACTION = \"面带微笑展示给镜头\"\nSCENE = \"柔和暖色灯光，背景干净简约\"\n\n# 拼接\nprompt = f\"{VIEW}。{CHARACTER}，{PRODUCT}，{ACTION}。{SCENE}。\"\n```\n\n用户可能的自定义示例：\n- \"换成年轻男性\" → 覆盖 CHARACTER\n- \"放在桌子上展示\" → 覆盖 ACTION\n- \"户外自然光\" → 覆盖 SCENE\n- \"加上点头动作\" → 追加到 ACTION\n\n---\n\n## 四、API 调用\n\n### 4.1 创建任务\n\n```bash\nPOST https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks\nAuthorization: Bearer {API_KEY}\nContent-Type: application/json\n```\n\n### 标准请求体（产品图做参考）\n\n```json\n{\n    \"model\": \"doubao-seedance-2-0-260128\",\n    \"content\": [\n        {\n            \"type\": \"text\",\n            \"text\": \"第一人称视角带货短视频。一位身穿中式传统服饰的中年女性，手持图片中的产品，面带微笑展示给镜头。柔和暖色灯光，背景干净简约。\"\n        },\n        {\n            \"type\": \"image_url\",\n            \"image_url\": {\"url\": \"data:image/jpeg;base64,{BASE64}\"},\n            \"role\": \"reference_image\"\n        }\n    ],\n    \"ratio\": \"9:16\",\n    \"duration\": 5,\n    \"watermark\": false\n}\n```\n\n### 产品图做首帧（视频从产品图开始）\n\n```json\n{\n    \"model\": \"doubao-seedance-2-0-260128\",\n    \"content\": [\n        {\n            \"type\": \"text\",\n            \"text\": \"第一人称视角带货短视频。一位身穿中式传统服饰的中年女性，手持图片中的产品，面带微笑展示给镜头。柔和暖色灯光，背景干净简约。\"\n        },\n        {\n            \"type\": \"image_url\",\n            \"image_url\": {\"url\": \"data:image/jpeg;base64,{BASE64}\"},\n            \"role\": \"first_frame\"\n        }\n    ],\n    \"ratio\": \"9:16\",\n    \"duration\": 5,\n    \"watermark\": false\n}\n```\n\n### 全要素（图+视频+音频参考）\n\n```json\n{\n    \"model\": \"doubao-seedance-2-0-260128\",\n    \"content\": [\n        {\"type\": \"text\", \"text\": \"提示词\"},\n        {\"type\": \"image_url\", \"image_url\": {\"url\": \"产品图URL\"}, \"role\": \"reference_image\"},\n        {\"type\": \"video_url\", \"video_url\": {\"url\": \"参考视频URL\"}, \"role\": \"reference_video\"},\n        {\"type\": \"audio_url\", \"audio_url\": {\"url\": \"背景音乐URL\"}, \"role\": \"reference_audio\"}\n    ],\n    \"generate_audio\": true,\n    \"ratio\": \"9:16\",\n    \"duration\": 10,\n    \"watermark\": false\n}\n```\n\n### 返回\n\n```json\n{\"id\": \"cgt-20260414xxxxx-xxxxx\"}\n```\n\n### 4.2 查询任务\n\n```bash\nGET https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks/{task_id}\nAuthorization: Bearer {API_KEY}\n```\n\n### 返回（成功）\n\n```json\n{\n    \"id\": \"cgt-xxx\",\n    \"status\": \"succeeded\",\n    \"content\": {\n        \"video_url\": \"https://...mp4?签名...\"\n    },\n    \"usage\": {\"total_tokens\": 108900},\n    \"resolution\": \"720p\",\n    \"duration\": 5,\n    \"framespersecond\": 24\n}\n```\n\n> ⚠️ `content` 是 **dict**，不是 list。`content.video_url` 直接是字符串。\n\n`status`: `running` → `succeeded` / `failed`\n\n### 4.3 视频续写\n\n请求加 `\"return_last_frame\": true`，返回含 `content.last_frame_url`，可作为下段视频的 `first_frame`。\n\n---\n\n## 五、顶层参数速查\n\n| 参数 | 类型 | 默认 | 说明 |\n|------|------|------|------|\n| `model` | string | - | `doubao-seedance-2-0-260128` |\n| `content` | array | - | text + 图/视频/音频 |\n| `ratio` | string | `9:16` | 竖屏带货固定 9:16 |\n| `duration` | int | 5 | 时长 4~15 秒 |\n| `watermark` | bool | false | 不加水印 |\n| `generate_audio` | bool | false | 生成配套音频 |\n| `return_last_frame` | bool | false | 返回最后一帧 |\n\n> ⚠️ 参数在**顶层**，不在 `extra` 里！\n\n---\n\n## 六、content 中的 role\n\n| role | 用途 | 推荐场景 |\n|------|------|---------|\n| `reference_image` | 多模态参考 | **默认用这个**，AI 保持产品外观一致性 |\n| `first_frame` | 视频首帧 | 视频必须从这张图开始 |\n| `last_frame` | 视频尾帧 | 指定结束画面 |\n| `reference_video` | 视频参考 | 运动风格参考 |\n| `reference_audio` | 音频参考 | 背景音乐/声音风格 |\n\n---\n\n## 七、Python 完整工具函数\n\n```python\nimport base64, json, time, requests, os\n\nARK_API_KEY = os.environ.get(\"ARK_API_KEY\", \"\")\nassert ARK_API_KEY, \"请设置环境变量 ARK_API_KEY\"\nBASE_URL = \"https://ark.cn-beijing.volces.com/api/v3\"\nHEADERS = {\n    \"Authorization\": f\"Bearer {ARK_API_KEY}\",\n    \"Content-Type\": \"application/json\"\n}\n\n# 默认提示词组件\nDEFAULT_VIEW = \"第一人称视角带货短视频\"\nDEFAULT_CHARACTER = \"一位身穿中式传统服饰的中年女性\"\nDEFAULT_PRODUCT = \"手持图片中的产品\"\nDEFAULT_ACTION = \"面带微笑展示给镜头\"\nDEFAULT_SCENE = \"柔和暖色灯光，背景干净简约\"\n\n\ndef build_prompt(character=None, action=None, scene=None):\n    \"\"\"构建提示词，用户只需覆盖想改的部分\"\"\"\n    c = character or DEFAULT_CHARACTER\n    a = action or DEFAULT_ACTION\n    s = scene or DEFAULT_SCENE\n    return f\"{DEFAULT_VIEW}。{c}，{DEFAULT_PRODUCT}，{a}。{s}。\"\n\n\ndef estimate_cost(duration=5):\n    \"\"\"预估费用\"\"\"\n    tokens = duration * 720 * 1280 * 24 / 1024\n    cost = tokens * 46 / 1000000\n    return tokens, cost\n\n\ndef generate_video(image_path, duration=5, output=\"output.mp4\",\n                   character=None, action=None, scene=None,\n                   role=\"reference_image\"):\n    \"\"\"一键生成带货视频\n\n    Args:\n        image_path: 产品图路径\n        duration: 时长 4~15 秒（默认 5）\n        output: 输出文件名\n        character: 自定义人物（默认传统服饰中年女性）\n        action: 自定义动作（默认微笑展示）\n        scene: 自定义场景（默认暖光简约）\n        role: 图片角色（默认 reference_image）\n    \"\"\"\n    prompt = build_prompt(character, action, scene)\n    tokens, cost = estimate_cost(duration)\n    print(f\"提示词: {prompt}\")\n    print(f\"预估: {tokens:,.0f} Token ≈ ¥{cost:.2f}\")\n\n    # 读取产品图\n    with open(image_path, \"rb\") as f:\n        img_b64 = base64.b64encode(f.read()).decode()\n    ext = os.path.splitext(image_path)[1].lstrip(\".\")\n    if ext == \"jpg\":\n        ext = \"jpeg\"\n\n    body = {\n        \"model\": \"doubao-seedance-2-0-260128\",\n        \"content\": [\n            {\"type\": \"text\", \"text\": prompt},\n            {\n                \"type\": \"image_url\",\n                \"image_url\": {\"url\": f\"data:image/{ext};base64,{img_b64}\"},\n                \"role\": role\n            }\n        ],\n        \"ratio\": \"9:16\",\n        \"duration\": duration,\n        \"watermark\": False\n    }\n\n    # 提交\n    resp = requests.post(\n        f\"{BASE_URL}/contents/generations/tasks\",\n        headers=HEADERS, json=body\n    )\n    result = resp.json()\n    if \"id\" not in result:\n        print(f\"❌ 提交失败: {result}\")\n        return None\n\n    task_id = result[\"id\"]\n    print(f\"✅ task_id: {task_id}\")\n\n    # 轮询（每 10 秒查一次，最多 15 分钟）\n    for _ in range(90):\n        time.sleep(10)\n        r = requests.get(\n            f\"{BASE_URL}/contents/generations/tasks/{task_id}\",\n            headers=HEADERS\n        )\n        data = r.json()\n        status = data.get(\"status\", \"?\")\n        print(f\"  [{time.strftime('%H:%M:%S')}] {status}\")\n\n        if status == \"succeeded\":\n            video_url = data[\"content\"][\"video_url\"]\n            vr = requests.get(video_url, stream=True)\n            with open(output, \"wb\") as f:\n                for chunk in vr.iter_content(8192):\n                    f.write(chunk)\n            actual_tokens = data[\"usage\"][\"total_tokens\"]\n            actual_cost = actual_tokens * 46 / 1000000\n            print(f\"\\n✅ {output} ({os.path.getsize(output)/1024/1024:.1f}MB)\")\n            print(f\"   Token: {actual_tokens:,} | 费用: ¥{actual_cost:.2f}\")\n            return output\n        elif status == \"failed\":\n            print(f\"❌ 失败: {data}\")\n            return None\n\n    print(\"⏰ 超时（15 分钟）\")\n    return None\n\n\n# 使用示例\nif __name__ == \"__main__\":\n    # 最简调用 — 只需产品图\n    generate_video(\"产品图.jpg\", output=\"带货视频.mp4\")\n\n    # 自定义人物\n    generate_video(\"产品图.jpg\", character=\"一位年轻时尚的中国女性\", output=\"年轻版.mp4\")\n\n    # 自定义动作\n    generate_video(\"产品图.jpg\", action=\"缓缓转动产品展示各角度细节\", output=\"转动版.mp4\")\n\n    # 10 秒长视频\n    generate_video(\"产品图.jpg\", duration=10, output=\"10秒版.mp4\")\n```\n\n---\n\n## 八、Agent 工作流\n\n当用户说\"帮我生成一个带货视频\"时：\n\n1. **获取产品图**：用户提供图片路径\n2. **确认参数**：时长（默认5秒）、是否自定义人物/动作/场景\n3. **告知费用**：`estimate_cost(duration)` 并等用户确认\n4. **生成视频**：`generate_video(image_path, ...)`\n5. **交付结果**：告知文件路径、实际费用\n\n### 对话示例\n\n```\n用户: 帮我用这张图生成带货视频\nAgent: 收到！将为您生成 5 秒竖屏带货视频。\n       预估费用：~108,000 Token ≈ ¥4.97\n       确认生成吗？\n用户: 好的\nAgent: [调用 generate_video] → 视频已生成：xxx.mp4 (1.9MB)，实际费用 ¥5.01\n```\n\n---\n\n## 九、常见问题\n\n### Q: ModelNotOpen 错误\nA: 方舟控制台 → 在线推理 → 推理接入点，创建 `doubao-seedance-2-0-260128` 的接入点。\n\n### Q: 生成多久？\nA: 5 秒 ≈ 3~6 分钟，10 秒 ≈ 7~10 分钟。\n\n### Q: 图片怎么传？\nA: `data:image/jpeg;base64,...` data URI，无需先上传。\n\n### Q: reference_image 和 first_frame 区别？\nA: `reference_image` AI 参考产品外观自由创作（**推荐**）；`first_frame` 视频必须从这张图开始。\n\nFile v1.2.2:_meta.json\n\n{\n  \"ownerId\": \"kn7byevkn40d6z4p7ghdb097z983tj33\",\n  \"slug\": \"huo15-influencer-video-skill\",\n  \"version\": \"1.2.2\",\n  \"publishedAt\": 1777004124038\n}\n\nArchive v1.2.1: 2 files, 4978 bytes\n\nFiles: _meta.json (147b), SKILL.md (12088b)\n\nFile v1.2.1:SKILL.md\n\n---\nname: huo15-influencer-video-skill\ndisplayName: 火15 AI带货视频生成\ndescription: 通过火山方舟Ark API调用Seedance 2.0，产品图一键生成第一人称带货短视频。支持自定义人物、动作、场景，默认传统服饰中年女性展示产品。触发词：生成视频、带货视频、产品视频、拍视频。\nversion: 1.2.1\naliases:\n  - 带货视频\n  - AI视频生成\n  - 产品视频\n---\n\n# 火15 AI 带货视频生成 Skill\n\n> 通过火山方舟 Ark API 调用 Seedance 2.0，产品图 → 第一人称带货短视频\n\n---\n\n## ⚠️ 安全规则\n\n1. 每次生成前**必须**告知用户预估费用\n2. 用户确认后才可提交任务\n3. 单次最大时长 15 秒，默认 5 秒\n4. 优先使用最省 Token 的配置\n\n---\n\n## 一、API 凭证\n\n| 参数 | 值 |\n|------|---|\n| API Key | 环境变量 `ARK_API_KEY`（从方舟控制台获取） |\n| 模型 | `doubao-seedance-2-0-260128` |\n| 端点 | `https://ark.cn-beijing.volces.com/api/v3` |\n| 认证 | `Authorization: Bearer {ARK_API_KEY}` |\n\n---\n\n## 二、计费\n\n```\nToken = 秒数 × 720 × 1280 × 24 / 1024\n费用 = Token × ¥46 / 1,000,000\n```\n\n| 时长 | Token | 费用 |\n|------|-------|------|\n| 4秒 | ~86,400 | ¥3.97 |\n| **5秒** | **~108,000** | **¥4.97** |\n| 10秒 | ~216,000 | ¥9.94 |\n| 15秒 | ~324,000 | ¥14.90 |\n\n---\n\n## 三、提示词规范\n\n### 固定模板\n\n```\n第一人称视角带货短视频。一位身穿中式传统服饰的中年女性，手持图片中的产品，{展示动作}。{灯光和环境}。\n```\n\n### 默认提示词（无需用户额外描述）\n\n```\n第一人称视角带货短视频。一位身穿中式传统服饰的中年女性，手持图片中的产品，面带微笑展示给镜头。柔和暖色灯光，背景干净简约。\n```\n\n### 规则\n\n1. **视角**：固定第一人称，不改\n2. **人物**：默认\"身穿中式传统服饰的中年女性\"，用户可覆盖\n3. **产品**：固定说\"图片中的产品\"，不用文字描述产品，让 AI 从 `reference_image` 自动识别\n4. **动作**：默认\"面带微笑展示给镜头\"，用户可自定义\n5. **环境**：默认\"柔和暖色灯光，背景干净简约\"\n\n### 用户自定义时的拼接逻辑\n\n用户只需提供变化的部分，Agent 自动拼接：\n\n```python\n# 默认值\nVIEW = \"第一人称视角带货短视频\"\nCHARACTER = \"一位身穿中式传统服饰的中年女性\"\nPRODUCT = \"手持图片中的产品\"\nACTION = \"面带微笑展示给镜头\"\nSCENE = \"柔和暖色灯光，背景干净简约\"\n\n# 拼接\nprompt = f\"{VIEW}。{CHARACTER}，{PRODUCT}，{ACTION}。{SCENE}。\"\n```\n\n用户可能的自定义示例：\n- \"换成年轻男性\" → 覆盖 CHARACTER\n- \"放在桌子上展示\" → 覆盖 ACTION\n- \"户外自然光\" → 覆盖 SCENE\n- \"加上点头动作\" → 追加到 ACTION\n\n---\n\n## 四、API 调用\n\n### 4.1 创建任务\n\n```bash\nPOST https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks\nAuthorization: Bearer {API_KEY}\nContent-Type: application/json\n```\n\n### 标准请求体（产品图做参考）\n\n```json\n{\n    \"model\": \"doubao-seedance-2-0-260128\",\n    \"content\": [\n        {\n            \"type\": \"text\",\n            \"text\": \"第一人称视角带货短视频。一位身穿中式传统服饰的中年女性，手持图片中的产品，面带微笑展示给镜头。柔和暖色灯光，背景干净简约。\"\n        },\n        {\n            \"type\": \"image_url\",\n            \"image_url\": {\"url\": \"data:image/jpeg;base64,{BASE64}\"},\n            \"role\": \"reference_image\"\n        }\n    ],\n    \"ratio\": \"9:16\",\n    \"duration\": 5,\n    \"watermark\": false\n}\n```\n\n### 产品图做首帧（视频从产品图开始）\n\n```json\n{\n    \"model\": \"doubao-seedance-2-0-260128\",\n    \"content\": [\n        {\n            \"type\": \"text\",\n            \"text\": \"第一人称视角带货短视频。一位身穿中式传统服饰的中年女性，手持图片中的产品，面带微笑展示给镜头。柔和暖色灯光，背景干净简约。\"\n        },\n        {\n            \"type\": \"image_url\",\n            \"image_url\": {\"url\": \"data:image/jpeg;base64,{BASE64}\"},\n            \"role\": \"first_frame\"\n        }\n    ],\n    \"ratio\": \"9:16\",\n    \"duration\": 5,\n    \"watermark\": false\n}\n```\n\n### 全要素（图+视频+音频参考）\n\n```json\n{\n    \"model\": \"doubao-seedance-2-0-260128\",\n    \"content\": [\n        {\"type\": \"text\", \"text\": \"提示词\"},\n        {\"type\": \"image_url\", \"image_url\": {\"url\": \"产品图URL\"}, \"role\": \"reference_image\"},\n        {\"type\": \"video_url\", \"video_url\": {\"url\": \"参考视频URL\"}, \"role\": \"reference_video\"},\n        {\"type\": \"audio_url\", \"audio_url\": {\"url\": \"背景音乐URL\"}, \"role\": \"reference_audio\"}\n    ],\n    \"generate_audio\": true,\n    \"ratio\": \"9:16\",\n    \"duration\": 10,\n    \"watermark\": false\n}\n```\n\n### 返回\n\n```json\n{\"id\": \"cgt-20260414xxxxx-xxxxx\"}\n```\n\n### 4.2 查询任务\n\n```bash\nGET https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks/{task_id}\nAuthorization: Bearer {API_KEY}\n```\n\n### 返回（成功）\n\n```json\n{\n    \"id\": \"cgt-xxx\",\n    \"status\": \"succeeded\",\n    \"content\": {\n        \"video_url\": \"https://...mp4?签名...\"\n    },\n    \"usage\": {\"total_tokens\": 108900},\n    \"resolution\": \"720p\",\n    \"duration\": 5,\n    \"framespersecond\": 24\n}\n```\n\n> ⚠️ `content` 是 **dict**，不是 list。`content.video_url` 直接是字符串。\n\n`status`: `running` → `succeeded` / `failed`\n\n### 4.3 视频续写\n\n请求加 `\"return_last_frame\": true`，返回含 `content.last_frame_url`，可作为下段视频的 `first_frame`。\n\n---\n\n## 五、顶层参数速查\n\n| 参数 | 类型 | 默认 | 说明 |\n|------|------|------|------|\n| `model` | string | - | `doubao-seedance-2-0-260128` |\n| `content` | array | - | text + 图/视频/音频 |\n| `ratio` | string | `9:16` | 竖屏带货固定 9:16 |\n| `duration` | int | 5 | 时长 4~15 秒 |\n| `watermark` | bool | false | 不加水印 |\n| `generate_audio` | bool | false | 生成配套音频 |\n| `return_last_frame` | bool | false | 返回最后一帧 |\n\n> ⚠️ 参数在**顶层**，不在 `extra` 里！\n\n---\n\n## 六、content 中的 role\n\n| role | 用途 | 推荐场景 |\n|------|------|---------|\n| `reference_image` | 多模态参考 | **默认用这个**，AI 保持产品外观一致性 |\n| `first_frame` | 视频首帧 | 视频必须从这张图开始 |\n| `last_frame` | 视频尾帧 | 指定结束画面 |\n| `reference_video` | 视频参考 | 运动风格参考 |\n| `reference_audio` | 音频参考 | 背景音乐/声音风格 |\n\n---\n\n## 七、Python 完整工具函数\n\n```python\nimport base64, json, time, requests, os\n\nARK_API_KEY = os.environ.get(\"ARK_API_KEY\", \"\")\nassert ARK_API_KEY, \"请设置环境变量 ARK_API_KEY\"\nBASE_URL = \"https://ark.cn-beijing.volces.com/api/v3\"\nHEADERS = {\n    \"Authorization\": f\"Bearer {ARK_API_KEY}\",\n    \"Content-Type\": \"application/json\"\n}\n\n# 默认提示词组件\nDEFAULT_VIEW = \"第一人称视角带货短视频\"\nDEFAULT_CHARACTER = \"一位身穿中式传统服饰的中年女性\"\nDEFAULT_PRODUCT = \"手持图片中的产品\"\nDEFAULT_ACTION = \"面带微笑展示给镜头\"\nDEFAULT_SCENE = \"柔和暖色灯光，背景干净简约\"\n\n\ndef build_prompt(character=None, action=None, scene=None):\n    \"\"\"构建提示词，用户只需覆盖想改的部分\"\"\"\n    c = character or DEFAULT_CHARACTER\n    a = action or DEFAULT_ACTION\n    s = scene or DEFAULT_SCENE\n    return f\"{DEFAULT_VIEW}。{c}，{DEFAULT_PRODUCT}，{a}。{s}。\"\n\n\ndef estimate_cost(duration=5):\n    \"\"\"预估费用\"\"\"\n    tokens = duration * 720 * 1280 * 24 / 1024\n    cost = tokens * 46 / 1000000\n    return tokens, cost\n\n\ndef generate_video(image_path, duration=5, output=\"output.mp4\",\n                   character=None, action=None, scene=None,\n                   role=\"reference_image\"):\n    \"\"\"一键生成带货视频\n\n    Args:\n        image_path: 产品图路径\n        duration: 时长 4~15 秒（默认 5）\n        output: 输出文件名\n        character: 自定义人物（默认传统服饰中年女性）\n        action: 自定义动作（默认微笑展示）\n        scene: 自定义场景（默认暖光简约）\n        role: 图片角色（默认 reference_image）\n    \"\"\"\n    prompt = build_prompt(character, action, scene)\n    tokens, cost = estimate_cost(duration)\n    print(f\"提示词: {prompt}\")\n    print(f\"预估: {tokens:,.0f} Token ≈ ¥{cost:.2f}\")\n\n    # 读取产品图\n    with open(image_path, \"rb\") as f:\n        img_b64 = base64.b64encode(f.read()).decode()\n    ext = os.path.splitext(image_path)[1].lstrip(\".\")\n    if ext == \"jpg\":\n        ext = \"jpeg\"\n\n    body = {\n        \"model\": \"doubao-seedance-2-0-260128\",\n        \"content\": [\n            {\"type\": \"text\", \"text\": prompt},\n            {\n                \"type\": \"image_url\",\n                \"image_url\": {\"url\": f\"data:image/{ext};base64,{img_b64}\"},\n                \"role\": role\n            }\n        ],\n        \"ratio\": \"9:16\",\n        \"duration\": duration,\n        \"watermark\": False\n    }\n\n    # 提交\n    resp = requests.post(\n        f\"{BASE_URL}/contents/generations/tasks\",\n        headers=HEADERS, json=body\n    )\n    result = resp.json()\n    if \"id\" not in result:\n        print(f\"❌ 提交失败: {result}\")\n        return None\n\n    task_id = result[\"id\"]\n    print(f\"✅ task_id: {task_id}\")\n\n    # 轮询（每 10 秒查一次，最多 15 分钟）\n    for _ in range(90):\n        time.sleep(10)\n        r = requests.get(\n            f\"{BASE_URL}/contents/generations/tasks/{task_id}\",\n            headers=HEADERS\n        )\n        data = r.json()\n        status = data.get(\"status\", \"?\")\n        print(f\"  [{time.strftime('%H:%M:%S')}] {status}\")\n\n        if status == \"succeeded\":\n            video_url = data[\"content\"][\"video_url\"]\n            vr = requests.get(video_url, stream=True)\n            with open(output, \"wb\") as f:\n                for chunk in vr.iter_content(8192):\n                    f.write(chunk)\n            actual_tokens = data[\"usage\"][\"total_tokens\"]\n            actual_cost = actual_tokens * 46 / 1000000\n            print(f\"\\n✅ {output} ({os.path.getsize(output)/1024/1024:.1f}MB)\")\n            print(f\"   Token: {actual_tokens:,} | 费用: ¥{actual_cost:.2f}\")\n            return output\n        elif status == \"failed\":\n            print(f\"❌ 失败: {data}\")\n            return None\n\n    print(\"⏰ 超时（15 分钟）\")\n    return None\n\n\n# 使用示例\nif __name__ == \"__main__\":\n    # 最简调用 — 只需产品图\n    generate_video(\"产品图.jpg\", output=\"带货视频.mp4\")\n\n    # 自定义人物\n    generate_video(\"产品图.jpg\", character=\"一位年轻时尚的中国女性\", output=\"年轻版.mp4\")\n\n    # 自定义动作\n    generate_video(\"产品图.jpg\", action=\"缓缓转动产品展示各角度细节\", output=\"转动版.mp4\")\n\n    # 10 秒长视频\n    generate_video(\"产品图.jpg\", duration=10, output=\"10秒版.mp4\")\n```\n\n---\n\n## 八、Agent 工作流\n\n当用户说\"帮我生成一个带货视频\"时：\n\n1. **获取产品图**：用户提供图片路径\n2. **确认参数**：时长（默认5秒）、是否自定义人物/动作/场景\n3. **告知费用**：`estimate_cost(duration)` 并等用户确认\n4. **生成视频**：`generate_video(image_path, ...)`\n5. **交付结果**：告知文件路径、实际费用\n\n### 对话示例\n\n```\n用户: 帮我用这张图生成带货视频\nAgent: 收到！将为您生成 5 秒竖屏带货视频。\n       预估费用：~108,000 Token ≈ ¥4.97\n       确认生成吗？\n用户: 好的\nAgent: [调用 generate_video] → 视频已生成：xxx.mp4 (1.9MB)，实际费用 ¥5.01\n```\n\n---\n\n## 九、常见问题\n\n### Q: ModelNotOpen 错误\nA: 方舟控制台 → 在线推理 → 推理接入点，创建 `doubao-seedance-2-0-260128` 的接入点。\n\n### Q: 生成多久？\nA: 5 秒 ≈ 3~6 分钟，10 秒 ≈ 7~10 分钟。\n\n### Q: 图片怎么传？\nA: `data:image/jpeg;base64,...` data URI，无需先上传。\n\n### Q: reference_image 和 first_frame 区别？\nA: `reference_image` AI 参考产品外观自由创作（**推荐**）；`first_frame` 视频必须从这张图开始。\n\nFile v1.2.1:_meta.json\n\n{\n  \"ownerId\": \"kn7byevkn40d6z4p7ghdb097z983tj33\",\n  \"slug\": \"huo15-influencer-video-skill\",\n  \"version\": \"1.2.1\",\n  \"publishedAt\": 1776914489546\n}\n\nArchive v1.2.0: 2 files, 4979 bytes\n\nFiles: SKILL.md (12088b), _meta.json (147b)\n\nFile v1.2.0:SKILL.md\n\n---\nname: huo15-influencer-video-skill\ndisplayName: 火15 AI带货视频生成\ndescription: 通过火山方舟Ark API调用Seedance 2.0，产品图一键生成第一人称带货短视频。支持自定义人物、动作、场景，默认传统服饰中年女性展示产品。触发词：生成视频、带货视频、产品视频、拍视频。\nversion: 1.0.0\naliases:\n  - 带货视频\n  - AI视频生成\n  - 产品视频\n---\n\n# 火15 AI 带货视频生成 Skill\n\n> 通过火山方舟 Ark API 调用 Seedance 2.0，产品图 → 第一人称带货短视频\n\n---\n\n## ⚠️ 安全规则\n\n1. 每次生成前**必须**告知用户预估费用\n2. 用户确认后才可提交任务\n3. 单次最大时长 15 秒，默认 5 秒\n4. 优先使用最省 Token 的配置\n\n---\n\n## 一、API 凭证\n\n| 参数 | 值 |\n|------|---|\n| API Key | 环境变量 `ARK_API_KEY`（从方舟控制台获取） |\n| 模型 | `doubao-seedance-2-0-260128` |\n| 端点 | `https://ark.cn-beijing.volces.com/api/v3` |\n| 认证 | `Authorization: Bearer {ARK_API_KEY}` |\n\n---\n\n## 二、计费\n\n```\nToken = 秒数 × 720 × 1280 × 24 / 1024\n费用 = Token × ¥46 / 1,000,000\n```\n\n| 时长 | Token | 费用 |\n|------|-------|------|\n| 4秒 | ~86,400 | ¥3.97 |\n| **5秒** | **~108,000** | **¥4.97** |\n| 10秒 | ~216,000 | ¥9.94 |\n| 15秒 | ~324,000 | ¥14.90 |\n\n---\n\n## 三、提示词规范\n\n### 固定模板\n\n```\n第一人称视角带货短视频。一位身穿中式传统服饰的中年女性，手持图片中的产品，{展示动作}。{灯光和环境}。\n```\n\n### 默认提示词（无需用户额外描述）\n\n```\n第一人称视角带货短视频。一位身穿中式传统服饰的中年女性，手持图片中的产品，面带微笑展示给镜头。柔和暖色灯光，背景干净简约。\n```\n\n### 规则\n\n1. **视角**：固定第一人称，不改\n2. **人物**：默认\"身穿中式传统服饰的中年女性\"，用户可覆盖\n3. **产品**：固定说\"图片中的产品\"，不用文字描述产品，让 AI 从 `reference_image` 自动识别\n4. **动作**：默认\"面带微笑展示给镜头\"，用户可自定义\n5. **环境**：默认\"柔和暖色灯光，背景干净简约\"\n\n### 用户自定义时的拼接逻辑\n\n用户只需提供变化的部分，Agent 自动拼接：\n\n```python\n# 默认值\nVIEW = \"第一人称视角带货短视频\"\nCHARACTER = \"一位身穿中式传统服饰的中年女性\"\nPRODUCT = \"手持图片中的产品\"\nACTION = \"面带微笑展示给镜头\"\nSCENE = \"柔和暖色灯光，背景干净简约\"\n\n# 拼接\nprompt = f\"{VIEW}。{CHARACTER}，{PRODUCT}，{ACTION}。{SCENE}。\"\n```\n\n用户可能的自定义示例：\n- \"换成年轻男性\" → 覆盖 CHARACTER\n- \"放在桌子上展示\" → 覆盖 ACTION\n- \"户外自然光\" → 覆盖 SCENE\n- \"加上点头动作\" → 追加到 ACTION\n\n---\n\n## 四、API 调用\n\n### 4.1 创建任务\n\n```bash\nPOST https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks\nAuthorization: Bearer {API_KEY}\nContent-Type: application/json\n```\n\n### 标准请求体（产品图做参考）\n\n```json\n{\n    \"model\": \"doubao-seedance-2-0-260128\",\n    \"content\": [\n        {\n            \"type\": \"text\",\n            \"text\": \"第一人称视角带货短视频。一位身穿中式传统服饰的中年女性，手持图片中的产品，面带微笑展示给镜头。柔和暖色灯光，背景干净简约。\"\n        },\n        {\n            \"type\": \"image_url\",\n            \"image_url\": {\"url\": \"data:image/jpeg;base64,{BASE64}\"},\n            \"role\": \"reference_image\"\n        }\n    ],\n    \"ratio\": \"9:16\",\n    \"duration\": 5,\n    \"watermark\": false\n}\n```\n\n### 产品图做首帧（视频从产品图开始）\n\n```json\n{\n    \"model\": \"doubao-seedance-2-0-260128\",\n    \"content\": [\n        {\n            \"type\": \"text\",\n            \"text\": \"第一人称视角带货短视频。一位身穿中式传统服饰的中年女性，手持图片中的产品，面带微笑展示给镜头。柔和暖色灯光，背景干净简约。\"\n        },\n        {\n            \"type\": \"image_url\",\n            \"image_url\": {\"url\": \"data:image/jpeg;base64,{BASE64}\"},\n            \"role\": \"first_frame\"\n        }\n    ],\n    \"ratio\": \"9:16\",\n    \"duration\": 5,\n    \"watermark\": false\n}\n```\n\n### 全要素（图+视频+音频参考）\n\n```json\n{\n    \"model\": \"doubao-seedance-2-0-260128\",\n    \"content\": [\n        {\"type\": \"text\", \"text\": \"提示词\"},\n        {\"type\": \"image_url\", \"image_url\": {\"url\": \"产品图URL\"}, \"role\": \"reference_image\"},\n        {\"type\": \"video_url\", \"video_url\": {\"url\": \"参考视频URL\"}, \"role\": \"reference_video\"},\n        {\"type\": \"audio_url\", \"audio_url\": {\"url\": \"背景音乐URL\"}, \"role\": \"reference_audio\"}\n    ],\n    \"generate_audio\": true,\n    \"ratio\": \"9:16\",\n    \"duration\": 10,\n    \"watermark\": false\n}\n```\n\n### 返回\n\n```json\n{\"id\": \"cgt-20260414xxxxx-xxxxx\"}\n```\n\n### 4.2 查询任务\n\n```bash\nGET https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks/{task_id}\nAuthorization: Bearer {API_KEY}\n```\n\n### 返回（成功）\n\n```json\n{\n    \"id\": \"cgt-xxx\",\n    \"status\": \"succeeded\",\n    \"content\": {\n        \"video_url\": \"https://...mp4?签名...\"\n    },\n    \"usage\": {\"total_tokens\": 108900},\n    \"resolution\": \"720p\",\n    \"duration\": 5,\n    \"framespersecond\": 24\n}\n```\n\n> ⚠️ `content` 是 **dict**，不是 list。`content.video_url` 直接是字符串。\n\n`status`: `running` → `succeeded` / `failed`\n\n### 4.3 视频续写\n\n请求加 `\"return_last_frame\": true`，返回含 `content.last_frame_url`，可作为下段视频的 `first_frame`。\n\n---\n\n## 五、顶层参数速查\n\n| 参数 | 类型 | 默认 | 说明 |\n|------|------|------|------|\n| `model` | string | - | `doubao-seedance-2-0-260128` |\n| `content` | array | - | text + 图/视频/音频 |\n| `ratio` | string | `9:16` | 竖屏带货固定 9:16 |\n| `duration` | int | 5 | 时长 4~15 秒 |\n| `watermark` | bool | false | 不加水印 |\n| `generate_audio` | bool | false | 生成配套音频 |\n| `return_last_frame` | bool | false | 返回最后一帧 |\n\n> ⚠️ 参数在**顶层**，不在 `extra` 里！\n\n---\n\n## 六、content 中的 role\n\n| role | 用途 | 推荐场景 |\n|------|------|---------|\n| `reference_image` | 多模态参考 | **默认用这个**，AI 保持产品外观一致性 |\n| `first_frame` | 视频首帧 | 视频必须从这张图开始 |\n| `last_frame` | 视频尾帧 | 指定结束画面 |\n| `reference_video` | 视频参考 | 运动风格参考 |\n| `reference_audio` | 音频参考 | 背景音乐/声音风格 |\n\n---\n\n## 七、Python 完整工具函数\n\n```python\nimport base64, json, time, requests, os\n\nARK_API_KEY = os.environ.get(\"ARK_API_KEY\", \"\")\nassert ARK_API_KEY, \"请设置环境变量 ARK_API_KEY\"\nBASE_URL = \"https://ark.cn-beijing.volces.com/api/v3\"\nHEADERS = {\n    \"Authorization\": f\"Bearer {ARK_API_KEY}\",\n    \"Content-Type\": \"application/json\"\n}\n\n# 默认提示词组件\nDEFAULT_VIEW = \"第一人称视角带货短视频\"\nDEFAULT_CHARACTER = \"一位身穿中式传统服饰的中年女性\"\nDEFAULT_PRODUCT = \"手持图片中的产品\"\nDEFAULT_ACTION = \"面带微笑展示给镜头\"\nDEFAULT_SCENE = \"柔和暖色灯光，背景干净简约\"\n\n\ndef build_prompt(character=None, action=None, scene=None):\n    \"\"\"构建提示词，用户只需覆盖想改的部分\"\"\"\n    c = character or DEFAULT_CHARACTER\n    a = action or DEFAULT_ACTION\n    s = scene or DEFAULT_SCENE\n    return f\"{DEFAULT_VIEW}。{c}，{DEFAULT_PRODUCT}，{a}。{s}。\"\n\n\ndef estimate_cost(duration=5):\n    \"\"\"预估费用\"\"\"\n    tokens = duration * 720 * 1280 * 24 / 1024\n    cost = tokens * 46 / 1000000\n    return tokens, cost\n\n\ndef generate_video(image_path, duration=5, output=\"output.mp4\",\n                   character=None, action=None, scene=None,\n                   role=\"reference_image\"):\n    \"\"\"一键生成带货视频\n\n    Args:\n        image_path: 产品图路径\n        duration: 时长 4~15 秒（默认 5）\n        output: 输出文件名\n        character: 自定义人物（默认传统服饰中年女性）\n        action: 自定义动作（默认微笑展示）\n        scene: 自定义场景（默认暖光简约）\n        role: 图片角色（默认 reference_image）\n    \"\"\"\n    prompt = build_prompt(character, action, scene)\n    tokens, cost = estimate_cost(duration)\n    print(f\"提示词: {prompt}\")\n    print(f\"预估: {tokens:,.0f} Token ≈ ¥{cost:.2f}\")\n\n    # 读取产品图\n    with open(image_path, \"rb\") as f:\n        img_b64 = base64.b64encode(f.read()).decode()\n    ext = os.path.splitext(image_path)[1].lstrip(\".\")\n    if ext == \"jpg\":\n        ext = \"jpeg\"\n\n    body = {\n        \"model\": \"doubao-seedance-2-0-260128\",\n        \"content\": [\n            {\"type\": \"text\", \"text\": prompt},\n            {\n                \"type\": \"image_url\",\n                \"image_url\": {\"url\": f\"data:image/{ext};base64,{img_b64}\"},\n                \"role\": role\n            }\n        ],\n        \"ratio\": \"9:16\",\n        \"duration\": duration,\n        \"watermark\": False\n    }\n\n    # 提交\n    resp = requests.post(\n        f\"{BASE_URL}/contents/generations/tasks\",\n        headers=HEADERS, json=body\n    )\n    result = resp.json()\n    if \"id\" not in result:\n        print(f\"❌ 提交失败: {result}\")\n        return None\n\n    task_id = result[\"id\"]\n    print(f\"✅ task_id: {task_id}\")\n\n    # 轮询（每 10 秒查一次，最多 15 分钟）\n    for _ in range(90):\n        time.sleep(10)\n        r = requests.get(\n            f\"{BASE_URL}/contents/generations/tasks/{task_id}\",\n            headers=HEADERS\n        )\n        data = r.json()\n        status = data.get(\"status\", \"?\")\n        print(f\"  [{time.strftime('%H:%M:%S')}] {status}\")\n\n        if status == \"succeeded\":\n            video_url = data[\"content\"][\"video_url\"]\n            vr = requests.get(video_url, stream=True)\n            with open(output, \"wb\") as f:\n                for chunk in vr.iter_content(8192):\n                    f.write(chunk)\n            actual_tokens = data[\"usage\"][\"total_tokens\"]\n            actual_cost = actual_tokens * 46 / 1000000\n            print(f\"\\n✅ {output} ({os.path.getsize(output)/1024/1024:.1f}MB)\")\n            print(f\"   Token: {actual_tokens:,} | 费用: ¥{actual_cost:.2f}\")\n            return output\n        elif status == \"failed\":\n            print(f\"❌ 失败: {data}\")\n            return None\n\n    print(\"⏰ 超时（15 分钟）\")\n    return None\n\n\n# 使用示例\nif __name__ == \"__main__\":\n    # 最简调用 — 只需产品图\n    generate_video(\"产品图.jpg\", output=\"带货视频.mp4\")\n\n    # 自定义人物\n    generate_video(\"产品图.jpg\", character=\"一位年轻时尚的中国女性\", output=\"年轻版.mp4\")\n\n    # 自定义动作\n    generate_video(\"产品图.jpg\", action=\"缓缓转动产品展示各角度细节\", output=\"转动版.mp4\")\n\n    # 10 秒长视频\n    generate_video(\"产品图.jpg\", duration=10, output=\"10秒版.mp4\")\n```\n\n---\n\n## 八、Agent 工作流\n\n当用户说\"帮我生成一个带货视频\"时：\n\n1. **获取产品图**：用户提供图片路径\n2. **确认参数**：时长（默认5秒）、是否自定义人物/动作/场景\n3. **告知费用**：`estimate_cost(duration)` 并等用户确认\n4. **生成视频**：`generate_video(image_path, ...)`\n5. **交付结果**：告知文件路径、实际费用\n\n### 对话示例\n\n```\n用户: 帮我用这张图生成带货视频\nAgent: 收到！将为您生成 5 秒竖屏带货视频。\n       预估费用：~108,000 Token ≈ ¥4.97\n       确认生成吗？\n用户: 好的\nAgent: [调用 generate_video] → 视频已生成：xxx.mp4 (1.9MB)，实际费用 ¥5.01\n```\n\n---\n\n## 九、常见问题\n\n### Q: ModelNotOpen 错误\nA: 方舟控制台 → 在线推理 → 推理接入点，创建 `doubao-seedance-2-0-260128` 的接入点。\n\n### Q: 生成多久？\nA: 5 秒 ≈ 3~6 分钟，10 秒 ≈ 7~10 分钟。\n\n### Q: 图片怎么传？\nA: `data:image/jpeg;base64,...` data URI，无需先上传。\n\n### Q: reference_image 和 first_frame 区别？\nA: `reference_image` AI 参考产品外观自由创作（**推荐**）；`first_frame` 视频必须从这张图开始。\n\nFile v1.2.0:_meta.json\n\n{\n  \"ownerId\": \"kn7byevkn40d6z4p7ghdb097z983tj33\",\n  \"slug\": \"huo15-influencer-video-skill\",\n  \"version\": \"1.2.0\",\n  \"publishedAt\": 1776697701327\n}\n\nArchive v1.1.0: 2 files, 4979 bytes\n\nFiles: SKILL.md (12088b), _meta.json (147b)\n\nFile v1.1.0:SKILL.md\n\n---\nname: huo15-influencer-video-skill\ndisplayName: 火15 AI带货视频生成\ndescription: 通过火山方舟Ark API调用Seedance 2.0，产品图一键生成第一人称带货短视频。支持自定义人物、动作、场景，默认传统服饰中年女性展示产品。触发词：生成视频、带货视频、产品视频、拍视频。\nversion: 1.0.0\naliases:\n  - 带货视频\n  - AI视频生成\n  - 产品视频\n---\n\n# 火15 AI 带货视频生成 Skill\n\n> 通过火山方舟 Ark API 调用 Seedance 2.0，产品图 → 第一人称带货短视频\n\n---\n\n## ⚠️ 安全规则\n\n1. 每次生成前**必须**告知用户预估费用\n2. 用户确认后才可提交任务\n3. 单次最大时长 15 秒，默认 5 秒\n4. 优先使用最省 Token 的配置\n\n---\n\n## 一、API 凭证\n\n| 参数 | 值 |\n|------|---|\n| API Key | 环境变量 `ARK_API_KEY`（从方舟控制台获取） |\n| 模型 | `doubao-seedance-2-0-260128` |\n| 端点 | `https://ark.cn-beijing.volces.com/api/v3` |\n| 认证 | `Authorization: Bearer {ARK_API_KEY}` |\n\n---\n\n## 二、计费\n\n```\nToken = 秒数 × 720 × 1280 × 24 / 1024\n费用 = Token × ¥46 / 1,000,000\n```\n\n| 时长 | Token | 费用 |\n|------|-------|------|\n| 4秒 | ~86,400 | ¥3.97 |\n| **5秒** | **~108,000** | **¥4.97** |\n| 10秒 | ~216,000 | ¥9.94 |\n| 15秒 | ~324,000 | ¥14.90 |\n\n---\n\n## 三、提示词规范\n\n### 固定模板\n\n```\n第一人称视角带货短视频。一位身穿中式传统服饰的中年女性，手持图片中的产品，{展示动作}。{灯光和环境}。\n```\n\n### 默认提示词（无需用户额外描述）\n\n```\n第一人称视角带货短视频。一位身穿中式传统服饰的中年女性，手持图片中的产品，面带微笑展示给镜头。柔和暖色灯光，背景干净简约。\n```\n\n### 规则\n\n1. **视角**：固定第一人称，不改\n2. **人物**：默认\"身穿中式传统服饰的中年女性\"，用户可覆盖\n3. **产品**：固定说\"图片中的产品\"，不用文字描述产品，让 AI 从 `reference_image` 自动识别\n4. **动作**：默认\"面带微笑展示给镜头\"，用户可自定义\n5. **环境**：默认\"柔和暖色灯光，背景干净简约\"\n\n### 用户自定义时的拼接逻辑\n\n用户只需提供变化的部分，Agent 自动拼接：\n\n```python\n# 默认值\nVIEW = \"第一人称视角带货短视频\"\nCHARACTER = \"一位身穿中式传统服饰的中年女性\"\nPRODUCT = \"手持图片中的产品\"\nACTION = \"面带微笑展示给镜头\"\nSCENE = \"柔和暖色灯光，背景干净简约\"\n\n# 拼接\nprompt = f\"{VIEW}。{CHARACTER}，{PRODUCT}，{ACTION}。{SCENE}。\"\n```\n\n用户可能的自定义示例：\n- \"换成年轻男性\" → 覆盖 CHARACTER\n- \"放在桌子上展示\" → 覆盖 ACTION\n- \"户外自然光\" → 覆盖 SCENE\n- \"加上点头动作\" → 追加到 ACTION\n\n---\n\n## 四、API 调用\n\n### 4.1 创建任务\n\n```bash\nPOST https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks\nAuthorization: Bearer {API_KEY}\nContent-Type: application/json\n```\n\n### 标准请求体（产品图做参考）\n\n```json\n{\n    \"model\": \"doubao-seedance-2-0-260128\",\n    \"content\": [\n        {\n            \"type\": \"text\",\n            \"text\": \"第一人称视角带货短视频。一位身穿中式传统服饰的中年女性，手持图片中的产品，面带微笑展示给镜头。柔和暖色灯光，背景干净简约。\"\n        },\n        {\n            \"type\": \"image_url\",\n            \"image_url\": {\"url\": \"data:image/jpeg;base64,{BASE64}\"},\n            \"role\": \"reference_image\"\n        }\n    ],\n    \"ratio\": \"9:16\",\n    \"duration\": 5,\n    \"watermark\": false\n}\n```\n\n### 产品图做首帧（视频从产品图开始）\n\n```json\n{\n    \"model\": \"doubao-seedance-2-0-260128\",\n    \"content\": [\n        {\n            \"type\": \"text\",\n            \"text\": \"第一人称视角带货短视频。一位身穿中式传统服饰的中年女性，手持图片中的产品，面带微笑展示给镜头。柔和暖色灯光，背景干净简约。\"\n        },\n        {\n            \"type\": \"image_url\",\n            \"image_url\": {\"url\": \"data:image/jpeg;base64,{BASE64}\"},\n            \"role\": \"first_frame\"\n        }\n    ],\n    \"ratio\": \"9:16\",\n    \"duration\": 5,\n    \"watermark\": false\n}\n```\n\n### 全要素（图+视频+音频参考）\n\n```json\n{\n    \"model\": \"doubao-seedance-2-0-260128\",\n    \"content\": [\n        {\"type\": \"text\", \"text\": \"提示词\"},\n        {\"type\": \"image_url\", \"image_url\": {\"url\": \"产品图URL\"}, \"role\": \"reference_image\"},\n        {\"type\": \"video_url\", \"video_url\": {\"url\": \"参考视频URL\"}, \"role\": \"reference_video\"},\n        {\"type\": \"audio_url\", \"audio_url\": {\"url\": \"背景音乐URL\"}, \"role\": \"reference_audio\"}\n    ],\n    \"generate_audio\": true,\n    \"ratio\": \"9:16\",\n    \"duration\": 10,\n    \"watermark\": false\n}\n```\n\n### 返回\n\n```json\n{\"id\": \"cgt-20260414xxxxx-xxxxx\"}\n```\n\n### 4.2 查询任务\n\n```bash\nGET https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks/{task_id}\nAuthorization: Bearer {API_KEY}\n```\n\n### 返回（成功）\n\n```json\n{\n    \"id\": \"cgt-xxx\",\n    \"status\": \"succeeded\",\n    \"content\": {\n        \"video_url\": \"https://...mp4?签名...\"\n    },\n    \"usage\": {\"total_tokens\": 108900},\n    \"resolution\": \"720p\",\n    \"duration\": 5,\n    \"framespersecond\": 24\n}\n```\n\n> ⚠️ `content` 是 **dict**，不是 list。`content.video_url` 直接是字符串。\n\n`status`: `running` → `succeeded` / `failed`\n\n### 4.3 视频续写\n\n请求加 `\"return_last_frame\": true`，返回含 `content.last_frame_url`，可作为下段视频的 `first_frame`。\n\n---\n\n## 五、顶层参数速查\n\n| 参数 | 类型 | 默认 | 说明 |\n|------|------|------|------|\n| `model` | string | - | `doubao-seedance-2-0-260128` |\n| `content` | array | - | text + 图/视频/音频 |\n| `ratio` | string | `9:16` | 竖屏带货固定 9:16 |\n| `duration` | int | 5 | 时长 4~15 秒 |\n| `watermark` | bool | false | 不加水印 |\n| `generate_audio` | bool | false | 生成配套音频 |\n| `return_last_frame` | bool | false | 返回最后一帧 |\n\n> ⚠️ 参数在**顶层**，不在 `extra` 里！\n\n---\n\n## 六、content 中的 role\n\n| role | 用途 | 推荐场景 |\n|------|------|---------|\n| `reference_image` | 多模态参考 | **默认用这个**，AI 保持产品外观一致性 |\n| `first_frame` | 视频首帧 | 视频必须从这张图开始 |\n| `last_frame` | 视频尾帧 | 指定结束画面 |\n| `reference_video` | 视频参考 | 运动风格参考 |\n| `reference_audio` | 音频参考 | 背景音乐/声音风格 |\n\n---\n\n## 七、Python 完整工具函数\n\n```python\nimport base64, json, time, requests, os\n\nARK_API_KEY = os.environ.get(\"ARK_API_KEY\", \"\")\nassert ARK_API_KEY, \"请设置环境变量 ARK_API_KEY\"\nBASE_URL = \"https://ark.cn-beijing.volces.com/api/v3\"\nHEADERS = {\n    \"Authorization\": f\"Bearer {ARK_API_KEY}\",\n    \"Content-Type\": \"application/json\"\n}\n\n# 默认提示词组件\nDEFAULT_VIEW = \"第一人称视角带货短视频\"\nDEFAULT_CHARACTER = \"一位身穿中式传统服饰的中年女性\"\nDEFAULT_PRODUCT = \"手持图片中的产品\"\nDEFAULT_ACTION = \"面带微笑展示给镜头\"\nDEFAULT_SCENE = \"柔和暖色灯光，背景干净简约\"\n\n\ndef build_prompt(character=None, action=None, scene=None):\n    \"\"\"构建提示词，用户只需覆盖想改的部分\"\"\"\n    c = character or DEFAULT_CHARACTER\n    a = action or DEFAULT_ACTION\n    s = scene or DEFAULT_SCENE\n    return f\"{DEFAULT_VIEW}。{c}，{DEFAULT_PRODUCT}，{a}。{s}。\"\n\n\ndef estimate_cost(duration=5):\n    \"\"\"预估费用\"\"\"\n    tokens = duration * 720 * 1280 * 24 / 1024\n    cost = tokens * 46 / 1000000\n    return tokens, cost\n\n\ndef generate_video(image_path, duration=5, output=\"output.mp4\",\n                   character=None, action=None, scene=None,\n                   role=\"reference_image\"):\n    \"\"\"一键生成带货视频\n\n    Args:\n        image_path: 产品图路径\n        duration: 时长 4~15 秒（默认 5）\n        output: 输出文件名\n        character: 自定义人物（默认传统服饰中年女性）\n        action: 自定义动作（默认微笑展示）\n        scene: 自定义场景（默认暖光简约）\n        role: 图片角色（默认 reference_image）\n    \"\"\"\n    prompt = build_prompt(character, action, scene)\n    tokens, cost = estimate_cost(duration)\n    print(f\"提示词: {prompt}\")\n    print(f\"预估: {tokens:,.0f} Token ≈ ¥{cost:.2f}\")\n\n    # 读取产品图\n    with open(image_path, \"rb\") as f:\n        img_b64 = base64.b64encode(f.read()).decode()\n    ext = os.path.splitext(image_path)[1].lstrip(\".\")\n    if ext == \"jpg\":\n        ext = \"jpeg\"\n\n    body = {\n        \"model\": \"doubao-seedance-2-0-260128\",\n        \"content\": [\n            {\"type\": \"text\", \"text\": prompt},\n            {\n                \"type\": \"image_url\",\n                \"image_url\": {\"url\": f\"data:image/{ext};base64,{img_b64}\"},\n                \"role\": role\n            }\n        ],\n        \"ratio\": \"9:16\",\n        \"duration\": duration,\n        \"watermark\": False\n    }\n\n    # 提交\n    resp = requests.post(\n        f\"{BASE_URL}/contents/generations/tasks\",\n        headers=HEADERS, json=body\n    )\n    result = resp.json()\n    if \"id\" not in result:\n        print(f\"❌ 提交失败: {result}\")\n        return None\n\n    task_id = result[\"id\"]\n    print(f\"✅ task_id: {task_id}\")\n\n    # 轮询（每 10 秒查一次，最多 15 分钟）\n    for _ in range(90):\n        time.sleep(10)\n        r = requests.get(\n            f\"{BASE_URL}/contents/generations/tasks/{task_id}\",\n            headers=HEADERS\n        )\n        data = r.json()\n        status = data.get(\"status\", \"?\")\n        print(f\"  [{time.strftime('%H:%M:%S')}] {status}\")\n\n        if status == \"succeeded\":\n            video_url = data[\"content\"][\"video_url\"]\n            vr = requests.get(video_url, stream=True)\n            with open(output, \"wb\") as f:\n                for chunk in vr.iter_content(8192):\n                    f.write(chunk)\n            actual_tokens = data[\"usage\"][\"total_tokens\"]\n            actual_cost = actual_tokens * 46 / 1000000\n            print(f\"\\n✅ {output} ({os.path.getsize(output)/1024/1024:.1f}MB)\")\n            print(f\"   Token: {actual_tokens:,} | 费用: ¥{actual_cost:.2f}\")\n            return output\n        elif status == \"failed\":\n            print(f\"❌ 失败: {data}\")\n            return None\n\n    print(\"⏰ 超时（15 分钟）\")\n    return None\n\n\n# 使用示例\nif __name__ == \"__main__\":\n    # 最简调用 — 只需产品图\n    generate_video(\"产品图.jpg\", output=\"带货视频.mp4\")\n\n    # 自定义人物\n    generate_video(\"产品图.jpg\", character=\"一位年轻时尚的中国女性\", output=\"年轻版.mp4\")\n\n    # 自定义动作\n    generate_video(\"产品图.jpg\", action=\"缓缓转动产品展示各角度细节\", output=\"转动版.mp4\")\n\n    # 10 秒长视频\n    generate_video(\"产品图.jpg\", duration=10, output=\"10秒版.mp4\")\n```\n\n---\n\n## 八、Agent 工作流\n\n当用户说\"帮我生成一个带货视频\"时：\n\n1. **获取产品图**：用户提供图片路径\n2. **确认参数**：时长（默认5秒）、是否自定义人物/动作/场景\n3. **告知费用**：`estimate_cost(duration)` 并等用户确认\n4. **生成视频**：`generate_video(image_path, ...)`\n5. **交付结果**：告知文件路径、实际费用\n\n### 对话示例\n\n```\n用户: 帮我用这张图生成带货视频\nAgent: 收到！将为您生成 5 秒竖屏带货视频。\n       预估费用：~108,000 Token ≈ ¥4.97\n       确认生成吗？\n用户: 好的\nAgent: [调用 generate_video] → 视频已生成：xxx.mp4 (1.9MB)，实际费用 ¥5.01\n```\n\n---\n\n## 九、常见问题\n\n### Q: ModelNotOpen 错误\nA: 方舟控制台 → 在线推理 → 推理接入点，创建 `doubao-seedance-2-0-260128` 的接入点。\n\n### Q: 生成多久？\nA: 5 秒 ≈ 3~6 分钟，10 秒 ≈ 7~10 分钟。\n\n### Q: 图片怎么传？\nA: `data:image/jpeg;base64,...` data URI，无需先上传。\n\n### Q: reference_image 和 first_frame 区别？\nA: `reference_image` AI 参考产品外观自由创作（**推荐**）；`first_frame` 视频必须从这张图开始。\n\nFile v1.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn7byevkn40d6z4p7ghdb097z983tj33\",\n  \"slug\": \"huo15-influencer-video-skill\",\n  \"version\": \"1.1.0\",\n  \"publishedAt\": 1776697477185\n}\n\nArchive v1.0.0: 2 files, 4795 bytes\n\nFiles: SKILL.md (11587b), _meta.json (147b)\n\nFile v1.0.0:SKILL.md\n\n# 火15 AI 带货视频生成 Skill\n\n> 通过火山方舟 Ark API 调用 Seedance 2.0，产品图 → 第一人称带货短视频\n\n---\n\n## ⚠️ 安全规则\n\n1. 每次生成前**必须**告知用户预估费用\n2. 用户确认后才可提交任务\n3. 单次最大时长 15 秒，默认 5 秒\n4. 优先使用最省 Token 的配置\n\n---\n\n## 一、API 凭证\n\n| 参数 | 值 |\n|------|---|\n| API Key | `8280467b-1a2f-4d62-9009-8dcab72e5a2a` |\n| 模型 | `doubao-seedance-2-0-260128` |\n| 端点 | `https://ark.cn-beijing.volces.com/api/v3` |\n| 认证 | `Authorization: Bearer {API_KEY}` |\n\n---\n\n## 二、计费\n\n```\nToken = 秒数 × 720 × 1280 × 24 / 1024\n费用 = Token × ¥46 / 1,000,000\n```\n\n| 时长 | Token | 费用 |\n|------|-------|------|\n| 4秒 | ~86,400 | ¥3.97 |\n| **5秒** | **~108,000** | **¥4.97** |\n| 10秒 | ~216,000 | ¥9.94 |\n| 15秒 | ~324,000 | ¥14.90 |\n\n---\n\n## 三、提示词规范\n\n### 固定模板\n\n```\n第一人称视角带货短视频。一位身穿中式传统服饰的中年女性，手持图片中的产品，{展示动作}。{灯光和环境}。\n```\n\n### 默认提示词（无需用户额外描述）\n\n```\n第一人称视角带货短视频。一位身穿中式传统服饰的中年女性，手持图片中的产品，面带微笑展示给镜头。柔和暖色灯光，背景干净简约。\n```\n\n### 规则\n\n1. **视角**：固定第一人称，不改\n2. **人物**：默认\"身穿中式传统服饰的中年女性\"，用户可覆盖\n3. **产品**：固定说\"图片中的产品\"，不用文字描述产品，让 AI 从 `reference_image` 自动识别\n4. **动作**：默认\"面带微笑展示给镜头\"，用户可自定义\n5. **环境**：默认\"柔和暖色灯光，背景干净简约\"\n\n### 用户自定义时的拼接逻辑\n\n用户只需提供变化的部分，Agent 自动拼接：\n\n```python\n# 默认值\nVIEW = \"第一人称视角带货短视频\"\nCHARACTER = \"一位身穿中式传统服饰的中年女性\"\nPRODUCT = \"手持图片中的产品\"\nACTION = \"面带微笑展示给镜头\"\nSCENE = \"柔和暖色灯光，背景干净简约\"\n\n# 拼接\nprompt = f\"{VIEW}。{CHARACTER}，{PRODUCT}，{ACTION}。{SCENE}。\"\n```\n\n用户可能的自定义示例：\n- \"换成年轻男性\" → 覆盖 CHARACTER\n- \"放在桌子上展示\" → 覆盖 ACTION\n- \"户外自然光\" → 覆盖 SCENE\n- \"加上点头动作\" → 追加到 ACTION\n\n---\n\n## 四、API 调用\n\n### 4.1 创建任务\n\n```bash\nPOST https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks\nAuthorization: Bearer {API_KEY}\nContent-Type: application/json\n```\n\n### 标准请求体（产品图做参考）\n\n```json\n{\n    \"model\": \"doubao-seedance-2-0-260128\",\n    \"content\": [\n        {\n            \"type\": \"text\",\n            \"text\": \"第一人称视角带货短视频。一位身穿中式传统服饰的中年女性，手持图片中的产品，面带微笑展示给镜头。柔和暖色灯光，背景干净简约。\"\n        },\n        {\n            \"type\": \"image_url\",\n            \"image_url\": {\"url\": \"data:image/jpeg;base64,{BASE64}\"},\n            \"role\": \"reference_image\"\n        }\n    ],\n    \"ratio\": \"9:16\",\n    \"duration\": 5,\n    \"watermark\": false\n}\n```\n\n### 产品图做首帧（视频从产品图开始）\n\n```json\n{\n    \"model\": \"doubao-seedance-2-0-260128\",\n    \"content\": [\n        {\n            \"type\": \"text\",\n            \"text\": \"第一人称视角带货短视频。一位身穿中式传统服饰的中年女性，手持图片中的产品，面带微笑展示给镜头。柔和暖色灯光，背景干净简约。\"\n        },\n        {\n            \"type\": \"image_url\",\n            \"image_url\": {\"url\": \"data:image/jpeg;base64,{BASE64}\"},\n            \"role\": \"first_frame\"\n        }\n    ],\n    \"ratio\": \"9:16\",\n    \"duration\": 5,\n    \"watermark\": false\n}\n```\n\n### 全要素（图+视频+音频参考）\n\n```json\n{\n    \"model\": \"doubao-seedance-2-0-260128\",\n    \"content\": [\n        {\"type\": \"text\", \"text\": \"提示词\"},\n        {\"type\": \"image_url\", \"image_url\": {\"url\": \"产品图URL\"}, \"role\": \"reference_image\"},\n        {\"type\": \"video_url\", \"video_url\": {\"url\": \"参考视频URL\"}, \"role\": \"reference_video\"},\n        {\"type\": \"audio_url\", \"audio_url\": {\"url\": \"背景音乐URL\"}, \"role\": \"reference_audio\"}\n    ],\n    \"generate_audio\": true,\n    \"ratio\": \"9:16\",\n    \"duration\": 10,\n    \"watermark\": false\n}\n```\n\n### 返回\n\n```json\n{\"id\": \"cgt-20260414xxxxx-xxxxx\"}\n```\n\n### 4.2 查询任务\n\n```bash\nGET https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks/{task_id}\nAuthorization: Bearer {API_KEY}\n```\n\n### 返回（成功）\n\n```json\n{\n    \"id\": \"cgt-xxx\",\n    \"status\": \"succeeded\",\n    \"content\": {\n        \"video_url\": \"https://...mp4?签名...\"\n    },\n    \"usage\": {\"total_tokens\": 108900},\n    \"resolution\": \"720p\",\n    \"duration\": 5,\n    \"framespersecond\": 24\n}\n```\n\n> ⚠️ `content` 是 **dict**，不是 list。`content.video_url` 直接是字符串。\n\n`status`: `running` → `succeeded` / `failed`\n\n### 4.3 视频续写\n\n请求加 `\"return_last_frame\": true`，返回含 `content.last_frame_url`，可作为下段视频的 `first_frame`。\n\n---\n\n## 五、顶层参数速查\n\n| 参数 | 类型 | 默认 | 说明 |\n|------|------|------|------|\n| `model` | string | - | `doubao-seedance-2-0-260128` |\n| `content` | array | - | text + 图/视频/音频 |\n| `ratio` | string | `9:16` | 竖屏带货固定 9:16 |\n| `duration` | int | 5 | 时长 4~15 秒 |\n| `watermark` | bool | false | 不加水印 |\n| `generate_audio` | bool | false | 生成配套音频 |\n| `return_last_frame` | bool | false | 返回最后一帧 |\n\n> ⚠️ 参数在**顶层**，不在 `extra` 里！\n\n---\n\n## 六、content 中的 role\n\n| role | 用途 | 推荐场景 |\n|------|------|---------|\n| `reference_image` | 多模态参考 | **默认用这个**，AI 保持产品外观一致性 |\n| `first_frame` | 视频首帧 | 视频必须从这张图开始 |\n| `last_frame` | 视频尾帧 | 指定结束画面 |\n| `reference_video` | 视频参考 | 运动风格参考 |\n| `reference_audio` | 音频参考 | 背景音乐/声音风格 |\n\n---\n\n## 七、Python 完整工具函数\n\n```python\nimport base64, json, time, requests, os\n\nARK_API_KEY = \"8280467b-1a2f-4d62-9009-8dcab72e5a2a\"\nBASE_URL = \"https://ark.cn-beijing.volces.com/api/v3\"\nHEADERS = {\n    \"Authorization\": f\"Bearer {ARK_API_KEY}\",\n    \"Content-Type\": \"application/json\"\n}\n\n# 默认提示词组件\nDEFAULT_VIEW = \"第一人称视角带货短视频\"\nDEFAULT_CHARACTER = \"一位身穿中式传统服饰的中年女性\"\nDEFAULT_PRODUCT = \"手持图片中的产品\"\nDEFAULT_ACTION = \"面带微笑展示给镜头\"\nDEFAULT_SCENE = \"柔和暖色灯光，背景干净简约\"\n\n\ndef build_prompt(character=None, action=None, scene=None):\n    \"\"\"构建提示词，用户只需覆盖想改的部分\"\"\"\n    c = character or DEFAULT_CHARACTER\n    a = action or DEFAULT_ACTION\n    s = scene or DEFAULT_SCENE\n    return f\"{DEFAULT_VIEW}。{c}，{DEFAULT_PRODUCT}，{a}。{s}。\"\n\n\ndef estimate_cost(duration=5):\n    \"\"\"预估费用\"\"\"\n    tokens = duration * 720 * 1280 * 24 / 1024\n    cost = tokens * 46 / 1000000\n    return tokens, cost\n\n\ndef generate_video(image_path, duration=5, output=\"output.mp4\",\n                   character=None, action=None, scene=None,\n                   role=\"reference_image\"):\n    \"\"\"一键生成带货视频\n\n    Args:\n        image_path: 产品图路径\n        duration: 时长 4~15 秒（默认 5）\n        output: 输出文件名\n        character: 自定义人物（默认传统服饰中年女性）\n        action: 自定义动作（默认微笑展示）\n        scene: 自定义场景（默认暖光简约）\n        role: 图片角色（默认 reference_image）\n    \"\"\"\n    prompt = build_prompt(character, action, scene)\n    tokens, cost = estimate_cost(duration)\n    print(f\"提示词: {prompt}\")\n    print(f\"预估: {tokens:,.0f} Token ≈ ¥{cost:.2f}\")\n\n    # 读取产品图\n    with open(image_path, \"rb\") as f:\n        img_b64 = base64.b64encode(f.read()).decode()\n    ext = os.path.splitext(image_path)[1].lstrip(\".\")\n    if ext == \"jpg\":\n        ext = \"jpeg\"\n\n    body = {\n        \"model\": \"doubao-seedance-2-0-260128\",\n        \"content\": [\n            {\"type\": \"text\", \"text\": prompt},\n            {\n                \"type\": \"image_url\",\n                \"image_url\": {\"url\": f\"data:image/{ext};base64,{img_b64}\"},\n                \"role\": role\n            }\n        ],\n        \"ratio\": \"9:16\",\n        \"duration\": duration,\n        \"watermark\": False\n    }\n\n    # 提交\n    resp = requests.post(\n        f\"{BASE_URL}/contents/generations/tasks\",\n        headers=HEADERS, json=body\n    )\n    result = resp.json()\n    if \"id\" not in result:\n        print(f\"❌ 提交失败: {result}\")\n        return None\n\n    task_id = result[\"id\"]\n    print(f\"✅ task_id: {task_id}\")\n\n    # 轮询（每 10 秒查一次，最多 15 分钟）\n    for _ in range(90):\n        time.sleep(10)\n        r = requests.get(\n            f\"{BASE_URL}/contents/generations/tasks/{task_id}\",\n            headers=HEADERS\n        )\n        data = r.json()\n        status = data.get(\"status\", \"?\")\n        print(f\"  [{time.strftime('%H:%M:%S')}] {status}\")\n\n        if status == \"succeeded\":\n            video_url = data[\"content\"][\"video_url\"]\n            vr = requests.get(video_url, stream=True)\n            with open(output, \"wb\") as f:\n                for chunk in vr.iter_content(8192):\n                    f.write(chunk)\n            actual_tokens = data[\"usage\"][\"total_tokens\"]\n            actual_cost = actual_tokens * 46 / 1000000\n            print(f\"\\n✅ {output} ({os.path.getsize(output)/1024/1024:.1f}MB)\")\n            print(f\"   Token: {actual_tokens:,} | 费用: ¥{actual_cost:.2f}\")\n            return output\n        elif status == \"failed\":\n            print(f\"❌ 失败: {data}\")\n            return None\n\n    print(\"⏰ 超时（15 分钟）\")\n    return None\n\n\n# 使用示例\nif __name__ == \"__main__\":\n    # 最简调用 — 只需产品图\n    generate_video(\"产品图.jpg\", output=\"带货视频.mp4\")\n\n    # 自定义人物\n    generate_video(\"产品图.jpg\", character=\"一位年轻时尚的中国女性\", output=\"年轻版.mp4\")\n\n    # 自定义动作\n    generate_video(\"产品图.jpg\", action=\"缓缓转动产品展示各角度细节\", output=\"转动版.mp4\")\n\n    # 10 秒长视频\n    generate_video(\"产品图.jpg\", duration=10, output=\"10秒版.mp4\")\n```\n\n---\n\n## 八、Agent 工作流\n\n当用户说\"帮我生成一个带货视频\"时：\n\n1. **获取产品图**：用户提供图片路径\n2. **确认参数**：时长（默认5秒）、是否自定义人物/动作/场景\n3. **告知费用**：`estimate_cost(duration)` 并等用户确认\n4. **生成视频**：`generate_video(image_path, ...)`\n5. **交付结果**：告知文件路径、实际费用\n\n### 对话示例\n\n```\n用户: 帮我用这张图生成带货视频\nAgent: 收到！将为您生成 5 秒竖屏带货视频。\n       预估费用：~108,000 Token ≈ ¥4.97\n       确认生成吗？\n用户: 好的\nAgent: [调用 generate_video] → 视频已生成：xxx.mp4 (1.9MB)，实际费用 ¥5.01\n```\n\n---\n\n## 九、常见问题\n\n### Q: ModelNotOpen 错误\nA: 方舟控制台 → 在线推理 → 推理接入点，创建 `doubao-seedance-2-0-260128` 的接入点。\n\n### Q: 生成多久？\nA: 5 秒 ≈ 3~6 分钟，10 秒 ≈ 7~10 分钟。\n\n### Q: 图片怎么传？\nA: `data:image/jpeg;base64,...` data URI，无需先上传。\n\n### Q: reference_image 和 first_frame 区别？\nA: `reference_image` AI 参考产品外观自由创作（**推荐**）；`first_frame` 视频必须从这张图开始。\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn7byevkn40d6z4p7ghdb097z983tj33\",\n  \"slug\": \"huo15-influencer-video-skill\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1776696478717\n}","readmeExcerpt":"Skill: Huo15 Influencer Video Skill Owner: zhaobod1 Summary: 通过火山方舟Ark API调用Seedance 2.0生成第一人称带货短视频，v2 新增剧本驱动的配音（edge-tts/火山TTS）、背景音乐自动混音、字幕烧录，内置 8 套人设模板（传统女、时尚主播、老中医、厨房主妇、美妆博主、健身教练、户外探店、数码博主）。触发词：生成视频、带货视频、产品视频、拍视频、剧本... Tags: influencer:1.2.0, latest:2.0.0, social-media:1.2.0, video:1.2.0 Version history: v2.0.0 | 2026-04-27T11:34:35.819Z | user v2 大版本: 剧本驱动 + edge-tts/火山 TTS 配音 + ffmpeg 自动混 BGM + 字幕烧录 + 8 套人设模板(传统","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"huo15-influencer-video-skill/\n├── SKILL.md                           # 本文档\n├── _meta.json\n├── scripts/\n│   ├── templates.py                   # 8 套人设模板配置\n│   ├── tts.py                         # 配音引擎（edge-tts + 火山）\n│   ├── bgm.py                         # BGM 库 + 混音 + 视频/音频合并\n│   └── pipeline.py                    # 端到端 pipeline（推荐入口）\n└── examples/\n    ├── script_traditional_lady.json\n    ├── script_fashion_host.json\n    └── script_auto_template.json"},{"language":"bash","snippet":"# 必需\nbrew install ffmpeg\npip install edge-tts requests\n\n# 视频生成\nexport ARK_API_KEY=ak-xxxxx                # 方舟控制台获取\n\n# 可选：火山 TTS（不设则降级到 edge-tts，免费但音质稍弱）\nexport VOLC_TTS_APP_ID=xxxxx\nexport VOLC_TTS_TOKEN=xxxxx\nexport VOLC_TTS_CLUSTER=volcano_tts\n\n# 可选：BGM 库目录（默认 ~/Music/huo15-bgm/）\nexport HUO15_BGM_DIR=~/Music/huo15-bgm"},{"language":"json","snippet":"{ \"template\": \"auto\", \"category\": \"蛋白粉\", ... }"},{"language":"json","snippet":"{\n  \"template\": \"traditional_lady\",\n  \"image\": \"/path/to/product.jpg\",\n  \"lines\": [\n    {\"text\": \"姐妹们，今天给大家推一款好东西\", \"action\": \"举起产品给镜头\"},\n    {\"text\": \"古法配方，纯手工制作\",            \"action\": \"微笑展示产品细节\"},\n    {\"text\": \"用过的姐妹都说好\",                \"action\": \"点头肯定\"}\n  ],\n  \"bgm\": \"warm\",\n  \"bgm_volume\": 0.18,\n  \"subtitle\": true,\n  \"voice_override\": null,\n  \"rate_override\": null,\n  \"output\": \"/tmp/huo15/final.mp4\"\n}"},{"language":"bash","snippet":"cd huo15-influencer-video-skill\n\n# 自检 — 第一次跑先做这一步\npython3 scripts/pipeline.py preflight\n\n# 列出 8 套人设模板 / 8 个推荐音色\npython3 scripts/pipeline.py templates\npython3 scripts/pipeline.py voices\n\n# dry-run — 只跑 TTS + 字幕，不调 Seedance（省 ¥）\n# 用于先验证剧本节奏、TTS 音色、字幕断句\npython3 scripts/pipeline.py dry-run examples/script_traditional_lady.json\n\n# 完整端到端\npython3 scripts/pipeline.py render examples/script_traditional_lady.json"},{"language":"python","snippet":"import sys, json\nsys.path.insert(0, \"scripts\")\nfrom pipeline import render\n\nresult = render({\n    \"template\": \"auto\",\n    \"category\": \"蛋白粉\",\n    \"image\": \"/path/to/protein.jpg\",\n    \"lines\": [\n        {\"text\": \"兄弟们练完这一组\",   \"action\": \"拿起产品\"},\n        {\"text\": \"蛋白吸收率高得离谱\", \"action\": \"展示成分\"},\n    ],\n    \"subtitle\": True,\n})\nprint(result)\n# {'output': '/tmp/huo15_video/final.mp4', 'template': 'fitness_coach',\n#  'voice_duration': 6.2, 'video_duration': 8, 'tokens': 172800,\n#  'cost_yuan': 7.95, 'size_mb': 3.1}"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: huo15-influencer-video-skill\ndisplayName: 火一五带货视频技能\ndescription: 通过火山方舟Ark API调用Seedance 2.0生成第一人称带货短视频，v2 新增剧本驱动的配音（edge-tts/火山TTS）、背景音乐自动混音、字幕烧录，内置 8 套人设模板（传统女、时尚主播、老中医、厨房主妇、美妆博主、健身教练、户外探店、数码博主）。触发词：生成视频、带货视频、产品视频、拍视频、剧本拍视频。\nversion: 2.0.0\naliases:\n  - 火一五带货视频技能\n  - 火一五AI带货视频技能\n  - 火一五产品视频技能\n  - 带货视频\n  - 剧本带货视频\n  - AI视频生成\n  - 产品视频\n---\n\n# 火15 AI 带货视频生成 Skill v2\n\n> 产品图 + 剧本 → 带配音、背景音乐、字幕的第一人称带货短视频。\n> 内置 8 套人设模板，一句话指定品类即可自动选模板。\n\n---\n\n## ⚠️ 安全规则\n\n1. 每次生成前**必须**告知用户预估费用（Seedance 视频部分；TTS edge-tts 免费、火山 TTS 单字 ≤¥0.0006）\n2. 用户确认后才可提交任务\n3. 单次最大时长 15 秒，默认按配音时长自动决定\n4. 优先使用最省 Token 的配置\n\n---\n\n## 一、能力总览\n\n| 模块 | v1 | v2（本次） |\n|---|---|---|\n| 视频生成 | Seedance 2.0 ✅ | Seedance 2.0 ✅ |\n| 配音 | ❌ | edge-tts（默认免费） / 火山 TTS（可选） ✅ |\n| 背景音乐 | ❌ | ffmpeg 自动循环+降音量+淡出 ✅ |\n| 字幕 | ❌ | 按行字数比例切时间轴 + 烧录 ✅ |\n| 人设模板 | 1 套（传统女） | **8 套**（按品类自动推荐） ✅ |\n| 剧本驱动 | ❌ | JSON 剧本一键端到端 ✅ |\n\n---\n\n## 二、文件结构\n\n```\nhuo15-influencer-video-skill/\n├── SKILL.md                           # 本文档\n├── _meta.json\n├── scripts/\n│   ├── templates.py                   # 8 套人设模板配置\n│   ├── tts.py                         # 配音引擎（edge-tts + 火山）\n│   ├── bgm.py                         # BGM 库 + 混音 + 视频/音频合并\n│   └── pipeline.py                    # 端到端 pipeline（推荐入口）\n└── examples/\n    ├── script_traditional_lady.json\n    ├── script_fashion_host.json\n    └── script_auto_template.json\n```\n\n---\n\n## 三、依赖与凭证\n\n```bash\n# 必需\nbrew install ffmpeg\npip install edge-tts requests\n\n# 视频生成\nexport ARK_API_KEY=ak-xxxxx                # 方舟控制台获取\n\n# 可选：火山 TTS（不设则降级到 edge-tts，免费但音质稍弱）\nexport VOLC_TTS_APP_ID=xxxxx\nexport VOLC_TTS_TOKEN=xxxxx\nexport VOLC_TTS_CLUSTER=volcano_tts\n\n# 可选：BGM 库目录（默认 ~/Music/huo15-bgm/）\nexport HUO15_BGM_DIR=~/Music/huo15-bgm\n```\n\n### BGM 文件准备（一次性）\n\n把 5 个免版税音乐放到 `~/Music/huo15-bgm/`（缺哪个跳过哪个，不影响视频生成）：\n\n| 文件名 | 风格 | 推荐用途 | 下载关键词 |\n|---|---|---|---|\n| `warm.mp3` | 温暖钢琴 | 养生/食品/手工 | warm piano background |\n| `energetic.mp3` | 活力电子 | 美妆/服装/直播 | upbeat electronic |\n| `asian.mp3` | 中国风古筝 | 中药/茶/古风 | chinese guzheng |\n| `soft.mp3` | 柔和氛围 | 数码/护肤 | soft ambient pad |\n| `cinematic.mp3` | 电影弦乐 | 户外/特产 | cinematic strings |\n\n下载渠道：[Pixabay Music](https://pixabay.com/music/)（CC0）、[Freesound](https://freesound.org/)、[Incompetech](https://incompetech.com/music/royalty-free/)（注明出处）。\n\n---\n\n## 四、8 套预设模板\n\n| key | 角色 | 推荐音色 | 推荐 BGM | 适用品类 |\n|---|---|---|---|---|\n| `traditional_lady` | 传统中年女性（默认） | 晓秋（沉稳） | warm | 养生 / 茶叶 / 手工 / 古法食品 |\n| `fashion_host` | 时尚女主播 | 晓晓（活泼） | energetic | 美妆 / 服装 / 饰品 / 数码配件 |\n| `tcm_doctor` | 老中医 | 云健（沉稳男） | asian | 中药 / 保健品 / 膏方 / 艾灸 |\n| `kitchen_mom` | 厨房主妇 | 晓涵（温暖） | warm | 调味料 / 食材 / 厨具 / 速食 |\n| `beauty_blogger` | 美妆博主 | 晓梦（活泼） | soft | 护肤 / 彩妆 / 香水 / 美容仪 |\n| `fitness_coach` | 健身教练 | 云皓（激情男） | energetic | 蛋白粉 / 运动器材 / 补剂 |\n| `outdoor_explorer` | 户外探店达人 | 云夏（轻快男） | cinematic | 地方特产 / 户外装备 / 民俗 |\n| `tech_geek` | 数码博主 | 云扬（专业男） | soft | 手机 / 耳机 / 智能家居 / 电脑 |\n\n### 自动选模板\n\n```json\n{ \"template\": \"auto\", \"category\": \"蛋白粉\", ... }\n```\n→ 命中 `fitness_coach`。无匹配回退 `traditional_lady`。\n\n---\n\n## 五、剧本格式\n\n``"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7byevkn40d6z4p7ghdb097z983tj33\",\n  \"slug\": \"huo15-influencer-video-skill\",\n  \"version\": \"2.0.0\",\n  \"publishedAt\": 1777289675819\n}"},{"path":"skill-card.md","content":"## Description:\n\nGenerates short first-person product marketing videos from a product image and JSON script, with TTS voiceover, optional background music mixing, subtitles, template selection, dry-run checks, and cost estimates.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[zhaobod1](https://clawhub.ai/user/zhaobod1)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal creators, marketers, and agents use this skill to prepare short product sales videos from a local product image and script. It supports persona templates, voiceover, background music, subtitles, dry-run validation, and cost-aware rendering before producing the final media file.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Product images and scripts may be sent to external video and TTS services.\n\nMitigation: Use non-sensitive inputs, dedicated provider keys, and an isolated environment.\n\nRisk: FFmpeg processing and output paths use loosely validated, overwrite-capable inputs.\n\nMitigation: Use a controlled output directory and review script JSON paths before execution.\n\nRisk: Full rendering can incur provider costs.\n\nMitigation: Confirm estimated costs before rendering and use dry-run mode to validate scripts before paid video generation.\n\n## Reference(s):\n\n- [ClawHub release page](https://clawhub.ai/zhaobod1/skills/huo15-influencer-video-skill)\n- [Volcano Ark API endpoint](https://ark.cn-beijing.volces.com/api/v3)\n- [ByteDance OpenSpeech TTS endpoint](https://openspeech.bytedance.com)\n- [Pixabay Music](https://pixabay.com/music/)\n- [Freesound](https://freesound.org/)\n- [Incompetech Royalty-Free Music](https://incompetech.com/music/royalty-free/)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance, files]\n\n**Output Format:** [Markdown guidance with JSON script examples, shell commands, and generated media file paths]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Can create MP4 video, MP3 voice or mixed audio, SRT subtitles, token estimates, and cost estimates; dry-run avoids the paid video generation step.]\n\n## Skill Version(s):\n\n2.0.0 (source: frontmatter and server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."},{"path":"examples/script_auto_template.json","content":"{\n  \"template\": \"auto\",\n  \"category\": \"蛋白粉\",\n  \"image\": \"/path/to/protein.jpg\",\n  \"lines\": [\n    {\"text\": \"兄弟们，练完这一组\", \"action\": \"拿起产品\"},\n    {\"text\": \"蛋白吸收率高得离谱\", \"action\": \"展示成分\"},\n    {\"text\": \"练大一年，从这罐开始\", \"action\": \"握拳鼓励\"}\n  ],\n  \"subtitle\": true,\n  \"output\": \"/tmp/huo15/protein.mp4\"\n}"},{"path":"examples/script_fashion_host.json","content":"{\n  \"template\": \"fashion_host\",\n  \"image\": \"/path/to/cosmetic.jpg\",\n  \"lines\": [\n    {\"text\": \"宝贝们看这个！\", \"action\": \"活力举起产品\"},\n    {\"text\": \"上脸超服帖，颜值直接拉满\", \"action\": \"比心展示\"},\n    {\"text\": \"今天直播间还有买二送一\", \"action\": \"OK 手势\"}\n  ],\n  \"bgm\": \"energetic\",\n  \"subtitle\": true,\n  \"output\": \"/tmp/huo15/fashion.mp4\"\n}"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"通过火山方舟Ark API调用Seedance 2.0生成第一人称带货短视频，v2 新增剧本驱动的配音（edge-tts/火山TTS）、背景音乐自动混音、字幕烧录，内置 8 套人设模板（传统女、时尚主播、老中医、厨房主妇、美妆博主、健身教练、户外探店、数码博主）。触发词：生成视频、带货视频、产品视频、拍视频、剧本... Skill: Huo15 Influencer Video Skill Owner: zhaobod1 Summary: 通过火山方舟Ark API调用Seedance 2.0生成第一人称带货短视频，v2 新增剧本驱动的配音（edge-tts/火山TTS）、背景音乐自动混音、字幕烧录，内置 8 套人设模板（传统女、时尚主播、老中医、厨房主妇、美妆博主、健身教练、户外探店、数码博主）。触发词：生成视频、带货视频、产品视频、拍视频、剧本... Tags: influencer:1.2.0, latest:2.0.0, social-media:1.2.0, video:1.2.0 Version history: v2.0.0 | 2026-04-27T11:34:35.819Z | user v2 大版本: 剧本驱动 + edge-tts/火山 TTS 配音 + ffmpeg 自动混 BGM + 字幕烧录 + 8 套人设模板(传统","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":875,"uniquenessScore":56,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T04:22:27.406Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T04:22:27.406Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T07:44:42.409Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}