{"slug":"short-drama-produce","title":"short-drama-produce","summary":"在创作者明确确认后，执行短剧项目的图片、视频、TTS/配音或时间线音乐生产任务，并把结果与精简运行记录落回项目。用户说“生成这张图/这段视频/这句配音/这段配乐”“开始跑图/跑视频/合成语音/生成音乐”“把已确认提示词送去生产”，或要求批量执行已确认媒体任务时使用；不负责创作提示词、镜头、台词、歌词或声音身份，也绝不把预览、继续、预算说明或既有接受状态当作本次付费生产确认。","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-09-01T21:33:21.642065Z","repo":{"url":"https://github.com/zenstory-ai/drama-skills","stars":2285,"forks":501,"license":"MIT","updatedAt":"2026-09-24T01:48:41Z"},"bodyHtml":"<hr>\n<h2>name: short-drama-produce\ndescription: 在创作者明确确认后，执行短剧项目的图片、视频、TTS/配音或时间线音乐生产任务，并把结果与精简运行记录落回项目。用户说“生成这张图/这段视频/这句配音/这段配乐”“开始跑图/跑视频/合成语音/生成音乐”“把已确认提示词送去生产”，或要求批量执行已确认媒体任务时使用；不负责创作提示词、镜头、台词、歌词或声音身份，也绝不把预览、继续、预算说明或既有接受状态当作本次付费生产确认。\nlicense: MIT</h2>\n<h1>确认后生产</h1>\n<p>本技能只负责把已经写好的生产规格安全送到运行环境配置的 adapter。图片提示词仍归\n<code>$short-drama-image-prompts</code>，视频提示词归 <code>$short-drama-video-prompts</code>，台词与录音表归\n<code>$short-drama-write</code>，声音身份归 <code>$short-drama-assets</code>。</p>\n<h2>Quick Start</h2>\n<p>只在用户明确要求实际生成后，从当前 <code>图片提示词.md</code>、<code>分镜.md</code> 或 <code>视频提示词.md</code> 中\n取出本次提示词，建立一个有边界的运行 job。creator-first job 的 <code>source</code> 必须指向拥有这条提示词的\n当前 Markdown，<code>source_entry</code> 必须点名对应的 <code>IMG-*</code> 或 <code>MOTION-*</code> 二级标题。存在真实参考图时，\n还必须逐张填写 <code>reference_bindings</code> 的槽位、顺序、路径、中文名、用途以及允许/禁止控制范围；\n<code>references</code> 可以省略并由绑定顺序生成，也可以作为相同顺序的显式镜像。输出放在\n<code>剧集/&lt;EP&gt;/制作成果/</code>；这个 job 是生产工具的临时输入，不是第六份创作文档：</p>\n<pre><code>python3 {技能目录}/scripts/production_tool.py prepare &lt;project&gt; --job &lt;临时-job.json&gt;\n</code></pre>\n<p>先展示 <code>prepare</code> 的完整预览；此时不会调用供应商。</p>\n<h2>硬闸门</h2>\n<p>每次生产都必须经过以下四步，顺序不可合并：</p>\n<ol>\n<li>建立一个有边界的 job：一种 modality、明确数量、完整 prompt/spec、参考文件、参数、输出路径和 adapter profile。</li>\n<li>运行 <code>prepare</code>，把返回的完整预览展示给创作者，尤其是数量、prompt、source entry、\nreference bindings、references、outputs、overwrite 与 adapter。creator-first job 会在这一步机械核对\n所选标题里的可复制提示词，以及参考图槽位、顺序、路径、中文名和控制边界；任一漂移都 fail closed。</li>\n<li>等创作者在<strong>看到这份预览之后</strong>明确确认。只有明确同意这项当前任务，才运行 <code>confirm</code>；\n“继续”“都做完”“预算没问题”、上游内容已接受或之前确认过另一版，都不算本次生产确认。</li>\n<li>运行 <code>run</code>。它会在启动 adapter 前消费一次确认；成功或失败后再次执行都必须重新确认，\n防止失败重试意外产生第二笔费用。</li>\n</ol>\n<p>job、prompt、参数、输出路径或直接输入任一变化，旧确认立即失效。不得代替创作者填写确认。\n当前已确认 job 是本轮唯一工作单元；运行结束后回报结果并交还控制权，不自动准备下一批或启动审查。</p>\n<p><code>分镜.md</code> 的「输入参考图」路径只是创作阶段的可读依据与使用意图，不是生产输入快照。进入生产时，\ncreator-first job 必须从 <code>图片提示词.md</code> 或 <code>视频提示词.md</code> 的对应条目建立绑定；<code>prepare</code> 展示的\n<code>reference_bindings</code>、<code>references</code> 与已确认 job 才是本次 adapter 实际读取哪些文件字节、各自允许\n影响什么的权威。非 creator 的结构化规格可不填 <code>source_entry</code>/<code>reference_bindings</code>，继续只使用显式\n<code>references</code>；但新的 image/video job 只要 <code>source</code> 指向 canonical <code>图片提示词.md</code> 或\n<code>视频提示词.md</code> 就强制使用对应 selector，不能靠省略字段降级绕过。升级前已经 prepare 并落盘的\n旧 job 仍可按原指纹读取。\n新生产结果不自动回填或刷新分镜；需要把它改为后续输入时，由分镜 owner 修订文档，再建立新 job\n并重新预览、确认。</p>\n<h2>命令</h2>\n<p>只在进入生产边界后把当前提示词和运行参数写成临时 JSON；视频与图片 job 的\n<code>parameters.prompt_language</code> 跟随当前可复制正文已经解析出的提示词语言，使 adapter 追加的参考约束\n使用同一种语言，而不是重新回退成固定英文。不要在创作阶段为每条提示词预建 job。\n格式和 adapter 契约见\n<a href=\"references/adapter-contract.md\">adapter-contract.md</a>。命令由\n<a href=\"scripts/production_tool.py\">production_tool.py</a> 提供，然后运行：</p>\n<pre><code>python3 &lt;本技能目录&gt;/scripts/production_tool.py prepare &lt;project&gt; --job &lt;job.json&gt;\npython3 &lt;本技能目录&gt;/scripts/production_tool.py confirm &lt;project&gt; --job-id &lt;id&gt; --confirmation \"CONFIRM &lt;id&gt; &lt;code&gt;\"\npython3 &lt;本技能目录&gt;/scripts/production_tool.py run &lt;project&gt; --job-id &lt;id&gt; --adapter-config &lt;outside-project-config.json&gt;\npython3 &lt;本技能目录&gt;/scripts/production_tool.py status &lt;project&gt; --job-id &lt;id&gt;\npython3 &lt;本技能目录&gt;/scripts/production_tool.py audit &lt;project&gt;\n</code></pre>\n<p><code>prepare</code> 只验证并预览，不生产。<code>confirm</code> 只保存与当前 job 指纹绑定的一次性确认。\n<code>run</code> 才启动 adapter。<code>audit</code> 只对账本地任务历史、失败后恢复、重复内容尝试和当前输出字节，\n不会调用供应商，也不把技术成功、文件存在或哈希一致写成媒体质量结论。同一 job 存在未决\n<code>running</code> attempt 时禁止重新 prepare、confirm 或 run；先等待完成或排查遗留 attempt。</p>\n<h2>输入选择</h2>\n<ul>\n<li><strong>image</strong>：读取 <code>图片提示词.md</code> 的当前 <code>IMG-*</code> 可复制正文、必要参考图和明确的输出尺寸/数量；\ncreator-first job 使用 <code>source_entry</code> 锁定这一条。</li>\n<li><strong>video</strong>：读取 <code>视频提示词.md</code> 的当前 <code>MOTION-*</code> 可复制正文，并核对 <code>分镜.md</code> 中对应镜头、\n冻结关键帧、时长与画幅；creator-first job 使用 <code>source_entry</code> 锁定这一条。连续段选择从上一段\n生成结果续接时，下一段 job 同时绑定上一段实际视频和从该视频取得的实际尾帧，并保留\n<code>continuity_video</code>、<code>actual_tail_frame</code> 的不同职责；供应商 role 由目标模型 adapter 翻译。H3 的这组\n输入统一译为 <code>reference_video + reference_image</code>，不能混成 <code>reference_video + first_frame</code>；不以\n计划尾帧或文字描述代替真实文件。</li>\n<li><strong>tts</strong>：从 <code>剧本.md</code> 读取原句与表演要求，声音参考由用户或现有媒体明确提供。不得在生产 job\n中改词，也不为 TTS 新建第六份创作文档。</li>\n<li><strong>music</strong>：读取 <code>视频提示词.md</code> 中创作者已确认的时间线音乐章节；主题曲使用已确认歌词，纯配乐\n不携带歌词。供应商不能精确承诺时长时，生成源音轨后仍由剪辑按文档里的混音意图完成落点、循环、\n淡入淡出和对白 ducking。</li>\n</ul>\n<p>一个 job 不混合 modality。大批量工作拆成创作者能看清数量和成本边界的小 job；不为方便把整季\n隐式塞进一次确认。</p>\n<h2>Adapter 边界</h2>\n<p>adapter 配置必须在项目外，只包含 argv 命令和超时；凭据由 adapter 自己从进程环境或系统凭据\n存储读取。项目 job、确认记录、运行记录和 Dashboard 都不得保存密钥。</p>\n<p>脚本以 JSON stdin 调用 argv 数组，不使用 shell，不拼接命令。adapter 返回本地临时文件；工具只\n接受与已确认 targets 完全一致的结果，并把完整文件原子复制到项目的 <code>剧集/&lt;EP&gt;/制作成果/</code>\n目录。项目和上游 Skill 不写死供应商、模型或即将变化的 API。</p>\n<p>内置图片/视频 compiler 会根据已确认的 <code>reference_bindings</code>，按顺序向供应商 prompt 附加一段确定性的\n引用语义说明（中文名、用途、允许控制与不得控制范围）；不会把槽位名误当成要渲染进画面的文字。\n外部 adapter 也必须保留这组语义或明确拒绝，不能只上传文件而静默丢失控制边界。</p>\n<p>本技能可选提供四个 stdlib adapter，均通过项目外 adapter config 选择，凭据只从运行环境读取：</p>\n<ul>\n<li><a href=\"references/providers/seedance.md\">Seedance</a>：模型/Endpoint ID 必须由账号显式配置；compiler 支持\n官方图片、视频和音频参考 role，内置 runtime 未配置可信上传时仍拒绝本地参考文件。</li>\n<li><a href=\"references/providers/gpt-image-2.md\">GPT Image 2</a>：无参考图走 generation，有参考图走 edit；\n固定高保真引用并校验尺寸、格式与透明背景限制。</li>\n<li><a href=\"references/providers/minimax-music.md\">MiniMax Music</a>：使用 <code>music-3.0</code> 与 hex 结果，区分主题曲\n和纯配乐，不伪造时长请求字段。</li>\n<li><a href=\"references/providers/minimax-h3-video.md\">MiniMax H3 视频</a>：模型 ID、分辨率集合与时长区间必须\n由账号显式配置；提示词进 <code>content</code> 的 text 项，参考图按显式 role 绑定，本地参考在没有可信上传时\nfail closed。该模型与画面同一次生成声音，写法影响见视频提示词技能的目标模型能力档案。</li>\n</ul>\n<p>这些 adapter 是已验证请求契约，不是账号可用性或生成质量保证；正式生产仍必须通过上面的本次\n确认闸门，并由审查 Skill 判断产物质量。</p>\n<p>仓库自带 <code>fixture_adapter.py</code> 只用于离线测试，不代表真实生成质量或默认生产 adapter。</p>\n<h2>结果与复核</h2>\n<p>成功后回报实际输出路径、媒体类型和运行状态；不要把“adapter 返回成功”写成质量结论。\n多任务或重试后先运行 <code>audit</code>：终态失败按 <code>retryable</code> 路由，重试仍须新的明确确认；输出缺失或\n文件的哈希或大小不再等于运行记录时，先复核当前字节或重新生产。<code>repeated_content</code> 只是成本与诊断信号，\n不能自动判定同文重试合理或不合理；<code>running_attempt</code> 是未决运营状态，audit 必须返回 attention。\n失败按三路走。超时、限流、服务端错误这类技术失败可做有上限重试。失败信息点名了被拒的是哪\n一项输入——提示词文本、参考图或音频——就先改那一项再投：文本被拒改写那一句，把「一拳砸在\n对方脸上，血顺着下巴滴」换成「一拳挥空，对方侧身避开，桌上的杯子被带倒」；参考图被拒换一张\n构图与角色一致、画面本身合规的图；音频被拒重录那句台词。改动写进新的 job 重新 prepare，让创\n作者在预览里看到改的是哪一项再确认；原样重投的那次确认不产生修复，只产生一笔费用。重复内容\n缺陷回到对应 prompt/spec owner。\n如需质量复核，报告可把已有结果另行交给 <code>$short-drama-review</code>；不要在生产调用中自动启动复核。\nDashboard 只负责展示这些文件和运行摘要，不提供 adapter 设置或生产按钮。</p>\n<h2>安装维护</h2>\n<p>只有安装、升级或排障时运行离线自检；普通创作和生产准备不运行：</p>\n<pre><code>python3 scripts/selftest.py\npython3 scripts/provider_adapters.py --selftest\n</code></pre>\n","files":[{"path":"agents/openai.yaml","sizeBytes":288,"isText":true},{"path":"references/adapter-contract.md","sizeBytes":11062,"isText":true},{"path":"references/providers/gpt-image-2.md","sizeBytes":1329,"isText":true},{"path":"references/providers/minimax-h3-video.md","sizeBytes":5538,"isText":true},{"path":"references/providers/minimax-music.md","sizeBytes":1361,"isText":true},{"path":"references/providers/minimax-speech.md","sizeBytes":2139,"isText":true},{"path":"references/providers/seedance.md","sizeBytes":3976,"isText":true},{"path":"scripts/fixture_adapter.py","sizeBytes":2732,"isText":true},{"path":"scripts/production_tool.py","sizeBytes":87712,"isText":true},{"path":"scripts/provider_adapters.py","sizeBytes":70329,"isText":true},{"path":"scripts/selftest.py","sizeBytes":4122,"isText":true},{"path":"SKILL.md","sizeBytes":14398,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-09-14T07:23:32.296773Z","sha256":"BBC4711C67D87E64ADF56D0068F36911007561AF2462FE058597598087742DF8","sizeBytes":59157},"review":null,"source":{"repositoryUrl":"https://github.com/zenstory-ai/drama-skills","path":"skills/short-drama-produce","license":"MIT","commit":"b71cb3ca9343eaf6c0375725ccc9261a4e79021e","subtreeSha":"125F47A6BAAF4E5B1E8B3529F29A14AB457DBFD6B3F49C8D11492A88C8C33A51","lastSyncedAt":"2026-09-26T23:12:15.975853Z"},"reviewedAt":"2026-09-14T07:24:32.769528Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/zenstory-ai/drama-skills/tree/main/skills/short-drama-produce"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install zenstory-ai-drama-skills@llmmart"},{"target":"git","command":"git clone https://github.com/zenstory-ai/drama-skills.git"}]}