{"id":"a139d596-34a2-4244-83a0-fa34d570b5fb","entityType":"agent","slug":"clawhub-qiuxiangxiang-libtv-skill-pro","name":"LibTV Skill Pro","canonicalUrl":"https://www.xpersona.co/agent/clawhub-qiuxiangxiang-libtv-skill-pro","canonicalPath":"/agent/clawhub-qiuxiangxiang-libtv-skill-pro","generatedAt":"2026-10-11T17:43:42.472Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T15:27:00.216Z","emptyReason":null},"description":"通过 LibTV (liblib.tv) AI 视频平台生成和编辑图片/视频的完整工具集。覆盖文生图/视频、图生图/视频、视频续写、风格迁移、局部编辑（把纸船换成爱心）、短剧/MV/TVC 制作、角色三视图、分镜设计、首尾帧视频、音频生视频。支持 Seedance 2.0 / Kling 3.0/O3 / Wan...","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s172sb9xfgn48px1kkrfvydn3986m7a5:libtv-skill-pro","sourceUrl":"https://clawhub.ai/qiuxiangxiang/libtv-skill-pro","homepage":"https://clawhub.ai/qiuxiangxiang/skills/libtv-skill-pro","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/qiuxiangxiang/libtv-skill-pro","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/qiuxiangxiang/skills/libtv-skill-pro","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":60,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"LibTV Skill Pro technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T15:27:00.216Z","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-11T15:27:00.216Z","emptyReason":null},"stars":null,"forks":null,"downloads":1040,"packageName":null,"latestVersion":"0.4.4","tractionLabel":"1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T15:27:00.200Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T15:27:00.216Z","lastCrawledAt":"2026-10-11T15:27:00.200Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T15:27:00.200Z","lastVerifiedAt":null,"highlights":[{"version":"0.4.4","createdAt":"2026-05-14T08:02:31.435Z","changelog":"0.4.4 — GitHub repo 重命名为 libtv-skill-pro（与 ClawHub slug 对齐）。GitHub 自带 redirect，旧 link 仍可用。无功能变更。","fileCount":29,"zipByteSize":56883},{"version":"0.4.3","createdAt":"2026-05-14T07:34:03.586Z","changelog":"0.4.3 — GitHub repo + 透明版本记录 新增： - GitHub 公开仓库（含 tests/ / CHANGELOG / INTEGRATIONS.md / cursor rule 等开发者文件，不发布到 ClawHub） - README.md 顶部加 GitHub stars / issues badges - SKILL.md fork-of 段加 Source / Issues 链接 版本记录（透明）： - 0.4.1：尝试在 CLI publish 时发送 icon 字段，服务端 schema 拒收。无功能变更。 - 0.4.2：再试一种 icon 格式，同样被拒。无功能变更。 - 结论：ClawHub CLI 不支持设 icon；只有 web 表单支持。","fileCount":28,"zipByteSize":55517},{"version":"0.4.2","createdAt":"2026-05-14T06:49:17.657Z","changelog":"0.4.2 — 再试一种 icon 格式","fileCount":28,"zipByteSize":55468},{"version":"0.4.1","createdAt":"2026-05-14T06:46:57.175Z","changelog":"0.4.1 — 添加 film 图标（lucide icon）；无功能变更","fileCount":28,"zipByteSize":55467},{"version":"0.4.0","createdAt":"2026-05-14T06:12:38.236Z","changelog":"0.4.0 — 公开推广就绪 + 架构升级 【新增 · 推广向】 - examples/ 5 个完整 case：生图 / 视频 / 编辑 / 多步链 / 批量 - README.md（GitHub 入口）+ LICENSE（MIT-0） - SKILL.md 精简 description 到 ~400 字（前 300 字聚焦关键词） - 增加「快速开始 3 分钟跑通」段落 + 决策树 + access key 获取链接 【新增 · 架构升级】 - libtv.py 统一入口（dispatcher）：python3 libtv.py {flow|node|edit|model|...} - --dry-run（flow / node / edit / model）：预览 prompt 不烧积分 - 结构化错误响应（_common.APIError + safe_run）：API 错误以 JSON 写 stderr，含 kind / http_code / message / raw - 错误 kind 枚举：INVALID_ACCESS_KEY / FORBIDDEN_OR_INSUFFICIENT_CREDITS / NOT_FOUND / TIMEOUT / RATE_LIMITED / SERVER_ERROR / NETWORK_ERROR 等 【Fixed】 - change_project.py 缺 argparse 导致 --help 直接调真 API - _common.py 不再在 import 时因缺 LIBTV_ACCESS_KEY 而 exit；改为延迟到 API 调用时抛 APIError 【Changed】 - emoji 由 💬 改为 🎬，配合 film 图标 - 全部调 API 脚本接入 safe_run wrapper - 总测试用例：73 离线 + 47 模板 = 120 全通 【Cleanup】 - 发布包不再含 .clawhub/origin.json（之前误发）+ _meta.json","fileCount":28,"zipByteSize":55468},{"version":"0.3.0","createdAt":"2026-05-13T17:07:42.807Z","changelog":"0.3.0 — LibTV 功能矩阵层 新增 4 个脚本覆盖 LibTV 画布上的完整功能矩阵： - flow.py：LibTV 首页 4 个预设流程（故事脚本生成 / 角色三视图 / 首帧图生视频 / 音频生视频） - node.py：文本/图片/视频节点的细分动作（文生视频提示词、图片反推、文字生音乐、图生图、图片高清、首尾帧、图片参考） - edit.py：节点修饰器（风格 / 标记 / 聚焦 / 运镜 / 角色库） - model.py：模型路由——列出 9 个已知模型（GVLM 3.1 / Lib Nano Pro / Seedance 2.0 VIP / Kling 3.0/O3 / Wan 2.6 / NanoBanana / Midjourney / Seedream 5.0），支持显式指定模型 + 参数（比例 / 分辨率 / 时长 / 数量）生成 每个脚本都内置精准 prompt 模板，将\"指定模型/参数/功能\"以自然语言放在 prompt 顶端发送给 LibTV IM 后端。 SKILL.md：新增第 13-16 节文档，新增「场景 8：按 LibTV 网页功能直接调用」工作流示例。","fileCount":19,"zipByteSize":42377},{"version":"0.2.0","createdAt":"2026-05-13T16:54:13.567Z","changelog":"0.2.0 — 首发 libtv-skill-pro（fork-of @haofanwang/libtv-skill@1.0.3） 在 @haofanwang/libtv-skill 6 个基础脚本之上扩展 7 个高级工作流脚本： - manage_project.py：list/current/switch/use/remove/describe 子命令 + ~/.libtv_projects.json 本地项目记录 - batch_create.py：并发批量创建生图/生视频任务 - monitor_session.py：实时监控会话进展（轮询/格式化/URL 提取） - quick_poll.py：简化版轮询，自动等待完成 - workflow_template.py：8 个预设模板（storyboard / character_design / short_drama / music_video 等） - export_results.py：导出 JSON / Markdown / HTML 报告 - session_history.py：会话历史管理 行为增强： - create_session.py / change_project.py 自动写入本地项目记录 - _common.py：change_project() 支持可选 projectUuid 参数","fileCount":15,"zipByteSize":31182}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s172sb9xfgn48px1kkrfvydn3986m7a5:libtv-skill-pro","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s172sb9xfgn48px1kkrfvydn3986m7a5:libtv-skill-pro` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/qiuxiangxiang/libtv-skill-pro before using production credentials."],"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-qiuxiangxiang-libtv-skill-pro/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-qiuxiangxiang-libtv-skill-pro/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-qiuxiangxiang-libtv-skill-pro/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-qiuxiangxiang-libtv-skill-pro/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-qiuxiangxiang-libtv-skill-pro/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-qiuxiangxiang-libtv-skill-pro/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-11T17:43:42.468Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-qiuxiangxiang-libtv-skill-pro/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-qiuxiangxiang-libtv-skill-pro/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-qiuxiangxiang-libtv-skill-pro/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-qiuxiangxiang-libtv-skill-pro/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":"medium","updatedAt":"2026-10-11T15:27:00.216Z","emptyReason":null},"readme":"Skill: LibTV Skill Pro\n\nOwner: qiuxiangxiang\n\nSummary: 通过 LibTV (liblib.tv) AI 视频平台生成和编辑图片/视频的完整工具集。覆盖文生图/视频、图生图/视频、视频续写、风格迁移、局部编辑（把纸船换成爱心）、短剧/MV/TVC 制作、角色三视图、分镜设计、首尾帧视频、音频生视频。支持 Seedance 2.0 / Kling 3.0/O3 / Wan...\n\nTags: agent-skill:0.4.4, aigc:0.4.4, chinese-ai:0.4.4, image-gen:0.4.4, latest:0.4.4, liblib:0.4.4, libtv:0.4.4, text-to-image:0.4.4, text-to-video:0.4.4, video:0.4.4\n\nVersion history:\n\nv0.4.4 | 2026-05-14T08:02:31.435Z | user\n\n0.4.4 — GitHub repo 重命名为 libtv-skill-pro（与 ClawHub slug 对齐）。GitHub 自带 redirect，旧 link 仍可用。无功能变更。\n\nv0.4.3 | 2026-05-14T07:34:03.586Z | user\n\n0.4.3 — GitHub repo + 透明版本记录\n\n新增：\n- GitHub 公开仓库（含 tests/ / CHANGELOG / INTEGRATIONS.md / cursor rule 等开发者文件，不发布到 ClawHub）\n- README.md 顶部加 GitHub stars / issues badges\n- SKILL.md fork-of 段加 Source / Issues 链接\n\n版本记录（透明）：\n- 0.4.1：尝试在 CLI publish 时发送 icon 字段，服务端 schema 拒收。无功能变更。\n- 0.4.2：再试一种 icon 格式，同样被拒。无功能变更。\n- 结论：ClawHub CLI 不支持设 icon；只有 web 表单支持。\n\nv0.4.2 | 2026-05-14T06:49:17.657Z | user\n\n0.4.2 — 再试一种 icon 格式\n\nv0.4.1 | 2026-05-14T06:46:57.175Z | user\n\n0.4.1 — 添加 film 图标（lucide icon）；无功能变更\n\nv0.4.0 | 2026-05-14T06:12:38.236Z | user\n\n0.4.0 — 公开推广就绪 + 架构升级\n\n【新增 · 推广向】\n- examples/ 5 个完整 case：生图 / 视频 / 编辑 / 多步链 / 批量\n- README.md（GitHub 入口）+ LICENSE（MIT-0）\n- SKILL.md 精简 description 到 ~400 字（前 300 字聚焦关键词）\n- 增加「快速开始 3 分钟跑通」段落 + 决策树 + access key 获取链接\n\n【新增 · 架构升级】\n- libtv.py 统一入口（dispatcher）：python3 libtv.py {flow|node|edit|model|...}\n- --dry-run（flow / node / edit / model）：预览 prompt 不烧积分\n- 结构化错误响应（_common.APIError + safe_run）：API 错误以 JSON 写 stderr，含 kind / http_code / message / raw\n- 错误 kind 枚举：INVALID_ACCESS_KEY / FORBIDDEN_OR_INSUFFICIENT_CREDITS / NOT_FOUND / TIMEOUT / RATE_LIMITED / SERVER_ERROR / NETWORK_ERROR 等\n\n【Fixed】\n- change_project.py 缺 argparse 导致 --help 直接调真 API\n- _common.py 不再在 import 时因缺 LIBTV_ACCESS_KEY 而 exit；改为延迟到 API 调用时抛 APIError\n\n【Changed】\n- emoji 由 💬 改为 🎬，配合 film 图标\n- 全部调 API 脚本接入 safe_run wrapper\n- 总测试用例：73 离线 + 47 模板 = 120 全通\n\n【Cleanup】\n- 发布包不再含 .clawhub/origin.json（之前误发）+ _meta.json\n\nv0.3.0 | 2026-05-13T17:07:42.807Z | user\n\n0.3.0 — LibTV 功能矩阵层\n\n新增 4 个脚本覆盖 LibTV 画布上的完整功能矩阵：\n\n- flow.py：LibTV 首页 4 个预设流程（故事脚本生成 / 角色三视图 / 首帧图生视频 / 音频生视频）\n- node.py：文本/图片/视频节点的细分动作（文生视频提示词、图片反推、文字生音乐、图生图、图片高清、首尾帧、图片参考）\n- edit.py：节点修饰器（风格 / 标记 / 聚焦 / 运镜 / 角色库）\n- model.py：模型路由——列出 9 个已知模型（GVLM 3.1 / Lib Nano Pro / Seedance 2.0 VIP / Kling 3.0/O3 / Wan 2.6 / NanoBanana / Midjourney / Seedream 5.0），支持显式指定模型 + 参数（比例 / 分辨率 / 时长 / 数量）生成\n\n每个脚本都内置精准 prompt 模板，将\"指定模型/参数/功能\"以自然语言放在 prompt 顶端发送给 LibTV IM 后端。\n\nSKILL.md：新增第 13-16 节文档，新增「场景 8：按 LibTV 网页功能直接调用」工作流示例。\n\nv0.2.0 | 2026-05-13T16:54:13.567Z | user\n\n0.2.0 — 首发 libtv-skill-pro（fork-of @haofanwang/libtv-skill@1.0.3）\n\n在 @haofanwang/libtv-skill 6 个基础脚本之上扩展 7 个高级工作流脚本：\n\n- manage_project.py：list/current/switch/use/remove/describe 子命令 + ~/.libtv_projects.json 本地项目记录\n- batch_create.py：并发批量创建生图/生视频任务\n- monitor_session.py：实时监控会话进展（轮询/格式化/URL 提取）\n- quick_poll.py：简化版轮询，自动等待完成\n- workflow_template.py：8 个预设模板（storyboard / character_design / short_drama / music_video 等）\n- export_results.py：导出 JSON / Markdown / HTML 报告\n- session_history.py：会话历史管理\n\n行为增强：\n- create_session.py / change_project.py 自动写入本地项目记录\n- _common.py：change_project() 支持可选 projectUuid 参数\n\nArchive index:\n\nArchive v0.4.4: 29 files, 56883 bytes\n\nFiles: CHANGELOG.md (3361b), examples/01-generate-image.md (1605b), examples/02-generate-video.md (1870b), examples/03-edit-with-reference.md (1733b), examples/04-character-to-video.md (2914b), examples/05-batch-images.md (2786b), examples/README.md (1341b), README.md (4744b), scripts/_common.py (7092b), scripts/batch_create.py (4279b), scripts/change_project.py (1281b), scripts/create_session.py (2024b), scripts/download_results.py (5233b), scripts/edit.py (4851b), scripts/export_results.py (7851b), scripts/flow.py (4706b), scripts/libtv.py (4023b), scripts/manage_project.py (6760b), scripts/model.py (6968b), scripts/monitor_session.py (6225b), scripts/node.py (7081b), scripts/query_session.py (1685b), scripts/quick_poll.py (4284b), scripts/session_history.py (6624b), scripts/upload_file.py (3531b), scripts/workflow_template.py (4864b), skill-card.md (2660b), SKILL.md (12343b), _meta.json (134b)\n\nFile v0.4.4:SKILL.md\n\n---\nname: libtv-skill-pro\ndescription: 通过 LibTV (liblib.tv) AI 视频平台生成和编辑图片/视频的完整工具集。覆盖文生图/视频、图生图/视频、视频续写、风格迁移、局部编辑（把纸船换成爱心）、短剧/MV/TVC 制作、角色三视图、分镜设计、首尾帧视频、音频生视频。支持 Seedance 2.0 / Kling 3.0/O3 / Wan 2.6 / Nano Banana / Midjourney / Seedream 5.0 / Lib Nano Pro / GVLM 3.1 等模型，可显式指定模型+参数（比例/分辨率/时长）。Pro 版扩展批量并发、轮询监控、工作流模板、结果导出、会话历史、项目管理、统一入口、dry-run 预览、结构化错误。触发词：画一个/生成/做一个/帮我做、liblib/libtv/aigc、视频/图片/MV/TVC/短剧/分镜/动漫/海报、AI 视频/图片生成、画/生成一张/一段。\nuser-invocable: true\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"🎬\",\n        \"requires\":\n          {\n            \"bins\": [\"python3\"],\n            \"env\": [\"LIBTV_ACCESS_KEY\"]\n          },\n        \"primaryEnv\": \"LIBTV_ACCESS_KEY\"\n      }\n  }\n---\n\n# libtv-skill-pro\n\n> Fork of [@haofanwang/libtv-skill](https://clawhub.ai/haofanwang/libtv-skill) — 在原版基础上扩展高级工作流与功能矩阵层。Source / Issues: https://github.com/Qiuxiangxiang/libtv-skill-pro\n\nLibTV (liblib.tv) 是 LiblibAI 推出的 AI 视频创作平台。本 skill 让 Agent 通过统一入口 `libtv.py` 完成生成 / 编辑 / 修饰 / 模型路由的全链路。\n\n## 快速开始（3 分钟跑通第一个 case）\n\n```bash\n# 1. 拿 access key：https://www.liblib.tv → 用户中心 → API / 开发者\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# 2. 看完整命令清单\npython3 {baseDir}/scripts/libtv.py --help\n\n# 3. 跑第一个 case（dry-run 预览，不烧积分）\npython3 {baseDir}/scripts/libtv.py model with lib-nano-pro \\\n  \"白色短毛猫坐在窗台上\" --ratio 1:1 --resolution 2K --dry-run\n\n# 4. 去掉 --dry-run 真实生成（≈14 积分，≈60s）\npython3 {baseDir}/scripts/libtv.py model with lib-nano-pro \\\n  \"白色短毛猫坐在窗台上\" --ratio 1:1 --resolution 2K\n# → 返回 sessionId，再用 poll 等结果，download 取本地\n\npython3 {baseDir}/scripts/libtv.py poll <SESSION_ID>\npython3 {baseDir}/scripts/libtv.py download <SESSION_ID> --output-dir ~/Downloads/cat\n```\n\n5 个完整 case 见 `examples/`（图像 / 视频 / 编辑 / 多步链 / 批量）。\n\n## 推荐入口：`libtv.py <subcommand>`\n\n所有功能聚合在一个入口，Agent 路由更顺：\n\n```\npython3 libtv.py flow       <preset> \"<topic>\" [--ref URL]\npython3 libtv.py node       <action> \"<topic>\" [--ref URL]\npython3 libtv.py edit       <modifier> \"<desc>\" [--target URL] [--session-id SID]\npython3 libtv.py model      list|with <model> \"<prompt>\" [params]\n\npython3 libtv.py session    \"<message>\"               # 创建会话/发消息（底层）\npython3 libtv.py query      <SID>                     # 查询会话进展\npython3 libtv.py upload     <local_file>              # 上传到 OSS\npython3 libtv.py download   <SID> [--output-dir DIR]  # 下载结果\n\npython3 libtv.py batch      --file tasks.txt --workers 5\npython3 libtv.py monitor    <SID> --poll --extract-urls\npython3 libtv.py poll       <SID>\npython3 libtv.py template   <name> \"<topic>\"\npython3 libtv.py export     <SID> --format html\npython3 libtv.py history    list|add|show|get|remove\npython3 libtv.py project    list|current|switch|use|remove|describe\n```\n\n> 旧路径 `python3 scripts/<name>.py ...` 仍可用（向后兼容）。新代码统一用 `libtv.py`。\n\n## 决策树（路由判断）\n\n收到用户需求时，按以下顺序匹配：\n\n| 用户输入 | 走哪条路径 |\n|---|---|\n| 用户提供了本地文件（图/视频/音频路径）| 先 `upload` 拿 OSS URL，再发到下一步 |\n| 模糊一句话「画只猫 / 做个 MV」 | `session` 让后端 Agent 路由（最省心）|\n| 明确想要 LibTV 某个入口（\"做个角色三视图\"）| `flow <preset>` |\n| 明确想用某个模型（\"用 Seedance 出视频\"）| `model with <model>` |\n| 想在已生成内容上改风格 / 加运镜 | `edit <modifier> --session-id SID` |\n| 一次发 10+ 任务 | `batch --file tasks.txt --workers 5` |\n| 完整短剧 / MV / 角色设计预设 | `template <name>` |\n| 等结果 / 查进度 | `poll`（简单等）或 `monitor`（看过程）|\n| 取结果 | `download <SID>` |\n\n**永远先 `--dry-run` 预览**：每个生成类子命令（flow/node/edit/model）都支持 `--dry-run`，会输出 JSON 显示 will-send prompt 而不调 API。\n\n## 已知模型（用 `libtv.py model list` 查最新）\n\n| 类型 | 模型 | 适用 |\n|---|---|---|\n| LLM | gvlm-3.1 | 剧本/广告词/品牌文案/提示词改写 |\n| 图像 | lib-nano-pro | 快速生图、图生图、高清化 |\n| 图像 | nano-banana | 平面海报/插画（Google Gemini 系） |\n| 图像 | midjourney | 美学风/插画/海报 |\n| 图像 | seedream-5.0 | 写实/电影感（豆包系） |\n| 视频 | seedance-2.0-vip | 文生/图生视频、短片（默认） |\n| 视频 | kling-3.0 | 写实人像、动作连贯 |\n| 视频 | kling-o3 | 高质量长视频 |\n| 视频 | wan-2.6 | 多镜头长视频（通义万相） |\n\n模型参数：`--ratio 16:9` `--resolution 720P|2K` `--duration 5s` `--count \"1张\"`\n\n## 错误响应（v0.4.0+ 结构化）\n\n所有 API 错误以 JSON 写到 stderr，便于 Agent 程序化处理：\n\n```json\n{\n  \"error\": {\n    \"kind\": \"INVALID_ACCESS_KEY\",\n    \"http_code\": 401,\n    \"message\": \"accessKey 不存在或无效\",\n    \"raw\": \"{...}\"\n  }\n}\n```\n\n错误 kind 清单：`INVALID_ACCESS_KEY` / `FORBIDDEN_OR_INSUFFICIENT_CREDITS` / `NOT_FOUND` / `TIMEOUT` / `RATE_LIMITED` / `SERVER_ERROR` / `BAD_GATEWAY` / `SERVICE_UNAVAILABLE` / `GATEWAY_TIMEOUT` / `NETWORK_ERROR` / `INTERRUPTED` / `UNKNOWN`。\n\n## 16 类能力详解\n\n详细说明继续保留以便深度使用，但**优先看 `examples/` 和决策树**。\n\n### 1. 创建会话 / 发送消息 — `libtv.py session`\n\n```bash\n# 自然语言发消息（后端 Agent 自己路由模型）\npython3 libtv.py session \"生一个动漫视频\"\n\n# 续聊已有会话\npython3 libtv.py session \"再来一张风景图\" --session-id SID\n```\n\n### 2. 查询会话进展 — `libtv.py query`\n\n```bash\npython3 libtv.py query SID --after-seq 5       # 增量拉取\npython3 libtv.py query SID --project-id PUUID  # 附带项目地址\n```\n\n### 3. 上传文件 — `libtv.py upload`\n\n支持图片 / 视频，≤ 200MB。返回 OSS URL。\n\n```bash\npython3 libtv.py upload /path/to/image.png\npython3 libtv.py upload /path/to/video.mp4\n```\n\n### 4. 下载结果 — `libtv.py download`\n\n```bash\npython3 libtv.py download SID --output-dir ~/Downloads/proj --prefix scene\npython3 libtv.py download --urls URL1 URL2 --output-dir ./out   # 直接给 URL 列表\n```\n\n### 5. 批量任务 — `libtv.py batch`\n\n```bash\npython3 libtv.py batch --file tasks.txt --workers 5 --output result.json\npython3 libtv.py batch -m \"猫\" -m \"狗\" -m \"鸟\"\n```\n\n### 6. 实时监控 — `libtv.py monitor`\n\n```bash\npython3 libtv.py monitor SID --poll --interval 15 --extract-urls\npython3 libtv.py monitor SID --poll --format json --output log.json\n```\n\n### 7. 简化轮询 — `libtv.py poll`\n\n```bash\npython3 libtv.py poll SID                            # 默认 8s 间隔，10 分钟超时\npython3 libtv.py poll SID --interval 5 --timeout 300\npython3 libtv.py poll SID --quiet                    # 只输出最终结果\n```\n\n### 8. 工作流模板 — `libtv.py template`\n\n```bash\npython3 libtv.py template --list\npython3 libtv.py template storyboard \"科幻城市的故事\"\npython3 libtv.py template short_drama \"友情故事\"\npython3 libtv.py template music_video \"悲伤钢琴曲\"\n```\n\n8 个模板：storyboard / character_design / video_generation / image_generation / style_transfer / short_drama / music_video / product_showcase\n\n### 9. 结果导出 — `libtv.py export`\n\n```bash\npython3 libtv.py export SID --format html --output report.html\npython3 libtv.py export SID --format markdown --output report.md\npython3 libtv.py export SID --urls-only\n```\n\n### 10. 会话历史 — `libtv.py history`\n\n```bash\npython3 libtv.py history list\npython3 libtv.py history add SID --desc \"项目描述\"\npython3 libtv.py history get 1     # 拿到 sessionId（脚本用）\npython3 libtv.py history remove 1\n```\n\n### 11. 项目管理 — `libtv.py project`\n\n```bash\npython3 libtv.py project list                # 列本地记录\npython3 libtv.py project current             # 当前项目\npython3 libtv.py project switch --desc \"短剧 A\"   # 创建新项目\npython3 libtv.py project use PUUID           # 切到指定项目\npython3 libtv.py project describe PUUID \"MV\"\npython3 libtv.py project remove PUUID\n```\n\n本地状态：`~/.libtv_projects.json`。\n\n### 12. 预设流程 — `libtv.py flow`\n\n```bash\npython3 libtv.py flow story_script \"机器人来到唐朝\"\npython3 libtv.py flow character_views \"穿汉服的赛博朋克少女\"\npython3 libtv.py flow keyframe_to_video \"拔剑出鞘\" --ref OSS_URL\npython3 libtv.py flow audio_to_video \"暗黑风 MV\" --ref OSS_URL\n```\n\n### 13. 节点能力 — `libtv.py node`\n\n```bash\n# 文本节点\npython3 libtv.py node text_to_video_prompt \"一只猫在屋顶看月亮\"\npython3 libtv.py node image_caption --ref IMG_URL\npython3 libtv.py node text_to_music \"悲伤、钢琴、60秒\"\n\n# 图片节点\npython3 libtv.py node image_to_image \"改赛博朋克风\" --ref IMG_URL\npython3 libtv.py node image_upscale --ref IMG_URL\n\n# 视频节点\npython3 libtv.py node first_last_frame \"拔剑过程\" --ref start.png --ref2 end.png\npython3 libtv.py node reference_video \"保留主体演绎新场景\" --ref ref.png\n```\n\n### 14. 修饰器 — `libtv.py edit`\n\n```bash\npython3 libtv.py edit style \"宫崎骏吉卜力\" --target URL --session-id SID\npython3 libtv.py edit camera \"无人机环绕\" --target \"场景\" --session-id SID\npython3 libtv.py edit character_lib \"孙悟空\" --target \"花果山\" --session-id SID\npython3 libtv.py edit mark \"纸船换爱心\" --target URL --session-id SID\npython3 libtv.py edit focus \"右上角月亮\" --target URL --session-id SID\n```\n\n### 15. 模型路由 — `libtv.py model`\n\n```bash\npython3 libtv.py model list\npython3 libtv.py model list --kind video\npython3 libtv.py model with seedance-2.0-vip \"...\" --ratio 16:9 --duration 5s\npython3 libtv.py model with lib-nano-pro \"...\" --ratio 1:1 --resolution 2K\n```\n\n### 16. dry-run（v0.4.0+）\n\n所有生成类子命令（flow/node/edit/model）支持 `--dry-run`：输出将发送的 prompt 但**不调 API、不烧积分**。\n\n```bash\npython3 libtv.py flow story_script \"...\" --dry-run\npython3 libtv.py model with seedance-2.0-vip \"...\" --duration 5s --dry-run\n```\n\n## 用户侧 Agent 的核心原则\n\n你（用户侧 Agent）是**搬运工**，不是创作者。后端 LibTV Agent 有专业的模型选择 / prompt 工程 / 工作流编排能力。\n\n- **能传话就别替用户写 prompt**：用户说\"帮我推演分镜\"，就调 `session \"帮我推演分镜\"`，不要自己先编个分镜表\n- **能用 `flow`/`model` 显式入口就别让后端猜**：用户说\"用 Seedance 做 5 秒视频\"时，直接 `model with seedance-2.0-vip --duration 5s`\n- **永远先 `--dry-run` 检查 prompt**：调真 API 前一次 dry-run 能省很多冤枉积分\n- **下载到本地后向用户展示**：results URL + projectUrl 两个都给\n\n## 输出格式（v0.4.0+ 全 JSON）\n\n所有 stdout 输出都是 JSON，便于 Agent 程序化解析：\n\n```json\n// session / flow / node / edit / model 等生成类\n{\"projectUuid\":\"...\", \"sessionId\":\"...\", \"projectUrl\":\"...\", \"message_sent\":\"...\"}\n\n// dry-run\n{\"dry_run\":true, \"preset\":\"...\", \"would_send\":\"...\", ...}\n\n// list 类（model list / project list / history list 等仍输出表格，便于人类查看）\n```\n\n错误以 JSON 写 stderr（见上面\"错误响应\"）。\n\n## 注意事项\n\n- 鉴权方式：`Authorization: Bearer <LIBTV_ACCESS_KEY>`\n- 项目画布地址：`https://www.liblib.tv/canvas?projectId=<projectUuid>`\n- 上传 OSS 地址格式：`https://libtv-res.liblib.art/claw/{projectUuid}/{uuid}{ext}`\n- 文件大小限制：200MB\n- 生成中只给用户\"正在生成\"提示；完成后同时给 **结果 URL + projectUrl**\n- 本地状态：`~/.libtv_projects.json`（项目）+ `~/.libtv_session_history.json`（会话历史）\n\nFile v0.4.4:examples/README.md\n\n# Examples\n\n5 个典型 case，按\"难度 / 积分 / 耗时\"排列。建议第一次用按 01 → 02 → 03 → 04 → 05 顺序看。\n\n| # | 场景 | 命令风格 | 积分 | 耗时 | 难度 |\n|---|---|---|---|---|---|\n| [01](./01-generate-image.md) | 生一张猫图（最小路径）| `model with lib-nano-pro` | ≈14 | ≈60s | ⭐ |\n| [02](./02-generate-video.md) | 生一段 5s 视频 | `model with seedance-2.0-vip` | ≈135 | 5-8 min | ⭐⭐ |\n| [03](./03-edit-with-reference.md) | 把纸船换成爱心（局部编辑）| `upload` + `edit mark` | ≈14-20 | ≈90s | ⭐⭐ |\n| [04](./04-character-to-video.md) | 角色三视图 → 首帧图生视频 | `flow character_views` + `flow keyframe_to_video` + `edit camera` | ≈150 | ≈10 min | ⭐⭐⭐ |\n| [05](./05-batch-images.md) | 并发批量 10 张图 + HTML 报告 | `batch` + `export html` | ≈140 | ≈2 min | ⭐⭐ |\n\n## 跑这些 example 前\n\n1. **设置 API key**：\n   ```bash\n   export LIBTV_ACCESS_KEY=your_key_here\n   ```\n   key 从 [LibTV 用户中心](https://www.liblib.tv) 获取（个人设置 → API / 开发者）。\n\n2. **dry-run 先看 prompt**：每个 case 第一步都有 `--dry-run`，跑完确认 prompt 没问题再去掉它正式生成。可以省下大量积分。\n\n3. **从最便宜的 01 开始**：14 积分一张图，跑通了再去 02。\n\nFile v0.4.4:README.md\n\n# libtv-skill-pro\n\n> 🎬 LibTV (liblib.tv) AI 视频/图像生成平台的 OpenClaw / ClawHub skill。Pro 版在 [@haofanwang/libtv-skill](https://clawhub.ai/haofanwang/libtv-skill) 基础上扩展高级工作流与功能矩阵层。\n\n[![ClawHub](https://img.shields.io/badge/ClawHub-libtv--skill--pro-orange)](https://clawhub.ai/qiuxiangxiang/libtv-skill-pro)\n[![GitHub stars](https://img.shields.io/github/stars/Qiuxiangxiang/libtv-skill-pro?style=social)](https://github.com/Qiuxiangxiang/libtv-skill-pro)\n[![GitHub issues](https://img.shields.io/github/issues/Qiuxiangxiang/libtv-skill-pro)](https://github.com/Qiuxiangxiang/libtv-skill-pro/issues)\n[![License](https://img.shields.io/badge/license-MIT--0-blue)](LICENSE)\n\n## 是什么\n\n让 Agent（OpenClaw / Claude Code / 其他 ClawHub-compatible 客户端）通过统一入口调用 LibTV 平台的 AI 创作能力：\n\n- **生成**：文生图/视频、图生图/视频、首尾帧视频、音频驱动视频\n- **编辑**：局部修改（\"把纸船换成爱心\"）、风格迁移、运镜调整\n- **多模型路由**：Seedance 2.0 / Kling 3.0/O3 / Wan 2.6 / Nano Banana / Midjourney / Seedream 5.0 / Lib Nano Pro / GVLM 3.1\n- **工作流**：批量并发、轮询监控、8 个预设模板（短剧/MV/角色设计/分镜...）、HTML 报告导出\n- **dry-run 预览**：所有生成类命令支持 `--dry-run`，预览 prompt 不烧积分\n- **结构化错误**：API 错误以 JSON 输出，Agent 程序化可处理\n\n## 安装\n\n### 方式 1：通过 ClawHub（推荐）\n\n```bash\nopenclaw skills install libtv-skill-pro\n```\n\n### 方式 2：从这个仓库克隆\n\n```bash\ngit clone https://github.com/Qiuxiangxiang/libtv-skill-pro.git ~/.agents/skills/libtv-skill-pro\n```\n\n## 快速开始\n\n```bash\n# 1. 拿 access key：https://www.liblib.tv → 用户中心 → API\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# 2. 看命令清单\npython3 scripts/libtv.py --help\n\n# 3. dry-run 预览（不烧积分）\npython3 scripts/libtv.py model with lib-nano-pro \\\n  \"白色短毛猫坐在窗台上\" --ratio 1:1 --resolution 2K --dry-run\n\n# 4. 真实生成 + 轮询 + 下载\npython3 scripts/libtv.py model with lib-nano-pro \"...\" --ratio 1:1\npython3 scripts/libtv.py poll SESSION_ID\npython3 scripts/libtv.py download SESSION_ID --output-dir ~/Downloads/cat\n```\n\n完整示例见 [`examples/`](./examples/)（5 个递进难度的 case）。\n\n## 命令地图\n\n```\nlibtv.py flow      预设流程（故事脚本/角色三视图/首帧图生视频/音频生视频）\nlibtv.py node      节点能力（文本/图片/视频节点细分动作）\nlibtv.py edit      修饰器（风格/标记/聚焦/运镜/角色库）\nlibtv.py model     模型路由（list 已知模型 / with 指定模型生成）\n\nlibtv.py session   创建会话/发消息       libtv.py query   查询会话进展\nlibtv.py upload    上传图片/视频         libtv.py download 下载结果\n\nlibtv.py batch     并发批量任务          libtv.py monitor 实时监控\nlibtv.py poll      简化轮询              libtv.py template 预设工作流模板\nlibtv.py export    导出 HTML/MD/JSON     libtv.py history 会话历史\nlibtv.py project   项目管理\n```\n\n17 个独立脚本（`scripts/*.py`）仍可单独调用（向后兼容）。\n\n## 跟原版的关系\n\n| | @haofanwang/libtv-skill | @qiuxiangxiang/libtv-skill-pro |\n|---|---|---|\n| 基础脚本 | 6 个 | 6 个（保留原版） |\n| 高级工作流 | — | 7 个（batch/monitor/poll/template/export/history/project） |\n| LibTV 功能矩阵 | — | 4 个（flow/node/edit/model） |\n| 统一入口 | — | libtv.py |\n| dry-run 预览 | — | ✓ |\n| 结构化错误 | — | ✓ |\n\n如果你只需要\"自然语言一句话路由\"的极简体验，原版 6 脚本足够。Pro 版面向**批量、精细控制、Agent 程序化集成**场景。\n\n## 测试\n\n```bash\n# 离线（5 秒，不烧积分，120 个用例）\nbash tests/test_offline.sh && python3 tests/test_templates.py\n\n# 在线（按开关计费）\nONLINE_SESSION=1 bash tests/test_online.sh    # ≈0 积分\nONLINE_IMAGE=1   bash tests/test_online.sh    # ≈14 积分\nONLINE_VIDEO=1   bash tests/test_online.sh    # ≈135 积分\n```\n\n详细测试矩阵见 [`tests/README.md`](./tests/README.md)。\n\n## 贡献\n\n发现 bug 或想加新功能：\n\n1. Issue 描述场景 + 预期 vs 实际\n2. PR 前请跑通 `bash tests/test_offline.sh && python3 tests/test_templates.py`\n3. 新功能请同时在 `tests/` 加用例 + 在 `examples/` 加 case\n\n## License\n\nMIT-0（与原版一致）。\n\n## 致谢\n\n- [@haofanwang/libtv-skill](https://clawhub.ai/haofanwang/libtv-skill) — 原版基础架构\n- [LibTV (liblib.tv)](https://www.liblib.tv) — AI 视频创作平台\n- [ClawHub](https://clawhub.ai) — Agent skill 分发\n\nFile v0.4.4:_meta.json\n\n{\n  \"ownerId\": \"kn75javp82ghpk79s61mfbp3bx81vsnj\",\n  \"slug\": \"libtv-skill-pro\",\n  \"version\": \"0.4.4\",\n  \"publishedAt\": 1778745751435\n}\n\nFile v0.4.4:CHANGELOG.md\n\n# Changelog\n\n## [0.4.0] - 2026-05-14（即将发布）\n\n**主题：公开推广就绪 + 架构升级**\n\n### Added — 推广向\n- `examples/` 5 个完整 case：生图 / 视频 / 编辑 / 多步链 / 批量\n- `README.md`（GitHub 入口）+ `LICENSE`（MIT-0）+ `.gitignore`\n- `CHANGELOG.md` 正式纳入版本管理\n- 公开 GitHub 仓库（信任来源 / issue / PR）\n- SKILL.md frontmatter description 精简到 ~400 字，前 300 字聚焦关键词（搜索能见度）\n- SKILL.md 增加「快速开始 3 分钟跑通」段落 + 决策树 + LibTV access key 获取链接\n\n### Added — 架构升级\n- `libtv.py` 统一入口（dispatcher）—— Agent 只需记一个命令：`libtv.py {flow|node|edit|model|...}`\n- `--dry-run` 标志（flow / node / edit / model）—— 预览将发送的 prompt，不调 API、不烧积分\n- 结构化错误响应（`_common.APIError` + `safe_run` wrapper）—— 所有 API 错误以 JSON 写 stderr，含 kind / http_code / message / raw\n- 错误 kind 枚举：INVALID_ACCESS_KEY / FORBIDDEN_OR_INSUFFICIENT_CREDITS / NOT_FOUND / TIMEOUT / RATE_LIMITED / SERVER_ERROR / NETWORK_ERROR / INTERRUPTED / UNKNOWN\n\n### Fixed\n- `change_project.py` 缺 argparse 导致 `--help` 直接调真 API（之前发版前发现的 bug）\n- `_common.py` 不再在 import 时因缺 LIBTV_ACCESS_KEY 而 `sys.exit(1)`——改为延迟到首次实际调用 API 时抛 `APIError`，让 `--help` 在任何情况下都可用\n\n### Changed\n- 所有调 API 的脚本都接入 `safe_run(main)` wrapper\n- frontmatter emoji 由 💬 改为 🎬（配合 film 图标）\n- tests/test_offline.sh 增加 1b（libtv.py 入口）+ 1c（dry-run 验证）共 20 个新用例\n- 总测试用例：73 离线 + 47 模板 = **120 全通**\n\n### Cleanup\n- 发布前清掉 workspace 的 `.clawhub/origin.json`（之前误发）\n- `_meta.json` 不打包进发布\n\n---\n\n## [0.3.0] - 2026-05-13\n\n**LibTV 功能矩阵层**（slug: libtv-skill-pro，fork-of @haofanwang/libtv-skill@1.0.3）\n\n新增 4 个脚本覆盖 LibTV 画布上的完整功能矩阵：\n\n- `flow.py` — LibTV 首页 4 个预设流程（story_script / character_views / keyframe_to_video / audio_to_video）\n- `node.py` — 文本/图片/视频节点的细分动作（text_to_video_prompt / image_caption / text_to_music / image_to_image / image_upscale / first_last_frame / reference_video）\n- `edit.py` — 节点修饰器（style / mark / focus / camera / character_lib）\n- `model.py` — 模型路由（list 9 个已知模型 + with 显式指定模型+参数）\n\nSKILL.md 第 13–16 节文档，新增「场景 8：按 LibTV 网页功能直接调用」工作流示例。\n\n## [0.2.0] - 2026-05-13\n\n**首发 libtv-skill-pro**（fork-of @haofanwang/libtv-skill@1.0.3）\n\n在原版 6 个基础脚本之上扩展 7 个高级工作流脚本：\n\n- `manage_project.py`（list/current/switch/use/remove/describe + `~/.libtv_projects.json` 本地项目记录）\n- `batch_create.py`（并发批量任务）\n- `monitor_session.py`（实时监控）\n- `quick_poll.py`（简化轮询）\n- `workflow_template.py`（8 个预设模板）\n- `export_results.py`（导出 JSON / Markdown / HTML）\n- `session_history.py`（会话历史管理）\n\n行为增强：\n- `create_session.py` / `change_project.py` 自动写入本地项目记录\n- `_common.py`：`change_project()` 支持可选 `projectUuid` 参数\n\nFile v0.4.4:examples/01-generate-image.md\n\n# Example 01：生一张猫图（最小路径）\n\n**积分消耗**：≈14 · **耗时**：≈60s · **难度**：⭐\n\n最简单的端到端：从输入到本地图片 4 个命令搞定。\n\n## 用户需求\n\n「生一张白色短毛猫坐在窗台上的图，1:1 比例，2K 分辨率，用 lib-nano-pro 模型」\n\n## 命令链\n\n```bash\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# 1. 预览将发送的 prompt（不烧积分）\npython3 scripts/libtv.py model with lib-nano-pro \\\n  \"白色短毛猫坐在窗台上\" \\\n  --ratio 1:1 --resolution 2K --count \"1张\" \\\n  --dry-run\n\n# 2. 真实生成\nRESULT=$(python3 scripts/libtv.py model with lib-nano-pro \\\n  \"白色短毛猫坐在窗台上\" \\\n  --ratio 1:1 --resolution 2K --count \"1张\")\necho \"$RESULT\"\nSID=$(echo \"$RESULT\" | python3 -c \"import sys,json; print(json.loads(sys.stdin.read())['sessionId'])\")\n\n# 3. 轮询等待完成（默认 8s 间隔，10 分钟超时）\npython3 scripts/libtv.py poll \"$SID\"\n\n# 4. 下载到本地\npython3 scripts/libtv.py download \"$SID\" --output-dir ~/Downloads/cat --prefix cat\n```\n\n## 预期输出\n\n- 一张 2K PNG/JPG 保存在 `~/Downloads/cat/cat_01.png`\n- 一个 `projectUrl`，浏览器打开可以看 LibTV 项目画布\n\n## 常见故障\n\n| 现象 | 错误 kind | 解决 |\n|---|---|---|\n| 第 2 步 401 | `INVALID_ACCESS_KEY` | 检查 `LIBTV_ACCESS_KEY` 是否正确 |\n| 第 2 步 403 | `FORBIDDEN_OR_INSUFFICIENT_CREDITS` | 积分不足，去 LibTV 充值 |\n| 第 3 步超时 | — | 后端慢，去 `projectUrl` 画布上手动看结果 |\n| 第 4 步空 | — | 会话里还没有结果 URL，再等一会儿重跑 |\n\nFile v0.4.4:examples/02-generate-video.md\n\n# Example 02：用 Seedance 生一段 5 秒视频\n\n**积分消耗**：≈135 · **耗时**：5-8 min · **难度**：⭐⭐\n\n文生视频，指定模型 + 参数。\n\n## 用户需求\n\n「用 Seedance 2.0 VIP 生成一段 5 秒、16:9、720P 的视频：黄昏草原上一只白马奔跑」\n\n## 命令链\n\n```bash\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# 1. 预览（强烈建议先 dry-run 检查参数是否传对）\npython3 scripts/libtv.py model with seedance-2.0-vip \\\n  \"黄昏草原上一只白马奔跑，阳光金黄，长鬃飘动\" \\\n  --ratio 16:9 --resolution 720P --duration 5s --count \"1个\" \\\n  --dry-run\n\n# 2. 真实生成\nRESULT=$(python3 scripts/libtv.py model with seedance-2.0-vip \\\n  \"黄昏草原上一只白马奔跑，阳光金黄，长鬃飘动\" \\\n  --ratio 16:9 --resolution 720P --duration 5s --count \"1个\")\nSID=$(echo \"$RESULT\" | python3 -c \"import sys,json; print(json.loads(sys.stdin.read())['sessionId'])\")\n\n# 3. 视频生成慢，用 monitor 看进度（15s 间隔）\npython3 scripts/libtv.py monitor \"$SID\" --poll --interval 15 --extract-urls --timeout 600\n\n# 4. 下载\npython3 scripts/libtv.py download \"$SID\" --output-dir ~/Downloads/horse --prefix horse\n\n# 5. 加到会话历史（方便以后用 history list 找到）\npython3 scripts/libtv.py history add \"$SID\" --desc \"Seedance 白马奔跑 5s\"\n```\n\n## 预期输出\n\n- `~/Downloads/horse/horse_01.mp4`（约 5 秒、16:9、720P）\n- 项目画布链接（可在 LibTV 网页上分享/编辑）\n\n## 模型选择参考\n\n| 想要 | 推荐模型 | 参数 |\n|---|---|---|\n| 快速预览 / 测试 prompt | `seedance-2.0-vip` | 720P, 5s |\n| 写实人像、动作连贯 | `kling-3.0` | 1080P, 5-10s |\n| 长视频、高质量 | `kling-o3` | 1080P, 10s |\n| 多镜头、复杂场景 | `wan-2.6` | 1080P, 任意 |\n\n用 `python3 scripts/libtv.py model list --kind video` 查全部视频模型。\n\nFile v0.4.4:examples/03-edit-with-reference.md\n\n# Example 03：基于参考图编辑（\"把纸船换成爱心\"）\n\n**积分消耗**：≈14-20 · **耗时**：≈90s · **难度**：⭐⭐\n\n用户拿一张图，要求局部编辑——这是 LibTV 的典型场景。\n\n## 用户需求\n\n「这张图（本地路径 `~/Desktop/origin.png`）里，把所有纸船换成白色纸爱心，保持其他不变」\n\n## 命令链\n\n```bash\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# 1. 先把本地图片上传到 LibTV OSS\nUPLOAD=$(python3 scripts/libtv.py upload ~/Desktop/origin.png)\necho \"$UPLOAD\"\nOSS_URL=$(echo \"$UPLOAD\" | python3 -c \"import sys,json; print(json.loads(sys.stdin.read())['url'])\")\n\n# 2. 用 edit.py mark（局部标记修改）+ OSS URL\nRESULT=$(python3 scripts/libtv.py edit mark \\\n  \"把画面里所有纸船的区域换成白色纸爱心，其他保持不变\" \\\n  --target \"$OSS_URL\")\nSID=$(echo \"$RESULT\" | python3 -c \"import sys,json; print(json.loads(sys.stdin.read())['sessionId'])\")\n\n# 3. 轮询\npython3 scripts/libtv.py poll \"$SID\" --interval 8 --timeout 300\n\n# 4. 下载\npython3 scripts/libtv.py download \"$SID\" --output-dir ~/Desktop/edited\n```\n\n## 替代方案：用 node.py image_to_image\n\n如果是整张图的风格/内容大改（不只是局部），用 image_to_image：\n\n```bash\npython3 scripts/libtv.py node image_to_image \\\n  \"把画面整体改成赛博朋克风\" \\\n  --ref \"$OSS_URL\"\n```\n\n## 修饰器选择\n\n| 用户描述 | 推荐 modifier |\n|---|---|\n| \"把 X 换成 Y\" / \"去掉 X\" / \"加上 X\" | `mark` |\n| \"改成 X 风格\" / \"做成卡通\" / \"宫崎骏感觉\" | `style` |\n| \"强调右上角\" / \"聚焦在人物\" | `focus` |\n| \"用环绕镜头\" / \"推镜头\" / \"希区柯克变焦\" | `camera` |\n| \"用孙悟空作为角色\" | `character_lib` |\n\nFile v0.4.4:examples/04-character-to-video.md\n\n# Example 04：角色三视图 → 首帧图生视频（多步链）\n\n**积分消耗**：≈150 · **耗时**：≈10 min · **难度**：⭐⭐⭐\n\n经典工作流：先做角色 IP 资产，再用其中一张作为视频首帧。\n\n## 用户需求\n\n「我要做一个穿汉服的赛博朋克少女角色，先出三视图，然后用正面图做首帧生成一段她在霓虹街道行走的 5 秒视频」\n\n## 命令链\n\n```bash\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# ─── 第一段：角色三视图 ───\nSTEP1=$(python3 scripts/libtv.py flow character_views \\\n  \"穿汉服的赛博朋克少女，银发，红色机械义眼，唐风刺绣旗袍混搭金属护甲\")\nSID=$(echo \"$STEP1\" | python3 -c \"import sys,json; print(json.loads(sys.stdin.read())['sessionId'])\")\nPROJECT=$(echo \"$STEP1\" | python3 -c \"import sys,json; print(json.loads(sys.stdin.read())['projectUrl'])\")\n\necho \"角色生成中，画布：$PROJECT\"\npython3 scripts/libtv.py poll \"$SID\" --interval 8 --timeout 300\n\n# 下载三视图\npython3 scripts/libtv.py download \"$SID\" --output-dir ~/Downloads/character --prefix view\n# 应该会拿到 view_01.png（正面）/ view_02.png（侧面）/ view_03.png（背面）\n\n# ─── 第二段：上传正面图作为首帧 ───\nUPLOAD=$(python3 scripts/libtv.py upload ~/Downloads/character/view_01.png)\nFRAME_URL=$(echo \"$UPLOAD\" | python3 -c \"import sys,json; print(json.loads(sys.stdin.read())['url'])\")\n\n# ─── 第三段：首帧图生视频，在同一会话内（保持上下文）───\nSTEP3=$(python3 scripts/libtv.py flow keyframe_to_video \\\n  \"角色在夜晚霓虹密布的街道上缓步前行，回头一瞥，环绕运镜\" \\\n  --ref \"$FRAME_URL\" \\\n  --session-id \"$SID\")\n\n# ─── 第四段：叠加运镜修饰器（强化运镜质量）───\npython3 scripts/libtv.py edit camera \\\n  \"环绕 + 微推镜头，希区柯克变焦在回眸瞬间\" \\\n  --target \"（上一条 keyframe_to_video 的生成视频）\" \\\n  --session-id \"$SID\"\n\n# ─── 第五段：等待 + 下载 ───\npython3 scripts/libtv.py monitor \"$SID\" --poll --interval 15 --extract-urls --timeout 600\npython3 scripts/libtv.py download \"$SID\" --output-dir ~/Downloads/character_video\n```\n\n## 这个 case 演示的能力\n\n1. **预设流程入口** (`flow character_views`, `flow keyframe_to_video`)\n2. **本地文件上传** (`upload`)\n3. **会话上下文复用** (`--session-id`)\n4. **修饰器叠加** (`edit camera`)\n5. **轮询 + 下载** (`poll` / `monitor` / `download`)\n\n## 简化版（不用 flow，直接用 model.py）\n\n如果你想精确控制每步用什么模型：\n\n```bash\n# 角色用 Midjourney（美学风）\npython3 scripts/libtv.py model with midjourney \"穿汉服的赛博朋克少女三视图...\" --ratio 16:9\n\n# 视频用 Kling O3（高质量长视频）\npython3 scripts/libtv.py model with kling-o3 \"霓虹街道行走...\" --ratio 16:9 --duration 10s\n```\n\nFile v0.4.4:examples/05-batch-images.md\n\n# Example 05：批量生成 10 张图（并发 + 自动 HTML 报告）\n\n**积分消耗**：≈140（14 × 10）· **耗时**：≈2 min · **难度**：⭐⭐\n\n需要做 9 宫格、分镜、产品图组等场景。\n\n## 用户需求\n\n「给我生成 10 张'未来城市夜景'的图，不同视角，最后导出 HTML 报告方便看」\n\n## 命令链\n\n```bash\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# ─── Step 1: 准备任务文件 ───\ncat > /tmp/cyber_tasks.txt <<'EOF'\n未来城市夜景，高空俯瞰，霓虹密布\n未来城市夜景，街道平视，飞行汽车\n未来城市夜景，巨型全息广告牌特写\n未来城市夜景，地下管道仰望\n未来城市夜景，机器人巡逻，雾气弥漫\n未来城市夜景，雨后倒影，赛博朋克\n未来城市夜景，废墟之中残存的霓虹\n未来城市夜景，巨塔之巅，星空背景\n未来城市夜景，市集人群，多人种共存\n未来城市夜景，悬浮列车划过画面\nEOF\n\n# ─── Step 2: 批量提交（并发 5）───\npython3 scripts/libtv.py batch \\\n  --file /tmp/cyber_tasks.txt \\\n  --workers 5 \\\n  --output /tmp/cyber_batch.json\n\n# ─── Step 3: 逐个轮询完成 ───\nfor SID in $(python3 -c \"\nimport json\ndata = json.load(open('/tmp/cyber_batch.json'))\nfor r in data:\n    if r.get('sessionId'):\n        print(r['sessionId'])\n\"); do\n    echo \"=== Polling $SID ===\"\n    python3 scripts/libtv.py poll \"$SID\" --interval 8 --timeout 300 --quiet &\ndone\nwait\n\n# ─── Step 4: 导出 HTML 报告 ───\nmkdir -p ~/Downloads/cyber-batch\nfor SID in $(python3 -c \"\nimport json\ndata = json.load(open('/tmp/cyber_batch.json'))\nfor r in data:\n    if r.get('sessionId'):\n        print(r['sessionId'])\n\"); do\n    python3 scripts/libtv.py export \"$SID\" --format html --output ~/Downloads/cyber-batch/$SID.html\n    python3 scripts/libtv.py download \"$SID\" --output-dir ~/Downloads/cyber-batch/$SID\ndone\n\n# ─── Step 5: 浏览 ───\nopen ~/Downloads/cyber-batch/\n```\n\n## 关键参数\n\n| 参数 | 作用 |\n|---|---|\n| `batch --workers 5` | 同时发 5 个，避免 IM 后端被冲 |\n| `batch --output FILE.json` | 保存 sessionId 列表，便于后续轮询 |\n| `export --format html` | 带预览的 HTML，看图最方便 |\n| `export --format markdown` | 适合贴到 Notion / Lark |\n| `export --urls-only` | 只要 URL 列表，给其他脚本用 |\n\n## 进阶：每个任务用不同模型\n\n如果想 10 个任务用不同模型，改用循环 + `model.py with`：\n\n```bash\nMODELS=(lib-nano-pro midjourney seedream-5.0 nano-banana lib-nano-pro \\\n        midjourney seedream-5.0 nano-banana lib-nano-pro midjourney)\nTASKS=(...) # 10 个 prompt\nfor i in {0..9}; do\n    python3 scripts/libtv.py model with \"${MODELS[$i]}\" \"${TASKS[$i]}\" --ratio 16:9 &\ndone\nwait\n```\n\nFile v0.4.4:skill-card.md\n\n## Description:\n\nLibTV Skill Pro helps agents generate, edit, monitor, download, and export image and video work through the LibTV AI creation platform.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[qiuxiangxiang](https://clawhub.ai/user/qiuxiangxiang)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and developers use this skill to route image and video creation requests to LibTV, including text-to-image, text-to-video, reference-based edits, batch jobs, polling, downloads, and report exports.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The security summary flags unsafe network and file-write behavior in download and export helpers.\n\nMitigation: Review generated download and export paths before execution, and run the skill only for deliberate LibTV work from a trusted publisher.\n\nRisk: A LibTV access key is required for live operations.\n\nMitigation: Keep LIBTV_ACCESS_KEY secret and avoid placing it in prompts, logs, shared shell history, or exported reports.\n\nRisk: Direct URL downloads can fetch untrusted content and filename prefixes can affect local write paths.\n\nMitigation: Avoid the direct --urls download option with untrusted URLs, avoid path-like filename prefixes, and write outputs to an intended directory.\n\nRisk: Uploaded source media and exported HTML reports may contain private or active content.\n\nMitigation: Upload private media only when intended, and treat exported HTML reports as untrusted files unless their source session is trusted.\n\n## Reference(s):\n\n- [LibTV Skill Pro on ClawHub](https://clawhub.ai/qiuxiangxiang/skills/libtv-skill-pro)\n- [qiuxiangxiang publisher profile](https://clawhub.ai/user/qiuxiangxiang)\n- [LibTV AI creation platform](https://www.liblib.tv)\n- [Original LibTV ClawHub skill](https://clawhub.ai/haofanwang/libtv-skill)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with shell commands; scripts return JSON and can save downloaded media files or exported Markdown, HTML, or JSON reports.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires python3 and LIBTV_ACCESS_KEY for live LibTV operations; dry-run mode can preview generation requests without calling the service.]\n\n## Skill Version(s):\n\n0.4.4 (source: release metadata)\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\nArchive v0.4.3: 28 files, 55517 bytes\n\nFiles: CHANGELOG.md (3361b), examples/01-generate-image.md (1605b), examples/02-generate-video.md (1870b), examples/03-edit-with-reference.md (1733b), examples/04-character-to-video.md (2914b), examples/05-batch-images.md (2786b), examples/README.md (1341b), README.md (4749b), scripts/_common.py (7092b), scripts/batch_create.py (4279b), scripts/change_project.py (1281b), scripts/create_session.py (2024b), scripts/download_results.py (5233b), scripts/edit.py (4851b), scripts/export_results.py (7851b), scripts/flow.py (4706b), scripts/libtv.py (4023b), scripts/manage_project.py (6760b), scripts/model.py (6968b), scripts/monitor_session.py (6225b), scripts/node.py (7081b), scripts/query_session.py (1685b), scripts/quick_poll.py (4284b), scripts/session_history.py (6624b), scripts/upload_file.py (3531b), scripts/workflow_template.py (4864b), SKILL.md (12344b), _meta.json (134b)\n\nFile v0.4.3:SKILL.md\n\n---\nname: libtv-skill-pro\ndescription: 通过 LibTV (liblib.tv) AI 视频平台生成和编辑图片/视频的完整工具集。覆盖文生图/视频、图生图/视频、视频续写、风格迁移、局部编辑（把纸船换成爱心）、短剧/MV/TVC 制作、角色三视图、分镜设计、首尾帧视频、音频生视频。支持 Seedance 2.0 / Kling 3.0/O3 / Wan 2.6 / Nano Banana / Midjourney / Seedream 5.0 / Lib Nano Pro / GVLM 3.1 等模型，可显式指定模型+参数（比例/分辨率/时长）。Pro 版扩展批量并发、轮询监控、工作流模板、结果导出、会话历史、项目管理、统一入口、dry-run 预览、结构化错误。触发词：画一个/生成/做一个/帮我做、liblib/libtv/aigc、视频/图片/MV/TVC/短剧/分镜/动漫/海报、AI 视频/图片生成、画/生成一张/一段。\nuser-invocable: true\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"🎬\",\n        \"requires\":\n          {\n            \"bins\": [\"python3\"],\n            \"env\": [\"LIBTV_ACCESS_KEY\"]\n          },\n        \"primaryEnv\": \"LIBTV_ACCESS_KEY\"\n      }\n  }\n---\n\n# libtv-skill-pro\n\n> Fork of [@haofanwang/libtv-skill](https://clawhub.ai/haofanwang/libtv-skill) — 在原版基础上扩展高级工作流与功能矩阵层。Source / Issues: https://github.com/Qiuxiangxiang/libtv-skills-pro\n\nLibTV (liblib.tv) 是 LiblibAI 推出的 AI 视频创作平台。本 skill 让 Agent 通过统一入口 `libtv.py` 完成生成 / 编辑 / 修饰 / 模型路由的全链路。\n\n## 快速开始（3 分钟跑通第一个 case）\n\n```bash\n# 1. 拿 access key：https://www.liblib.tv → 用户中心 → API / 开发者\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# 2. 看完整命令清单\npython3 {baseDir}/scripts/libtv.py --help\n\n# 3. 跑第一个 case（dry-run 预览，不烧积分）\npython3 {baseDir}/scripts/libtv.py model with lib-nano-pro \\\n  \"白色短毛猫坐在窗台上\" --ratio 1:1 --resolution 2K --dry-run\n\n# 4. 去掉 --dry-run 真实生成（≈14 积分，≈60s）\npython3 {baseDir}/scripts/libtv.py model with lib-nano-pro \\\n  \"白色短毛猫坐在窗台上\" --ratio 1:1 --resolution 2K\n# → 返回 sessionId，再用 poll 等结果，download 取本地\n\npython3 {baseDir}/scripts/libtv.py poll <SESSION_ID>\npython3 {baseDir}/scripts/libtv.py download <SESSION_ID> --output-dir ~/Downloads/cat\n```\n\n5 个完整 case 见 `examples/`（图像 / 视频 / 编辑 / 多步链 / 批量）。\n\n## 推荐入口：`libtv.py <subcommand>`\n\n所有功能聚合在一个入口，Agent 路由更顺：\n\n```\npython3 libtv.py flow       <preset> \"<topic>\" [--ref URL]\npython3 libtv.py node       <action> \"<topic>\" [--ref URL]\npython3 libtv.py edit       <modifier> \"<desc>\" [--target URL] [--session-id SID]\npython3 libtv.py model      list|with <model> \"<prompt>\" [params]\n\npython3 libtv.py session    \"<message>\"               # 创建会话/发消息（底层）\npython3 libtv.py query      <SID>                     # 查询会话进展\npython3 libtv.py upload     <local_file>              # 上传到 OSS\npython3 libtv.py download   <SID> [--output-dir DIR]  # 下载结果\n\npython3 libtv.py batch      --file tasks.txt --workers 5\npython3 libtv.py monitor    <SID> --poll --extract-urls\npython3 libtv.py poll       <SID>\npython3 libtv.py template   <name> \"<topic>\"\npython3 libtv.py export     <SID> --format html\npython3 libtv.py history    list|add|show|get|remove\npython3 libtv.py project    list|current|switch|use|remove|describe\n```\n\n> 旧路径 `python3 scripts/<name>.py ...` 仍可用（向后兼容）。新代码统一用 `libtv.py`。\n\n## 决策树（路由判断）\n\n收到用户需求时，按以下顺序匹配：\n\n| 用户输入 | 走哪条路径 |\n|---|---|\n| 用户提供了本地文件（图/视频/音频路径）| 先 `upload` 拿 OSS URL，再发到下一步 |\n| 模糊一句话「画只猫 / 做个 MV」 | `session` 让后端 Agent 路由（最省心）|\n| 明确想要 LibTV 某个入口（\"做个角色三视图\"）| `flow <preset>` |\n| 明确想用某个模型（\"用 Seedance 出视频\"）| `model with <model>` |\n| 想在已生成内容上改风格 / 加运镜 | `edit <modifier> --session-id SID` |\n| 一次发 10+ 任务 | `batch --file tasks.txt --workers 5` |\n| 完整短剧 / MV / 角色设计预设 | `template <name>` |\n| 等结果 / 查进度 | `poll`（简单等）或 `monitor`（看过程）|\n| 取结果 | `download <SID>` |\n\n**永远先 `--dry-run` 预览**：每个生成类子命令（flow/node/edit/model）都支持 `--dry-run`，会输出 JSON 显示 will-send prompt 而不调 API。\n\n## 已知模型（用 `libtv.py model list` 查最新）\n\n| 类型 | 模型 | 适用 |\n|---|---|---|\n| LLM | gvlm-3.1 | 剧本/广告词/品牌文案/提示词改写 |\n| 图像 | lib-nano-pro | 快速生图、图生图、高清化 |\n| 图像 | nano-banana | 平面海报/插画（Google Gemini 系） |\n| 图像 | midjourney | 美学风/插画/海报 |\n| 图像 | seedream-5.0 | 写实/电影感（豆包系） |\n| 视频 | seedance-2.0-vip | 文生/图生视频、短片（默认） |\n| 视频 | kling-3.0 | 写实人像、动作连贯 |\n| 视频 | kling-o3 | 高质量长视频 |\n| 视频 | wan-2.6 | 多镜头长视频（通义万相） |\n\n模型参数：`--ratio 16:9` `--resolution 720P|2K` `--duration 5s` `--count \"1张\"`\n\n## 错误响应（v0.4.0+ 结构化）\n\n所有 API 错误以 JSON 写到 stderr，便于 Agent 程序化处理：\n\n```json\n{\n  \"error\": {\n    \"kind\": \"INVALID_ACCESS_KEY\",\n    \"http_code\": 401,\n    \"message\": \"accessKey 不存在或无效\",\n    \"raw\": \"{...}\"\n  }\n}\n```\n\n错误 kind 清单：`INVALID_ACCESS_KEY` / `FORBIDDEN_OR_INSUFFICIENT_CREDITS` / `NOT_FOUND` / `TIMEOUT` / `RATE_LIMITED` / `SERVER_ERROR` / `BAD_GATEWAY` / `SERVICE_UNAVAILABLE` / `GATEWAY_TIMEOUT` / `NETWORK_ERROR` / `INTERRUPTED` / `UNKNOWN`。\n\n## 16 类能力详解\n\n详细说明继续保留以便深度使用，但**优先看 `examples/` 和决策树**。\n\n### 1. 创建会话 / 发送消息 — `libtv.py session`\n\n```bash\n# 自然语言发消息（后端 Agent 自己路由模型）\npython3 libtv.py session \"生一个动漫视频\"\n\n# 续聊已有会话\npython3 libtv.py session \"再来一张风景图\" --session-id SID\n```\n\n### 2. 查询会话进展 — `libtv.py query`\n\n```bash\npython3 libtv.py query SID --after-seq 5       # 增量拉取\npython3 libtv.py query SID --project-id PUUID  # 附带项目地址\n```\n\n### 3. 上传文件 — `libtv.py upload`\n\n支持图片 / 视频，≤ 200MB。返回 OSS URL。\n\n```bash\npython3 libtv.py upload /path/to/image.png\npython3 libtv.py upload /path/to/video.mp4\n```\n\n### 4. 下载结果 — `libtv.py download`\n\n```bash\npython3 libtv.py download SID --output-dir ~/Downloads/proj --prefix scene\npython3 libtv.py download --urls URL1 URL2 --output-dir ./out   # 直接给 URL 列表\n```\n\n### 5. 批量任务 — `libtv.py batch`\n\n```bash\npython3 libtv.py batch --file tasks.txt --workers 5 --output result.json\npython3 libtv.py batch -m \"猫\" -m \"狗\" -m \"鸟\"\n```\n\n### 6. 实时监控 — `libtv.py monitor`\n\n```bash\npython3 libtv.py monitor SID --poll --interval 15 --extract-urls\npython3 libtv.py monitor SID --poll --format json --output log.json\n```\n\n### 7. 简化轮询 — `libtv.py poll`\n\n```bash\npython3 libtv.py poll SID                            # 默认 8s 间隔，10 分钟超时\npython3 libtv.py poll SID --interval 5 --timeout 300\npython3 libtv.py poll SID --quiet                    # 只输出最终结果\n```\n\n### 8. 工作流模板 — `libtv.py template`\n\n```bash\npython3 libtv.py template --list\npython3 libtv.py template storyboard \"科幻城市的故事\"\npython3 libtv.py template short_drama \"友情故事\"\npython3 libtv.py template music_video \"悲伤钢琴曲\"\n```\n\n8 个模板：storyboard / character_design / video_generation / image_generation / style_transfer / short_drama / music_video / product_showcase\n\n### 9. 结果导出 — `libtv.py export`\n\n```bash\npython3 libtv.py export SID --format html --output report.html\npython3 libtv.py export SID --format markdown --output report.md\npython3 libtv.py export SID --urls-only\n```\n\n### 10. 会话历史 — `libtv.py history`\n\n```bash\npython3 libtv.py history list\npython3 libtv.py history add SID --desc \"项目描述\"\npython3 libtv.py history get 1     # 拿到 sessionId（脚本用）\npython3 libtv.py history remove 1\n```\n\n### 11. 项目管理 — `libtv.py project`\n\n```bash\npython3 libtv.py project list                # 列本地记录\npython3 libtv.py project current             # 当前项目\npython3 libtv.py project switch --desc \"短剧 A\"   # 创建新项目\npython3 libtv.py project use PUUID           # 切到指定项目\npython3 libtv.py project describe PUUID \"MV\"\npython3 libtv.py project remove PUUID\n```\n\n本地状态：`~/.libtv_projects.json`。\n\n### 12. 预设流程 — `libtv.py flow`\n\n```bash\npython3 libtv.py flow story_script \"机器人来到唐朝\"\npython3 libtv.py flow character_views \"穿汉服的赛博朋克少女\"\npython3 libtv.py flow keyframe_to_video \"拔剑出鞘\" --ref OSS_URL\npython3 libtv.py flow audio_to_video \"暗黑风 MV\" --ref OSS_URL\n```\n\n### 13. 节点能力 — `libtv.py node`\n\n```bash\n# 文本节点\npython3 libtv.py node text_to_video_prompt \"一只猫在屋顶看月亮\"\npython3 libtv.py node image_caption --ref IMG_URL\npython3 libtv.py node text_to_music \"悲伤、钢琴、60秒\"\n\n# 图片节点\npython3 libtv.py node image_to_image \"改赛博朋克风\" --ref IMG_URL\npython3 libtv.py node image_upscale --ref IMG_URL\n\n# 视频节点\npython3 libtv.py node first_last_frame \"拔剑过程\" --ref start.png --ref2 end.png\npython3 libtv.py node reference_video \"保留主体演绎新场景\" --ref ref.png\n```\n\n### 14. 修饰器 — `libtv.py edit`\n\n```bash\npython3 libtv.py edit style \"宫崎骏吉卜力\" --target URL --session-id SID\npython3 libtv.py edit camera \"无人机环绕\" --target \"场景\" --session-id SID\npython3 libtv.py edit character_lib \"孙悟空\" --target \"花果山\" --session-id SID\npython3 libtv.py edit mark \"纸船换爱心\" --target URL --session-id SID\npython3 libtv.py edit focus \"右上角月亮\" --target URL --session-id SID\n```\n\n### 15. 模型路由 — `libtv.py model`\n\n```bash\npython3 libtv.py model list\npython3 libtv.py model list --kind video\npython3 libtv.py model with seedance-2.0-vip \"...\" --ratio 16:9 --duration 5s\npython3 libtv.py model with lib-nano-pro \"...\" --ratio 1:1 --resolution 2K\n```\n\n### 16. dry-run（v0.4.0+）\n\n所有生成类子命令（flow/node/edit/model）支持 `--dry-run`：输出将发送的 prompt 但**不调 API、不烧积分**。\n\n```bash\npython3 libtv.py flow story_script \"...\" --dry-run\npython3 libtv.py model with seedance-2.0-vip \"...\" --duration 5s --dry-run\n```\n\n## 用户侧 Agent 的核心原则\n\n你（用户侧 Agent）是**搬运工**，不是创作者。后端 LibTV Agent 有专业的模型选择 / prompt 工程 / 工作流编排能力。\n\n- **能传话就别替用户写 prompt**：用户说\"帮我推演分镜\"，就调 `session \"帮我推演分镜\"`，不要自己先编个分镜表\n- **能用 `flow`/`model` 显式入口就别让后端猜**：用户说\"用 Seedance 做 5 秒视频\"时，直接 `model with seedance-2.0-vip --duration 5s`\n- **永远先 `--dry-run` 检查 prompt**：调真 API 前一次 dry-run 能省很多冤枉积分\n- **下载到本地后向用户展示**：results URL + projectUrl 两个都给\n\n## 输出格式（v0.4.0+ 全 JSON）\n\n所有 stdout 输出都是 JSON，便于 Agent 程序化解析：\n\n```json\n// session / flow / node / edit / model 等生成类\n{\"projectUuid\":\"...\", \"sessionId\":\"...\", \"projectUrl\":\"...\", \"message_sent\":\"...\"}\n\n// dry-run\n{\"dry_run\":true, \"preset\":\"...\", \"would_send\":\"...\", ...}\n\n// list 类（model list / project list / history list 等仍输出表格，便于人类查看）\n```\n\n错误以 JSON 写 stderr（见上面\"错误响应\"）。\n\n## 注意事项\n\n- 鉴权方式：`Authorization: Bearer <LIBTV_ACCESS_KEY>`\n- 项目画布地址：`https://www.liblib.tv/canvas?projectId=<projectUuid>`\n- 上传 OSS 地址格式：`https://libtv-res.liblib.art/claw/{projectUuid}/{uuid}{ext}`\n- 文件大小限制：200MB\n- 生成中只给用户\"正在生成\"提示；完成后同时给 **结果 URL + projectUrl**\n- 本地状态：`~/.libtv_projects.json`（项目）+ `~/.libtv_session_history.json`（会话历史）\n\nFile v0.4.3:examples/README.md\n\n# Examples\n\n5 个典型 case，按\"难度 / 积分 / 耗时\"排列。建议第一次用按 01 → 02 → 03 → 04 → 05 顺序看。\n\n| # | 场景 | 命令风格 | 积分 | 耗时 | 难度 |\n|---|---|---|---|---|---|\n| [01](./01-generate-image.md) | 生一张猫图（最小路径）| `model with lib-nano-pro` | ≈14 | ≈60s | ⭐ |\n| [02](./02-generate-video.md) | 生一段 5s 视频 | `model with seedance-2.0-vip` | ≈135 | 5-8 min | ⭐⭐ |\n| [03](./03-edit-with-reference.md) | 把纸船换成爱心（局部编辑）| `upload` + `edit mark` | ≈14-20 | ≈90s | ⭐⭐ |\n| [04](./04-character-to-video.md) | 角色三视图 → 首帧图生视频 | `flow character_views` + `flow keyframe_to_video` + `edit camera` | ≈150 | ≈10 min | ⭐⭐⭐ |\n| [05](./05-batch-images.md) | 并发批量 10 张图 + HTML 报告 | `batch` + `export html` | ≈140 | ≈2 min | ⭐⭐ |\n\n## 跑这些 example 前\n\n1. **设置 API key**：\n   ```bash\n   export LIBTV_ACCESS_KEY=your_key_here\n   ```\n   key 从 [LibTV 用户中心](https://www.liblib.tv) 获取（个人设置 → API / 开发者）。\n\n2. **dry-run 先看 prompt**：每个 case 第一步都有 `--dry-run`，跑完确认 prompt 没问题再去掉它正式生成。可以省下大量积分。\n\n3. **从最便宜的 01 开始**：14 积分一张图，跑通了再去 02。\n\nFile v0.4.3:README.md\n\n# libtv-skill-pro\n\n> 🎬 LibTV (liblib.tv) AI 视频/图像生成平台的 OpenClaw / ClawHub skill。Pro 版在 [@haofanwang/libtv-skill](https://clawhub.ai/haofanwang/libtv-skill) 基础上扩展高级工作流与功能矩阵层。\n\n[![ClawHub](https://img.shields.io/badge/ClawHub-libtv--skill--pro-orange)](https://clawhub.ai/qiuxiangxiang/libtv-skill-pro)\n[![GitHub stars](https://img.shields.io/github/stars/Qiuxiangxiang/libtv-skills-pro?style=social)](https://github.com/Qiuxiangxiang/libtv-skills-pro)\n[![GitHub issues](https://img.shields.io/github/issues/Qiuxiangxiang/libtv-skills-pro)](https://github.com/Qiuxiangxiang/libtv-skills-pro/issues)\n[![License](https://img.shields.io/badge/license-MIT--0-blue)](LICENSE)\n\n## 是什么\n\n让 Agent（OpenClaw / Claude Code / 其他 ClawHub-compatible 客户端）通过统一入口调用 LibTV 平台的 AI 创作能力：\n\n- **生成**：文生图/视频、图生图/视频、首尾帧视频、音频驱动视频\n- **编辑**：局部修改（\"把纸船换成爱心\"）、风格迁移、运镜调整\n- **多模型路由**：Seedance 2.0 / Kling 3.0/O3 / Wan 2.6 / Nano Banana / Midjourney / Seedream 5.0 / Lib Nano Pro / GVLM 3.1\n- **工作流**：批量并发、轮询监控、8 个预设模板（短剧/MV/角色设计/分镜...）、HTML 报告导出\n- **dry-run 预览**：所有生成类命令支持 `--dry-run`，预览 prompt 不烧积分\n- **结构化错误**：API 错误以 JSON 输出，Agent 程序化可处理\n\n## 安装\n\n### 方式 1：通过 ClawHub（推荐）\n\n```bash\nopenclaw skills install libtv-skill-pro\n```\n\n### 方式 2：从这个仓库克隆\n\n```bash\ngit clone https://github.com/Qiuxiangxiang/libtv-skills-pro.git ~/.agents/skills/libtv-skill-pro\n```\n\n## 快速开始\n\n```bash\n# 1. 拿 access key：https://www.liblib.tv → 用户中心 → API\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# 2. 看命令清单\npython3 scripts/libtv.py --help\n\n# 3. dry-run 预览（不烧积分）\npython3 scripts/libtv.py model with lib-nano-pro \\\n  \"白色短毛猫坐在窗台上\" --ratio 1:1 --resolution 2K --dry-run\n\n# 4. 真实生成 + 轮询 + 下载\npython3 scripts/libtv.py model with lib-nano-pro \"...\" --ratio 1:1\npython3 scripts/libtv.py poll SESSION_ID\npython3 scripts/libtv.py download SESSION_ID --output-dir ~/Downloads/cat\n```\n\n完整示例见 [`examples/`](./examples/)（5 个递进难度的 case）。\n\n## 命令地图\n\n```\nlibtv.py flow      预设流程（故事脚本/角色三视图/首帧图生视频/音频生视频）\nlibtv.py node      节点能力（文本/图片/视频节点细分动作）\nlibtv.py edit      修饰器（风格/标记/聚焦/运镜/角色库）\nlibtv.py model     模型路由（list 已知模型 / with 指定模型生成）\n\nlibtv.py session   创建会话/发消息       libtv.py query   查询会话进展\nlibtv.py upload    上传图片/视频         libtv.py download 下载结果\n\nlibtv.py batch     并发批量任务          libtv.py monitor 实时监控\nlibtv.py poll      简化轮询              libtv.py template 预设工作流模板\nlibtv.py export    导出 HTML/MD/JSON     libtv.py history 会话历史\nlibtv.py project   项目管理\n```\n\n17 个独立脚本（`scripts/*.py`）仍可单独调用（向后兼容）。\n\n## 跟原版的关系\n\n| | @haofanwang/libtv-skill | @qiuxiangxiang/libtv-skill-pro |\n|---|---|---|\n| 基础脚本 | 6 个 | 6 个（保留原版） |\n| 高级工作流 | — | 7 个（batch/monitor/poll/template/export/history/project） |\n| LibTV 功能矩阵 | — | 4 个（flow/node/edit/model） |\n| 统一入口 | — | libtv.py |\n| dry-run 预览 | — | ✓ |\n| 结构化错误 | — | ✓ |\n\n如果你只需要\"自然语言一句话路由\"的极简体验，原版 6 脚本足够。Pro 版面向**批量、精细控制、Agent 程序化集成**场景。\n\n## 测试\n\n```bash\n# 离线（5 秒，不烧积分，120 个用例）\nbash tests/test_offline.sh && python3 tests/test_templates.py\n\n# 在线（按开关计费）\nONLINE_SESSION=1 bash tests/test_online.sh    # ≈0 积分\nONLINE_IMAGE=1   bash tests/test_online.sh    # ≈14 积分\nONLINE_VIDEO=1   bash tests/test_online.sh    # ≈135 积分\n```\n\n详细测试矩阵见 [`tests/README.md`](./tests/README.md)。\n\n## 贡献\n\n发现 bug 或想加新功能：\n\n1. Issue 描述场景 + 预期 vs 实际\n2. PR 前请跑通 `bash tests/test_offline.sh && python3 tests/test_templates.py`\n3. 新功能请同时在 `tests/` 加用例 + 在 `examples/` 加 case\n\n## License\n\nMIT-0（与原版一致）。\n\n## 致谢\n\n- [@haofanwang/libtv-skill](https://clawhub.ai/haofanwang/libtv-skill) — 原版基础架构\n- [LibTV (liblib.tv)](https://www.liblib.tv) — AI 视频创作平台\n- [ClawHub](https://clawhub.ai) — Agent skill 分发\n\nFile v0.4.3:_meta.json\n\n{\n  \"ownerId\": \"kn75javp82ghpk79s61mfbp3bx81vsnj\",\n  \"slug\": \"libtv-skill-pro\",\n  \"version\": \"0.4.3\",\n  \"publishedAt\": 1778744043586\n}\n\nFile v0.4.3:CHANGELOG.md\n\n# Changelog\n\n## [0.4.0] - 2026-05-14（即将发布）\n\n**主题：公开推广就绪 + 架构升级**\n\n### Added — 推广向\n- `examples/` 5 个完整 case：生图 / 视频 / 编辑 / 多步链 / 批量\n- `README.md`（GitHub 入口）+ `LICENSE`（MIT-0）+ `.gitignore`\n- `CHANGELOG.md` 正式纳入版本管理\n- 公开 GitHub 仓库（信任来源 / issue / PR）\n- SKILL.md frontmatter description 精简到 ~400 字，前 300 字聚焦关键词（搜索能见度）\n- SKILL.md 增加「快速开始 3 分钟跑通」段落 + 决策树 + LibTV access key 获取链接\n\n### Added — 架构升级\n- `libtv.py` 统一入口（dispatcher）—— Agent 只需记一个命令：`libtv.py {flow|node|edit|model|...}`\n- `--dry-run` 标志（flow / node / edit / model）—— 预览将发送的 prompt，不调 API、不烧积分\n- 结构化错误响应（`_common.APIError` + `safe_run` wrapper）—— 所有 API 错误以 JSON 写 stderr，含 kind / http_code / message / raw\n- 错误 kind 枚举：INVALID_ACCESS_KEY / FORBIDDEN_OR_INSUFFICIENT_CREDITS / NOT_FOUND / TIMEOUT / RATE_LIMITED / SERVER_ERROR / NETWORK_ERROR / INTERRUPTED / UNKNOWN\n\n### Fixed\n- `change_project.py` 缺 argparse 导致 `--help` 直接调真 API（之前发版前发现的 bug）\n- `_common.py` 不再在 import 时因缺 LIBTV_ACCESS_KEY 而 `sys.exit(1)`——改为延迟到首次实际调用 API 时抛 `APIError`，让 `--help` 在任何情况下都可用\n\n### Changed\n- 所有调 API 的脚本都接入 `safe_run(main)` wrapper\n- frontmatter emoji 由 💬 改为 🎬（配合 film 图标）\n- tests/test_offline.sh 增加 1b（libtv.py 入口）+ 1c（dry-run 验证）共 20 个新用例\n- 总测试用例：73 离线 + 47 模板 = **120 全通**\n\n### Cleanup\n- 发布前清掉 workspace 的 `.clawhub/origin.json`（之前误发）\n- `_meta.json` 不打包进发布\n\n---\n\n## [0.3.0] - 2026-05-13\n\n**LibTV 功能矩阵层**（slug: libtv-skill-pro，fork-of @haofanwang/libtv-skill@1.0.3）\n\n新增 4 个脚本覆盖 LibTV 画布上的完整功能矩阵：\n\n- `flow.py` — LibTV 首页 4 个预设流程（story_script / character_views / keyframe_to_video / audio_to_video）\n- `node.py` — 文本/图片/视频节点的细分动作（text_to_video_prompt / image_caption / text_to_music / image_to_image / image_upscale / first_last_frame / reference_video）\n- `edit.py` — 节点修饰器（style / mark / focus / camera / character_lib）\n- `model.py` — 模型路由（list 9 个已知模型 + with 显式指定模型+参数）\n\nSKILL.md 第 13–16 节文档，新增「场景 8：按 LibTV 网页功能直接调用」工作流示例。\n\n## [0.2.0] - 2026-05-13\n\n**首发 libtv-skill-pro**（fork-of @haofanwang/libtv-skill@1.0.3）\n\n在原版 6 个基础脚本之上扩展 7 个高级工作流脚本：\n\n- `manage_project.py`（list/current/switch/use/remove/describe + `~/.libtv_projects.json` 本地项目记录）\n- `batch_create.py`（并发批量任务）\n- `monitor_session.py`（实时监控）\n- `quick_poll.py`（简化轮询）\n- `workflow_template.py`（8 个预设模板）\n- `export_results.py`（导出 JSON / Markdown / HTML）\n- `session_history.py`（会话历史管理）\n\n行为增强：\n- `create_session.py` / `change_project.py` 自动写入本地项目记录\n- `_common.py`：`change_project()` 支持可选 `projectUuid` 参数\n\nFile v0.4.3:examples/01-generate-image.md\n\n# Example 01：生一张猫图（最小路径）\n\n**积分消耗**：≈14 · **耗时**：≈60s · **难度**：⭐\n\n最简单的端到端：从输入到本地图片 4 个命令搞定。\n\n## 用户需求\n\n「生一张白色短毛猫坐在窗台上的图，1:1 比例，2K 分辨率，用 lib-nano-pro 模型」\n\n## 命令链\n\n```bash\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# 1. 预览将发送的 prompt（不烧积分）\npython3 scripts/libtv.py model with lib-nano-pro \\\n  \"白色短毛猫坐在窗台上\" \\\n  --ratio 1:1 --resolution 2K --count \"1张\" \\\n  --dry-run\n\n# 2. 真实生成\nRESULT=$(python3 scripts/libtv.py model with lib-nano-pro \\\n  \"白色短毛猫坐在窗台上\" \\\n  --ratio 1:1 --resolution 2K --count \"1张\")\necho \"$RESULT\"\nSID=$(echo \"$RESULT\" | python3 -c \"import sys,json; print(json.loads(sys.stdin.read())['sessionId'])\")\n\n# 3. 轮询等待完成（默认 8s 间隔，10 分钟超时）\npython3 scripts/libtv.py poll \"$SID\"\n\n# 4. 下载到本地\npython3 scripts/libtv.py download \"$SID\" --output-dir ~/Downloads/cat --prefix cat\n```\n\n## 预期输出\n\n- 一张 2K PNG/JPG 保存在 `~/Downloads/cat/cat_01.png`\n- 一个 `projectUrl`，浏览器打开可以看 LibTV 项目画布\n\n## 常见故障\n\n| 现象 | 错误 kind | 解决 |\n|---|---|---|\n| 第 2 步 401 | `INVALID_ACCESS_KEY` | 检查 `LIBTV_ACCESS_KEY` 是否正确 |\n| 第 2 步 403 | `FORBIDDEN_OR_INSUFFICIENT_CREDITS` | 积分不足，去 LibTV 充值 |\n| 第 3 步超时 | — | 后端慢，去 `projectUrl` 画布上手动看结果 |\n| 第 4 步空 | — | 会话里还没有结果 URL，再等一会儿重跑 |\n\nFile v0.4.3:examples/02-generate-video.md\n\n# Example 02：用 Seedance 生一段 5 秒视频\n\n**积分消耗**：≈135 · **耗时**：5-8 min · **难度**：⭐⭐\n\n文生视频，指定模型 + 参数。\n\n## 用户需求\n\n「用 Seedance 2.0 VIP 生成一段 5 秒、16:9、720P 的视频：黄昏草原上一只白马奔跑」\n\n## 命令链\n\n```bash\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# 1. 预览（强烈建议先 dry-run 检查参数是否传对）\npython3 scripts/libtv.py model with seedance-2.0-vip \\\n  \"黄昏草原上一只白马奔跑，阳光金黄，长鬃飘动\" \\\n  --ratio 16:9 --resolution 720P --duration 5s --count \"1个\" \\\n  --dry-run\n\n# 2. 真实生成\nRESULT=$(python3 scripts/libtv.py model with seedance-2.0-vip \\\n  \"黄昏草原上一只白马奔跑，阳光金黄，长鬃飘动\" \\\n  --ratio 16:9 --resolution 720P --duration 5s --count \"1个\")\nSID=$(echo \"$RESULT\" | python3 -c \"import sys,json; print(json.loads(sys.stdin.read())['sessionId'])\")\n\n# 3. 视频生成慢，用 monitor 看进度（15s 间隔）\npython3 scripts/libtv.py monitor \"$SID\" --poll --interval 15 --extract-urls --timeout 600\n\n# 4. 下载\npython3 scripts/libtv.py download \"$SID\" --output-dir ~/Downloads/horse --prefix horse\n\n# 5. 加到会话历史（方便以后用 history list 找到）\npython3 scripts/libtv.py history add \"$SID\" --desc \"Seedance 白马奔跑 5s\"\n```\n\n## 预期输出\n\n- `~/Downloads/horse/horse_01.mp4`（约 5 秒、16:9、720P）\n- 项目画布链接（可在 LibTV 网页上分享/编辑）\n\n## 模型选择参考\n\n| 想要 | 推荐模型 | 参数 |\n|---|---|---|\n| 快速预览 / 测试 prompt | `seedance-2.0-vip` | 720P, 5s |\n| 写实人像、动作连贯 | `kling-3.0` | 1080P, 5-10s |\n| 长视频、高质量 | `kling-o3` | 1080P, 10s |\n| 多镜头、复杂场景 | `wan-2.6` | 1080P, 任意 |\n\n用 `python3 scripts/libtv.py model list --kind video` 查全部视频模型。\n\nFile v0.4.3:examples/03-edit-with-reference.md\n\n# Example 03：基于参考图编辑（\"把纸船换成爱心\"）\n\n**积分消耗**：≈14-20 · **耗时**：≈90s · **难度**：⭐⭐\n\n用户拿一张图，要求局部编辑——这是 LibTV 的典型场景。\n\n## 用户需求\n\n「这张图（本地路径 `~/Desktop/origin.png`）里，把所有纸船换成白色纸爱心，保持其他不变」\n\n## 命令链\n\n```bash\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# 1. 先把本地图片上传到 LibTV OSS\nUPLOAD=$(python3 scripts/libtv.py upload ~/Desktop/origin.png)\necho \"$UPLOAD\"\nOSS_URL=$(echo \"$UPLOAD\" | python3 -c \"import sys,json; print(json.loads(sys.stdin.read())['url'])\")\n\n# 2. 用 edit.py mark（局部标记修改）+ OSS URL\nRESULT=$(python3 scripts/libtv.py edit mark \\\n  \"把画面里所有纸船的区域换成白色纸爱心，其他保持不变\" \\\n  --target \"$OSS_URL\")\nSID=$(echo \"$RESULT\" | python3 -c \"import sys,json; print(json.loads(sys.stdin.read())['sessionId'])\")\n\n# 3. 轮询\npython3 scripts/libtv.py poll \"$SID\" --interval 8 --timeout 300\n\n# 4. 下载\npython3 scripts/libtv.py download \"$SID\" --output-dir ~/Desktop/edited\n```\n\n## 替代方案：用 node.py image_to_image\n\n如果是整张图的风格/内容大改（不只是局部），用 image_to_image：\n\n```bash\npython3 scripts/libtv.py node image_to_image \\\n  \"把画面整体改成赛博朋克风\" \\\n  --ref \"$OSS_URL\"\n```\n\n## 修饰器选择\n\n| 用户描述 | 推荐 modifier |\n|---|---|\n| \"把 X 换成 Y\" / \"去掉 X\" / \"加上 X\" | `mark` |\n| \"改成 X 风格\" / \"做成卡通\" / \"宫崎骏感觉\" | `style` |\n| \"强调右上角\" / \"聚焦在人物\" | `focus` |\n| \"用环绕镜头\" / \"推镜头\" / \"希区柯克变焦\" | `camera` |\n| \"用孙悟空作为角色\" | `character_lib` |\n\nFile v0.4.3:examples/04-character-to-video.md\n\n# Example 04：角色三视图 → 首帧图生视频（多步链）\n\n**积分消耗**：≈150 · **耗时**：≈10 min · **难度**：⭐⭐⭐\n\n经典工作流：先做角色 IP 资产，再用其中一张作为视频首帧。\n\n## 用户需求\n\n「我要做一个穿汉服的赛博朋克少女角色，先出三视图，然后用正面图做首帧生成一段她在霓虹街道行走的 5 秒视频」\n\n## 命令链\n\n```bash\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# ─── 第一段：角色三视图 ───\nSTEP1=$(python3 scripts/libtv.py flow character_views \\\n  \"穿汉服的赛博朋克少女，银发，红色机械义眼，唐风刺绣旗袍混搭金属护甲\")\nSID=$(echo \"$STEP1\" | python3 -c \"import sys,json; print(json.loads(sys.stdin.read())['sessionId'])\")\nPROJECT=$(echo \"$STEP1\" | python3 -c \"import sys,json; print(json.loads(sys.stdin.read())['projectUrl'])\")\n\necho \"角色生成中，画布：$PROJECT\"\npython3 scripts/libtv.py poll \"$SID\" --interval 8 --timeout 300\n\n# 下载三视图\npython3 scripts/libtv.py download \"$SID\" --output-dir ~/Downloads/character --prefix view\n# 应该会拿到 view_01.png（正面）/ view_02.png（侧面）/ view_03.png（背面）\n\n# ─── 第二段：上传正面图作为首帧 ───\nUPLOAD=$(python3 scripts/libtv.py upload ~/Downloads/character/view_01.png)\nFRAME_URL=$(echo \"$UPLOAD\" | python3 -c \"import sys,json; print(json.loads(sys.stdin.read())['url'])\")\n\n# ─── 第三段：首帧图生视频，在同一会话内（保持上下文）───\nSTEP3=$(python3 scripts/libtv.py flow keyframe_to_video \\\n  \"角色在夜晚霓虹密布的街道上缓步前行，回头一瞥，环绕运镜\" \\\n  --ref \"$FRAME_URL\" \\\n  --session-id \"$SID\")\n\n# ─── 第四段：叠加运镜修饰器（强化运镜质量）───\npython3 scripts/libtv.py edit camera \\\n  \"环绕 + 微推镜头，希区柯克变焦在回眸瞬间\" \\\n  --target \"（上一条 keyframe_to_video 的生成视频）\" \\\n  --session-id \"$SID\"\n\n# ─── 第五段：等待 + 下载 ───\npython3 scripts/libtv.py monitor \"$SID\" --poll --interval 15 --extract-urls --timeout 600\npython3 scripts/libtv.py download \"$SID\" --output-dir ~/Downloads/character_video\n```\n\n## 这个 case 演示的能力\n\n1. **预设流程入口** (`flow character_views`, `flow keyframe_to_video`)\n2. **本地文件上传** (`upload`)\n3. **会话上下文复用** (`--session-id`)\n4. **修饰器叠加** (`edit camera`)\n5. **轮询 + 下载** (`poll` / `monitor` / `download`)\n\n## 简化版（不用 flow，直接用 model.py）\n\n如果你想精确控制每步用什么模型：\n\n```bash\n# 角色用 Midjourney（美学风）\npython3 scripts/libtv.py model with midjourney \"穿汉服的赛博朋克少女三视图...\" --ratio 16:9\n\n# 视频用 Kling O3（高质量长视频）\npython3 scripts/libtv.py model with kling-o3 \"霓虹街道行走...\" --ratio 16:9 --duration 10s\n```\n\nFile v0.4.3:examples/05-batch-images.md\n\n# Example 05：批量生成 10 张图（并发 + 自动 HTML 报告）\n\n**积分消耗**：≈140（14 × 10）· **耗时**：≈2 min · **难度**：⭐⭐\n\n需要做 9 宫格、分镜、产品图组等场景。\n\n## 用户需求\n\n「给我生成 10 张'未来城市夜景'的图，不同视角，最后导出 HTML 报告方便看」\n\n## 命令链\n\n```bash\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# ─── Step 1: 准备任务文件 ───\ncat > /tmp/cyber_tasks.txt <<'EOF'\n未来城市夜景，高空俯瞰，霓虹密布\n未来城市夜景，街道平视，飞行汽车\n未来城市夜景，巨型全息广告牌特写\n未来城市夜景，地下管道仰望\n未来城市夜景，机器人巡逻，雾气弥漫\n未来城市夜景，雨后倒影，赛博朋克\n未来城市夜景，废墟之中残存的霓虹\n未来城市夜景，巨塔之巅，星空背景\n未来城市夜景，市集人群，多人种共存\n未来城市夜景，悬浮列车划过画面\nEOF\n\n# ─── Step 2: 批量提交（并发 5）───\npython3 scripts/libtv.py batch \\\n  --file /tmp/cyber_tasks.txt \\\n  --workers 5 \\\n  --output /tmp/cyber_batch.json\n\n# ─── Step 3: 逐个轮询完成 ───\nfor SID in $(python3 -c \"\nimport json\ndata = json.load(open('/tmp/cyber_batch.json'))\nfor r in data:\n    if r.get('sessionId'):\n        print(r['sessionId'])\n\"); do\n    echo \"=== Polling $SID ===\"\n    python3 scripts/libtv.py poll \"$SID\" --interval 8 --timeout 300 --quiet &\ndone\nwait\n\n# ─── Step 4: 导出 HTML 报告 ───\nmkdir -p ~/Downloads/cyber-batch\nfor SID in $(python3 -c \"\nimport json\ndata = json.load(open('/tmp/cyber_batch.json'))\nfor r in data:\n    if r.get('sessionId'):\n        print(r['sessionId'])\n\"); do\n    python3 scripts/libtv.py export \"$SID\" --format html --output ~/Downloads/cyber-batch/$SID.html\n    python3 scripts/libtv.py download \"$SID\" --output-dir ~/Downloads/cyber-batch/$SID\ndone\n\n# ─── Step 5: 浏览 ───\nopen ~/Downloads/cyber-batch/\n```\n\n## 关键参数\n\n| 参数 | 作用 |\n|---|---|\n| `batch --workers 5` | 同时发 5 个，避免 IM 后端被冲 |\n| `batch --output FILE.json` | 保存 sessionId 列表，便于后续轮询 |\n| `export --format html` | 带预览的 HTML，看图最方便 |\n| `export --format markdown` | 适合贴到 Notion / Lark |\n| `export --urls-only` | 只要 URL 列表，给其他脚本用 |\n\n## 进阶：每个任务用不同模型\n\n如果想 10 个任务用不同模型，改用循环 + `model.py with`：\n\n```bash\nMODELS=(lib-nano-pro midjourney seedream-5.0 nano-banana lib-nano-pro \\\n        midjourney seedream-5.0 nano-banana lib-nano-pro midjourney)\nTASKS=(...) # 10 个 prompt\nfor i in {0..9}; do\n    python3 scripts/libtv.py model with \"${MODELS[$i]}\" \"${TASKS[$i]}\" --ratio 16:9 &\ndone\nwait\n```\n\nArchive v0.4.2: 28 files, 55468 bytes\n\nFiles: CHANGELOG.md (3361b), examples/01-generate-image.md (1605b), examples/02-generate-video.md (1870b), examples/03-edit-with-reference.md (1733b), examples/04-character-to-video.md (2914b), examples/05-batch-images.md (2786b), examples/README.md (1341b), README.md (4450b), scripts/_common.py (7092b), scripts/batch_create.py (4279b), scripts/change_project.py (1281b), scripts/create_session.py (2024b), scripts/download_results.py (5233b), scripts/edit.py (4851b), scripts/export_results.py (7851b), scripts/flow.py (4706b), scripts/libtv.py (4023b), scripts/manage_project.py (6760b), scripts/model.py (6968b), scripts/monitor_session.py (6225b), scripts/node.py (7081b), scripts/query_session.py (1685b), scripts/quick_poll.py (4284b), scripts/session_history.py (6624b), scripts/upload_file.py (3531b), scripts/workflow_template.py (4864b), SKILL.md (12317b), _meta.json (134b)\n\nFile v0.4.2:SKILL.md\n\n---\nname: libtv-skill-pro\ndescription: 通过 LibTV (liblib.tv) AI 视频平台生成和编辑图片/视频的完整工具集。覆盖文生图/视频、图生图/视频、视频续写、风格迁移、局部编辑（把纸船换成爱心）、短剧/MV/TVC 制作、角色三视图、分镜设计、首尾帧视频、音频生视频。支持 Seedance 2.0 / Kling 3.0/O3 / Wan 2.6 / Nano Banana / Midjourney / Seedream 5.0 / Lib Nano Pro / GVLM 3.1 等模型，可显式指定模型+参数（比例/分辨率/时长）。Pro 版扩展批量并发、轮询监控、工作流模板、结果导出、会话历史、项目管理、统一入口、dry-run 预览、结构化错误。触发词：画一个/生成/做一个/帮我做、liblib/libtv/aigc、视频/图片/MV/TVC/短剧/分镜/动漫/海报、AI 视频/图片生成、画/生成一张/一段。\nuser-invocable: true\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"🎬\",\n        \"requires\":\n          {\n            \"bins\": [\"python3\"],\n            \"env\": [\"LIBTV_ACCESS_KEY\"]\n          },\n        \"primaryEnv\": \"LIBTV_ACCESS_KEY\"\n      }\n  }\n---\n\n# libtv-skill-pro\n\n> Fork of [@haofanwang/libtv-skill](https://clawhub.ai/haofanwang/libtv-skill) — 在原版基础上扩展高级工作流与功能矩阵层。Source / Issues: 见包内 README.md。\n\nLibTV (liblib.tv) 是 LiblibAI 推出的 AI 视频创作平台。本 skill 让 Agent 通过统一入口 `libtv.py` 完成生成 / 编辑 / 修饰 / 模型路由的全链路。\n\n## 快速开始（3 分钟跑通第一个 case）\n\n```bash\n# 1. 拿 access key：https://www.liblib.tv → 用户中心 → API / 开发者\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# 2. 看完整命令清单\npython3 {baseDir}/scripts/libtv.py --help\n\n# 3. 跑第一个 case（dry-run 预览，不烧积分）\npython3 {baseDir}/scripts/libtv.py model with lib-nano-pro \\\n  \"白色短毛猫坐在窗台上\" --ratio 1:1 --resolution 2K --dry-run\n\n# 4. 去掉 --dry-run 真实生成（≈14 积分，≈60s）\npython3 {baseDir}/scripts/libtv.py model with lib-nano-pro \\\n  \"白色短毛猫坐在窗台上\" --ratio 1:1 --resolution 2K\n# → 返回 sessionId，再用 poll 等结果，download 取本地\n\npython3 {baseDir}/scripts/libtv.py poll <SESSION_ID>\npython3 {baseDir}/scripts/libtv.py download <SESSION_ID> --output-dir ~/Downloads/cat\n```\n\n5 个完整 case 见 `examples/`（图像 / 视频 / 编辑 / 多步链 / 批量）。\n\n## 推荐入口：`libtv.py <subcommand>`\n\n所有功能聚合在一个入口，Agent 路由更顺：\n\n```\npython3 libtv.py flow       <preset> \"<topic>\" [--ref URL]\npython3 libtv.py node       <action> \"<topic>\" [--ref URL]\npython3 libtv.py edit       <modifier> \"<desc>\" [--target URL] [--session-id SID]\npython3 libtv.py model      list|with <model> \"<prompt>\" [params]\n\npython3 libtv.py session    \"<message>\"               # 创建会话/发消息（底层）\npython3 libtv.py query      <SID>                     # 查询会话进展\npython3 libtv.py upload     <local_file>              # 上传到 OSS\npython3 libtv.py download   <SID> [--output-dir DIR]  # 下载结果\n\npython3 libtv.py batch      --file tasks.txt --workers 5\npython3 libtv.py monitor    <SID> --poll --extract-urls\npython3 libtv.py poll       <SID>\npython3 libtv.py template   <name> \"<topic>\"\npython3 libtv.py export     <SID> --format html\npython3 libtv.py history    list|add|show|get|remove\npython3 libtv.py project    list|current|switch|use|remove|describe\n```\n\n> 旧路径 `python3 scripts/<name>.py ...` 仍可用（向后兼容）。新代码统一用 `libtv.py`。\n\n## 决策树（路由判断）\n\n收到用户需求时，按以下顺序匹配：\n\n| 用户输入 | 走哪条路径 |\n|---|---|\n| 用户提供了本地文件（图/视频/音频路径）| 先 `upload` 拿 OSS URL，再发到下一步 |\n| 模糊一句话「画只猫 / 做个 MV」 | `session` 让后端 Agent 路由（最省心）|\n| 明确想要 LibTV 某个入口（\"做个角色三视图\"）| `flow <preset>` |\n| 明确想用某个模型（\"用 Seedance 出视频\"）| `model with <model>` |\n| 想在已生成内容上改风格 / 加运镜 | `edit <modifier> --session-id SID` |\n| 一次发 10+ 任务 | `batch --file tasks.txt --workers 5` |\n| 完整短剧 / MV / 角色设计预设 | `template <name>` |\n| 等结果 / 查进度 | `poll`（简单等）或 `monitor`（看过程）|\n| 取结果 | `download <SID>` |\n\n**永远先 `--dry-run` 预览**：每个生成类子命令（flow/node/edit/model）都支持 `--dry-run`，会输出 JSON 显示 will-send prompt 而不调 API。\n\n## 已知模型（用 `libtv.py model list` 查最新）\n\n| 类型 | 模型 | 适用 |\n|---|---|---|\n| LLM | gvlm-3.1 | 剧本/广告词/品牌文案/提示词改写 |\n| 图像 | lib-nano-pro | 快速生图、图生图、高清化 |\n| 图像 | nano-banana | 平面海报/插画（Google Gemini 系） |\n| 图像 | midjourney | 美学风/插画/海报 |\n| 图像 | seedream-5.0 | 写实/电影感（豆包系） |\n| 视频 | seedance-2.0-vip | 文生/图生视频、短片（默认） |\n| 视频 | kling-3.0 | 写实人像、动作连贯 |\n| 视频 | kling-o3 | 高质量长视频 |\n| 视频 | wan-2.6 | 多镜头长视频（通义万相） |\n\n模型参数：`--ratio 16:9` `--resolution 720P|2K` `--duration 5s` `--count \"1张\"`\n\n## 错误响应（v0.4.0+ 结构化）\n\n所有 API 错误以 JSON 写到 stderr，便于 Agent 程序化处理：\n\n```json\n{\n  \"error\": {\n    \"kind\": \"INVALID_ACCESS_KEY\",\n    \"http_code\": 401,\n    \"message\": \"accessKey 不存在或无效\",\n    \"raw\": \"{...}\"\n  }\n}\n```\n\n错误 kind 清单：`INVALID_ACCESS_KEY` / `FORBIDDEN_OR_INSUFFICIENT_CREDITS` / `NOT_FOUND` / `TIMEOUT` / `RATE_LIMITED` / `SERVER_ERROR` / `BAD_GATEWAY` / `SERVICE_UNAVAILABLE` / `GATEWAY_TIMEOUT` / `NETWORK_ERROR` / `INTERRUPTED` / `UNKNOWN`。\n\n## 16 类能力详解\n\n详细说明继续保留以便深度使用，但**优先看 `examples/` 和决策树**。\n\n### 1. 创建会话 / 发送消息 — `libtv.py session`\n\n```bash\n# 自然语言发消息（后端 Agent 自己路由模型）\npython3 libtv.py session \"生一个动漫视频\"\n\n# 续聊已有会话\npython3 libtv.py session \"再来一张风景图\" --session-id SID\n```\n\n### 2. 查询会话进展 — `libtv.py query`\n\n```bash\npython3 libtv.py query SID --after-seq 5       # 增量拉取\npython3 libtv.py query SID --project-id PUUID  # 附带项目地址\n```\n\n### 3. 上传文件 — `libtv.py upload`\n\n支持图片 / 视频，≤ 200MB。返回 OSS URL。\n\n```bash\npython3 libtv.py upload /path/to/image.png\npython3 libtv.py upload /path/to/video.mp4\n```\n\n### 4. 下载结果 — `libtv.py download`\n\n```bash\npython3 libtv.py download SID --output-dir ~/Downloads/proj --prefix scene\npython3 libtv.py download --urls URL1 URL2 --output-dir ./out   # 直接给 URL 列表\n```\n\n### 5. 批量任务 — `libtv.py batch`\n\n```bash\npython3 libtv.py batch --file tasks.txt --workers 5 --output result.json\npython3 libtv.py batch -m \"猫\" -m \"狗\" -m \"鸟\"\n```\n\n### 6. 实时监控 — `libtv.py monitor`\n\n```bash\npython3 libtv.py monitor SID --poll --interval 15 --extract-urls\npython3 libtv.py monitor SID --poll --format json --output log.json\n```\n\n### 7. 简化轮询 — `libtv.py poll`\n\n```bash\npython3 libtv.py poll SID                            # 默认 8s 间隔，10 分钟超时\npython3 libtv.py poll SID --interval 5 --timeout 300\npython3 libtv.py poll SID --quiet                    # 只输出最终结果\n```\n\n### 8. 工作流模板 — `libtv.py template`\n\n```bash\npython3 libtv.py template --list\npython3 libtv.py template storyboard \"科幻城市的故事\"\npython3 libtv.py template short_drama \"友情故事\"\npython3 libtv.py template music_video \"悲伤钢琴曲\"\n```\n\n8 个模板：storyboard / character_design / video_generation / image_generation / style_transfer / short_drama / music_video / product_showcase\n\n### 9. 结果导出 — `libtv.py export`\n\n```bash\npython3 libtv.py export SID --format html --output report.html\npython3 libtv.py export SID --format markdown --output report.md\npython3 libtv.py export SID --urls-only\n```\n\n### 10. 会话历史 — `libtv.py history`\n\n```bash\npython3 libtv.py history list\npython3 libtv.py history add SID --desc \"项目描述\"\npython3 libtv.py history get 1     # 拿到 sessionId（脚本用）\npython3 libtv.py history remove 1\n```\n\n### 11. 项目管理 — `libtv.py project`\n\n```bash\npython3 libtv.py project list                # 列本地记录\npython3 libtv.py project current             # 当前项目\npython3 libtv.py project switch --desc \"短剧 A\"   # 创建新项目\npython3 libtv.py project use PUUID           # 切到指定项目\npython3 libtv.py project describe PUUID \"MV\"\npython3 libtv.py project remove PUUID\n```\n\n本地状态：`~/.libtv_projects.json`。\n\n### 12. 预设流程 — `libtv.py flow`\n\n```bash\npython3 libtv.py flow story_script \"机器人来到唐朝\"\npython3 libtv.py flow character_views \"穿汉服的赛博朋克少女\"\npython3 libtv.py flow keyframe_to_video \"拔剑出鞘\" --ref OSS_URL\npython3 libtv.py flow audio_to_video \"暗黑风 MV\" --ref OSS_URL\n```\n\n### 13. 节点能力 — `libtv.py node`\n\n```bash\n# 文本节点\npython3 libtv.py node text_to_video_prompt \"一只猫在屋顶看月亮\"\npython3 libtv.py node image_caption --ref IMG_URL\npython3 libtv.py node text_to_music \"悲伤、钢琴、60秒\"\n\n# 图片节点\npython3 libtv.py node image_to_image \"改赛博朋克风\" --ref IMG_URL\npython3 libtv.py node image_upscale --ref IMG_URL\n\n# 视频节点\npython3 libtv.py node first_last_frame \"拔剑过程\" --ref start.png --ref2 end.png\npython3 libtv.py node reference_video \"保留主体演绎新场景\" --ref ref.png\n```\n\n### 14. 修饰器 — `libtv.py edit`\n\n```bash\npython3 libtv.py edit style \"宫崎骏吉卜力\" --target URL --session-id SID\npython3 libtv.py edit camera \"无人机环绕\" --target \"场景\" --session-id SID\npython3 libtv.py edit character_lib \"孙悟空\" --target \"花果山\" --session-id SID\npython3 libtv.py edit mark \"纸船换爱心\" --target URL --session-id SID\npython3 libtv.py edit focus \"右上角月亮\" --target URL --session-id SID\n```\n\n### 15. 模型路由 — `libtv.py model`\n\n```bash\npython3 libtv.py model list\npython3 libtv.py model list --kind video\npython3 libtv.py model with seedance-2.0-vip \"...\" --ratio 16:9 --duration 5s\npython3 libtv.py model with lib-nano-pro \"...\" --ratio 1:1 --resolution 2K\n```\n\n### 16. dry-run（v0.4.0+）\n\n所有生成类子命令（flow/node/edit/model）支持 `--dry-run`：输出将发送的 prompt 但**不调 API、不烧积分**。\n\n```bash\npython3 libtv.py flow story_script \"...\" --dry-run\npython3 libtv.py model with seedance-2.0-vip \"...\" --duration 5s --dry-run\n```\n\n## 用户侧 Agent 的核心原则\n\n你（用户侧 Agent）是**搬运工**，不是创作者。后端 LibTV Agent 有专业的模型选择 / prompt 工程 / 工作流编排能力。\n\n- **能传话就别替用户写 prompt**：用户说\"帮我推演分镜\"，就调 `session \"帮我推演分镜\"`，不要自己先编个分镜表\n- **能用 `flow`/`model` 显式入口就别让后端猜**：用户说\"用 Seedance 做 5 秒视频\"时，直接 `model with seedance-2.0-vip --duration 5s`\n- **永远先 `--dry-run` 检查 prompt**：调真 API 前一次 dry-run 能省很多冤枉积分\n- **下载到本地后向用户展示**：results URL + projectUrl 两个都给\n\n## 输出格式（v0.4.0+ 全 JSON）\n\n所有 stdout 输出都是 JSON，便于 Agent 程序化解析：\n\n```json\n// session / flow / node / edit / model 等生成类\n{\"projectUuid\":\"...\", \"sessionId\":\"...\", \"projectUrl\":\"...\", \"message_sent\":\"...\"}\n\n// dry-run\n{\"dry_run\":true, \"preset\":\"...\", \"would_send\":\"...\", ...}\n\n// list 类（model list / project list / history list 等仍输出表格，便于人类查看）\n```\n\n错误以 JSON 写 stderr（见上面\"错误响应\"）。\n\n## 注意事项\n\n- 鉴权方式：`Authorization: Bearer <LIBTV_ACCESS_KEY>`\n- 项目画布地址：`https://www.liblib.tv/canvas?projectId=<projectUuid>`\n- 上传 OSS 地址格式：`https://libtv-res.liblib.art/claw/{projectUuid}/{uuid}{ext}`\n- 文件大小限制：200MB\n- 生成中只给用户\"正在生成\"提示；完成后同时给 **结果 URL + projectUrl**\n- 本地状态：`~/.libtv_projects.json`（项目）+ `~/.libtv_session_history.json`（会话历史）\n\nFile v0.4.2:examples/README.md\n\n# Examples\n\n5 个典型 case，按\"难度 / 积分 / 耗时\"排列。建议第一次用按 01 → 02 → 03 → 04 → 05 顺序看。\n\n| # | 场景 | 命令风格 | 积分 | 耗时 | 难度 |\n|---|---|---|---|---|---|\n| [01](./01-generate-image.md) | 生一张猫图（最小路径）| `model with lib-nano-pro` | ≈14 | ≈60s | ⭐ |\n| [02](./02-generate-video.md) | 生一段 5s 视频 | `model with seedance-2.0-vip` | ≈135 | 5-8 min | ⭐⭐ |\n| [03](./03-edit-with-reference.md) | 把纸船换成爱心（局部编辑）| `upload` + `edit mark` | ≈14-20 | ≈90s | ⭐⭐ |\n| [04](./04-character-to-video.md) | 角色三视图 → 首帧图生视频 | `flow character_views` + `flow keyframe_to_video` + `edit camera` | ≈150 | ≈10 min | ⭐⭐⭐ |\n| [05](./05-batch-images.md) | 并发批量 10 张图 + HTML 报告 | `batch` + `export html` | ≈140 | ≈2 min | ⭐⭐ |\n\n## 跑这些 example 前\n\n1. **设置 API key**：\n   ```bash\n   export LIBTV_ACCESS_KEY=your_key_here\n   ```\n   key 从 [LibTV 用户中心](https://www.liblib.tv) 获取（个人设置 → API / 开发者）。\n\n2. **dry-run 先看 prompt**：每个 case 第一步都有 `--dry-run`，跑完确认 prompt 没问题再去掉它正式生成。可以省下大量积分。\n\n3. **从最便宜的 01 开始**：14 积分一张图，跑通了再去 02。\n\nFile v0.4.2:README.md\n\n# libtv-skill-pro\n\n> 🎬 LibTV (liblib.tv) AI 视频/图像生成平台的 OpenClaw / ClawHub skill。Pro 版在 [@haofanwang/libtv-skill](https://clawhub.ai/haofanwang/libtv-skill) 基础上扩展高级工作流与功能矩阵层。\n\n[![ClawHub](https://img.shields.io/badge/ClawHub-libtv--skill--pro-orange)](https://clawhub.ai/qiuxiangxiang/libtv-skill-pro)\n[![License](https://img.shields.io/badge/license-MIT--0-blue)](LICENSE)\n\n## 是什么\n\n让 Agent（OpenClaw / Claude Code / 其他 ClawHub-compatible 客户端）通过统一入口调用 LibTV 平台的 AI 创作能力：\n\n- **生成**：文生图/视频、图生图/视频、首尾帧视频、音频驱动视频\n- **编辑**：局部修改（\"把纸船换成爱心\"）、风格迁移、运镜调整\n- **多模型路由**：Seedance 2.0 / Kling 3.0/O3 / Wan 2.6 / Nano Banana / Midjourney / Seedream 5.0 / Lib Nano Pro / GVLM 3.1\n- **工作流**：批量并发、轮询监控、8 个预设模板（短剧/MV/角色设计/分镜...）、HTML 报告导出\n- **dry-run 预览**：所有生成类命令支持 `--dry-run`，预览 prompt 不烧积分\n- **结构化错误**：API 错误以 JSON 输出，Agent 程序化可处理\n\n## 安装\n\n### 方式 1：通过 ClawHub（推荐）\n\n```bash\nopenclaw skills install libtv-skill-pro\n```\n\n### 方式 2：从这个仓库克隆\n\n```bash\ngit clone https://github.com/YOUR_HANDLE/libtv-skill-pro.git ~/.agents/skills/libtv-skill-pro\n```\n\n## 快速开始\n\n```bash\n# 1. 拿 access key：https://www.liblib.tv → 用户中心 → API\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# 2. 看命令清单\npython3 scripts/libtv.py --help\n\n# 3. dry-run 预览（不烧积分）\npython3 scripts/libtv.py model with lib-nano-pro \\\n  \"白色短毛猫坐在窗台上\" --ratio 1:1 --resolution 2K --dry-run\n\n# 4. 真实生成 + 轮询 + 下载\npython3 scripts/libtv.py model with lib-nano-pro \"...\" --ratio 1:1\npython3 scripts/libtv.py poll SESSION_ID\npython3 scripts/libtv.py download SESSION_ID --output-dir ~/Downloads/cat\n```\n\n完整示例见 [`examples/`](./examples/)（5 个递进难度的 case）。\n\n## 命令地图\n\n```\nlibtv.py flow      预设流程（故事脚本/角色三视图/首帧图生视频/音频生视频）\nlibtv.py node      节点能力（文本/图片/视频节点细分动作）\nlibtv.py edit      修饰器（风格/标记/聚焦/运镜/角色库）\nlibtv.py model     模型路由（list 已知模型 / with 指定模型生成）\n\nlibtv.py session   创建会话/发消息       libtv.py query   查询会话进展\nlibtv.py upload    上传图片/视频         libtv.py download 下载结果\n\nlibtv.py batch     并发批量任务          libtv.py monitor 实时监控\nlibtv.py poll      简化轮询              libtv.py template 预设工作流模板\nlibtv.py export    导出 HTML/MD/JSON     libtv.py history 会话历史\nlibtv.py project   项目管理\n```\n\n17 个独立脚本（`scripts/*.py`）仍可单独调用（向后兼容）。\n\n## 跟原版的关系\n\n| | @haofanwang/libtv-skill | @qiuxiangxiang/libtv-skill-pro |\n|---|---|---|\n| 基础脚本 | 6 个 | 6 个（保留原版） |\n| 高级工作流 | — | 7 个（batch/monitor/poll/template/export/history/project） |\n| LibTV 功能矩阵 | — | 4 个（flow/node/edit/model） |\n| 统一入口 | — | libtv.py |\n| dry-run 预览 | — | ✓ |\n| 结构化错误 | — | ✓ |\n\n如果你只需要\"自然语言一句话路由\"的极简体验，原版 6 脚本足够。Pro 版面向**批量、精细控制、Agent 程序化集成**场景。\n\n## 测试\n\n```bash\n# 离线（5 秒，不烧积分，120 个用例）\nbash tests/test_offline.sh && python3 tests/test_templates.py\n\n# 在线（按开关计费）\nONLINE_SESSION=1 bash tests/test_online.sh    # ≈0 积分\nONLINE_IMAGE=1   bash tests/test_online.sh    # ≈14 积分\nONLINE_VIDEO=1   bash tests/test_online.sh    # ≈135 积分\n```\n\n详细测试矩阵见 [`tests/README.md`](./tests/README.md)。\n\n## 贡献\n\n发现 bug 或想加新功能：\n\n1. Issue 描述场景 + 预期 vs 实际\n2. PR 前请跑通 `bash tests/test_offline.sh && python3 tests/test_templates.py`\n3. 新功能请同时在 `tests/` 加用例 + 在 `examples/` 加 case\n\n## License\n\nMIT-0（与原版一致）。\n\n## 致谢\n\n- [@haofanwang/libtv-skill](https://clawhub.ai/haofanwang/libtv-skill) — 原版基础架构\n- [LibTV (liblib.tv)](https://www.liblib.tv) — AI 视频创作平台\n- [ClawHub](https://clawhub.ai) — Agent skill 分发\n\nFile v0.4.2:_meta.json\n\n{\n  \"ownerId\": \"kn75javp82ghpk79s61mfbp3bx81vsnj\",\n  \"slug\": \"libtv-skill-pro\",\n  \"version\": \"0.4.2\",\n  \"publishedAt\": 1778741357657\n}\n\nFile v0.4.2:CHANGELOG.md\n\n# Changelog\n\n## [0.4.0] - 2026-05-14（即将发布）\n\n**主题：公开推广就绪 + 架构升级**\n\n### Added — 推广向\n- `examples/` 5 个完整 case：生图 / 视频 / 编辑 / 多步链 / 批量\n- `README.md`（GitHub 入口）+ `LICENSE`（MIT-0）+ `.gitignore`\n- `CHANGELOG.md` 正式纳入版本管理\n- 公开 GitHub 仓库（信任来源 / issue / PR）\n- SKILL.md frontmatter description 精简到 ~400 字，前 300 字聚焦关键词（搜索能见度）\n- SKILL.md 增加「快速开始 3 分钟跑通」段落 + 决策树 + LibTV access key 获取链接\n\n### Added — 架构升级\n- `libtv.py` 统一入口（dispatcher）—— Agent 只需记一个命令：`libtv.py {flow|node|edit|model|...}`\n- `--dry-run` 标志（flow / node / edit / model）—— 预览将发送的 prompt，不调 API、不烧积分\n- 结构化错误响应（`_common.APIError` + `safe_run` wrapper）—— 所有 API 错误以 JSON 写 stderr，含 kind / http_code / message / raw\n- 错误 kind 枚举：INVALID_ACCESS_KEY / FORBIDDEN_OR_INSUFFICIENT_CREDITS / NOT_FOUND / TIMEOUT / RATE_LIMITED / SERVER_ERROR / NETWORK_ERROR / INTERRUPTED / UNKNOWN\n\n### Fixed\n- `change_project.py` 缺 argparse 导致 `--help` 直接调真 API（之前发版前发现的 bug）\n- `_common.py` 不再在 import 时因缺 LIBTV_ACCESS_KEY 而 `sys.exit(1)`——改为延迟到首次实际调用 API 时抛 `APIError`，让 `--help` 在任何情况下都可用\n\n### Changed\n- 所有调 API 的脚本都接入 `safe_run(main)` wrapper\n- frontmatter emoji 由 💬 改为 🎬（配合 film 图标）\n- tests/test_offline.sh 增加 1b（libtv.py 入口）+ 1c（dry-run 验证）共 20 个新用例\n- 总测试用例：73 离线 + 47 模板 = **120 全通**\n\n### Cleanup\n- 发布前清掉 workspace 的 `.clawhub/origin.json`（之前误发）\n- `_meta.json` 不打包进发布\n\n---\n\n## [0.3.0] - 2026-05-13\n\n**LibTV 功能矩阵层**（slug: libtv-skill-pro，fork-of @haofanwang/libtv-skill@1.0.3）\n\n新增 4 个脚本覆盖 LibTV 画布上的完整功能矩阵：\n\n- `flow.py` — LibTV 首页 4 个预设流程（story_script / character_views / keyframe_to_video / audio_to_video）\n- `node.py` — 文本/图片/视频节点的细分动作（text_to_video_prompt / image_caption / text_to_music / image_to_image / image_upscale / first_last_frame / reference_video）\n- `edit.py` — 节点修饰器（style / mark / focus / camera / character_lib）\n- `model.py` — 模型路由（list 9 个已知模型 + with 显式指定模型+参数）\n\nSKILL.md 第 13–16 节文档，新增「场景 8：按 LibTV 网页功能直接调用」工作流示例。\n\n## [0.2.0] - 2026-05-13\n\n**首发 libtv-skill-pro**（fork-of @haofanwang/libtv-skill@1.0.3）\n\n在原版 6 个基础脚本之上扩展 7 个高级工作流脚本：\n\n- `manage_project.py`（list/current/switch/use/remove/describe + `~/.libtv_projects.json` 本地项目记录）\n- `batch_create.py`（并发批量任务）\n- `monitor_session.py`（实时监控）\n- `quick_poll.py`（简化轮询）\n- `workflow_template.py`（8 个预设模板）\n- `export_results.py`（导出 JSON / Markdown / HTML）\n- `session_history.py`（会话历史管理）\n\n行为增强：\n- `create_session.py` / `change_project.py` 自动写入本地项目记录\n- `_common.py`：`change_project()` 支持可选 `projectUuid` 参数\n\nFile v0.4.2:examples/01-generate-image.md\n\n# Example 01：生一张猫图（最小路径）\n\n**积分消耗**：≈14 · **耗时**：≈60s · **难度**：⭐\n\n最简单的端到端：从输入到本地图片 4 个命令搞定。\n\n## 用户需求\n\n「生一张白色短毛猫坐在窗台上的图，1:1 比例，2K 分辨率，用 lib-nano-pro 模型」\n\n## 命令链\n\n```bash\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# 1. 预览将发送的 prompt（不烧积分）\npython3 scripts/libtv.py model with lib-nano-pro \\\n  \"白色短毛猫坐在窗台上\" \\\n  --ratio 1:1 --resolution 2K --count \"1张\" \\\n  --dry-run\n\n# 2. 真实生成\nRESULT=$(python3 scripts/libtv.py model with lib-nano-pro \\\n  \"白色短毛猫坐在窗台上\" \\\n  --ratio 1:1 --resolution 2K --count \"1张\")\necho \"$RESULT\"\nSID=$(echo \"$RESULT\" | python3 -c \"import sys,json; print(json.loads(sys.stdin.read())['sessionId'])\")\n\n# 3. 轮询等待完成（默认 8s 间隔，10 分钟超时）\npython3 scripts/libtv.py poll \"$SID\"\n\n# 4. 下载到本地\npython3 scripts/libtv.py download \"$SID\" --output-dir ~/Downloads/cat --prefix cat\n```\n\n## 预期输出\n\n- 一张 2K PNG/JPG 保存在 `~/Downloads/cat/cat_01.png`\n- 一个 `projectUrl`，浏览器打开可以看 LibTV 项目画布\n\n## 常见故障\n\n| 现象 | 错误 kind | 解决 |\n|---|---|---|\n| 第 2 步 401 | `INVALID_ACCESS_KEY` | 检查 `LIBTV_ACCESS_KEY` 是否正确 |\n| 第 2 步 403 | `FORBIDDEN_OR_INSUFFICIENT_CREDITS` | 积分不足，去 LibTV 充值 |\n| 第 3 步超时 | — | 后端慢，去 `projectUrl` 画布上手动看结果 |\n| 第 4 步空 | — | 会话里还没有结果 URL，再等一会儿重跑 |\n\nFile v0.4.2:examples/02-generate-video.md\n\n# Example 02：用 Seedance 生一段 5 秒视频\n\n**积分消耗**：≈135 · **耗时**：5-8 min · **难度**：⭐⭐\n\n文生视频，指定模型 + 参数。\n\n## 用户需求\n\n「用 Seedance 2.0 VIP 生成一段 5 秒、16:9、720P 的视频：黄昏草原上一只白马奔跑」\n\n## 命令链\n\n```bash\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# 1. 预览（强烈建议先 dry-run 检查参数是否传对）\npython3 scripts/libtv.py model with seedance-2.0-vip \\\n  \"黄昏草原上一只白马奔跑，阳光金黄，长鬃飘动\" \\\n  --ratio 16:9 --resolution 720P --duration 5s --count \"1个\" \\\n  --dry-run\n\n# 2. 真实生成\nRESULT=$(python3 scripts/libtv.py model with seedance-2.0-vip \\\n  \"黄昏草原上一只白马奔跑，阳光金黄，长鬃飘动\" \\\n  --ratio 16:9 --resolution 720P --duration 5s --count \"1个\")\nSID=$(echo \"$RESULT\" | python3 -c \"import sys,json; print(json.loads(sys.stdin.read())['sessionId'])\")\n\n# 3. 视频生成慢，用 monitor 看进度（15s 间隔）\npython3 scripts/libtv.py monitor \"$SID\" --poll --interval 15 --extract-urls --timeout 600\n\n# 4. 下载\npython3 scripts/libtv.py download \"$SID\" --output-dir ~/Downloads/horse --prefix horse\n\n# 5. 加到会话历史（方便以后用 history list 找到）\npython3 scripts/libtv.py history add \"$SID\" --desc \"Seedance 白马奔跑 5s\"\n```\n\n## 预期输出\n\n- `~/Downloads/horse/horse_01.mp4`（约 5 秒、16:9、720P）\n- 项目画布链接（可在 LibTV 网页上分享/编辑）\n\n## 模型选择参考\n\n| 想要 | 推荐模型 | 参数 |\n|---|---|---|\n| 快速预览 / 测试 prompt | `seedance-2.0-vip` | 720P, 5s |\n| 写实人像、动作连贯 | `kling-3.0` | 1080P, 5-10s |\n| 长视频、高质量 | `kling-o3` | 1080P, 10s |\n| 多镜头、复杂场景 | `wan-2.6` | 1080P, 任意 |\n\n用 `python3 scripts/libtv.py model list --kind video` 查全部视频模型。\n\nFile v0.4.2:examples/03-edit-with-reference.md\n\n# Example 03：基于参考图编辑（\"把纸船换成爱心\"）\n\n**积分消耗**：≈14-20 · **耗时**：≈90s · **难度**：⭐⭐\n\n用户拿一张图，要求局部编辑——这是 LibTV 的典型场景。\n\n## 用户需求\n\n「这张图（本地路径 `~/Desktop/origin.png`）里，把所有纸船换成白色纸爱心，保持其他不变」\n\n## 命令链\n\n```bash\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# 1. 先把本地图片上传到 LibTV OSS\nUPLOAD=$(python3 scripts/libtv.py upload ~/Desktop/origin.png)\necho \"$UPLOAD\"\nOSS_URL=$(echo \"$UPLOAD\" | python3 -c \"import sys,json; print(json.loads(sys.stdin.read())['url'])\")\n\n# 2. 用 edit.py mark（局部标记修改）+ OSS URL\nRESULT=$(python3 scripts/libtv.py edit mark \\\n  \"把画面里所有纸船的区域换成白色纸爱心，其他保持不变\" \\\n  --target \"$OSS_URL\")\nSID=$(echo \"$RESULT\" | python3 -c \"import sys,json; print(json.loads(sys.stdin.read())['sessionId'])\")\n\n# 3. 轮询\npython3 scripts/libtv.py poll \"$SID\" --interval 8 --timeout 300\n\n# 4. 下载\npython3 scripts/libtv.py download \"$SID\" --output-dir ~/Desktop/edited\n```\n\n## 替代方案：用 node.py image_to_image\n\n如果是整张图的风格/内容大改（不只是局部），用 image_to_image：\n\n```bash\npython3 scripts/libtv.py node image_to_image \\\n  \"把画面整体改成赛博朋克风\" \\\n  --ref \"$OSS_URL\"\n```\n\n## 修饰器选择\n\n| 用户描述 | 推荐 modifier |\n|---|---|\n| \"把 X 换成 Y\" / \"去掉 X\" / \"加上 X\" | `mark` |\n| \"改成 X 风格\" / \"做成卡通\" / \"宫崎骏感觉\" | `style` |\n| \"强调右上角\" / \"聚焦在人物\" | `focus` |\n| \"用环绕镜头\" / \"推镜头\" / \"希区柯克变焦\" | `camera` |\n| \"用孙悟空作为角色\" | `character_lib` |\n\nFile v0.4.2:examples/04-character-to-video.md\n\n# Example 04：角色三视图 → 首帧图生视频（多步链）\n\n**积分消耗**：≈150 · **耗时**：≈10 min · **难度**：⭐⭐⭐\n\n经典工作流：先做角色 IP 资产，再用其中一张作为视频首帧。\n\n## 用户需求\n\n「我要做一个穿汉服的赛博朋克少女角色，先出三视图，然后用正面图做首帧生成一段她在霓虹街道行走的 5 秒视频」\n\n## 命令链\n\n```bash\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# ─── 第一段：角色三视图 ───\nSTEP1=$(python3 scripts/libtv.py flow character_views \\\n  \"穿汉服的赛博朋克少女，银发，红色机械义眼，唐风刺绣旗袍混搭金属护甲\")\nSID=$(echo \"$STEP1\" | python3 -c \"import sys,json; print(json.loads(sys.stdin.read())['sessionId'])\")\nPROJECT=$(echo \"$STEP1\" | python3 -c \"import sys,json; print(json.loads(sys.stdin.read())['projectUrl'])\")\n\necho \"角色生成中，画布：$PROJECT\"\npython3 scripts/libtv.py poll \"$SID\" --interval 8 --timeout 300\n\n# 下载三视图\npython3 scripts/libtv.py download \"$SID\" --output-dir ~/Downloads/character --prefix view\n# 应该会拿到 view_01.png（正面）/ view_02.png（侧面）/ view_03.png（背面）\n\n# ─── 第二段：上传正面图作为首帧 ───\nUPLOAD=$(python3 scripts/libtv.py upload ~/Downloads/character/view_01.png)\nFRAME_URL=$(echo \"$UPLOAD\" | python3 -c \"import sys,json; print(json.loads(sys.stdin.read())['url'])\")\n\n# ─── 第三段：首帧图生视频，在同一会话内（保持上下文）───\nSTEP3=$(python3 scripts/libtv.py flow keyframe_to_video \\\n  \"角色在夜晚霓虹密布的街道上缓步前行，回头一瞥，环绕运镜\" \\\n  --ref \"$FRAME_URL\" \\\n  --session-id \"$SID\")\n\n# ─── 第四段：叠加运镜修饰器（强化运镜质量）───\npython3 scripts/libtv.py edit camera \\\n  \"环绕 + 微推镜头，希区柯克变焦在回眸瞬间\" \\\n  --target \"（上一条 keyframe_to_video 的生成视频）\" \\\n  --session-id \"$SID\"\n\n# ─── 第五段：等待 + 下载 ───\npython3 scripts/libtv.py monitor \"$SID\" --poll --interval 15 --extract-urls --timeout 600\npython3 scripts/libtv.py download \"$SID\" --output-dir ~/Downloads/character_video\n```\n\n## 这个 case 演示的能力\n\n1. **预设流程入口** (`flow character_views`, `flow keyframe_to_video`)\n2. **本地文件上传** (`upload`)\n3. **会话上下文复用** (`--session-id`)\n4. **修饰器叠加** (`edit camera`)\n5. **轮询 + 下载** (`poll` / `monitor` / `download`)\n\n## 简化版（不用 flow，直接用 model.py）\n\n如果你想精确控制每步用什么模型：\n\n```bash\n# 角色用 Midjourney（美学风）\npython3 scripts/libtv.py model with midjourney \"穿汉服的赛博朋克少女三视图...\" --ratio 16:9\n\n# 视频用 Kling O3（高质量长视频）\npython3 scripts/libtv.py model with kling-o3 \"霓虹街道行走...\" --ratio 16:9 --duration 10s\n```\n\nFile v0.4.2:examples/05-batch-images.md\n\n# Example 05：批量生成 10 张图（并发 + 自动 HTML 报告）\n\n**积分消耗**：≈140（14 × 10）· **耗时**：≈2 min · **难度**：⭐⭐\n\n需要做 9 宫格、分镜、产品图组等场景。\n\n## 用户需求\n\n「给我生成 10 张'未来城市夜景'的图，不同视角，最后导出 HTML 报告方便看」\n\n## 命令链\n\n```bash\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# ─── Step 1: 准备任务文件 ───\ncat > /tmp/cyber_tasks.txt <<'EOF'\n未来城市夜景，高空俯瞰，霓虹密布\n未来城市夜景，街道平视，飞行汽车\n未来城市夜景，巨型全息广告牌特写\n未来城市夜景，地下管道仰望\n未来城市夜景，机器人巡逻，雾气弥漫\n未来城市夜景，雨后倒影，赛博朋克\n未来城市夜景，废墟之中残存的霓虹\n未来城市夜景，巨塔之巅，星空背景\n未来城市夜景，市集人群，多人种共存\n未来城市夜景，悬浮列车划过画面\nEOF\n\n# ─── Step 2: 批量提交（并发 5）───\npython3 scripts/libtv.py batch \\\n  --file /tmp/cyber_tasks.txt \\\n  --workers 5 \\\n  --output /tmp/cyber_batch.json\n\n# ─── Step 3: 逐个轮询完成 ───\nfor SID in $(python3 -c \"\nimport json\ndata = json.load(open('/tmp/cyber_batch.json'))\nfor r in data:\n    if r.get('sessionId'):\n        print(r['sessionId'])\n\"); do\n    echo \"=== Polling $SID ===\"\n    python3 scripts/libtv.py poll \"$SID\" --interval 8 --timeout 300 --quiet &\ndone\nwait\n\n# ─── Step 4: 导出 HTML 报告 ───\nmkdir -p ~/Downloads/cyber-batch\nfor SID in $(python3 -c \"\nimport json\ndata = json.load(open('/tmp/cyber_batch.json'))\nfor r in data:\n    if r.get('sessionId'):\n        print(r['sessionId'])\n\"); do\n    python3 scripts/libtv.py export \"$SID\" --format html --output ~/Downloads/cyber-batch/$SID.html\n    python3 scripts/libtv.py download \"$SID\" --output-dir ~/Downloads/cyber-batch/$SID\ndone\n\n# ─── Step 5: 浏览 ───\nopen ~/Downloads/cyber-batch/\n```\n\n## 关键参数\n\n| 参数 | 作用 |\n|---|---|\n| `batch --workers 5` | 同时发 5 个，避免 IM 后端被冲 |\n| `batch --output FILE.json` | 保存 sessionId 列表，便于后续轮询 |\n| `export --format html` | 带预览的 HTML，看图最方便 |\n| `export --format markdown` | 适合贴到 Notion / Lark |\n| `export --urls-only` | 只要 URL 列表，给其他脚本用 |\n\n## 进阶：每个任务用不同模型\n\n如果想 10 个任务用不同模型，改用循环 + `model.py with`：\n\n```bash\nMODELS=(lib-nano-pro midjourney seedream-5.0 nano-banana lib-nano-pro \\\n        midjourney seedream-5.0 nano-banana lib-nano-pro midjourney)\nTASKS=(...) # 10 个 prompt\nfor i in {0..9}; do\n    python3 scripts/libtv.py model with \"${MODELS[$i]}\" \"${TASKS[$i]}\" --ratio 16:9 &\ndone\nwait\n```\n\nArchive v0.4.1: 28 files, 55467 bytes\n\nFiles: CHANGELOG.md (3361b), examples/01-generate-image.md (1605b), examples/02-generate-video.md (1870b), examples/03-edit-with-reference.md (1733b), examples/04-character-to-video.md (2914b), examples/05-batch-images.md (2786b), examples/README.md (1341b), README.md (4450b), scripts/_common.py (7092b), scripts/batch_create.py (4279b), scripts/change_project.py (1281b), scripts/create_session.py (2024b), scripts/download_results.py (5233b), scripts/edit.py (4851b), scripts/export_results.py (7851b), scripts/flow.py (4706b), scripts/libtv.py (4023b), scripts/manage_project.py (6760b), scripts/model.py (6968b), scripts/monitor_session.py (6225b), scripts/node.py (7081b), scripts/query_session.py (1685b), scripts/quick_poll.py (4284b), scripts/session_history.py (6624b), scripts/upload_file.py (3531b), scripts/workflow_template.py (4864b), SKILL.md (12317b), _meta.json (134b)\n\nFile v0.4.1:SKILL.md\n\n---\nname: libtv-skill-pro\ndescription: 通过 LibTV (liblib.tv) AI 视频平台生成和编辑图片/视频的完整工具集。覆盖文生图/视频、图生图/视频、视频续写、风格迁移、局部编辑（把纸船换成爱心）、短剧/MV/TVC 制作、角色三视图、分镜设计、首尾帧视频、音频生视频。支持 Seedance 2.0 / Kling 3.0/O3 / Wan 2.6 / Nano Banana / Midjourney / Seedream 5.0 / Lib Nano Pro / GVLM 3.1 等模型，可显式指定模型+参数（比例/分辨率/时长）。Pro 版扩展批量并发、轮询监控、工作流模板、结果导出、会话历史、项目管理、统一入口、dry-run 预览、结构化错误。触发词：画一个/生成/做一个/帮我做、liblib/libtv/aigc、视频/图片/MV/TVC/短剧/分镜/动漫/海报、AI 视频/图片生成、画/生成一张/一段。\nuser-invocable: true\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"🎬\",\n        \"requires\":\n          {\n            \"bins\": [\"python3\"],\n            \"env\": [\"LIBTV_ACCESS_KEY\"]\n          },\n        \"primaryEnv\": \"LIBTV_ACCESS_KEY\"\n      }\n  }\n---\n\n# libtv-skill-pro\n\n> Fork of [@haofanwang/libtv-skill](https://clawhub.ai/haofanwang/libtv-skill) — 在原版基础上扩展高级工作流与功能矩阵层。Source / Issues: 见包内 README.md。\n\nLibTV (liblib.tv) 是 LiblibAI 推出的 AI 视频创作平台。本 skill 让 Agent 通过统一入口 `libtv.py` 完成生成 / 编辑 / 修饰 / 模型路由的全链路。\n\n## 快速开始（3 分钟跑通第一个 case）\n\n```bash\n# 1. 拿 access key：https://www.liblib.tv → 用户中心 → API / 开发者\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# 2. 看完整命令清单\npython3 {baseDir}/scripts/libtv.py --help\n\n# 3. 跑第一个 case（dry-run 预览，不烧积分）\npython3 {baseDir}/scripts/libtv.py model with lib-nano-pro \\\n  \"白色短毛猫坐在窗台上\" --ratio 1:1 --resolution 2K --dry-run\n\n# 4. 去掉 --dry-run 真实生成（≈14 积分，≈60s）\npython3 {baseDir}/scripts/libtv.py model with lib-nano-pro \\\n  \"白色短毛猫坐在窗台上\" --ratio 1:1 --resolution 2K\n# → 返回 sessionId，再用 poll 等结果，download 取本地\n\npython3 {baseDir}/scripts/libtv.py poll <SESSION_ID>\npython3 {baseDir}/scripts/libtv.py download <SESSION_ID> --output-dir ~/Downloads/cat\n```\n\n5 个完整 case 见 `examples/`（图像 / 视频 / 编辑 / 多步链 / 批量）。\n\n## 推荐入口：`libtv.py <subcommand>`\n\n所有功能聚合在一个入口，Agent 路由更顺：\n\n```\npython3 libtv.py flow       <preset> \"<topic>\" [--ref URL]\npython3 libtv.py node       <action> \"<topic>\" [--ref URL]\npython3 libtv.py edit       <modifier> \"<desc>\" [--target URL] [--session-id SID]\npython3 libtv.py model      list|with <model> \"<prompt>\" [params]\n\npython3 libtv.py session    \"<message>\"               # 创建会话/发消息（底层）\npython3 libtv.py query      <SID>                     # 查询会话进展\npython3 libtv.py upload     <local_file>              # 上传到 OSS\npython3 libtv.py download   <SID> [--output-dir DIR]  # 下载结果\n\npython3 libtv.py batch      --file tasks.txt --workers 5\npython3 libtv.py monitor    <SID> --poll --extract-urls\npython3 libtv.py poll       <SID>\npython3 libtv.py template   <name> \"<topic>\"\npython3 libtv.py export     <SID> --format html\npython3 libtv.py history    list|add|show|get|remove\npython3 libtv.py project    list|current|switch|use|remove|describe\n```\n\n> 旧路径 `python3 scripts/<name>.py ...` 仍可用（向后兼容）。新代码统一用 `libtv.py`。\n\n## 决策树（路由判断）\n\n收到用户需求时，按以下顺序匹配：\n\n| 用户输入 | 走哪条路径 |\n|---|---|\n| 用户提供了本地文件（图/视频/音频路径）| 先 `upload` 拿 OSS URL，再发到下一步 |\n| 模糊一句话「画只猫 / 做个 MV」 | `session` 让后端 Agent 路由（最省心）|\n| 明确想要 LibTV 某个入口（\"做个角色三视图\"）| `flow <preset>` |\n| 明确想用某个模型（\"用 Seedance 出视频\"）| `model with <model>` |\n| 想在已生成内容上改风格 / 加运镜 | `edit <modifier> --session-id SID` |\n| 一次发 10+ 任务 | `batch --file tasks.txt --workers 5` |\n| 完整短剧 / MV / 角色设计预设 | `template <name>` |\n| 等结果 / 查进度 | `poll`（简单等）或 `monitor`（看过程）|\n| 取结果 | `download <SID>` |\n\n**永远先 `--dry-run` 预览**：每个生成类子命令（flow/node/edit/model）都支持 `--dry-run`，会输出 JSON 显示 will-send prompt 而不调 API。\n\n## 已知模型（用 `libtv.py model list` 查最新）\n\n| 类型 | 模型 | 适用 |\n|---|---|---|\n| LLM | gvlm-3.1 | 剧本/广告词/品牌文案/提示词改写 |\n| 图像 | lib-nano-pro | 快速生图、图生图、高清化 |\n| 图像 | nano-banana | 平面海报/插画（Google Gemini 系） |\n| 图像 | midjourney | 美学风/插画/海报 |\n| 图像 | seedream-5.0 | 写实/电影感（豆包系） |\n| 视频 | seedance-2.0-vip | 文生/图生视频、短片（默认） |\n| 视频 | kling-3.0 | 写实人像、动作连贯 |\n| 视频 | kling-o3 | 高质量长视频 |\n| 视频 | wan-2.6 | 多镜头长视频（通义万相） |\n\n模型参数：`--ratio 16:9` `--resolution 720P|2K` `--duration 5s` `--count \"1张\"`\n\n## 错误响应（v0.4.0+ 结构化）\n\n所有 API 错误以 JSON 写到 stderr，便于 Agent 程序化处理：\n\n```json\n{\n  \"error\": {\n    \"kind\": \"INVALID_ACCESS_KEY\",\n    \"http_code\": 401,\n    \"message\": \"accessKey 不存在或无效\",\n    \"raw\": \"{...}\"\n  }\n}\n```\n\n错误 kind 清单：`INVALID_ACCESS_KEY` / `FORBIDDEN_OR_INSUFFICIENT_CREDITS` / `NOT_FOUND` / `TIMEOUT` / `RATE_LIMITED` / `SERVER_ERROR` / `BAD_GATEWAY` / `SERVICE_UNAVAILABLE` / `GATEWAY_TIMEOUT` / `NETWORK_ERROR` / `INTERRUPTED` / `UNKNOWN`。\n\n## 16 类能力详解\n\n详细说明继续保留以便深度使用，但**优先看 `examples/` 和决策树**。\n\n### 1. 创建会话 / 发送消息 — `libtv.py session`\n\n```bash\n# 自然语言发消息（后端 Agent 自己路由模型）\npython3 libtv.py session \"生一个动漫视频\"\n\n# 续聊已有会话\npython3 libtv.py session \"再来一张风景图\" --session-id SID\n```\n\n### 2. 查询会话进展 — `libtv.py query`\n\n```bash\npython3 libtv.py query SID --after-seq 5       # 增量拉取\npython3 libtv.py query SID --project-id PUUID  # 附带项目地址\n```\n\n### 3. 上传文件 — `libtv.py upload`\n\n支持图片 / 视频，≤ 200MB。返回 OSS URL。\n\n```bash\npython3 libtv.py upload /path/to/image.png\npython3 libtv.py upload /path/to/video.mp4\n```\n\n### 4. 下载结果 — `libtv.py download`\n\n```bash\npython3 libtv.py download SID --output-dir ~/Downloads/proj --prefix scene\npython3 libtv.py download --urls URL1 URL2 --output-dir ./out   # 直接给 URL 列表\n```\n\n### 5. 批量任务 — `libtv.py batch`\n\n```bash\npython3 libtv.py batch --file tasks.txt --workers 5 --output result.json\npython3 libtv.py batch -m \"猫\" -m \"狗\" -m \"鸟\"\n```\n\n### 6. 实时监控 — `libtv.py monitor`\n\n```bash\npython3 libtv.py monitor SID --poll --interval 15 --extract-urls\npython3 libtv.py monitor SID --poll --format json --output log.json\n```\n\n### 7. 简化轮询 — `libtv.py poll`\n\n```bash\npython3 libtv.py poll SID                            # 默认 8s 间隔，10 分钟超时\npython3 libtv.py poll SID --interval 5 --timeout 300\npython3 libtv.py poll SID --quiet                    # 只输出最终结果\n```\n\n### 8. 工作流模板 — `libtv.py template`\n\n```bash\npython3 libtv.py template --list\npython3 libtv.py template storyboard \"科幻城市的故事\"\npython3 libtv.py template short_drama \"友情故事\"\npython3 libtv.py template music_video \"悲伤钢琴曲\"\n```\n\n8 个模板：storyboard / character_design / video_generation / image_generation / style_transfer / short_drama / music_video / product_showcase\n\n### 9. 结果导出 — `libtv.py export`\n\n```bash\npython3 libtv.py export SID --format html --output report.html\npython3 libtv.py export SID --format markdown --output report.md\npython3 libtv.py export SID --urls-only\n```\n\n### 10. 会话历史 — `libtv.py history`\n\n```bash\npython3 libtv.py history list\npython3 libtv.py history add SID --desc \"项目描述\"\npython3 libtv.py history get 1     # 拿到 sessionId（脚本用）\npython3 libtv.py history remove 1\n```\n\n### 11. 项目管理 — `libtv.py project`\n\n```bash\npython3 libtv.py project list                # 列本地记录\npython3 libtv.py project current             # 当前项目\npython3 libtv.py project switch --desc \"短剧 A\"   # 创建新项目\npython3 libtv.py project use PUUID           # 切到指定项目\npython3 libtv.py project describe PUUID \"MV\"\npython3 libtv.py project remove PUUID\n```\n\n本地状态：`~/.libtv_projects.json`。\n\n### 12. 预设流程 — `libtv.py flow`\n\n```bash\npython3 libtv.py flow story_script \"机器人来到唐朝\"\npython3 libtv.py flow character_views \"穿汉服的赛博朋克少女\"\npython3 libtv.py flow keyframe_to_video \"拔剑出鞘\" --ref OSS_URL\npython3 libtv.py flow audio_to_video \"暗黑风 MV\" --ref OSS_URL\n```\n\n### 13. 节点能力 — `libtv.py node`\n\n```bash\n# 文本节点\npython3 libtv.py node text_to_video_prompt \"一只猫在屋顶看月亮\"\npython3 libtv.py node image_caption --ref IMG_URL\npython3 libtv.py node text_to_music \"悲伤、钢琴、60秒\"\n\n# 图片节点\npython3 libtv.py node image_to_image \"改赛博朋克风\" --ref IMG_URL\npython3 libtv.py node image_upscale --ref IMG_URL\n\n# 视频节点\npython3 libtv.py node first_last_frame \"拔剑过程\" --ref start.png --ref2 end.png\npython3 libtv.py node reference_video \"保留主体演绎新场景\" --ref ref.png\n```\n\n### 14. 修饰器 — `libtv.py edit`\n\n```bash\npython3 libtv.py edit style \"宫崎骏吉卜力\" --target URL --session-id SID\npython3 libtv.py edit camera \"无人机环绕\" --target \"场景\" --session-id SID\npython3 libtv.py edit character_lib \"孙悟空\" --target \"花果山\" --session-id SID\npython3 libtv.py edit mark \"纸船换爱心\" --target URL --session-id SID\npython3 libtv.py edit focus \"右上角月亮\" --target URL --session-id SID\n```\n\n### 15. 模型路由 — `libtv.py model`\n\n```bash\npython3 libtv.py model list\npython3 libtv.py model list --kind video\npython3 libtv.py model with seedance-2.0-vip \"...\" --ratio 16:9 --duration 5s\npython3 libtv.py model with lib-nano-pro \"...\" --ratio 1:1 --resolution 2K\n```\n\n### 16. dry-run（v0.4.0+）\n\n所有生成类子命令（flow/node/edit/model）支持 `--dry-run`：输出将发送的 prompt 但**不调 API、不烧积分**。\n\n```bash\npython3 libtv.py flow story_script \"...\" --dry-run\npython3 libtv.py model with seedance-2.0-vip \"...\" --duration 5s --dry-run\n```\n\n## 用户侧 Agent 的核心原则\n\n你（用户侧 Agent）是**搬运工**，不是创作者。后端 LibTV Agent 有专业的模型选择 / prompt 工程 / 工作流编排能力。\n\n- **能传话就别替用户写 prompt**：用户说\"帮我推演分镜\"，就调 `session \"帮我推演分镜\"`，不要自己先编个分镜表\n- **能用 `flow`/`model` 显式入口就别让后端猜**：用户说\"用 Seedance 做 5 秒视频\"时，直接 `model with seedance-2.0-vip --duration 5s`\n- **永远先 `--dry-run` 检查 prompt**：调真 API 前一次 dry-run 能省很多冤枉积分\n- **下载到本地后向用户展示**：results URL + projectUrl 两个都给\n\n## 输出格式（v0.4.0+ 全 JSON）\n\n所有 stdout 输出都是 JSON，便于 Agent 程序化解析：\n\n```json\n// session / flow / node / edit / model 等生成类\n{\"projectUuid\":\"...\", \"sessionId\":\"...\", \"projectUrl\":\"...\", \"message_sent\":\"...\"}\n\n// dry-run\n{\"dry_run\":true, \"preset\":\"...\", \"would_send\":\"...\", ...}\n\n// list 类（model list / project list / history list 等仍输出表格，便于人类查看）\n```\n\n错误以 JSON 写 stderr（见上面\"错误响应\"）。\n\n## 注意事项\n\n- 鉴权方式：`Authorization: Bearer <LIBTV_ACCESS_KEY>`\n- 项目画布地址：`https://www.liblib.tv/canvas?projectId=<projectUuid>`\n- 上传 OSS 地址格式：`https://libtv-res.liblib.art/claw/{projectUuid}/{uuid}{ext}`\n- 文件大小限制：200MB\n- 生成中只给用户\"正在生成\"提示；完成后同时给 **结果 URL + projectUrl**\n- 本地状态：`~/.libtv_projects.json`（项目）+ `~/.libtv_session_history.json`（会话历史）\n\nFile v0.4.1:examples/README.md\n\n# Examples\n\n5 个典型 case，按\"难度 / 积分 / 耗时\"排列。建议第一次用按 01 → 02 → 03 → 04 → 05 顺序看。\n\n| # | 场景 | 命令风格 | 积分 | 耗时 | 难度 |\n|---|---|---|---|---|---|\n| [01](./01-generate-image.md) | 生一张猫图（最小路径）| `model with lib-nano-pro` | ≈14 | ≈60s | ⭐ |\n| [02](./02-generate-video.md) | 生一段 5s 视频 | `model with seedance-2.0-vip` | ≈135 | 5-8 min | ⭐⭐ |\n| [03](./03-edit-with-reference.md) | 把纸船换成爱心（局部编辑）| `upload` + `edit mark` | ≈14-20 | ≈90s | ⭐⭐ |\n| [04](./04-character-to-video.md) | 角色三视图 → 首帧图生视频 | `flow character_views` + `flow keyframe_to_video` + `edit camera` | ≈150 | ≈10 min | ⭐⭐⭐ |\n| [05](./05-batch-images.md) | 并发批量 10 张图 + HTML 报告 | `batch` + `export html` | ≈140 | ≈2 min | ⭐⭐ |\n\n## 跑这些 example 前\n\n1. **设置 API key**：\n   ```bash\n   export LIBTV_ACCESS_KEY=your_key_here\n   ```\n   key 从 [LibTV 用户中心](https://www.liblib.tv) 获取（个人设置 → API / 开发者）。\n\n2. **dry-run 先看 prompt**：每个 case 第一步都有 `--dry-run`，跑完确认 prompt 没问题再去掉它正式生成。可以省下大量积分。\n\n3. **从最便宜的 01 开始**：14 积分一张图，跑通了再去 02。\n\nFile v0.4.1:README.md\n\n# libtv-skill-pro\n\n> 🎬 LibTV (liblib.tv) AI 视频/图像生成平台的 OpenClaw / ClawHub skill。Pro 版在 [@haofanwang/libtv-skill](https://clawhub.ai/haofanwang/libtv-skill) 基础上扩展高级工作流与功能矩阵层。\n\n[![ClawHub](https://img.shields.io/badge/ClawHub-libtv--skill--pro-orange)](https://clawhub.ai/qiuxiangxiang/libtv-skill-pro)\n[![License](https://img.shields.io/badge/license-MIT--0-blue)](LICENSE)\n\n## 是什么\n\n让 Agent（OpenClaw / Claude Code / 其他 ClawHub-compatible 客户端）通过统一入口调用 LibTV 平台的 AI 创作能力：\n\n- **生成**：文生图/视频、图生图/视频、首尾帧视频、音频驱动视频\n- **编辑**：局部修改（\"把纸船换成爱心\"）、风格迁移、运镜调整\n- **多模型路由**：Seedance 2.0 / Kling 3.0/O3 / Wan 2.6 / Nano Banana / Midjourney / Seedream 5.0 / Lib Nano Pro / GVLM 3.1\n- **工作流**：批量并发、轮询监控、8 个预设模板（短剧/MV/角色设计/分镜...）、HTML 报告导出\n- **dry-run 预览**：所有生成类命令支持 `--dry-run`，预览 prompt 不烧积分\n- **结构化错误**：API 错误以 JSON 输出，Agent 程序化可处理\n\n## 安装\n\n### 方式 1：通过 ClawHub（推荐）\n\n```bash\nopenclaw skills install libtv-skill-pro\n```\n\n### 方式 2：从这个仓库克隆\n\n```bash\ngit clone https://github.com/YOUR_HANDLE/libtv-skill-pro.git ~/.agents/skills/libtv-skill-pro\n```\n\n## 快速开始\n\n```bash\n# 1. 拿 access key：https://www.liblib.tv → 用户中心 → API\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# 2. 看命令清单\npython3 scripts/libtv.py --help\n\n# 3. dry-run 预览（不烧积分）\npython3 scripts/libtv.py model with lib-nano-pro \\\n  \"白色短毛猫坐在窗台上\" --ratio 1:1 --resolution 2K --dry-run\n\n# 4. 真实生成 + 轮询 + 下载\npython3 scripts/libtv.py model with lib-nano-pro \"...\" --ratio 1:1\npython3 scripts/libtv.py poll SESSION_ID\npython3 scripts/libtv.py download SESSION_ID --output-dir ~/Downloads/cat\n```\n\n完整示例见 [`examples/`](./examples/)（5 个递进难度的 case）。\n\n## 命令地图\n\n```\nlibtv.py flow      预设流程（故事脚本/角色三视图/首帧图生视频/音频生视频）\nlibtv.py node      节点能力（文本/图片/视频节点细分动作）\nlibtv.py edit      修饰器（风格/标记/聚焦/运镜/角色库）\nlibtv.py model     模型路由（list 已知模型 / with 指定模型生成）\n\nlibtv.py session   创建会话/发消息       libtv.py query   查询会话进展\nlibtv.py upload    上传图片/视频         libtv.py download 下载结果\n\nlibtv.py batch     并发批量任务          libtv.py monitor 实时监控\nlibtv.py poll      简化轮询              libtv.py template 预设工作流模板\nlibtv.py export    导出 HTML/MD/JSON     libtv.py history 会话历史\nlibtv.py project   项目管理\n```\n\n17 个独立脚本（`scripts/*.py`）仍可单独调用（向后兼容）。\n\n## 跟原版的关系\n\n| | @haofanwang/libtv-skill | @qiuxiangxiang/libtv-skill-pro |\n|---|---|---|\n| 基础脚本 | 6 个 | 6 个（保留原版） |\n| 高级工作流 | — | 7 个（batch/monitor/poll/template/export/history/project） |\n| LibTV 功能矩阵 | — | 4 个（flow/node/edit/model） |\n| 统一入口 | — | libtv.py |\n| dry-run 预览 | — | ✓ |\n| 结构化错误 | — | ✓ |\n\n如果你只需要\"自然语言一句话路由\"的极简体验，原版 6 脚本足够。Pro 版面向**批量、精细控制、Agent 程序化集成**场景。\n\n## 测试\n\n```bash\n# 离线（5 秒，不烧积分，120 个用例）\nbash tests/test_offline.sh && python3 tests/test_templates.py\n\n# 在线（按开关计费）\nONLINE_SESSION=1 bash tests/test_online.sh    # ≈0 积分\nONLINE_IMAGE=1   bash tests/test_online.sh    # ≈14 积分\nONLINE_VIDEO=1   bash tests/test_online.sh    # ≈135 积分\n```\n\n详细测试矩阵见 [`tests/README.md`](./tests/README.md)。\n\n## 贡献\n\n发现 bug 或想加新功能：\n\n1. Issue 描述场景 + 预期 vs 实际\n2. PR 前请跑通 `bash tests/test_offline.sh && python3 tests/test_templates.py`\n3. 新功能请同时在 `tests/` 加用例 + 在 `examples/` 加 case\n\n## License\n\nMIT-0（与原版一致）。\n\n## 致谢\n\n- [@haofanwang/libtv-skill](https://clawhub.ai/haofanwang/libtv-skill) — 原版基础架构\n- [LibTV (liblib.tv)](https://www.liblib.tv) — AI 视频创作平台\n- [ClawHub](https://clawhub.ai) — Agent skill 分发\n\nFile v0.4.1:_meta.json\n\n{\n  \"ownerId\": \"kn75javp82ghpk79s61mfbp3bx81vsnj\",\n  \"slug\": \"libtv-skill-pro\",\n  \"version\": \"0.4.1\",\n  \"publishedAt\": 1778741217175\n}\n\nFile v0.4.1:CHANGELOG.md\n\n# Changelog\n\n## [0.4.0] - 2026-05-14（即将发布）\n\n**主题：公开推广就绪 + 架构升级**\n\n### Added — 推广向\n- `examples/` 5 个完整 case：生图 / 视频 / 编辑 / 多步链 / 批量\n- `README.md`（GitHub 入口）+ `LICENSE`（MIT-0）+ `.gitignore`\n- `CHANGELOG.md` 正式纳入版本管理\n- 公开 GitHub 仓库（信任来源 / issue / PR）\n- SKILL.md frontmatter description 精简到 ~400 字，前 300 字聚焦关键词（搜索能见度）\n- SKILL.md 增加「快速开始 3 分钟跑通」段落 + 决策树 + LibTV access key 获取链接\n\n### Added — 架构升级\n- `libtv.py` 统一入口（dispatcher）—— Agent 只需记一个命令：`libtv.py {flow|node|edit|model|...}`\n- `--dry-run` 标志（flow / node / edit / model）—— 预览将发送的 prompt，不调 API、不烧积分\n- 结构化错误响应（`_common.APIError` + `safe_run` wrapper）—— 所有 API 错误以 JSON 写 stderr，含 kind / http_code / message / raw\n- 错误 kind 枚举：INVALID_ACCESS_KEY / FORBIDDEN_OR_INSUFFICIENT_CREDITS / NOT_FOUND / TIMEOUT / RATE_LIMITED / SERVER_ERROR / NETWORK_ERROR / INTERRUPTED / UNKNOWN\n\n### Fixed\n- `change_project.py` 缺 argparse 导致 `--help` 直接调真 API（之前发版前发现的 bug）\n- `_common.py` 不再在 import 时因缺 LIBTV_ACCESS_KEY 而 `sys.exit(1)`——改为延迟到首次实际调用 API 时抛 `APIError`，让 `--help` 在任何情况下都可用\n\n### Changed\n- 所有调 API 的脚本都接入 `safe_run(main)` wrapper\n- frontmatter emoji 由 💬 改为 🎬（配合 film 图标）\n- tests/test_offline.sh 增加 1b（libtv.py 入口）+ 1c（dry-run 验证）共 20 个新用例\n- 总测试用例：73 离线 + 47 模板 = **120 全通**\n\n### Cleanup\n- 发布前清掉 workspace 的 `.clawhub/origin.json`（之前误发）\n- `_meta.json` 不打包进发布\n\n---\n\n## [0.3.0] - 2026-05-13\n\n**LibTV 功能矩阵层**（slug: libtv-skill-pro，fork-of @haofanwang/libtv-skill@1.0.3）\n\n新增 4 个脚本覆盖 LibTV 画布上的完整功能矩阵：\n\n- `flow.py` — LibTV 首页 4 个预设流程（story_script / character_views / keyframe_to_video / audio_to_video）\n- `node.py` — 文本/图片/视频节点的细分动作（text_to_video_prompt / image_caption / text_to_music / image_to_image / image_upscale / first_last_frame / reference_video）\n- `edit.py` — 节点修饰器（style / mark / focus / camera / character_lib）\n- `model.py` — 模型路由（list 9 个已知模型 + with 显式指定模型+参数）\n\nSKILL.md 第 13–16 节文档，新增「场景 8：按 LibTV 网页功能直接调用」工作流示例。\n\n## [0.2.0] - 2026-05-13\n\n**首发 libtv-skill-pro**（fork-of @haofanwang/libtv-skill@1.0.3）\n\n在原版 6 个基础脚本之上扩展 7 个高级工作流脚本：\n\n- `manage_project.py`（list/current/switch/use/remove/describe + `~/.libtv_projects.json` 本地项目记录）\n- `batch_create.py`（并发批量任务）\n- `monitor_session.py`（实时监控）\n- `quick_poll.py`（简化轮询）\n- `workflow_template.py`（8 个预设模板）\n- `export_results.py`（导出 JSON / Markdown / HTML）\n- `session_history.py`（会话历史管理）\n\n行为增强：\n- `create_session.py` / `change_project.py` 自动写入本地项目记录\n- `_common.py`：`change_project()` 支持可选 `projectUuid` 参数\n\nFile v0.4.1:examples/01-generate-image.md\n\n# Example 01：生一张猫图（最小路径）\n\n**积分消耗**：≈14 · **耗时**：≈60s · **难度**：⭐\n\n最简单的端到端：从输入到本地图片 4 个命令搞定。\n\n## 用户需求\n\n「生一张白色短毛猫坐在窗台上的图，1:1 比例，2K 分辨率，用 lib-nano-pro 模型」\n\n## 命令链\n\n```bash\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# 1. 预览将发送的 prompt（不烧积分）\npython3 scripts/libtv.py model with lib-nano-pro \\\n  \"白色短毛猫坐在窗台上\" \\\n  --ratio 1:1 --resolution 2K --count \"1张\" \\\n  --dry-run\n\n# 2. 真实生成\nRESULT=$(python3 scripts/libtv.py model with lib-nano-pro \\\n  \"白色短毛猫坐在窗台上\" \\\n  --ratio 1:1 --resolution 2K --count \"1张\")\necho \"$RESULT\"\nSID=$(echo \"$RESULT\" | python3 -c \"import sys,json; print(json.loads(sys.stdin.read())['sessionId'])\")\n\n# 3. 轮询等待完成（默认 8s 间隔，10 分钟超时）\npython3 scripts/libtv.py poll \"$SID\"\n\n# 4. 下载到本地\npython3 scripts/libtv.py download \"$SID\" --output-dir ~/Downloads/cat --prefix cat\n```\n\n## 预期输出\n\n- 一张 2K PNG/JPG 保存在 `~/Downloads/cat/cat_01.png`\n- 一个 `projectUrl`，浏览器打开可以看 LibTV 项目画布\n\n## 常见故障\n\n| 现象 | 错误 kind | 解决 |\n|---|---|---|\n| 第 2 步 401 | `INVALID_ACCESS_KEY` | 检查 `LIBTV_ACCESS_KEY` 是否正确 |\n| 第 2 步 403 | `FORBIDDEN_OR_INSUFFICIENT_CREDITS` | 积分不足，去 LibTV 充值 |\n| 第 3 步超时 | — | 后端慢，去 `projectUrl` 画布上手动看结果 |\n| 第 4 步空 | — | 会话里还没有结果 URL，再等一会儿重跑 |\n\nFile v0.4.1:examples/02-generate-video.md\n\n# Example 02：用 Seedance 生一段 5 秒视频\n\n**积分消耗**：≈135 · **耗时**：5-8 min · **难度**：⭐⭐\n\n文生视频，指定模型 + 参数。\n\n## 用户需求\n\n「用 Seedance 2.0 VIP 生成一段 5 秒、16:9、720P 的视频：黄昏草原上一只白马奔跑」\n\n## 命令链\n\n```bash\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# 1. 预览（强烈建议先 dry-run 检查参数是否传对）\npython3 scripts/libtv.py model with seedance-2.0-vip \\\n  \"黄昏草原上一只白马奔跑，阳光金黄，长鬃飘动\" \\\n  --ratio 16:9 --resolution 720P --duration 5s --count \"1个\" \\\n  --dry-run\n\n# 2. 真实生成\nRESULT=$(python3 scripts/libtv.py model with seedance-2.0-vip \\\n  \"黄昏草原上一只白马奔跑，阳光金黄，长鬃飘动\" \\\n  --ratio 16:9 --resolution 720P --duration 5s --count \"1个\")\nSID=$(echo \"$RESULT\" | python3 -c \"import sys,json; print(json.loads(sys.stdin.read())['sessionId'])\")\n\n# 3. 视频生成慢，用 monitor 看进度（15s 间隔）\npython3 scripts/libtv.py monitor \"$SID\" --poll --interval 15 --extract-urls --timeout 600\n\n# 4. 下载\npython3 scripts/libtv.py download \"$SID\" --output-dir ~/Downloads/horse --prefix horse\n\n# 5. 加到会话历史（方便以后用 history list 找到）\npython3 scripts/libtv.py history add \"$SID\" --desc \"Seedance 白马奔跑 5s\"\n```\n\n## 预期输出\n\n- `~/Downloads/horse/horse_01.mp4`（约 5 秒、16:9、720P）\n- 项目画布链接（可在 LibTV 网页上分享/编辑）\n\n## 模型选择参考\n\n| 想要 | 推荐模型 | 参数 |\n|---|---|---|\n| 快速预览 / 测试 prompt | `seedance-2.0-vip` | 720P, 5s |\n| 写实人像、动作连贯 | `kling-3.0` | 1080P, 5-10s |\n| 长视频、高质量 | `kling-o3` | 1080P, 10s |\n| 多镜头、复杂场景 | `wan-2.6` | 1080P, 任意 |\n\n用 `python3 scripts/libtv.py model list --kind video` 查全部视频模型。\n\nFile v0.4.1:examples/03-edit-with-reference.md\n\n# Example 03：基于参考图编辑（\"把纸船换成爱心\"）\n\n**积分消耗**：≈14-20 · **耗时**：≈90s · **难度**：⭐⭐\n\n用户拿一张图，要求局部编辑——这是 LibTV 的典型场景。\n\n## 用户需求\n\n「这张图（本地路径 `~/Desktop/origin.png`）里，把所有纸船换成白色纸爱心，保持其他不变」\n\n## 命令链\n\n```bash\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# 1. 先把本地图片上传到 LibTV OSS\nUPLOAD=$(python3 scripts/libtv.py upload ~/Desktop/origin.png)\necho \"$UPLOAD\"\nOSS_URL=$(echo \"$UPLOAD\" | python3 -c \"import sys,json; print(json.loads(sys.stdin.read())['url'])\")\n\n# 2. 用 edit.py mark（局部标记修改）+ OSS URL\nRESULT=$(python3 scripts/libtv.py edit mark \\\n  \"把画面里所有纸船的区域换成白色纸爱心，其他保持不变\" \\\n  --target \"$OSS_URL\")\nSID=$(echo \"$RESULT\" | python3 -c \"import sys,json; print(json.loads(sys.stdin.read())['sessionId'])\")\n\n# 3. 轮询\npython3 scripts/libtv.py poll \"$SID\" --interval 8 --timeout 300\n\n# 4. 下载\npython3 scripts/libtv.py download \"$SID\" --output-dir ~/Desktop/edited\n```\n\n## 替代方案：用 node.py image_to_image\n\n如果是整张图的风格/内容大改（不只是局部），用 image_to_image：\n\n```bash\npython3 scripts/libtv.py node image_to_image \\\n  \"把画面整体改成赛博朋克风\" \\\n  --ref \"$OSS_URL\"\n```\n\n## 修饰器选择\n\n| 用户描述 | 推荐 modifier |\n|---|---|\n| \"把 X 换成 Y\" / \"去掉 X\" / \"加上 X\" | `mark` |\n| \"改成 X 风格\" / \"做成卡通\" / \"宫崎骏感觉\" | `style` |\n| \"强调右上角\" / \"聚焦在人物\" | `focus` |\n| \"用环绕镜头\" / \"推镜头\" / \"希区柯克变焦\" | `camera` |\n| \"用孙悟空作为角色\" | `character_lib` |\n\nFile v0.4.1:examples/04-character-to-video.md\n\n# Example 04：角色三视图 → 首帧图生视频（多步链）\n\n**积分消耗**：≈150 · **耗时**：≈10 min · **难度**：⭐⭐⭐\n\n经典工作流：先做角色 IP 资产，再用其中一张作为视频首帧。\n\n## 用户需求\n\n「我要做一个穿汉服的赛博朋克少女角色，先出三视图，然后用正面图做首帧生成一段她在霓虹街道行走的 5 秒视频」\n\n## 命令链\n\n```bash\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# ─── 第一段：角色三视图 ───\nSTEP1=$(python3 scripts/libtv.py flow character_views \\\n  \"穿汉服的赛博朋克少女，银发，红色机械义眼，唐风刺绣旗袍混搭金属护甲\")\nSID=$(echo \"$STEP1\" | python3 -c \"import sys,json; print(json.loads(sys.stdin.read())['sessionId'])\")\nPROJECT=$(echo \"$STEP1\" | python3 -c \"import sys,json; print(json.loads(sys.stdin.read())['projectUrl'])\")\n\necho \"角色生成中，画布：$PROJECT\"\npython3 scripts/libtv.py poll \"$SID\" --interval 8 --timeout 300\n\n# 下载三视图\npython3 scripts/libtv.py download \"$SID\" --output-dir ~/Downloads/character --prefix view\n# 应该会拿到 view_01.png（正面）/ view_02.png（侧面）/ view_03.png（背面）\n\n# ─── 第二段：上传正面图作为首帧 ───\nUPLOAD=$(python3 scripts/libtv.py upload ~/Downloads/character/view_01.png)\nFRAME_URL=$(echo \"$UPLOAD\" | python3 -c \"import sys,json; print(json.loads(sys.stdin.read())['url'])\")\n\n# ─── 第三段：首帧图生视频，在同一会话内（保持上下文）───\nSTEP3=$(python3 scripts/libtv.py flow keyframe_to_video \\\n  \"角色在夜晚霓虹密布的街道上缓步前行，回头一瞥，环绕运镜\" \\\n  --ref \"$FRAME_URL\" \\\n  --session-id \"$SID\")\n\n# ─── 第四段：叠加运镜修饰器（强化运镜质量）───\npython3 scripts/libtv.py edit camera \\\n  \"环绕 + 微推镜头，希区柯克变焦在回眸瞬间\" \\\n  --target \"（上一条 keyframe_to_video 的生成视频）\" \\\n  --session-id \"$SID\"\n\n# ─── 第五段：等待 + 下载 ───\npython3 scripts/libtv.py monitor \"$SID\" --poll --interval 15 --extract-urls --timeout 600\npython3 scripts/libtv.py download \"$SID\" --output-dir ~/Downloads/character_video\n```\n\n## 这个 case 演示的能力\n\n1. **预设流程入口** (`flow character_views`, `flow keyframe_to_video`)\n2. **本地文件上传** (`upload`)\n3. **会话上下文复用** (`--session-id`)\n4. **修饰器叠加** (`edit camera`)\n5. **轮询 + 下载** (`poll` / `monitor` / `download`)\n\n## 简化版（不用 flow，直接用 model.py）\n\n如果你想精确控制每步用什么模型：\n\n```bash\n# 角色用 Midjourney（美学风）\npython3 scripts/libtv.py model with midjourney \"穿汉服的赛博朋克少女三视图...\" --ratio 16:9\n\n# 视频用 Kling O3（高质量长视频）\npython3 scripts/libtv.py model with kling-o3 \"霓虹街道行走...\" --ratio 16:9 --duration 10s\n```\n\nFile v0.4.1:examples/05-batch-images.md\n\n# Example 05：批量生成 10 张图（并发 + 自动 HTML 报告）\n\n**积分消耗**：≈140（14 × 10）· **耗时**：≈2 min · **难度**：⭐⭐\n\n需要做 9 宫格、分镜、产品图组等场景。\n\n## 用户需求\n\n「给我生成 10 张'未来城市夜景'的图，不同视角，最后导出 HTML 报告方便看」\n\n## 命令链\n\n```bash\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# ─── Step 1: 准备任务文件 ───\ncat > /tmp/cyber_tasks.txt <<'EOF'\n未来城市夜景，高空俯瞰，霓虹密布\n未来城市夜景，街道平视，飞行汽车\n未来城市夜景，巨型全息广告牌特写\n未来城市夜景，地下管道仰望\n未来城市夜景，机器人巡逻，雾气弥漫\n未来城市夜景，雨后倒影，赛博朋克\n未来城市夜景，废墟之中残存的霓虹\n未来城市夜景，巨塔之巅，星空背景\n未来城市夜景，市集人群，多人种共存\n未来城市夜景，悬浮列车划过画面\nEOF\n\n# ─── Step 2: 批量提交（并发 5）───\npython3 scripts/libtv.py batch \\\n  --file /tmp/cyber_tasks.txt \\\n  --workers 5 \\\n  --output /tmp/cyber_batch.json\n\n# ─── Step 3: 逐个轮询完成 ───\nfor SID in $(python3 -c \"\nimport json\ndata = json.load(open('/tmp/cyber_batch.json'))\nfor r in data:\n    if r.get('sessionId'):\n        print(r['sessionId'])\n\"); do\n    echo \"=== Polling $SID ===\"\n    python3 scripts/libtv.py poll \"$SID\" --interval 8 --timeout 300 --quiet &\ndone\nwait\n\n# ─── Step 4: 导出 HTML 报告 ───\nmkdir -p ~/Downloads/cyber-batch\nfor SID in $(python3 -c \"\nimport json\ndata = json.load(open('/tmp/cyber_batch.json'))\nfor r in data:\n    if r.get('sessionId'):\n        print(r['sessionId'])\n\"); do\n    python3 scripts/libtv.py export \"$SID\" --format html --output ~/Downloads/cyber-batch/$SID.html\n    python3 scripts/libtv.py download \"$SID\" --output-dir ~/Downloads/cyber-batch/$SID\ndone\n\n# ─── Step 5: 浏览 ───\nopen ~/Downloads/cyber-batch/\n```\n\n## 关键参数\n\n| 参数 | 作用 |\n|---|---|\n| `batch --workers 5` | 同时发 5 个，避免 IM 后端被冲 |\n| `batch --output FILE.json` | 保存 sessionId 列表，便于后续轮询 |\n| `export --format html` | 带预览的 HTML，看图最方便 |\n| `export --format markdown` | 适合贴到 Notion / Lark |\n| `export --urls-only` | 只要 URL 列表，给其他脚本用 |\n\n## 进阶：每个任务用不同模型\n\n如果想 10 个任务用不同模型，改用循环 + `model.py with`：\n\n```bash\nMODELS=(lib-nano-pro midjourney seedream-5.0 nano-banana lib-nano-pro \\\n        midjourney seedream-5.0 nano-banana lib-nano-pro midjourney)\nTASKS=(...) # 10 个 prompt\nfor i in {0..9}; do\n    python3 scripts/libtv.py model with \"${MODELS[$i]}\" \"${TASKS[$i]}\" --ratio 16:9 &\ndone\nwait\n```\n\nArchive v0.4.0: 28 files, 55468 bytes\n\nFiles: CHANGELOG.md (3361b), examples/01-generate-image.md (1605b), examples/02-generate-video.md (1870b), examples/03-edit-with-reference.md (1733b), examples/04-character-to-video.md (2914b), examples/05-batch-images.md (2786b), examples/README.md (1341b), README.md (4450b), scripts/_common.py (7092b), scripts/batch_create.py (4279b), scripts/change_project.py (1281b), scripts/create_session.py (2024b), scripts/download_results.py (5233b), scripts/edit.py (4851b), scripts/export_results.py (7851b), scripts/flow.py (4706b), scripts/libtv.py (4023b), scripts/manage_project.py (6760b), scripts/model.py (6968b), scripts/monitor_session.py (6225b), scripts/node.py (7081b), scripts/query_session.py (1685b), scripts/quick_poll.py (4284b), scripts/session_history.py (6624b), scripts/upload_file.py (3531b), scripts/workflow_template.py (4864b), SKILL.md (12317b), _meta.json (134b)\n\nFile v0.4.0:SKILL.md\n\n---\nname: libtv-skill-pro\ndescription: 通过 LibTV (liblib.tv) AI 视频平台生成和编辑图片/视频的完整工具集。覆盖文生图/视频、图生图/视频、视频续写、风格迁移、局部编辑（把纸船换成爱心）、短剧/MV/TVC 制作、角色三视图、分镜设计、首尾帧视频、音频生视频。支持 Seedance 2.0 / Kling 3.0/O3 / Wan 2.6 / Nano Banana / Midjourney / Seedream 5.0 / Lib Nano Pro / GVLM 3.1 等模型，可显式指定模型+参数（比例/分辨率/时长）。Pro 版扩展批量并发、轮询监控、工作流模板、结果导出、会话历史、项目管理、统一入口、dry-run 预览、结构化错误。触发词：画一个/生成/做一个/帮我做、liblib/libtv/aigc、视频/图片/MV/TVC/短剧/分镜/动漫/海报、AI 视频/图片生成、画/生成一张/一段。\nuser-invocable: true\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"🎬\",\n        \"requires\":\n          {\n            \"bins\": [\"python3\"],\n            \"env\": [\"LIBTV_ACCESS_KEY\"]\n          },\n        \"primaryEnv\": \"LIBTV_ACCESS_KEY\"\n      }\n  }\n---\n\n# libtv-skill-pro\n\n> Fork of [@haofanwang/libtv-skill](https://clawhub.ai/haofanwang/libtv-skill) — 在原版基础上扩展高级工作流与功能矩阵层。Source / Issues: 见包内 README.md。\n\nLibTV (liblib.tv) 是 LiblibAI 推出的 AI 视频创作平台。本 skill 让 Agent 通过统一入口 `libtv.py` 完成生成 / 编辑 / 修饰 / 模型路由的全链路。\n\n## 快速开始（3 分钟跑通第一个 case）\n\n```bash\n# 1. 拿 access key：https://www.liblib.tv → 用户中心 → API / 开发者\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# 2. 看完整命令清单\npython3 {baseDir}/scripts/libtv.py --help\n\n# 3. 跑第一个 case（dry-run 预览，不烧积分）\npython3 {baseDir}/scripts/libtv.py model with lib-nano-pro \\\n  \"白色短毛猫坐在窗台上\" --ratio 1:1 --resolution 2K --dry-run\n\n# 4. 去掉 --dry-run 真实生成（≈14 积分，≈60s）\npython3 {baseDir}/scripts/libtv.py model with lib-nano-pro \\\n  \"白色短毛猫坐在窗台上\" --ratio 1:1 --resolution 2K\n# → 返回 sessionId，再用 poll 等结果，download 取本地\n\npython3 {baseDir}/scripts/libtv.py poll <SESSION_ID>\npython3 {baseDir}/scripts/libtv.py download <SESSION_ID> --output-dir ~/Downloads/cat\n```\n\n5 个完整 case 见 `examples/`（图像 / 视频 / 编辑 / 多步链 / 批量）。\n\n## 推荐入口：`libtv.py <subcommand>`\n\n所有功能聚合在一个入口，Agent 路由更顺：\n\n```\npython3 libtv.py flow       <preset> \"<topic>\" [--ref URL]\npython3 libtv.py node       <action> \"<topic>\" [--ref URL]\npython3 libtv.py edit       <modifier> \"<desc>\" [--target URL] [--session-id SID]\npython3 libtv.py model      list|with <model> \"<prompt>\" [params]\n\npython3 libtv.py session    \"<message>\"               # 创建会话/发消息（底层）\npython3 libtv.py query      <SID>                     # 查询会话进展\npython3 libtv.py upload     <local_file>              # 上传到 OSS\npython3 libtv.py download   <SID> [--output-dir DIR]  # 下载结果\n\npython3 libtv.py batch      --file tasks.txt --workers 5\npython3 libtv.py monitor    <SID> --poll --extract-urls\npython3 libtv.py poll       <SID>\npython3 libtv.py template   <name> \"<topic>\"\npython3 libtv.py export     <SID> --format html\npython3 libtv.py history    list|add|show|get|remove\npython3 libtv.py project    list|current|switch|use|remove|describe\n```\n\n> 旧路径 `python3 scripts/<name>.py ...` 仍可用（向后兼容）。新代码统一用 `libtv.py`。\n\n## 决策树（路由判断）\n\n收到用户需求时，按以下顺序匹配：\n\n| 用户输入 | 走哪条路径 |\n|---|---|\n| 用户提供了本地文件（图/视频/音频路径）| 先 `upload` 拿 OSS URL，再发到下一步 |\n| 模糊一句话「画只猫 / 做个 MV」 | `session` 让后端 Agent 路由（最省心）|\n| 明确想要 LibTV 某个入口（\"做个角色三视图\"）| `flow <preset>` |\n| 明确想用某个模型（\"用 Seedance 出视频\"）| `model with <model>` |\n| 想在已生成内容上改风格 / 加运镜 | `edit <modifier> --session-id SID` |\n| 一次发 10+ 任务 | `batch --file tasks.txt --workers 5` |\n| 完整短剧 / MV / 角色设计预设 | `template <name>` |\n| 等结果 / 查进度 | `poll`（简单等）或 `monitor`（看过程）|\n| 取结果 | `download <SID>` |\n\n**永远先 `--dry-run` 预览**：每个生成类子命令（flow/node/edit/model）都支持 `--dry-run`，会输出 JSON 显示 will-send prompt 而不调 API。\n\n## 已知模型（用 `libtv.py model list` 查最新）\n\n| 类型 | 模型 | 适用 |\n|---|---|---|\n| LLM | gvlm-3.1 | 剧本/广告词/品牌文案/提示词改写 |\n| 图像 | lib-nano-pro | 快速生图、图生图、高清化 |\n| 图像 | nano-banana | 平面海报/插画（Google Gemini 系） |\n| 图像 | midjourney | 美学风/插画/海报 |\n| 图像 | seedream-5.0 | 写实/电影感（豆包系） |\n| 视频 | seedance-2.0-vip | 文生/图生视频、短片（默认） |\n| 视频 | kling-3.0 | 写实人像、动作连贯 |\n| 视频 | kling-o3 | 高质量长视频 |\n| 视频 | wan-2.6 | 多镜头长视频（通义万相） |\n\n模型参数：`--ratio 16:9` `--resolution 720P|2K` `--duration 5s` `--count \"1张\"`\n\n## 错误响应（v0.4.0+ 结构化）\n\n所有 API 错误以 JSON 写到 stderr，便于 Agent 程序化处理：\n\n```json\n{\n  \"error\": {\n    \"kind\": \"INVALID_ACCESS_KEY\",\n    \"http_code\": 401,\n    \"message\": \"accessKey 不存在或无效\",\n    \"raw\": \"{...}\"\n  }\n}\n```\n\n错误 kind 清单：`INVALID_ACCESS_KEY` / `FORBIDDEN_OR_INSUFFICIENT_CREDITS` / `NOT_FOUND` / `TIMEOUT` / `RATE_LIMITED` / `SERVER_ERROR` / `BAD_GATEWAY` / `SERVICE_UNAVAILABLE` / `GATEWAY_TIMEOUT` / `NETWORK_ERROR` / `INTERRUPTED` / `UNKNOWN`。\n\n## 16 类能力详解\n\n详细说明继续保留以便深度使用，但**优先看 `examples/` 和决策树**。\n\n### 1. 创建会话 / 发送消息 — `libtv.py session`\n\n```bash\n# 自然语言发消息（后端 Agent 自己路由模型）\npython3 libtv.py session \"生一个动漫视频\"\n\n# 续聊已有会话\npython3 libtv.py session \"再来一张风景图\" --session-id SID\n```\n\n### 2. 查询会话进展 — `libtv.py query`\n\n```bash\npython3 libtv.py query SID --after-seq 5       # 增量拉取\npython3 libtv.py query SID --project-id PUUID  # 附带项目地址\n```\n\n### 3. 上传文件 — `libtv.py upload`\n\n支持图片 / 视频，≤ 200MB。返回 OSS URL。\n\n```bash\npython3 libtv.py upload /path/to/image.png\npython3 libtv.py upload /path/to/video.mp4\n```\n\n### 4. 下载结果 — `libtv.py download`\n\n```bash\npython3 libtv.py download SID --output-dir ~/Downloads/proj --prefix scene\npython3 libtv.py download --urls URL1 URL2 --output-dir ./out   # 直接给 URL 列表\n```\n\n### 5. 批量任务 — `libtv.py batch`\n\n```bash\npython3 libtv.py batch --file tasks.txt --workers 5 --output result.json\npython3 libtv.py batch -m \"猫\" -m \"狗\" -m \"鸟\"\n```\n\n### 6. 实时监控 — `libtv.py monitor`\n\n```bash\npython3 libtv.py monitor SID --poll --interval 15 --extract-urls\npython3 libtv.py monitor SID --poll --format json --output log.json\n```\n\n### 7. 简化轮询 — `libtv.py poll`\n\n```bash\npython3 libtv.py poll SID                            # 默认 8s 间隔，10 分钟超时\npython3 libtv.py poll SID --interval 5 --timeout 300\npython3 libtv.py poll SID --quiet                    # 只输出最终结果\n```\n\n### 8. 工作流模板 — `libtv.py template`\n\n```bash\npython3 libtv.py template --list\npython3 libtv.py template storyboard \"科幻城市的故事\"\npython3 libtv.py template short_drama \"友情故事\"\npython3 libtv.py template music_video \"悲伤钢琴曲\"\n```\n\n8 个模板：storyboard / character_design / video_generation / image_generation / style_transfer / short_drama / music_video / product_showcase\n\n### 9. 结果导出 — `libtv.py export`\n\n```bash\npython3 libtv.py export SID --format html --output report.html\npython3 libtv.py export SID --format markdown --output report.md\npython3 libtv.py export SID --urls-only\n```\n\n### 10. 会话历史 — `libtv.py history`\n\n```bash\npython3 libtv.py history list\npython3 libtv.py history add SID --desc \"项目描述\"\npython3 libtv.py history get 1     # 拿到 sessionId（脚本用）\npython3 libtv.py history remove 1\n```\n\n### 11. 项目管理 — `libtv.py project`\n\n```bash\npython3 libtv.py project list                # 列本地记录\npython3 libtv.py project current             # 当前项目\npython3 libtv.py project switch --desc \"短剧 A\"   # 创建新项目\npython3 libtv.py project use PUUID           # 切到指定项目\npython3 libtv.py project describe PUUID \"MV\"\npython3 libtv.py project remove PUUID\n```\n\n本地状态：`~/.libtv_projects.json`。\n\n### 12. 预设流程 — `libtv.py flow`\n\n```bash\npython3 libtv.py flow story_script \"机器人来到唐朝\"\npython3 libtv.py flow character_views \"穿汉服的赛博朋克少女\"\npython3 libtv.py flow keyframe_to_video \"拔剑出鞘\" --ref OSS_URL\npython3 libtv.py flow audio_to_video \"暗黑风 MV\" --ref OSS_URL\n```\n\n### 13. 节点能力 — `libtv.py node`\n\n```bash\n# 文本节点\npython3 libtv.py node text_to_video_prompt \"一只猫在屋顶看月亮\"\npython3 libtv.py node image_caption --ref IMG_URL\npython3 libtv.py node text_to_music \"悲伤、钢琴、60秒\"\n\n# 图片节点\npython3 libtv.py node image_to_image \"改赛博朋克风\" --ref IMG_URL\npython3 libtv.py node image_upscale --ref IMG_URL\n\n# 视频节点\npython3 libtv.py node first_last_frame \"拔剑过程\" --ref start.png --ref2 end.png\npython3 libtv.py node reference_video \"保留主体演绎新场景\" --ref ref.png\n```\n\n### 14. 修饰器 — `libtv.py edit`\n\n```bash\npython3 libtv.py edit style \"宫崎骏吉卜力\" --target URL --session-id SID\npython3 libtv.py edit camera \"无人机环绕\" --target \"场景\" --session-id SID\npython3 libtv.py edit character_lib \"孙悟空\" --target \"花果山\" --session-id SID\npython3 libtv.py edit mark \"纸船换爱心\" --target URL --session-id SID\npython3 libtv.py edit focus \"右上角月亮\" --target URL --session-id SID\n```\n\n### 15. 模型路由 — `libtv.py model`\n\n```bash\npython3 libtv.py model list\npython3 libtv.py model list --kind video\npython3 libtv.py model with seedance-2.0-vip \"...\" --ratio 16:9 --duration 5s\npython3 libtv.py model with lib-nano-pro \"...\" --ratio 1:1 --resolution 2K\n```\n\n### 16. dry-run（v0.4.0+）\n\n所有生成类子命令（flow/node/edit/model）支持 `--dry-run`：输出将发送的 prompt 但**不调 API、不烧积分**。\n\n```bash\npython3 libtv.py flow story_script \"...\" --dry-run\npython3 libtv.py model with seedance-2.0-vip \"...\" --duration 5s --dry-run\n```\n\n## 用户侧 Agent 的核心原则\n\n你（用户侧 Agent）是**搬运工**，不是创作者。后端 LibTV Agent 有专业的模型选择 / prompt 工程 / 工作流编排能力。\n\n- **能传话就别替用户写 prompt**：用户说\"帮我推演分镜\"，就调 `session \"帮我推演分镜\"`，不要自己先编个分镜表\n- **能用 `flow`/`model` 显式入口就别让后端猜**：用户说\"用 Seedance 做 5 秒视频\"时，直接 `model with seedance-2.0-vip --duration 5s`\n- **永远先 `--dry-run` 检查 prompt**：调真 API 前一次 dry-run 能省很多冤枉积分\n- **下载到本地后向用户展示**：results URL + projectUrl 两个都给\n\n## 输出格式（v0.4.0+ 全 JSON）\n\n所有 stdout 输出都是 JSON，便于 Agent 程序化解析：\n\n```json\n// session / flow / node / edit / model 等生成类\n{\"projectUuid\":\"...\", \"sessionId\":\"...\", \"projectUrl\":\"...\", \"message_sent\":\"...\"}\n\n// dry-run\n{\"dry_run\":true, \"preset\":\"...\", \"would_send\":\"...\", ...}\n\n// list 类（model list / project list / history list 等仍输出表格，便于人类查看）\n```\n\n错误以 JSON 写 stderr（见上面\"错误响应\"）。\n\n## 注意事项\n\n- 鉴权方式：`Authorization: Bearer <LIBTV_ACCESS_KEY>`\n- 项目画布地址：`https://www.liblib.tv/canvas?projectId=<projectUuid>`\n- 上传 OSS 地址格式：`https://libtv-res.liblib.art/claw/{projectUuid}/{uuid}{ext}`\n- 文件大小限制：200MB\n- 生成中只给用户\"正在生成\"提示；完成后同时给 **结果 URL + projectUrl**\n- 本地状态：`~/.libtv_projects.json`（项目）+ `~/.libtv_session_history.json`（会话历史）\n\nFile v0.4.0:examples/README.md\n\n# Examples\n\n5 个典型 case，按\"难度 / 积分 / 耗时\"排列。建议第一次用按 01 → 02 → 03 → 04 → 05 顺序看。\n\n| # | 场景 | 命令风格 | 积分 | 耗时 | 难度 |\n|---|---|---|---|---|---|\n| [01](./01-generate-image.md) | 生一张猫图（最小路径）| `model with lib-nano-pro` | ≈14 | ≈60s | ⭐ |\n| [02](./02-generate-video.md) | 生一段 5s 视频 | `model with seedance-2.0-vip` | ≈135 | 5-8 min | ⭐⭐ |\n| [03](./03-edit-with-reference.md) | 把纸船换成爱心（局部编辑）| `upload` + `edit mark` | ≈14-20 | ≈90s | ⭐⭐ |\n| [04](./04-character-to-video.md) | 角色三视图 → 首帧图生视频 | `flow character_views` + `flow keyframe_to_video` + `edit camera` | ≈150 | ≈10 min | ⭐⭐⭐ |\n| [05](./05-batch-images.md) | 并发批量 10 张图 + HTML 报告 | `batch` + `export html` | ≈140 | ≈2 min | ⭐⭐ |\n\n## 跑这些 example 前\n\n1. **设置 API key**：\n   ```bash\n   export LIBTV_ACCESS_KEY=your_key_here\n   ```\n   key 从 [LibTV 用户中心](https://www.liblib.tv) 获取（个人设置 → API / 开发者）。\n\n2. **dry-run 先看 prompt**：每个 case 第一步都有 `--dry-run`，跑完确认 prompt 没问题再去掉它正式生成。可以省下大量积分。\n\n3. **从最便宜的 01 开始**：14 积分一张图，跑通了再去 02。\n\nFile v0.4.0:README.md\n\n# libtv-skill-pro\n\n> 🎬 LibTV (liblib.tv) AI 视频/图像生成平台的 OpenClaw / ClawHub skill。Pro 版在 [@haofanwang/libtv-skill](https://clawhub.ai/haofanwang/libtv-skill) 基础上扩展高级工作流与功能矩阵层。\n\n[![ClawHub](https://img.shields.io/badge/ClawHub-libtv--skill--pro-orange)](https://clawhub.ai/qiuxiangxiang/libtv-skill-pro)\n[![License](https://img.shields.io/badge/license-MIT--0-blue)](LICENSE)\n\n## 是什么\n\n让 Agent（OpenClaw / Claude Code / 其他 ClawHub-compatible 客户端）通过统一入口调用 LibTV 平台的 AI 创作能力：\n\n- **生成**：文生图/视频、图生图/视频、首尾帧视频、音频驱动视频\n- **编辑**：局部修改（\"把纸船换成爱心\"）、风格迁移、运镜调整\n- **多模型路由**：Seedance 2.0 / Kling 3.0/O3 / Wan 2.6 / Nano Banana / Midjourney / Seedream 5.0 / Lib Nano Pro / GVLM 3.1\n- **工作流**：批量并发、轮询监控、8 个预设模板（短剧/MV/角色设计/分镜...）、HTML 报告导出\n- **dry-run 预览**：所有生成类命令支持 `--dry-run`，预览 prompt 不烧积分\n- **结构化错误**：API 错误以 JSON 输出，Agent 程序化可处理\n\n## 安装\n\n### 方式 1：通过 ClawHub（推荐）\n\n```bash\nopenclaw skills install libtv-skill-pro\n```\n\n### 方式 2：从这个仓库克隆\n\n```bash\ngit clone https://github.com/YOUR_HANDLE/libtv-skill-pro.git ~/.agents/skills/libtv-skill-pro\n```\n\n## 快速开始\n\n```bash\n# 1. 拿 access key：https://www.liblib.tv → 用户中心 → API\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# 2. 看命令清单\npython3 scripts/libtv.py --help\n\n# 3. dry-run 预览（不烧积分）\npython3 scripts/libtv.py model with lib-nano-pro \\\n  \"白色短毛猫坐在窗台上\" --ratio 1:1 --resolution 2K --dry-run\n\n# 4. 真实生成 + 轮询 + 下载\npython3 scripts/libtv.py model with lib-nano-pro \"...\" --ratio 1:1\npython3 scripts/libtv.py poll SESSION_ID\npython3 scripts/libtv.py download SESSION_ID --output-dir ~/Downloads/cat\n```\n\n完整示例见 [`examples/`](./examples/)（5 个递进难度的 case）。\n\n## 命令地图\n\n```\nlibtv.py flow      预设流程（故事脚本/角色三视图/首帧图生视频/音频生视频）\nlibtv.py node      节点能力（文本/图片/视频节点细分动作）\nlibtv.py edit      修饰器（风格/标记/聚焦/运镜/角色库）\nlibtv.py model     模型路由（list 已知模型 / with 指定模型生成）\n\nlibtv.py session   创建会话/发消息       libtv.py query   查询会话进展\nlibtv.py upload    上传图片/视频         libtv.py download 下载结果\n\nlibtv.py batch     并发批量任务          libtv.py monitor 实时监控\nlibtv.py poll      简化轮询              libtv.py template 预设工作流模板\nlibtv.py export    导出 HTML/MD/JSON     libtv.py history 会话历史\nlibtv.py project   项目管理\n```\n\n17 个独立脚本（`scripts/*.py`）仍可单独调用（向后兼容）。\n\n## 跟原版的关系\n\n| | @haofanwang/libtv-skill | @qiuxiangxiang/libtv-skill-pro |\n|---|---|---|\n| 基础脚本 | 6 个 | 6 个（保留原版） |\n| 高级工作流 | — | 7 个（batch/monitor/poll/template/export/history/project） |\n| LibTV 功能矩阵 | — | 4 个（flow/node/edit/model） |\n| 统一入口 | — | libtv.py |\n| dry-run 预览 | — | ✓ |\n| 结构化错误 | — | ✓ |\n\n如果你只需要\"自然语言一句话路由\"的极简体验，原版 6 脚本足够。Pro 版面向**批量、精细控制、Agent 程序化集成**场景。\n\n## 测试\n\n```bash\n# 离线（5 秒，不烧积分，120 个用例）\nbash tests/test_offline.sh && python3 tests/test_templates.py\n\n# 在线（按开关计费）\nONLINE_SESSION=1 bash tests/test_online.sh    # ≈0 积分\nONLINE_IMAGE=1   bash tests/test_online.sh    # ≈14 积分\nONLINE_VIDEO=1   bash tests/test_online.sh    # ≈135 积分\n```\n\n详细测试矩阵见 [`tests/README.md`](./tests/README.md)。\n\n## 贡献\n\n发现 bug 或想加新功能：\n\n1. Issue 描述场景 + 预期 vs 实际\n2. PR 前请跑通 `bash tests/test_offline.sh && python3 tests/test_templates.py`\n3. 新功能请同时在 `tests/` 加用例 + 在 `examples/` 加 case\n\n## License\n\nMIT-0（与原版一致）。\n\n## 致谢\n\n- [@haofanwang/libtv-skill](https://clawhub.ai/haofanwang/libtv-skill) — 原版基础架构\n- [LibTV (liblib.tv)](https://www.liblib.tv) — AI 视频创作平台\n- [ClawHub](https://clawhub.ai) — Agent skill 分发\n\nFile v0.4.0:_meta.json\n\n{\n  \"ownerId\": \"kn75javp82ghpk79s61mfbp3bx81vsnj\",\n  \"slug\": \"libtv-skill-pro\",\n  \"version\": \"0.4.0\",\n  \"publishedAt\": 1778739158236\n}\n\nFile v0.4.0:CHANGELOG.md\n\n# Changelog\n\n## [0.4.0] - 2026-05-14（即将发布）\n\n**主题：公开推广就绪 + 架构升级**\n\n### Added — 推广向\n- `examples/` 5 个完整 case：生图 / 视频 / 编辑 / 多步链 / 批量\n- `README.md`（GitHub 入口）+ `LICENSE`（MIT-0）+ `.gitignore`\n- `CHANGELOG.md` 正式纳入版本管理\n- 公开 GitHub 仓库（信任来源 / issue / PR）\n- SKILL.md frontmatter description 精简到 ~400 字，前 300 字聚焦关键词（搜索能见度）\n- SKILL.md 增加「快速开始 3 分钟跑通」段落 + 决策树 + LibTV access key 获取链接\n\n### Added — 架构升级\n- `libtv.py` 统一入口（dispatcher）—— Agent 只需记一个命令：`libtv.py {flow|node|edit|model|...}`\n- `--dry-run` 标志（flow / node / edit / model）—— 预览将发送的 prompt，不调 API、不烧积分\n- 结构化错误响应（`_common.APIError` + `safe_run` wrapper）—— 所有 API 错误以 JSON 写 stderr，含 kind / http_code / message / raw\n- 错误 kind 枚举：INVALID_ACCESS_KEY / FORBIDDEN_OR_INSUFFICIENT_CREDITS / NOT_FOUND / TIMEOUT / RATE_LIMITED / SERVER_ERROR / NETWORK_ERROR / INTERRUPTED / UNKNOWN\n\n### Fixed\n- `change_project.py` 缺 argparse 导致 `--help` 直接调真 API（之前发版前发现的 bug）\n- `_common.py` 不再在 import 时因缺 LIBTV_ACCESS_KEY 而 `sys.exit(1)`——改为延迟到首次实际调用 API 时抛 `APIError`，让 `--help` 在任何情况下都可用\n\n### Changed\n- 所有调 API 的脚本都接入 `safe_run(main)` wrapper\n- frontmatter emoji 由 💬 改为 🎬（配合 film 图标）\n- tests/test_offline.sh 增加 1b（libtv.py 入口）+ 1c（dry-run 验证）共 20 个新用例\n- 总测试用例：73 离线 + 47 模板 = **120 全通**\n\n### Cleanup\n- 发布前清掉 workspace 的 `.clawhub/origin.json`（之前误发）\n- `_meta.json` 不打包进发布\n\n---\n\n## [0.3.0] - 2026-05-13\n\n**LibTV 功能矩阵层**（slug: libtv-skill-pro，fork-of @haofanwang/libtv-skill@1.0.3）\n\n新增 4 个脚本覆盖 LibTV 画布上的完整功能矩阵：\n\n- `flow.py` — LibTV 首页 4 个预设流程（story_script / character_views / keyframe_to_video / audio_to_video）\n- `node.py` — 文本/图片/视频节点的细分动作（text_to_video_prompt / image_caption / text_to_music / image_to_image / image_upscale / first_last_frame / reference_video）\n- `edit.py` — 节点修饰器（style / mark / focus / camera / character_lib）\n- `model.py` — 模型路由（list 9 个已知模型 + with 显式指定模型+参数）\n\nSKILL.md 第 13–16 节文档，新增「场景 8：按 LibTV 网页功能直接调用」工作流示例。\n\n## [0.2.0] - 2026-05-13\n\n**首发 libtv-skill-pro**（fork-of @haofanwang/libtv-skill@1.0.3）\n\n在原版 6 个基础脚本之上扩展 7 个高级工作流脚本：\n\n- `manage_project.py`（list/current/switch/use/remove/describe + `~/.libtv_projects.json` 本地项目记录）\n- `batch_create.py`（并发批量任务）\n- `monitor_session.py`（实时监控）\n- `quick_poll.py`（简化轮询）\n- `workflow_template.py`（8 个预设模板）\n- `export_results.py`（导出 JSON / Markdown / HTML）\n- `session_history.py`（会话历史管理）\n\n行为增强：\n- `create_session.py` / `change_project.py` 自动写入本地项目记录\n- `_common.py`：`change_project()` 支持可选 `projectUuid` 参数\n\nFile v0.4.0:examples/01-generate-image.md\n\n# Example 01：生一张猫图（最小路径）\n\n**积分消耗**：≈14 · **耗时**：≈60s · **难度**：⭐\n\n最简单的端到端：从输入到本地图片 4 个命令搞定。\n\n## 用户需求\n\n「生一张白色短毛猫坐在窗台上的图，1:1 比例，2K 分辨率，用 lib-nano-pro 模型」\n\n## 命令链\n\n```bash\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# 1. 预览将发送的 prompt（不烧积分）\npython3 scripts/libtv.py model with lib-nano-pro \\\n  \"白色短毛猫坐在窗台上\" \\\n  --ratio 1:1 --resolution 2K --count \"1张\" \\\n  --dry-run\n\n# 2. 真实生成\nRESULT=$(python3 scripts/libtv.py model with lib-nano-pro \\\n  \"白色短毛猫坐在窗台上\" \\\n  --ratio 1:1 --resolution 2K --count \"1张\")\necho \"$RESULT\"\nSID=$(echo \"$RESULT\" | python3 -c \"import sys,json; print(json.loads(sys.stdin.read())['sessionId'])\")\n\n# 3. 轮询等待完成（默认 8s 间隔，10 分钟超时）\npython3 scripts/libtv.py poll \"$SID\"\n\n# 4. 下载到本地\npython3 scripts/libtv.py download \"$SID\" --output-dir ~/Downloads/cat --prefix cat\n```\n\n## 预期输出\n\n- 一张 2K PNG/JPG 保存在 `~/Downloads/cat/cat_01.png`\n- 一个 `projectUrl`，浏览器打开可以看 LibTV 项目画布\n\n## 常见故障\n\n| 现象 | 错误 kind | 解决 |\n|---|---|---|\n| 第 2 步 401 | `INVALID_ACCESS_KEY` | 检查 `LIBTV_ACCESS_KEY` 是否正确 |\n| 第 2 步 403 | `FORBIDDEN_OR_INSUFFICIENT_CREDITS` | 积分不足，去 LibTV 充值 |\n| 第 3 步超时 | — | 后端慢，去 `projectUrl` 画布上手动看结果 |\n| 第 4 步空 | — | 会话里还没有结果 URL，再等一会儿重跑 |\n\nFile v0.4.0:examples/02-generate-video.md\n\n# Example 02：用 Seedance 生一段 5 秒视频\n\n**积分消耗**：≈135 · **耗时**：5-8 min · **难度**：⭐⭐\n\n文生视频，指定模型 + 参数。\n\n## 用户需求\n\n「用 Seedance 2.0 VIP 生成一段 5 秒、16:9、720P 的视频：黄昏草原上一只白马奔跑」\n\n## 命令链\n\n```bash\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# 1. 预览（强烈建议先 dry-run 检查参数是否传对）\npython3 scripts/libtv.py model with seedance-2.0-vip \\\n  \"黄昏草原上一只白马奔跑，阳光金黄，长鬃飘动\" \\\n  --ratio 16:9 --resolution 720P --duration 5s --count \"1个\" \\\n  --dry-run\n\n# 2. 真实生成\nRESULT=$(python3 scripts/libtv.py model with seedance-2.0-vip \\\n  \"黄昏草原上一只白马奔跑，阳光金黄，长鬃飘动\" \\\n  --ratio 16:9 --resolution 720P --duration 5s --count \"1个\")\nSID=$(echo \"$RESULT\" | python3 -c \"import sys,json; print(json.loads(sys.stdin.read())['sessionId'])\")\n\n# 3. 视频生成慢，用 monitor 看进度（15s 间隔）\npython3 scripts/libtv.py monitor \"$SID\" --poll --interval 15 --extract-urls --timeout 600\n\n# 4. 下载\npython3 scripts/libtv.py download \"$SID\" --output-dir ~/Downloads/horse --prefix horse\n\n# 5. 加到会话历史（方便以后用 history list 找到）\npython3 scripts/libtv.py history add \"$SID\" --desc \"Seedance 白马奔跑 5s\"\n```\n\n## 预期输出\n\n- `~/Downloads/horse/horse_01.mp4`（约 5 秒、16:9、720P）\n- 项目画布链接（可在 LibTV 网页上分享/编辑）\n\n## 模型选择参考\n\n| 想要 | 推荐模型 | 参数 |\n|---|---|---|\n| 快速预览 / 测试 prompt | `seedance-2.0-vip` | 720P, 5s |\n| 写实人像、动作连贯 | `kling-3.0` | 1080P, 5-10s |\n| 长视频、高质量 | `kling-o3` | 1080P, 10s |\n| 多镜头、复杂场景 | `wan-2.6` | 1080P, 任意 |\n\n用 `python3 scripts/libtv.py model list --kind video` 查全部视频模型。\n\nFile v0.4.0:examples/03-edit-with-reference.md\n\n# Example 03：基于参考图编辑（\"把纸船换成爱心\"）\n\n**积分消耗**：≈14-20 · **耗时**：≈90s · **难度**：⭐⭐\n\n用户拿一张图，要求局部编辑——这是 LibTV 的典型场景。\n\n## 用户需求\n\n「这张图（本地路径 `~/Desktop/origin.png`）里，把所有纸船换成白色纸爱心，保持其他不变」\n\n## 命令链\n\n```bash\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# 1. 先把本地图片上传到 LibTV OSS\nUPLOAD=$(python3 scripts/libtv.py upload ~/Desktop/origin.png)\necho \"$UPLOAD\"\nOSS_URL=$(echo \"$UPLOAD\" | python3 -c \"import sys,json; print(json.loads(sys.stdin.read())['url'])\")\n\n# 2. 用 edit.py mark（局部标记修改）+ OSS URL\nRESULT=$(python3 scripts/libtv.py edit mark \\\n  \"把画面里所有纸船的区域换成白色纸爱心，其他保持不变\" \\\n  --target \"$OSS_URL\")\nSID=$(echo \"$RESULT\" | python3 -c \"import sys,json; print(json.loads(sys.stdin.read())['sessionId'])\")\n\n# 3. 轮询\npython3 scripts/libtv.py poll \"$SID\" --interval 8 --timeout 300\n\n# 4. 下载\npython3 scripts/libtv.py download \"$SID\" --output-dir ~/Desktop/edited\n```\n\n## 替代方案：用 node.py image_to_image\n\n如果是整张图的风格/内容大改（不只是局部），用 image_to_image：\n\n```bash\npython3 scripts/libtv.py node image_to_image \\\n  \"把画面整体改成赛博朋克风\" \\\n  --ref \"$OSS_URL\"\n```\n\n## 修饰器选择\n\n| 用户描述 | 推荐 modifier |\n|---|---|\n| \"把 X 换成 Y\" / \"去掉 X\" / \"加上 X\" | `mark` |\n| \"改成 X 风格\" / \"做成卡通\" / \"宫崎骏感觉\" | `style` |\n| \"强调右上角\" / \"聚焦在人物\" | `focus` |\n| \"用环绕镜头\" / \"推镜头\" / \"希区柯克变焦\" | `camera` |\n| \"用孙悟空作为角色\" | `character_lib` |\n\nFile v0.4.0:examples/04-character-to-video.md\n\n# Example 04：角色三视图 → 首帧图生视频（多步链）\n\n**积分消耗**：≈150 · **耗时**：≈10 min · **难度**：⭐⭐⭐\n\n经典工作流：先做角色 IP 资产，再用其中一张作为视频首帧。\n\n## 用户需求\n\n「我要做一个穿汉服的赛博朋克少女角色，先出三视图，然后用正面图做首帧生成一段她在霓虹街道行走的 5 秒视频」\n\n## 命令链\n\n```bash\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# ─── 第一段：角色三视图 ───\nSTEP1=$(python3 scripts/libtv.py flow character_views \\\n  \"穿汉服的赛博朋克少女，银发，红色机械义眼，唐风刺绣旗袍混搭金属护甲\")\nSID=$(echo \"$STEP1\" | python3 -c \"import sys,json; print(json.loads(sys.stdin.read())['sessionId'])\")\nPROJECT=$(echo \"$STEP1\" | python3 -c \"import sys,json; print(json.loads(sys.stdin.read())['projectUrl'])\")\n\necho \"角色生成中，画布：$PROJECT\"\npython3 scripts/libtv.py poll \"$SID\" --interval 8 --timeout 300\n\n# 下载三视图\npython3 scripts/libtv.py download \"$SID\" --output-dir ~/Downloads/character --prefix view\n# 应该会拿到 view_01.png（正面）/ view_02.png（侧面）/ view_03.png（背面）\n\n# ─── 第二段：上传正面图作为首帧 ───\nUPLOAD=$(python3 scripts/libtv.py upload ~/Downloads/character/view_01.png)\nFRAME_URL=$(echo \"$UPLOAD\" | python3 -c \"import sys,json; print(json.loads(sys.stdin.read())['url'])\")\n\n# ─── 第三段：首帧图生视频，在同一会话内（保持上下文）───\nSTEP3=$(python3 scripts/libtv.py flow keyframe_to_video \\\n  \"角色在夜晚霓虹密布的街道上缓步前行，回头一瞥，环绕运镜\" \\\n  --ref \"$FRAME_URL\" \\\n  --session-id \"$SID\")\n\n# ─── 第四段：叠加运镜修饰器（强化运镜质量）───\npython3 scripts/libtv.py edit camera \\\n  \"环绕 + 微推镜头，希区柯克变焦在回眸瞬间\" \\\n  --target \"（上一条 keyframe_to_video 的生成视频）\" \\\n  --session-id \"$SID\"\n\n# ─── 第五段：等待 + 下载 ───\npython3 scripts/libtv.py monitor \"$SID\" --poll --interval 15 --extract-urls --timeout 600\npython3 scripts/libtv.py download \"$SID\" --output-dir ~/Downloads/character_video\n```\n\n## 这个 case 演示的能力\n\n1. **预设流程入口** (`flow character_views`, `flow keyframe_to_video`)\n2. **本地文件上传** (`upload`)\n3. **会话上下文复用** (`--session-id`)\n4. **修饰器叠加** (`edit camera`)\n5. **轮询 + 下载** (`poll` / `monitor` / `download`)\n\n## 简化版（不用 flow，直接用 model.py）\n\n如果你想精确控制每步用什么模型：\n\n```bash\n# 角色用 Midjourney（美学风）\npython3 scripts/libtv.py model with midjourney \"穿汉服的赛博朋克少女三视图...\" --ratio 16:9\n\n# 视频用 Kling O3（高质量长视频）\npython3 scripts/libtv.py model with kling-o3 \"霓虹街道行走...\" --ratio 16:9 --duration 10s\n```\n\nFile v0.4.0:examples/05-batch-images.md\n\n# Example 05：批量生成 10 张图（并发 + 自动 HTML 报告）\n\n**积分消耗**：≈140（14 × 10）· **耗时**：≈2 min · **难度**：⭐⭐\n\n需要做 9 宫格、分镜、产品图组等场景。\n\n## 用户需求\n\n「给我生成 10 张'未来城市夜景'的图，不同视角，最后导出 HTML 报告方便看」\n\n## 命令链\n\n```bash\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# ─── Step 1: 准备任务文件 ───\ncat > /tmp/cyber_tasks.txt <<'EOF'\n未来城市夜景，高空俯瞰，霓虹密布\n未来城市夜景，街道平视，飞行汽车\n未来城市夜景，巨型全息广告牌特写\n未来城市夜景，地下管道仰望\n未来城市夜景，机器人巡逻，雾气弥漫\n未来城市夜景，雨后倒影，赛博朋克\n未来城市夜景，废墟之中残存的霓虹\n未来城市夜景，巨塔之巅，星空背景\n未来城市夜景，市集人群，多人种共存\n未来城市夜景，悬浮列车划过画面\nEOF\n\n# ─── Step 2: 批量提交（并发 5）───\npython3 scripts/libtv.py batch \\\n  --file /tmp/cyber_tasks.txt \\\n  --workers 5 \\\n  --output /tmp/cyber_batch.json\n\n# ─── Step 3: 逐个轮询完成 ───\nfor SID in $(python3 -c \"\nimport json\ndata = json.load(open('/tmp/cyber_batch.json'))\nfor r in data:\n    if r.get('sessionId'):\n        print(r['sessionId'])\n\"); do\n    echo \"=== Polling $SID ===\"\n    python3 scripts/libtv.py poll \"$SID\" --interval 8 --timeout 300 --quiet &\ndone\nwait\n\n# ─── Step 4: 导出 HTML 报告 ───\nmkdir -p ~/Downloads/cyber-batch\nfor SID in $(python3 -c \"\nimport json\ndata = json.load(open('/tmp/cyber_batch.json'))\nfor r in data:\n    if r.get('sessionId'):\n        print(r['sessionId'])\n\"); do\n    python3 scripts/libtv.py export \"$SID\" --format html --output ~/Downloads/cyber-batch/$SID.html\n    python3 scripts/libtv.py download \"$SID\" --output-dir ~/Downloads/cyber-batch/$SID\ndone\n\n# ─── Step 5: 浏览 ───\nopen ~/Downloads/cyber-batch/\n```\n\n## 关键参数\n\n| 参数 | 作用 |\n|---|---|\n| `batch --workers 5` | 同时发 5 个，避免 IM 后端被冲 |\n| `batch --output FILE.json` | 保存 sessionId 列表，便于后续轮询 |\n| `export --format html` | 带预览的 HTML，看图最方便 |\n| `export --format markdown` | 适合贴到 Notion / Lark |\n| `export --urls-only` | 只要 URL 列表，给其他脚本用 |\n\n## 进阶：每个任务用不同模型\n\n如果想 10 个任务用不同模型，改用循环 + `model.py with`：\n\n```bash\nMODELS=(lib-nano-pro midjourney seedream-5.0 nano-banana lib-nano-pro \\\n        midjourney seedream-5.0 nano-banana lib-nano-pro midjourney)\nTASKS=(...) # 10 个 prompt\nfor i in {0..9}; do\n    python3 scripts/libtv.py model with \"${MODELS[$i]}\" \"${TASKS[$i]}\" --ratio 16:9 &\ndone\nwait\n```\n\nArchive v0.3.0: 19 files, 42377 bytes\n\nFiles: _meta.json (134b), scripts/_common.py (5060b), scripts/batch_create.py (4261b), scripts/change_project.py (747b), scripts/create_session.py (2006b), scripts/download_results.py (5215b), scripts/edit.py (4363b), scripts/export_results.py (7833b), scripts/flow.py (4255b), scripts/manage_project.py (6712b), scripts/model.py (6449b), scripts/monitor_session.py (6207b), scripts/node.py (6599b), scripts/query_session.py (1667b), scripts/quick_poll.py (4266b), scripts/session_history.py (6624b), scripts/upload_file.py (3521b), scripts/workflow_template.py (4846b), SKILL.md (23868b)\n\nFile v0.3.0:SKILL.md\n\n---\nname: libtv-skill-pro\ndescription: agent-im 会话技能 Pro 版（在 @haofanwang/libtv-skill 基础上扩展高级工作流脚本）- 通过 liblib.tv 的 AI 能力生成和编辑图片/视频。覆盖场景包括：生成（文生图、文生视频、图生视频、做动画、画一个xxx、来段xxx）、编辑修改（把xxx换成yyy、去掉xxx、加上xxx、改成xxx、调整xxx、局部修改、改镜头）、风格转换（风格迁移、转绘、换风格）、视频续写延长、复刻视频/TVC/宣传片、短剧/短漫剧生成、音乐MV生成、产品广告/展示片制作、分镜/故事板设计、教育视频/短视频制作。当用户提到 liblib、libtv、上传参考图/视频、查看生成进度时也应触发。关键判断：只要用户的请求涉及 AI 图片或视频的创作、生成、编辑、修改，无论措辞如何（如\"画只猫\"、\"做个海报\"、\"把纸船换成爱心\"、\"这个视频帮我改一下\"、\"帮我复刻这段视频\"、\"用这首歌做个MV\"、\"一句话生成短剧\"），都必须触发此技能。Pro 版相比原版增加了批量任务、实时监控、工作流模板、结果导出、会话历史、项目管理等高级能力。\nuser-invocable: true\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"💬\",\n        \"requires\":\n          {\n            \"bins\": [\"python3\"],\n            \"env\": [\"LIBTV_ACCESS_KEY\"]\n          },\n        \"primaryEnv\": \"LIBTV_ACCESS_KEY\"\n      }\n  }\n---\n\n# agent-im 会话（生图 / 生视频）\n\n> Fork of [@haofanwang/libtv-skill](https://clawhub.ai/haofanwang/libtv-skill)\n> - **基础层**（来自原版）：create_session / query_session / change_project / upload_file / download_results\n> - **高级工作流层**：manage_project / batch_create / monitor_session / quick_poll / workflow_template / export_results / session_history\n> - **LibTV 功能矩阵层**（v0.3.0+）：flow（预设流程）/ node（节点能力）/ edit（修饰器）/ model（模型路由），覆盖 LibTV 画布上看到的功能与模型\n\n通过 agent-im 的 OpenAPI 创建会话、发送消息（生图、生视频、编辑视频等）、上传图片/视频文件，并查询会话消息进展。\n\nLibTV 是 LiblibAI 推出的 AI 视频创作平台，同时为人类创作者和 Agent 设计。Agent 通过 Skill 入口理解任务、调用模型并自动编排工作流。\n\n**平台核心能力：**\n- **生成**：文生图、文生视频、图生视频、视频续写\n- **编辑**：局部修改、元素替换、镜头调整、风格迁移\n- **复杂创作**：一句话生成完整短剧（剧本→分镜→成片）、复刻已有视频风格做 TVC/宣传片、用音乐生成 MV、产品展示片制作\n- **模型**：Seedance 2.0、Kling 3.0/O3、Wan 2.6、NanoBanana、Midjourney、Seedream 5.0 等顶级模型\n\n用户的所有创作和编辑需求都通过发送自然语言消息来完成，Agent 会自主编排工作流。复杂任务（短剧、MV）耗时较长，需耐心轮询。\n\n## 功能\n\n1. **创建会话 / 发消息** - 创建新会话或向已有会话发送一条消息（如「生一个动漫视频」「把纸船换成爱心」）\n2. **查询会话进展** - 根据 sessionId 拉取该会话的消息列表，用于轮询生图/生视频结果\n3. **切换项目** - 将当前 accessKey 绑定的项目切换到新项目，后续 create_session 将使用新 projectUuid\n4. **上传文件** - 上传图片或视频文件到 OSS，返回可访问的 OSS 地址（编辑已有视频/图片时需要先上传）\n5. **下载结果** - 将会话中生成的图片/视频批量下载到本地，自动提取 URL 并命名\n\n### 高级功能\n\n6. **批量创建任务** - 同时发起多个生图/生视频任务，支持并发控制和任务队列\n7. **实时监控** - 持续监控会话消息进展，支持多种输出格式和 URL 提取\n8. **快速轮询** - 简化版轮询工具，自动等待直到任务完成\n9. **工作流模板** - 预设常用工作流（分镜生成、角色设计、短剧制作等）\n10. **结果导出** - 导出会话结果为 JSON/Markdown/HTML 格式\n11. **会话历史** - 管理常用会话，快速查看历史记录\n12. **项目管理** - 多项目管理，快速切换和查看项目列表\n\n### LibTV 平台功能直达（v0.3.0+）\n\n按 LibTV 画布上的功能矩阵直接调用，每个脚本内置精准 prompt 模板：\n\n13. **预设流程** (`flow.py`) - 故事脚本生成 / 角色三视图 / 首帧图生视频 / 音频生视频（首页 4 入口）\n14. **节点能力** (`node.py`) - 文本节点（文生视频提示词 / 图片反推 / 文字生音乐）、图片节点（图生图 / 图片高清）、视频节点（首尾帧 / 图片参考）\n15. **修饰器** (`edit.py`) - 风格 / 标记 / 聚焦 / 运镜 / 角色库（应用在已生成内容上的精细修饰）\n16. **模型路由** (`model.py`) - 列出已知模型（GVLM 3.1 / Lib Nano Pro / Seedance 2.0 VIP / Kling 3.0/O3 / Wan 2.6 / NanoBanana / Midjourney / Seedream 5.0），或显式指定模型 + 参数（比例/分辨率/时长/数量）生成\n\n> 13-16 是 v0.3.0 新增的\"功能矩阵层\"，与 1-12 的\"基础工具 + 高级工作流层\"互补。如果你已经知道想要哪个 LibTV 入口/模型，优先用 13-16；如果只有自然语言意图，走 1-9 的通用路径。\n\n## 前置要求\n\n```bash\nexport LIBTV_ACCESS_KEY=\"your-access-key\"\n```\n\n可选：`OPENAPI_IM_BASE` 或 `IM_BASE_URL`，默认 `https://im.liblib.tv`。\n\n无需安装额外依赖，仅使用 Python 标准库。\n\n## 使用方法\n\n### 1. 创建会话 / 发送消息\n\n```bash\n# 创建新会话并发送「生一个动漫视频」\npython3 {baseDir}/scripts/create_session.py \"生一个动漫视频\"\n\n# 向已有会话发送消息\npython3 {baseDir}/scripts/create_session.py \"再生成一张风景图\" --session-id SESSION_ID\n\n# 只创建/绑定会话，不发消息\npython3 {baseDir}/scripts/create_session.py\n```\n\n### 2. 查询会话进展\n\n```bash\n# 查询会话消息列表\npython3 {baseDir}/scripts/query_session.py SESSION_ID\n\n# 增量拉取（只返回 seq 大于 N 的消息）\npython3 {baseDir}/scripts/query_session.py SESSION_ID --after-seq 5\n\n# 附带项目地址（传入 create_session 返回的 projectUuid，结果中带 projectUrl）\npython3 {baseDir}/scripts/query_session.py SESSION_ID --project-id PROJECT_UUID\n```\n\n### 3. 切换项目\n\n```bash\n# 切换当前 accessKey 绑定的项目（后续创建会话将使用新项目）\npython3 {baseDir}/scripts/change_project.py\n```\n\n### 4. 上传文件\n\n当用户提供了参考的文件地址时，进行上传，仅支持图片、视频，文件大小必须在200M以下。\n\n```bash\n# 上传图片\npython3 {baseDir}/scripts/upload_file.py /path/to/image.png\n\n# 上传视频\npython3 {baseDir}/scripts/upload_file.py /path/to/video.mp4\n```\n\n### 5. 下载结果\n\n生成完成后，可以将会话中的所有图片/视频批量下载到本地。\n\n```bash\n# 从会话自动提取并下载所有结果\npython3 {baseDir}/scripts/download_results.py SESSION_ID\n\n# 指定输出目录\npython3 {baseDir}/scripts/download_results.py SESSION_ID --output-dir ~/Desktop/my_project\n\n# 指定文件名前缀（如 storyboard_01.png, storyboard_02.png ...）\npython3 {baseDir}/scripts/download_results.py SESSION_ID --prefix \"storyboard\"\n\n# 直接下载指定 URL 列表（不需要 session_id）\npython3 {baseDir}/scripts/download_results.py --urls URL1 URL2 URL3 --output-dir ./output\n```\n\n### 6. 批量创建任务\n\n同时发起多个生图/生视频任务，支持并发控制。\n\n```bash\n# 从文件批量创建（每行一个任务描述）\npython3 {baseDir}/scripts/batch_create.py --file tasks.txt\n\n# 直接指定多个任务\npython3 {baseDir}/scripts/batch_create.py -m \"生成猫的图片\" -m \"生成狗的图片\" -m \"生成鸟的图片\"\n\n# 限制并发数\npython3 {baseDir}/scripts/batch_create.py --file tasks.txt --workers 3 --output results.json\n```\n\n### 7. 实时监控\n\n持续监控会话消息进展，支持多种输出格式。\n\n```bash\n# 基本监控\npython3 {baseDir}/scripts/monitor_session.py SESSION_ID\n\n# 轮询模式（每 10 秒查询一次）\npython3 {baseDir}/scripts/monitor_session.py SESSION_ID --poll --interval 10\n\n# 只显示助手消息并提取 URL\npython3 {baseDir}/scripts/monitor_session.py SESSION_ID --poll --role assistant --extract-urls\n\n# JSON 格式输出并保存\npython3 {baseDir}/scripts/monitor_session.py SESSION_ID --poll --format json --output log.json\n```\n\n### 8. 快速轮询\n\n简化版轮询工具，自动等待直到任务完成。\n\n```bash\n# 基本轮询（默认间隔 8 秒，超时 10 分钟）\npython3 {baseDir}/scripts/quick_poll.py SESSION_ID\n\n# 自定义间隔和超时\npython3 {baseDir}/scripts/quick_poll.py SESSION_ID --interval 5 --timeout 300\n\n# 安静模式（只输出最终结果）\npython3 {baseDir}/scripts/quick_poll.py SESSION_ID --quiet\n```\n\n### 9. 工作流模板\n\n预设常用工作流，快速创建标准任务。\n\n```bash\n# 列出所有模板\npython3 {baseDir}/scripts/workflow_template.py --list\n\n# 使用分镜模板\npython3 {baseDir}/scripts/workflow_template.py storyboard \"科幻城市的故事\"\n\n# 使用角色设计模板\npython3 {baseDir}/scripts/workflow_template.py character_design \"勇敢的骑士\"\n\n# 使用短剧模板（自动生成完整短剧）\npython3 {baseDir}/scripts/workflow_template.py short_drama \"友情故事\"\n\n# 使用已有会话\npython3 {baseDir}/scripts/workflow_template.py video_generation \"夕阳下的海滩\" --session-id SESSION_ID\n```\n\n**可用模板：** storyboard, character_design, video_generation, image_generation, style_transfer, short_drama, music_video, product_showcase\n\n### 10. 结果导出\n\n导出会话结果为多种格式。\n\n```bash\n# JSON 格式导出（默认）\npython3 {baseDir}/scripts/export_results.py SESSION_ID\n\n# Markdown 格式\npython3 {baseDir}/scripts/export_results.py SESSION_ID --format markdown --output report.md\n\n# HTML 格式（包含图片/视频预览）\npython3 {baseDir}/scripts/export_results.py SESSION_ID --format html --output report.html\n\n# 只导出 URL 列表\npython3 {baseDir}/scripts/export_results.py SESSION_ID --urls-only\n```\n\n### 11. 会话历史\n\n管理常用会话，快速查看历史记录。\n\n```bash\n# 列出所有会话\npython3 {baseDir}/scripts/session_history.py list\n\n# 添加会话记录\npython3 {baseDir}/scripts/session_history.py add SESSION_ID --project-id PROJECT_UUID --desc \"项目描述\"\n\n# 查看会话详情\npython3 {baseDir}/scripts/session_history.py show 1\n\n# 获取会话 ID（用于脚本）\npython3 {baseDir}/scripts/session_history.py get 1\n\n# 删除会话记录\npython3 {baseDir}/scripts/session_history.py remove 1\n```\n\n### 12. 项目管理\n\n多项目管理：列出/切换/记录项目。本地记录文件位于 `~/.libtv_projects.json`，`create_session.py` 和 `change_project.py` 也会自动写入。\n\n```bash\n# 列出本地记录的所有项目（带 * 标记当前项目）\npython3 {baseDir}/scripts/manage_project.py list\n\n# 显示当前项目\npython3 {baseDir}/scripts/manage_project.py current\n\n# 调用 API 创建新项目并切换\npython3 {baseDir}/scripts/manage_project.py switch --desc \"短剧 A\"\n\n# 切换到指定项目（依赖服务端实现，失败时仅标记为本地当前项目）\npython3 {baseDir}/scripts/manage_project.py use PROJECT_UUID\n\n# 给项目添加/更新备注\npython3 {baseDir}/scripts/manage_project.py describe PROJECT_UUID \"MV 项目\"\n\n# 删除本地记录\npython3 {baseDir}/scripts/manage_project.py remove PROJECT_UUID\n```\n\n> 旧的 `change_project.py` 仍然保留（等价于 `manage_project.py switch`），并会自动写入本地项目记录。\n\n### 13. 预设流程（LibTV 首页 4 入口）\n\n`flow.py` 把 LibTV 画布首页的 4 个预设流程做成一键入口，内置 prompt 模板。\n\n```bash\n# 故事脚本生成\npython3 {baseDir}/scripts/flow.py story_script \"机器人来到唐朝\"\n\n# 角色三视图（人物 IP 资产）\npython3 {baseDir}/scripts/flow.py character_views \"穿汉服的赛博朋克少女，银发\"\n\n# 首帧图生视频（需先用 upload_file.py 拿到首帧 OSS URL）\npython3 {baseDir}/scripts/flow.py keyframe_to_video \"角色拔剑出鞘\" --ref https://libtv-res.../start.png\n\n# 音频生视频（需先上传音频）\npython3 {baseDir}/scripts/flow.py audio_to_video \"暗黑风 MV\" --ref https://libtv-res.../song.mp3\n```\n\n### 14. 节点能力\n\n`node.py` 对应 LibTV 的文本节点 / 图片节点 / 视频节点的细分动作。\n\n```bash\n# 文本节点\npython3 {baseDir}/scripts/node.py text_to_video_prompt \"一只猫在屋顶看月亮\"\npython3 {baseDir}/scripts/node.py image_caption --ref https://example.com/a.png\npython3 {baseDir}/scripts/node.py text_to_music \"悲伤、钢琴独奏、60秒\"\n\n# 图片节点\npython3 {baseDir}/scripts/node.py image_to_image \"换成赛博朋克风\" --ref https://example.com/a.png\npython3 {baseDir}/scripts/node.py image_upscale --ref https://example.com/a.png\n\n# 视频节点\npython3 {baseDir}/scripts/node.py first_last_frame \"角色拔剑过程\" --ref start.png --ref2 end.png\npython3 {baseDir}/scripts/node.py reference_video \"保留主体演绎新场景\" --ref ref.png\n```\n\n### 15. 修饰器（风格 / 运镜 / 角色库 等）\n\n`edit.py` 把 LibTV 节点上的修饰器按钮做成显式调用。建议传 `--session-id` 在同一会话里叠加。\n\n```bash\n# 风格迁移\npython3 {baseDir}/scripts/edit.py style \"宫崎骏吉卜力\" --target https://example.com/v.mp4 --session-id SID\n\n# 运镜调整\npython3 {baseDir}/scripts/edit.py camera \"无人机环绕镜头\" --target \"待生成的场景\" --session-id SID\n\n# 角色库调用\npython3 {baseDir}/scripts/edit.py character_lib \"孙悟空\" --target \"在花果山做早操\" --session-id SID\n\n# 局部标记 / 聚焦\npython3 {baseDir}/scripts/edit.py mark \"把画面中纸船的区域换成爱心\" --target URL --session-id SID\npython3 {baseDir}/scripts/edit.py focus \"强调画面右上角的月亮\" --target URL --session-id SID\n```\n\n### 16. 模型路由\n\n`model.py` 列出已知模型，并支持显式指定模型 + 参数生成。\n\n```bash\n# 列出所有已知模型\npython3 {baseDir}/scripts/model.py list\n\n# 只看视频模型\npython3 {baseDir}/scripts/model.py list --kind video\n\n# 指定 Seedance 2.0 VIP 生成 5 秒 720P 16:9 视频\npython3 {baseDir}/scripts/model.py with seedance-2.0-vip \"黄昏草原一只白马奔跑\" \\\n  --ratio 16:9 --duration 5s --resolution 720P\n\n# 指定 Lib Nano Pro 生成 16:9 2K 图片\npython3 {baseDir}/scripts/model.py with lib-nano-pro \"赛博朋克少女肖像\" \\\n  --ratio 16:9 --resolution 2K --count \"4张\"\n\n# 指定 Kling O3 长视频\npython3 {baseDir}/scripts/model.py with kling-o3 \"古风武侠对决长镜头\" --ratio 16:9 --duration 10s\n```\n\n> **关于模型/参数指令的执行程度**：脚本会把 `指定模型/比例/分辨率/时长/数量` 以自然语言放在 prompt 顶端发给 LibTV IM 后端。服务端 Agent 接收后理论上会按指令路由，但严格执行程度依赖 LibTV 实现。即使后端只把指令当 prompt hint 处理，明确的指令也比模糊描述更有助于路由。\n\n## 典型工作流\n\n理解这些工作流，才能正确组合上面的脚本完成用户需求。\n\n### 场景 1：用户要求生成图片/视频（最常见）\n\n```\n1. create_session.py \"用户的描述\"  →  拿到 sessionId + projectUuid\n2. 每隔 8 秒调用 query_session.py SESSION_ID --after-seq 0 轮询\n3. 检查 messages：当出现 assistant 角色的消息且包含图片/视频 URL → 任务完成\n4. 自动下载：download_results.py SESSION_ID --output-dir ~/Downloads/项目名 --prefix 有意义的前缀\n5. 向用户展示：本地文件列表 + projectUrl（画布链接）\n```\n\n生成完成后**自动执行下载**，不需要用户额外请求。下载目录和前缀根据任务语义自动命名（如分镜用 `storyboard`，角色设定用 `character` 等）。\n\n### 场景 2：用户提供图片/视频要求编辑修改（如\"把纸船换成爱心\"）\n\n```\n1. upload_file.py /path/to/video.mp4  →  拿到 OSS URL\n2. create_session.py \"把四周的纸船都换成白色的纸爱心 参考视频：{oss_url}\"\n3. 后续同场景 1 的步骤 2-5\n```\n\n用户给了文件路径 + 编辑指令 = 先上传文件，再把编辑指令和 OSS URL 一起发送。\n\n### 场景 3：用户提供参考图/视频要求生成新内容\n\n```\n1. upload_file.py /path/to/ref.png  →  拿到 OSS URL\n2. create_session.py \"根据参考图生成xxx，参考图：{oss_url}\"\n3. 后续同场景 1 的步骤 2-5\n```\n\n### 场景 4：在已有会话中追加新需求\n\n```\n1. create_session.py \"新的描述\" --session-id SESSION_ID\n2. 后续同场景 1 的步骤 2-5\n```\n\n### 场景 5：批量生成多个图片/视频（使用批量功能）\n\n```\n1. 创建任务列表文件 tasks.txt（每行一个任务描述）\n2. batch_create.py --file tasks.txt --workers 5 --output batch_result.json\n3. 从结果中获取所有 session_id\n4. 对每个 session_id 调用 quick_poll.py SESSION_ID 等待完成\n5. 使用 export_results.py SESSION_ID --format html 导出结果\n```\n\n### 场景 6：制作完整短剧（使用工作流模板）\n\n```\n1. workflow_template.py short_drama \"科幻爱情故事\"\n2. 记录返回的 session_id\n3. monitor_session.py SESSION_ID --poll --interval 15 --extract-urls\n4. 等待任务完成，导出结果\n5. session_history.py add SESSION_ID --desc \"科幻短剧项目\"\n```\n\n### 场景 7：多项目管理和切换\n\n```\n1. manage_project.py switch  →  创建新项目\n2. workflow_template.py storyboard \"新项目分镜\"  →  在新项目中创建任务\n3. manage_project.py list  →  查看所有项目\n4. manage_project.py use PROJECT_UUID  →  切换到指定项目\n5. session_history.py list  →  查看该项目下的所有会话\n```\n\n### 场景 8：按 LibTV 网页功能直接调用（v0.3.0+ 推荐路径）\n\n当用户已经知道想要 LibTV 哪个功能/模型时，跳过模糊的\"传话\"路径，直接走功能矩阵层：\n\n```\n1. flow.py story_script \"科幻爱情故事\"  →  对应 LibTV 首页「故事脚本生成」入口\n2. flow.py character_views \"男女主角设定\" --session-id SID  →  对应「角色三视图」\n3. node.py first_last_frame \"拥抱过程\" --ref start.png --ref2 end.png --session-id SID  →  视频节点 首尾帧\n4. edit.py style \"宫崎骏吉卜力\" --target VIDEO_URL --session-id SID  →  应用风格修饰器\n5. model.py with kling-o3 \"古风长镜头\" --ratio 16:9 --duration 10s --session-id SID  →  指定模型生成\n6. quick_poll.py SID  →  等待完成\n7. download_results.py SID --output-dir ~/Downloads/sci-fi-story\n```\n\n### 何时用 13-16 vs 1-9\n\n- **用户已明确想要 LibTV 某个功能/模型** → 走 13-16（精确、可复现）\n- **用户只给了模糊意图，要 Agent 自己路由** → 走 1-9（让 LibTV 后端 Agent 编排）\n- **混合用法**：先用 `flow.py` 起步建会话，再用 `edit.py` / `model.py` 在同一会话上叠加（`--session-id`）\n\n### 轮询策略\n\n- **间隔**：每 8 秒查询一次\n- **增量拉取**：首次用 `--after-seq 0`，后续用上次拿到的最大 seq 值\n- **完成判断**：messages 中出现 assistant 消息且 content 包含结果 URL（图片/视频地址）\n- **超时**：连续轮询 3 分钟仍无结果，告知用户\"生成时间较长，可稍后通过项目画布链接查看\"，不再继续轮询\n- **错误重试**：单次查询失败可重试 1 次，连续 3 次失败则停止并告知用户\n\n## 输出格式\n\n**create_session** 返回：\n```json\n{\n  \"projectUuid\": \"aa3ba04c5044477cb7a00a9e5bf3b4d0\",\n  \"sessionId\": \"90f05e0c-...\",\n  \"projectUrl\": \"https://www.liblib.tv/canvas?projectId=aa3ba04c5044477cb7a00a9e5bf3b4d0\"\n}\n```\n\n**query_session** 返回：\n```json\n{\n  \"messages\": [\n    {\"id\": \"msg-xxx\", \"role\": \"user\", \"content\": \"生一个动漫视频\"},\n    {\"id\": \"msg-yyy\", \"role\": \"assistant\", \"content\": \"...\"}\n  ],\n  \"projectUrl\": \"https://www.liblib.tv/canvas?projectId=...\"\n}\n```\n（`projectUrl` 仅在传入 `--project-id` 时存在）\n\n**change_project** 返回：\n```json\n{\n  \"projectUuid\": \"新项目UUID\",\n  \"projectUrl\": \"https://www.liblib.tv/canvas?projectId=新项目UUID\"\n}\n```\n\n**upload_file** 返回：\n```json\n{\n  \"url\": \"https://libtv-res.liblib.art/claw/{projectUuid}/{uuid}.png\"\n}\n```\n\n**download_results** 返回：\n```json\n{\n  \"output_dir\": \"/Users/xxx/Downloads/libtv_results\",\n  \"downloaded\": [\"/Users/xxx/Downloads/libtv_results/01.png\", \"...\"],\n  \"total\": 9\n}\n```\n\n## 最终向用户展示时（OpenClaw）\n\n- **视频地址**：来自 `query_session` 返回的 `messages` 中 assistant 消息的 content 或结果里的视频/图片 URL，即「返回的结果」。\n- **项目地址**：使用 `create_session` 返回的 `projectUrl`，或自行拼接 `https://www.liblib.tv/canvas?projectId=` + `projectUuid`。查询进展时若传入 `--project-id PROJECT_UUID`，`query_session` 会直接返回 `projectUrl`，便于一并展示。\n\n在任务完成时，同时给出：**视频/图片结果链接** + **项目画布链接（projectUrl）**。\n过程中，不要给出 **项目画布链接（projectUrl）**。\n\n## 核心原则：用户侧不做创作，只做传话\n\n你（用户侧 Agent）的职责是**搬运工**，不是创作者。后端有专门的 Agent 负责理解需求、拆解分镜、编排工作流、选模型、写 prompt。你要做的只有三件事：\n\n1. **上传**：用户给了本地文件 → `upload_file.py` 拿到 OSS URL\n2. **传话**：把用户的原始描述 + OSS URL 原封不动发给 `create_session.py`\n3. **取件**：轮询结果 → 下载到本地 → 展示给用户\n\n**绝对不要做的事：**\n- 不要替用户扩写、润色、翻译 prompt（用户说\"帮我推演分镜\"，就直接传\"帮我推演分镜\"，不要自己先写个分镜表再逐条发）\n- 不要自行拆解任务步骤（如把\"生成9张分镜图\"拆成9次独立请求）\n- 不要自行编排镜头描述、剧情推演、风格分析\n- 不要在消息中添加自己编的 prompt（如\"超写实风格，电影级光影，8K分辨率\"之类的描述词）\n\n后端 Agent 对模型能力、参数配置、prompt 工程远比用户侧更专业。用户侧越俎代庖只会降低生成质量，换个弱模型更是灾难。\n\n**正确示例：**\n```\n用户说：「帮我推演后续的故事，来个分镜大爆炸，帮我出一个16:9的九宫格的图。新建一个任务。」\n用户给了参考图：/path/to/ref.png\n\n→ upload_file.py /path/to/ref.png  →  拿到 oss_url\n→ create_session.py \"帮我推演后续的故事，来个分镜大爆炸，帮我出一个16:9的九宫格的图。参考图：{oss_url}\"\n→ 轮询 → 下载 → 展示\n```\n\n**错误示例：**\n```\n❌ 用户侧自己先写了个九宫格分镜表（对峙、交锋、危机...）\n❌ 然后把自己编的描述发给后端\n❌ 或者拆成9次 create_session 分别发送\n```\n\n## 注意事项\n\n- 鉴权方式为请求头 `Authorization: Bearer <LIBTV_ACCESS_KEY>`\n- 创建会话时若不传 `message`，仅创建/绑定会话，不会调用 SendMessage\n- 查询会话时可用 `--after-seq` 做增量拉取，便于轮询新消息（含 assistant 回复与生图/生视频结果）\n- 项目画布地址固定为：`https://www.liblib.tv/canvas?projectId=` + projectUuid\n- 切换项目后，Redis 缓存会更新，下次 create_session 将使用新的 projectUuid\n- 上传文件仅支持图片（image/*）和视频（video/*）类型，其他类型会被拒绝，文件大小须在 200MB 以下\n- 上传返回的 OSS 地址格式为 `https://libtv-res.liblib.art/claw/{projectUuid}/{uuid}{ext}`\n- 生成过程中只告知用户\"正在生成中\"，不要提前给出 projectUrl；任务完成后再同时给出：**结果链接（图片/视频 URL）** + **项目画布链接（projectUrl）**\n\nFile v0.3.0:_meta.json\n\n{\n  \"ownerId\": \"kn75javp82ghpk79s61mfbp3bx81vsnj\",\n  \"slug\": \"libtv-skill-pro\",\n  \"version\": \"0.3.0\",\n  \"publishedAt\": 1778692062807\n}\n\nArchive v0.2.0: 15 files, 31182 bytes\n\nFiles: _meta.json (134b), scripts/_common.py (5060b), scripts/batch_create.py (4261b), scripts/change_project.py (747b), scripts/create_session.py (2006b), scripts/download_results.py (5215b), scripts/export_results.py (7833b), scripts/manage_project.py (6712b), scripts/monitor_session.py (6207b), scripts/query_session.py (1667b), scripts/quick_poll.py (4266b), scripts/session_history.py (6624b), scripts/upload_file.py (3521b), scripts/workflow_template.py (4846b), SKILL.md (17966b)\n\nFile v0.2.0:SKILL.md\n\n---\nname: libtv-skill-pro\ndescription: agent-im 会话技能 Pro 版（在 @haofanwang/libtv-skill 基础上扩展高级工作流脚本）- 通过 liblib.tv 的 AI 能力生成和编辑图片/视频。覆盖场景包括：生成（文生图、文生视频、图生视频、做动画、画一个xxx、来段xxx）、编辑修改（把xxx换成yyy、去掉xxx、加上xxx、改成xxx、调整xxx、局部修改、改镜头）、风格转换（风格迁移、转绘、换风格）、视频续写延长、复刻视频/TVC/宣传片、短剧/短漫剧生成、音乐MV生成、产品广告/展示片制作、分镜/故事板设计、教育视频/短视频制作。当用户提到 liblib、libtv、上传参考图/视频、查看生成进度时也应触发。关键判断：只要用户的请求涉及 AI 图片或视频的创作、生成、编辑、修改，无论措辞如何（如\"画只猫\"、\"做个海报\"、\"把纸船换成爱心\"、\"这个视频帮我改一下\"、\"帮我复刻这段视频\"、\"用这首歌做个MV\"、\"一句话生成短剧\"），都必须触发此技能。Pro 版相比原版增加了批量任务、实时监控、工作流模板、结果导出、会话历史、项目管理等高级能力。\nuser-invocable: true\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"💬\",\n        \"requires\":\n          {\n            \"bins\": [\"python3\"],\n            \"env\": [\"LIBTV_ACCESS_KEY\"]\n          },\n        \"primaryEnv\": \"LIBTV_ACCESS_KEY\"\n      }\n  }\n---\n\n# agent-im 会话（生图 / 生视频）\n\n> Fork of [@haofanwang/libtv-skill](https://clawhub.ai/haofanwang/libtv-skill) — 保留 6 个基础脚本（create_session / query_session / change_project / upload_file / download_results / _common），扩展 7 个高级工作流脚本（manage_project / batch_create / monitor_session / quick_poll / workflow_template / export_results / session_history）。\n\n通过 agent-im 的 OpenAPI 创建会话、发送消息（生图、生视频、编辑视频等）、上传图片/视频文件，并查询会话消息进展。\n\nLibTV 是 LiblibAI 推出的 AI 视频创作平台，同时为人类创作者和 Agent 设计。Agent 通过 Skill 入口理解任务、调用模型并自动编排工作流。\n\n**平台核心能力：**\n- **生成**：文生图、文生视频、图生视频、视频续写\n- **编辑**：局部修改、元素替换、镜头调整、风格迁移\n- **复杂创作**：一句话生成完整短剧（剧本→分镜→成片）、复刻已有视频风格做 TVC/宣传片、用音乐生成 MV、产品展示片制作\n- **模型**：Seedance 2.0、Kling 3.0/O3、Wan 2.6、NanoBanana、Midjourney、Seedream 5.0 等顶级模型\n\n用户的所有创作和编辑需求都通过发送自然语言消息来完成，Agent 会自主编排工作流。复杂任务（短剧、MV）耗时较长，需耐心轮询。\n\n## 功能\n\n1. **创建会话 / 发消息** - 创建新会话或向已有会话发送一条消息（如「生一个动漫视频」「把纸船换成爱心」）\n2. **查询会话进展** - 根据 sessionId 拉取该会话的消息列表，用于轮询生","readmeExcerpt":"Skill: LibTV Skill Pro Owner: qiuxiangxiang Summary: 通过 LibTV (liblib.tv) AI 视频平台生成和编辑图片/视频的完整工具集。覆盖文生图/视频、图生图/视频、视频续写、风格迁移、局部编辑（把纸船换成爱心）、短剧/MV/TVC 制作、角色三视图、分镜设计、首尾帧视频、音频生视频。支持 Seedance 2.0 / Kling 3.0/O3 / Wan... Tags: agent-skill:0.4.4, aigc:0.4.4, chinese-ai:0.4.4, image-gen:0.4.4, latest:0.4.4, liblib:0.4.4, libtv:0.4.4, text-to-image:0.4.4, text-to-video:0.4.4, video:0.4.4 Version history: v0.4.4 | 2026-05-14T08","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"# 1. 拿 access key：https://www.liblib.tv → 用户中心 → API / 开发者\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# 2. 看完整命令清单\npython3 {baseDir}/scripts/libtv.py --help\n\n# 3. 跑第一个 case（dry-run 预览，不烧积分）\npython3 {baseDir}/scripts/libtv.py model with lib-nano-pro \\\n  \"白色短毛猫坐在窗台上\" --ratio 1:1 --resolution 2K --dry-run\n\n# 4. 去掉 --dry-run 真实生成（≈14 积分，≈60s）\npython3 {baseDir}/scripts/libtv.py model with lib-nano-pro \\\n  \"白色短毛猫坐在窗台上\" --ratio 1:1 --resolution 2K\n# → 返回 sessionId，再用 poll 等结果，download 取本地\n\npython3 {baseDir}/scripts/libtv.py poll <SESSION_ID>\npython3 {baseDir}/scripts/libtv.py download <SESSION_ID> --output-dir ~/Downloads/cat"},{"language":"text","snippet":"python3 libtv.py flow       <preset> \"<topic>\" [--ref URL]\npython3 libtv.py node       <action> \"<topic>\" [--ref URL]\npython3 libtv.py edit       <modifier> \"<desc>\" [--target URL] [--session-id SID]\npython3 libtv.py model      list|with <model> \"<prompt>\" [params]\n\npython3 libtv.py session    \"<message>\"               # 创建会话/发消息（底层）\npython3 libtv.py query      <SID>                     # 查询会话进展\npython3 libtv.py upload     <local_file>              # 上传到 OSS\npython3 libtv.py download   <SID> [--output-dir DIR]  # 下载结果\n\npython3 libtv.py batch      --file tasks.txt --workers 5\npython3 libtv.py monitor    <SID> --poll --extract-urls\npython3 libtv.py poll       <SID>\npython3 libtv.py template   <name> \"<topic>\"\npython3 libtv.py export     <SID> --format html\npython3 libtv.py history    list|add|show|get|remove\npython3 libtv.py project    list|current|switch|use|remove|describe"},{"language":"json","snippet":"{\n  \"error\": {\n    \"kind\": \"INVALID_ACCESS_KEY\",\n    \"http_code\": 401,\n    \"message\": \"accessKey 不存在或无效\",\n    \"raw\": \"{...}\"\n  }\n}"},{"language":"bash","snippet":"# 自然语言发消息（后端 Agent 自己路由模型）\npython3 libtv.py session \"生一个动漫视频\"\n\n# 续聊已有会话\npython3 libtv.py session \"再来一张风景图\" --session-id SID"},{"language":"bash","snippet":"python3 libtv.py query SID --after-seq 5       # 增量拉取\npython3 libtv.py query SID --project-id PUUID  # 附带项目地址"},{"language":"bash","snippet":"python3 libtv.py upload /path/to/image.png\npython3 libtv.py upload /path/to/video.mp4"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: libtv-skill-pro\ndescription: 通过 LibTV (liblib.tv) AI 视频平台生成和编辑图片/视频的完整工具集。覆盖文生图/视频、图生图/视频、视频续写、风格迁移、局部编辑（把纸船换成爱心）、短剧/MV/TVC 制作、角色三视图、分镜设计、首尾帧视频、音频生视频。支持 Seedance 2.0 / Kling 3.0/O3 / Wan 2.6 / Nano Banana / Midjourney / Seedream 5.0 / Lib Nano Pro / GVLM 3.1 等模型，可显式指定模型+参数（比例/分辨率/时长）。Pro 版扩展批量并发、轮询监控、工作流模板、结果导出、会话历史、项目管理、统一入口、dry-run 预览、结构化错误。触发词：画一个/生成/做一个/帮我做、liblib/libtv/aigc、视频/图片/MV/TVC/短剧/分镜/动漫/海报、AI 视频/图片生成、画/生成一张/一段。\nuser-invocable: true\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"🎬\",\n        \"requires\":\n          {\n            \"bins\": [\"python3\"],\n            \"env\": [\"LIBTV_ACCESS_KEY\"]\n          },\n        \"primaryEnv\": \"LIBTV_ACCESS_KEY\"\n      }\n  }\n---\n\n# libtv-skill-pro\n\n> Fork of [@haofanwang/libtv-skill](https://clawhub.ai/haofanwang/libtv-skill) — 在原版基础上扩展高级工作流与功能矩阵层。Source / Issues: https://github.com/Qiuxiangxiang/libtv-skill-pro\n\nLibTV (liblib.tv) 是 LiblibAI 推出的 AI 视频创作平台。本 skill 让 Agent 通过统一入口 `libtv.py` 完成生成 / 编辑 / 修饰 / 模型路由的全链路。\n\n## 快速开始（3 分钟跑通第一个 case）\n\n```bash\n# 1. 拿 access key：https://www.liblib.tv → 用户中心 → API / 开发者\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# 2. 看完整命令清单\npython3 {baseDir}/scripts/libtv.py --help\n\n# 3. 跑第一个 case（dry-run 预览，不烧积分）\npython3 {baseDir}/scripts/libtv.py model with lib-nano-pro \\\n  \"白色短毛猫坐在窗台上\" --ratio 1:1 --resolution 2K --dry-run\n\n# 4. 去掉 --dry-run 真实生成（≈14 积分，≈60s）\npython3 {baseDir}/scripts/libtv.py model with lib-nano-pro \\\n  \"白色短毛猫坐在窗台上\" --ratio 1:1 --resolution 2K\n# → 返回 sessionId，再用 poll 等结果，download 取本地\n\npython3 {baseDir}/scripts/libtv.py poll <SESSION_ID>\npython3 {baseDir}/scripts/libtv.py download <SESSION_ID> --output-dir ~/Downloads/cat\n```\n\n5 个完整 case 见 `examples/`（图像 / 视频 / 编辑 / 多步链 / 批量）。\n\n## 推荐入口：`libtv.py <subcommand>`\n\n所有功能聚合在一个入口，Agent 路由更顺：\n\n```\npython3 libtv.py flow       <preset> \"<topic>\" [--ref URL]\npython3 libtv.py node       <action> \"<topic>\" [--ref URL]\npython3 libtv.py edit       <modifier> \"<desc>\" [--target URL] [--session-id SID]\npython3 libtv.py model      list|with <model> \"<prompt>\" [params]\n\npython3 libtv.py session    \"<message>\"               # 创建会话/发消息（底层）\npython3 libtv.py query      <SID>                     # 查询会话进展\npython3 libtv.py upload     <local_file>              # 上传到 OSS\npython3 libtv.py download   <SID> [--output-dir DIR]  # 下载结果\n\npython3 libtv.py batch      --file tasks.txt --workers 5\npython3 libtv.py monitor    <SID> --poll --extract-urls\npython3 libtv.py poll       <SID>\npython3 libtv.py template   <name> \"<topic>\"\npython3 libtv.py export     <SID> --format html\npython3 libtv.py history    list|add|show|get|remove\npython3 libtv.py project    list|current|switch|use|remove|describe\n```\n\n> 旧路径 `python3 scripts/<name>.py ...` 仍可用（向后兼容）。新代码统一用 `libtv.py`。\n\n## 决策树（路由判断）\n\n收到用户需求时，按以下顺序匹配：\n\n| 用户输入 | 走哪条路径 |\n|---|---|\n| 用户提供了本地文件（图/视频/音频路径）| 先 `upload` 拿 OSS URL，再发到下一步 |\n| 模糊一句话「画只猫 / 做个 MV」 | `session` 让后端 Agent 路由（最省心）|\n| 明确想要 LibTV 某个入口（\"做个角色三视图\"）| `flow <preset>` |\n| 明确想用某个模型（\"用 Seedance 出视频\"）| `model with <model>` |\n| 想在已生成内容上改"},{"path":"examples/README.md","content":"# Examples\n\n5 个典型 case，按\"难度 / 积分 / 耗时\"排列。建议第一次用按 01 → 02 → 03 → 04 → 05 顺序看。\n\n| # | 场景 | 命令风格 | 积分 | 耗时 | 难度 |\n|---|---|---|---|---|---|\n| [01](./01-generate-image.md) | 生一张猫图（最小路径）| `model with lib-nano-pro` | ≈14 | ≈60s | ⭐ |\n| [02](./02-generate-video.md) | 生一段 5s 视频 | `model with seedance-2.0-vip` | ≈135 | 5-8 min | ⭐⭐ |\n| [03](./03-edit-with-reference.md) | 把纸船换成爱心（局部编辑）| `upload` + `edit mark` | ≈14-20 | ≈90s | ⭐⭐ |\n| [04](./04-character-to-video.md) | 角色三视图 → 首帧图生视频 | `flow character_views` + `flow keyframe_to_video` + `edit camera` | ≈150 | ≈10 min | ⭐⭐⭐ |\n| [05](./05-batch-images.md) | 并发批量 10 张图 + HTML 报告 | `batch` + `export html` | ≈140 | ≈2 min | ⭐⭐ |\n\n## 跑这些 example 前\n\n1. **设置 API key**：\n   ```bash\n   export LIBTV_ACCESS_KEY=your_key_here\n   ```\n   key 从 [LibTV 用户中心](https://www.liblib.tv) 获取（个人设置 → API / 开发者）。\n\n2. **dry-run 先看 prompt**：每个 case 第一步都有 `--dry-run`，跑完确认 prompt 没问题再去掉它正式生成。可以省下大量积分。\n\n3. **从最便宜的 01 开始**：14 积分一张图，跑通了再去 02。"},{"path":"README.md","content":"# libtv-skill-pro\n\n> 🎬 LibTV (liblib.tv) AI 视频/图像生成平台的 OpenClaw / ClawHub skill。Pro 版在 [@haofanwang/libtv-skill](https://clawhub.ai/haofanwang/libtv-skill) 基础上扩展高级工作流与功能矩阵层。\n\n[![ClawHub](https://img.shields.io/badge/ClawHub-libtv--skill--pro-orange)](https://clawhub.ai/qiuxiangxiang/libtv-skill-pro)\n[![GitHub stars](https://img.shields.io/github/stars/Qiuxiangxiang/libtv-skill-pro?style=social)](https://github.com/Qiuxiangxiang/libtv-skill-pro)\n[![GitHub issues](https://img.shields.io/github/issues/Qiuxiangxiang/libtv-skill-pro)](https://github.com/Qiuxiangxiang/libtv-skill-pro/issues)\n[![License](https://img.shields.io/badge/license-MIT--0-blue)](LICENSE)\n\n## 是什么\n\n让 Agent（OpenClaw / Claude Code / 其他 ClawHub-compatible 客户端）通过统一入口调用 LibTV 平台的 AI 创作能力：\n\n- **生成**：文生图/视频、图生图/视频、首尾帧视频、音频驱动视频\n- **编辑**：局部修改（\"把纸船换成爱心\"）、风格迁移、运镜调整\n- **多模型路由**：Seedance 2.0 / Kling 3.0/O3 / Wan 2.6 / Nano Banana / Midjourney / Seedream 5.0 / Lib Nano Pro / GVLM 3.1\n- **工作流**：批量并发、轮询监控、8 个预设模板（短剧/MV/角色设计/分镜...）、HTML 报告导出\n- **dry-run 预览**：所有生成类命令支持 `--dry-run`，预览 prompt 不烧积分\n- **结构化错误**：API 错误以 JSON 输出，Agent 程序化可处理\n\n## 安装\n\n### 方式 1：通过 ClawHub（推荐）\n\n```bash\nopenclaw skills install libtv-skill-pro\n```\n\n### 方式 2：从这个仓库克隆\n\n```bash\ngit clone https://github.com/Qiuxiangxiang/libtv-skill-pro.git ~/.agents/skills/libtv-skill-pro\n```\n\n## 快速开始\n\n```bash\n# 1. 拿 access key：https://www.liblib.tv → 用户中心 → API\nexport LIBTV_ACCESS_KEY=your_key_here\n\n# 2. 看命令清单\npython3 scripts/libtv.py --help\n\n# 3. dry-run 预览（不烧积分）\npython3 scripts/libtv.py model with lib-nano-pro \\\n  \"白色短毛猫坐在窗台上\" --ratio 1:1 --resolution 2K --dry-run\n\n# 4. 真实生成 + 轮询 + 下载\npython3 scripts/libtv.py model with lib-nano-pro \"...\" --ratio 1:1\npython3 scripts/libtv.py poll SESSION_ID\npython3 scripts/libtv.py download SESSION_ID --output-dir ~/Downloads/cat\n```\n\n完整示例见 [`examples/`](./examples/)（5 个递进难度的 case）。\n\n## 命令地图\n\n```\nlibtv.py flow      预设流程（故事脚本/角色三视图/首帧图生视频/音频生视频）\nlibtv.py node      节点能力（文本/图片/视频节点细分动作）\nlibtv.py edit      修饰器（风格/标记/聚焦/运镜/角色库）\nlibtv.py model     模型路由（list 已知模型 / with 指定模型生成）\n\nlibtv.py session   创建会话/发消息       libtv.py query   查询会话进展\nlibtv.py upload    上传图片/视频         libtv.py download 下载结果\n\nlibtv.py batch     并发批量任务          libtv.py monitor 实时监控\nlibtv.py poll      简化轮询              libtv.py template 预设工作流模板\nlibtv.py export    导出 HTML/MD/JSON     libtv.py history 会话历史\nlibtv.py project   项目管理\n```\n\n17 个独立脚本（`scripts/*.py`）仍可单独调用（向后兼容）。\n\n## 跟原版的关系\n\n| | @haofanwang/libtv-skill | @qiuxiangxiang/libtv-skill-pro |\n|---|---|---|\n| 基础脚本 | 6 个 | 6 个（保留原版） |\n| 高级工作流 | — | 7 个（batch/monitor/poll/template/export/history/project） |\n| LibTV 功能矩阵 | — | 4 个（flow/node/edit/model） |\n| 统一入口 | — | libtv.py |\n| dry-run 预览 | — | ✓ |\n| 结构化错误 | — | ✓ |\n\n如果你只需要\"自然语言一句话路由\"的极简体验，原版 6 脚本足够。Pro 版面向**批量、精细控制、Agent 程序化集成**场景。\n\n## 测试\n\n```bash\n# 离线（5 秒，不烧积分，120 个用例）\nbash tests/test_offline.sh && python3 tests/test_templates.py\n\n# 在线（按开关计费）\nONLINE_SESSION=1 bash tests/test_online.sh    # ≈0 积分\nONLINE_IMAGE=1   bash tests/test_online.sh    # ≈14 积分"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn75javp82ghpk79s61mfbp3bx81vsnj\",\n  \"slug\": \"libtv-skill-pro\",\n  \"version\": \"0.4.4\",\n  \"publishedAt\": 1778745751435\n}"},{"path":"CHANGELOG.md","content":"# Changelog\n\n## [0.4.0] - 2026-05-14（即将发布）\n\n**主题：公开推广就绪 + 架构升级**\n\n### Added — 推广向\n- `examples/` 5 个完整 case：生图 / 视频 / 编辑 / 多步链 / 批量\n- `README.md`（GitHub 入口）+ `LICENSE`（MIT-0）+ `.gitignore`\n- `CHANGELOG.md` 正式纳入版本管理\n- 公开 GitHub 仓库（信任来源 / issue / PR）\n- SKILL.md frontmatter description 精简到 ~400 字，前 300 字聚焦关键词（搜索能见度）\n- SKILL.md 增加「快速开始 3 分钟跑通」段落 + 决策树 + LibTV access key 获取链接\n\n### Added — 架构升级\n- `libtv.py` 统一入口（dispatcher）—— Agent 只需记一个命令：`libtv.py {flow|node|edit|model|...}`\n- `--dry-run` 标志（flow / node / edit / model）—— 预览将发送的 prompt，不调 API、不烧积分\n- 结构化错误响应（`_common.APIError` + `safe_run` wrapper）—— 所有 API 错误以 JSON 写 stderr，含 kind / http_code / message / raw\n- 错误 kind 枚举：INVALID_ACCESS_KEY / FORBIDDEN_OR_INSUFFICIENT_CREDITS / NOT_FOUND / TIMEOUT / RATE_LIMITED / SERVER_ERROR / NETWORK_ERROR / INTERRUPTED / UNKNOWN\n\n### Fixed\n- `change_project.py` 缺 argparse 导致 `--help` 直接调真 API（之前发版前发现的 bug）\n- `_common.py` 不再在 import 时因缺 LIBTV_ACCESS_KEY 而 `sys.exit(1)`——改为延迟到首次实际调用 API 时抛 `APIError`，让 `--help` 在任何情况下都可用\n\n### Changed\n- 所有调 API 的脚本都接入 `safe_run(main)` wrapper\n- frontmatter emoji 由 💬 改为 🎬（配合 film 图标）\n- tests/test_offline.sh 增加 1b（libtv.py 入口）+ 1c（dry-run 验证）共 20 个新用例\n- 总测试用例：73 离线 + 47 模板 = **120 全通**\n\n### Cleanup\n- 发布前清掉 workspace 的 `.clawhub/origin.json`（之前误发）\n- `_meta.json` 不打包进发布\n\n---\n\n## [0.3.0] - 2026-05-13\n\n**LibTV 功能矩阵层**（slug: libtv-skill-pro，fork-of @haofanwang/libtv-skill@1.0.3）\n\n新增 4 个脚本覆盖 LibTV 画布上的完整功能矩阵：\n\n- `flow.py` — LibTV 首页 4 个预设流程（story_script / character_views / keyframe_to_video / audio_to_video）\n- `node.py` — 文本/图片/视频节点的细分动作（text_to_video_prompt / image_caption / text_to_music / image_to_image / image_upscale / first_last_frame / reference_video）\n- `edit.py` — 节点修饰器（style / mark / focus / camera / character_lib）\n- `model.py` — 模型路由（list 9 个已知模型 + with 显式指定模型+参数）\n\nSKILL.md 第 13–16 节文档，新增「场景 8：按 LibTV 网页功能直接调用」工作流示例。\n\n## [0.2.0] - 2026-05-13\n\n**首发 libtv-skill-pro**（fork-of @haofanwang/libtv-skill@1.0.3）\n\n在原版 6 个基础脚本之上扩展 7 个高级工作流脚本：\n\n- `manage_project.py`（list/current/switch/use/remove/describe + `~/.libtv_projects.json` 本地项目记录）\n- `batch_create.py`（并发批量任务）\n- `monitor_session.py`（实时监控）\n- `quick_poll.py`（简化轮询）\n- `workflow_template.py`（8 个预设模板）\n- `export_results.py`（导出 JSON / Markdown / HTML）\n- `session_history.py`（会话历史管理）\n\n行为增强：\n- `create_session.py` / `change_project.py` 自动写入本地项目记录\n- `_common.py`：`change_project()` 支持可选 `projectUuid` 参数"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1134,"uniquenessScore":41,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T15:27:00.216Z","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-11T15:27:00.216Z","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-11T17:43:42.472Z","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"}]}}}