TapCanvas generate-media
短剧媒体生成技能。基于已生成作品目录与视觉风格生成角色卡、场景/道具参考图与分镜图,维护 ref_index 与 media_index。涉及 TapCanvas `/public/draw`、`/public/tasks/result` 的实际接口请求时,必须统一通过 `tapcanvas-api` skill 执行,而不是在本 skill 内维护另一套 API 配置。
install
source · Clone the upstream repo
git clone https://github.com/anymouschina/TapCanvas
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/anymouschina/TapCanvas "$T" && mkdir -p ~/.claude/skills && cp -r "$T/apps/agents-cli/skills/generate-media" ~/.claude/skills/anymouschina-tapcanvas-generate-media && rm -rf "$T"
manifest:
apps/agents-cli/skills/generate-media/SKILL.mdsource content
Generate Media (TapCanvas Public API)
Goal
将短剧/小说分镜生产链路中的“角色卡与分镜图”从简化版本升级为可复用的生产素材,且统一走 TapCanvas 公共接口:
- 图像生成:通过
调用tapcanvas-api/public/draw - 任务轮询:通过
调用tapcanvas-api/public/tasks/result
禁止直接在技能内耦合三方 SDK(如 google-genai);模型选择通过
extras.modelAlias 完成。
Required Inputs
- 项目与作品标识:
、projectIdbookId - 目标章节或集数范围:
或chapterstart/end - 视觉风格:
(assets.styleBible
、styleLocked
、consistencyRules
、negativeDirectives
)referenceImages - 角色/场景/道具元数据:
chapters[].characters/props/scenes/locations - 已有角色卡:
(用于一致性参考)assets.roleCards
Output Contract
必须产出并回填以下结构(无兜底):
: 每角色至少 1 张主参考图(可选多视角合成) 1.5roleCards
:visualRefs
:每章节至少 1 张“场景+道具”参考图(默认单张 3x3 九宫格,最多 9 个元素)category=scene_prop
:涉及法术/特效时至少 1 张特效参考图category=spell_fx
: 每组镜头输出storyboardChunks
与frameUrlstailFrameUrl
与ref_index
(按 book 维度)media_index- 若任一步骤关键输入缺失,直接失败并返回可追踪错误
Workflow
-
触发判定(先判定再生成)
- 非强制全量生成。仅当资产满足“可复用/需持久化”条件时触发生图。
- 推荐判定:同名角色/场景/道具在跨章节复现(>=2 章)或被上游显式标记为长期锚点。
- 未命中持久化条件时,不应为了凑齐素材而生成新图。
-
风格锁定检查
- 若缺少已确认角色卡,不再中断流程;进入自动补齐阶段。
-
角色卡生成(Phase 1)
- 以角色档案 + 章节阶段信息生成结构化 prompt。
- 使用
调tapcanvas-api
的/public/draw
(按是否有参考图决定)。kind=image_edit|text_to_image - 将结果写回
,状态置为assets.roleCards
。generated - 分镜流程内若发现缺失角色卡,仅对“持久化候选角色”自动补齐,不要求用户先手工生成。
-
场景/道具参考图(Phase 1B/1C)
- 从章节聚合
,优先一次生成“单张 3x3 九宫格(9格)”参考图。scenes/props - 每格对应 1 个场景/道具元素,使用格位标签(1-9)与元素名建立映射。
- 结果写入
(assets.visualRefs
),供分镜与视频参考。category=scene_prop - 元数据必须包含:
、layout=3x3
(如cellLabels
)。#1:窗边木桌 - 分镜流程内若缺少 scene_prop,仅在命中“持久化候选场景/道具”时自动补齐。
- 从章节聚合
3.5 法术技能/特效参考图(Phase 1D)
- 从章节冲突/动作节点提取法术或特效线索,生成稳定特效参考图。
- 结果写入
(assets.visualRefs
)。category=spell_fx
-
分镜图生成(Phase 2)
- 按组(4/9)处理镜头,首镜必须注入上一组
。tailFrameUrl - 每镜头都需注入角色参考图 + 场景道具参考图;涉及特效时再注入特效参考图。
- 参考图必须标注(角色名/场景道具名/特效名),并把引用 ID 回写到
。storyboardChunks - 任何镜头未返回图片即失败,不允许模板兜底。
- 在生成前,优先调用
校验上一组tapcanvas_storyboard_continuity_get
、显式 chunk checkpoint、角色卡、视觉参考与 style bible 是否齐备。tailFrameUrl
仅用于诊断,不得替代 chunk checkpoint 或 tail frame 作为续写边界。recentShots / storyboard history
- 按组(4/9)处理镜头,首镜必须注入上一组
-
索引维护
- 更新
、storyboardChunks
、media_index
。ref_index - 记录
,保证可追溯。updatedAt/updatedBy
- 更新
Prompt Rules
- 强制角色一致性:发型、脸型、服装、道具、年龄感不得漂移。
- 强制风格一致性:禁止跨美术体系切换。
- 分镜图必须明确镜头编号、构图重点、运动/机位语义。
- 出现多人场景时,必须标注角色映射关系(角色名 -> 参考图序号)。
Failure Policy
- 关键输入缺失:
(不降级、不补模板)throw - 任务失败:记录
后终止当前批次taskId/vendor/status/error - 数量不一致(计划镜头数 != 成功输出数):直接失败
Notes
- 模型默认可使用
,也允许nano-banana-pro
别名;统一由gemini-*image*
路由到供应商。tapcanvas-api -> /public/draw - 若需要轮询,必须通过
调用tapcanvas-api
,不要假设同步返回结果。/public/tasks/result