{"slug":"short-drama-storyboard-2","title":"short-drama-storyboard","summary":"把中文短剧剧本和视觉设定写成有戏剧职责、连续性边界与冻结关键帧提示词的分镜 Markdown。用户提出“拆分镜/设计镜头/做镜头表”“场次视觉计划/调度故事板”“比较导演方案”“写首帧/关键帧提示词”或检查轴线、站位、视线、持物连续性时使用；不生成媒体。","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-10-02T16:32:42.134391Z","repo":{"url":"https://github.com/zenstory-ai/oh-story-dsh","stars":433,"forks":74,"license":"MIT","updatedAt":"2026-10-02T11:40:12Z"},"bodyHtml":"<hr>\n<h2>name: short-drama-storyboard\ndescription: 把中文短剧剧本和视觉设定写成有戏剧职责、连续性边界与冻结关键帧提示词的分镜 Markdown。用户提出“拆分镜/设计镜头/做镜头表”“场次视觉计划/调度故事板”“比较导演方案”“写首帧/关键帧提示词”或检查轴线、站位、视线、持物连续性时使用；不生成媒体。\nlicense: MIT</h2>\n<h1>短剧分镜与冻结关键帧</h1>\n<p>把剧本和视觉事实转成有镜头职责、空间连续性和可冻结起点的 <code>剧集/&lt;EP&gt;/分镜.md</code>。\n每镜使用二级标题 <code>## SHOT-...</code>，同镜下用 <code>### 冻结关键帧提示词</code> 写起始帧正文；\n需要时另加 <code>### 收尾关键帧提示词</code> 写终点正文。</p>\n<h2>Quick Start</h2>\n<pre><code>用 $short-drama-storyboard 完成 EP001 的正式分镜和每镜冻结关键帧\n</code></pre>\n<h2>入口</h2>\n<p>当前剧本加必要视觉事实即可直接进入。资产图片提示词与分镜是兄弟分支，不互相等待。只有关键场次\n真的存在多个成立导演方案时，才在上下文比较覆盖方案；普通场次直接设计。</p>\n<p>创作者可读说明跟随项目语言；冻结关键帧的可复制正文跟随\n<code>short-drama.json#/format/prompt_language</code>。没有 <code>short-drama.json</code> 时正文默认使用 <code>en</code>。\n分配镜头时长前读取\n<code>short-drama.json#/creator_authority/production_profile/choices/native_duration_seconds</code>。已声明目标模型但\n没有原生时长时先补这一个选择；目标模型也未声明时照常按叙事节奏设计，不猜供应商限制。\n同时读取 <code>short-drama.json#/creator_authority/rhythm_profile</code>：<code>status</code> 为 <code>accepted</code> 时，镜长按\n<a href=\"references/shot-craft.md#%E9%95%9C%E9%95%BF%E4%BB%8E%E5%93%AA%E6%9D%A5-sht-28\">镜长从哪来</a> 由声音事件与 <code>target_avg_shot_seconds</code> 推出，\n全集近景类镜头占比不低于 <code>close_shot_share_min</code>；档案缺失或未接受时不核对这些数值。</p>\n<p>冻结关键帧写完之前，谁会出现在这一格画面里还没有定下来。所以三条依据都在关键帧之后回填，\n读的是成稿画面，不是镜头意图。</p>\n<p>用户没有手工点名参考图，不等于选择文生视频。冻结关键帧后先根据本镜可见人物、地点、关键道具与\n起始构图判断一致性需求，再检查项目中已有的真实图片。只有当前可读、内容与用途可核对的图片才能自动绑定；\n文件名像某个角色但内容未核对时，仍视为未准备好。</p>\n<p>项目里一张都没有时，创作者有三条路，一次把三条都说清楚再让他选，不要只给「先生成参考图」和\n「改成文生视频」两个：把手上已有的图片放进项目再绑成 <code>REF-...</code>；在自己的工具里出图、本轮先用\n<code>PLAN-...</code> 写出挂图计划；或者明确改走文生视频。用本套件的生产技能出图只是第一条路的一种做法，\n需要项目外的 adapter 与凭据，不是唯一入口。</p>\n<p>开始分镜前读 <code>剧集/&lt;EP&gt;/剧本.md</code> 的当前内容。创作者说「剧本已确认采用」指的是那个文件，\n不是对话里更早的草稿；两者不一致时以文件为准，并把差异说出来。</p>\n<h2>工作流</h2>\n<ol>\n<li><p>读取已接受的目标模型原生时长区间，再确认每个场景动作、对白、声音、画面文字和转折由哪些镜头承载。</p>\n</li>\n<li><p>确定观众何时知道什么、对齐谁、空间如何揭示、转折落在哪个可见动作。\n剧本或 Brief 用“前半段 / 后半段 / 前三分之一 / 最后 N 秒”等相对时间限定首次出现、释放或禁止时，\n先用已接受集长换成明确时间边界再分镜；例如 60 秒作品的“后半段首次出现”不得早于 30 秒。</p>\n</li>\n<li><p>每镜写清唯一职责、来源、时长、景别/机位、运镜、起点、唯一主要动作、终点和声音；用\n<code>起点 → 唯一动作 → 终点</code> 直接说明人物、双手与持物怎样完成本镜状态转换。三条依据留到第 6 步。\n「运镜」按本镜目的逐镜选，写行为和理由，固定也写理由，见 <a href=\"references/shot-craft.md#%E8%BF%90%E9%95%9C%E9%80%90%E9%95%9C%E9%80%89-sht-04\">运镜逐镜选</a>。\n有对白、VO 或 OS 时，先按原文和人物说话方式估算完整发声时间，再安排不能重叠的动作、停顿与\n末尾反应；把估时依据简写在本镜「声音」里。具体做法见 <a href=\"references/shot-craft.md#%E5%AF%B9%E7%99%BD%E4%BC%B0%E6%97%B6\">对白估时</a>。\n对白场先按 <a href=\"references/shot-craft.md#%E5%AF%B9%E7%99%BD%E5%9C%BA%E6%80%8E%E4%B9%88%E5%88%87-sht-29\">对白覆盖默认</a> 放切点；镜长不按剧本字数折算。</p>\n</li>\n<li><p>锁定人物朝向、位置、视线、持物、出入口、屏幕方向和必要状态；上游已有会限制动作空间的持续关系时，把关系投影进本镜起点与终点。</p>\n</li>\n<li><p>冻结关键帧只投影镜头起点；删除终点才出现的文字、动作、姿态或道具状态。\n镜头的职责落在收尾那一下时，另写 <code>### 收尾关键帧提示词</code> 投影<strong>终点</strong>——同一格画面的\n另一端，规则完全对称：删除起点才有、终点已经不在的东西。它是可选的，写法与取舍见\n<a href=\"references/shot-craft.md#%E9%A6%96%E5%B0%BE%E6%88%90%E5%AF%B9\">首尾成对</a>。</p>\n</li>\n<li><p>关键帧成稿后，先从成稿正文读出这一格里需要保持身份、造型或地理的人物、地点和道具，\n再用同一份清单一次填满三条依据：</p>\n<ul>\n<li><strong>视觉依据</strong>：清单里每一项写成《视觉设定.md》的条目引用，这是必写字段；</li>\n<li><strong>图片提示词项</strong>：清单里已有合适 <code>IMG-...</code> 条目的写上，没有的留「无」；</li>\n<li><strong>输入参考图</strong>：按清单在用户提供的输入、<code>剧集/&lt;EP&gt;/制作成果/</code> 和文档已指向的其他可见媒体中查找匹配图片；\n命中就写入 <code>REF-...</code>。一张都没命中时写「无（待补参考图：&lt;本镜缺失的起始帧、人物、地点、道具&gt;）」；\n只命中一部分时，在已有 <code>REF-...</code> 后追加「；待补参考图：&lt;仍缺的图片&gt;」，缺口之间只用 <code>、</code> 分隔。\n创作者说图片由他自己在别处准备时，把这份清单写成 <code>PLAN-...</code> 槽位，本镜即告就绪；\n只有创作者明确表示不用图时，才写「无（创作者已明确选择文生视频）」。</li>\n</ul>\n<p>三条依据读的是同一格画面，所以不能互相矛盾：关键帧里点名的人物或道具，一定出现在视觉依据里。</p>\n</li>\n<li><p>整集请求完成整集，末端一次报告覆盖、节奏和真实未决选择。</p>\n</li>\n</ol>\n<h2>镜头要求</h2>\n<ul>\n<li><p>每镜有唯一职责、明确来源、可见起止状态和合理时长。「来源」以《剧本.md》里真实存在的场景 ID 开头，\nID 之后可以跟必要短引文，跨场次的镜头用 <code>、</code> 连写多条；<code>creator_markdown_check.py</code> 会核对每个 ID 都解析得到。</p>\n</li>\n<li><p>「来源」短引文应对应本镜承担的动作或声音。正文提到画外人物时，可在视觉依据写\n<code>；画外：&lt;类别&gt;「&lt;名称&gt;」</code>；这只声明其不在画面，不能代替必要动作的落实。\n需要看见的动作应另有镜头承载，或说明为何省略。</p>\n</li>\n<li><p>剧本里的每个场景都要有镜头承载。确实决定不拍某一场时，在《分镜.md》正文开头写一行\n<code>- 未拍场次：&lt;场景 ID&gt;（理由：……）</code>，多项用 <code>；</code> 连接。SHT-01 一直允许带理由的省略，\n但省略和漏拍在成稿文档里长得一模一样，所以理由要写下来，而不是留在对话里。</p>\n</li>\n<li><p>已声明原生时长时，每镜照常有自己的唯一职责、起止边界和冻结关键帧，镜长先按叙事需要定。短于最短秒数\n的镜头，向创作者提议把同场相邻的几镜装进一个多镜容器，在交付档案里声明；目标方言要求时，容器的每一切\n都要有已接受的关键帧图片，能否装、怎么装由 <code>$short-drama-video-prompts</code> 的方言决定。创作者没有声明\n多镜容器、或方言不支持时，镜头落在最短秒数内，动作完成后保持终点。长于上限的动作按可见状态闭合点拆镜，\n拆出的每镜仍各有唯一职责与可信交界。</p>\n</li>\n<li><p>「唯一动作」写从本镜起点到终点的那条可见状态链；涉及交接、换手、放置或取回时，把接触者、\n接触方式和物件落点写在同一链里，不能让合法终点之间靠镜外瞬移衔接。</p>\n</li>\n<li><p>切镜必须带来信息、权力、情绪、空间或节奏变化；同义重复镜头删掉。</p>\n</li>\n<li><p>相对时间词约束的是事件首次可见或可听的时刻，不因前置动作已经完成就提前释放；分镜时间轴直接\n写出该边界，不把“稍后”“交接后”等叙事顺序当成数值时间的替代。</p>\n</li>\n<li><p>同一动作不跨镜重复发生，峰值处声明过的<a href=\"references/shot-craft.md#%E5%8A%A8%E4%BD%9C%E8%90%BD%E5%AE%9E%E8%A1%A8\">冲击重复</a>除外；终点应能成为下一镜可信起点。</p>\n</li>\n<li><p>关键信息的可读性优先于装饰性运镜，竖屏构图优先保证主体和反应可见。</p>\n</li>\n<li><p>复杂群戏先锁空间锚点和屏幕方向，再决定景别变化。</p>\n</li>\n<li><p>起终边界除了逐人姿态，还要写清本镜依赖的身体—物件—空间关系。关系在镜内不变时两端都保留；确需改变时，过程与终点必须有剧本依据。</p>\n</li>\n<li><p>冻结关键帧只写该瞬间能看见的内容；文字、手指、反射和遮挡要可生成。</p>\n</li>\n<li><p>《视觉设定.md》的连续性锁在生效镜头上原样写进冻结关键帧正文；锁面不因“参考图会交代”而省略。</p>\n</li>\n<li><p>检查发现遗漏就直接修正文档，不生成覆盖表来证明自己检查过。镜头块里的「视觉依据」是本镜的依据字段，不是这里说的覆盖表。</p>\n</li>\n</ul>\n<h2>视觉依据与图片</h2>\n<ul>\n<li><code>IMG-...</code> 是《图片提示词.md》里的<strong>提示词条目 ID</strong>，不代表图片已生成、已提供或可用。</li>\n<li>已有《图片提示词.md》且本镜需要其中条目时，写「图片提示词项」：ID 必须匹配该文档的可见二级标题，同时写中文名称和它控制的身份、造型、地理、构图或其他边界。ID 只用于查找，不让英文 slug 承担含义。</li>\n<li>没有《图片提示词.md》或没有合适条目时，写「图片提示词项：无」，再以中文指向《视觉设定.md》的人物、地点或道具项及控制范围。这是正常直接入口；不为继续分镜而编造 ID，也不补造另一个阶段。</li>\n<li>「视觉依据」是每镜必写字段：冻结关键帧成稿后按实际画面反查，需要保持身份、造型或地理的可见人物、地点和道具<strong>必须</strong>逐项写成\n<code>《视觉设定.md》·&lt;人物|造型|地点|道具&gt;「&lt;名称&gt;」（控制：&lt;范围&gt;）</code>，多项用 <code>；</code> 连接，名称必须能在《视觉设定.md》里找到同名标题。\n小比例或背景人物只要需要认出身份仍在范围内，画外人声和不可识别局部不算；本镜确实没有这类条目时写「视觉依据：无」。</li>\n<li>关键帧正文出现了某个条目的名字，但它本镜确实不在画面里（物主已离场、名字只出现在屏幕文字上、和某个词同形），\n在「视觉依据」末尾追加 <code>；画外：&lt;类别&gt;「&lt;名称&gt;」</code>。这是如实记录，不是把不在场的人写成在场。</li>\n<li>某个条目的名字在正文里根本不可靠（<code>道具「手机」</code> 会撞上「手机店」，<code>人物「小雨」</code> 会撞上「下着小雨」），\n在《视觉设定.md》该条目写 <code>画面代称：无</code>，机械核对就不再按名字找它；这一镜是否画到它仍由「视觉依据」如实回答。</li>\n<li>三条依据都描述同一格画面，不是本镜的资产花名册。「控制」只写这一格承担得起的范围：手背特写不写「本集造型」，\n只出现屏幕和一根手指的镜头不写「体态」。上一镜的绑定不因为“角色还在这场戏里”就顺延到下一镜。</li>\n<li>关键帧正文点名的人物、地点或道具（《视觉设定.md》条目名称或它声明的「画面代称」），必须出现在本镜「视觉依据」里；\n<code>creator_markdown_check.py</code> 会机械核对这一条。它只抓<strong>被名字点到</strong>的那一类：正文只描述不点名\n（\"a boy in a hooded jacket\"）时机器不发声，画面里有谁仍然要靠这一步自己读出来，不能等报错。</li>\n<li>本镜需要保持一致、但《视觉设定.md》里还没有条目的可见物件（跨镜出现的道具尤其常见），不能因为\n「写不进视觉依据」就当它不需要一致性。四镜都出现的一支笔和一件外套是同一类问题。做两件事：\n正文里逐镜用完全相同的描述把它钉住，并在本轮末尾报告里点名它、建议 <code>$short-drama-assets</code> 补条目。\n不自行新增《视觉设定.md》条目，也不把它塞进「视觉依据」冒充已有条目。</li>\n<li>「输入参考图」是独立的另一条轴：创作者已提供，或经确认生产且当前可读的实际图片，用不同于 <code>IMG-...</code> 的稳定 <code>REF-...</code> 槽位引用。每个槽位同时写显式顺序、仅用 <code>/</code> 分隔的项目相对路径、中文名称、「用途」、「控制」和「不得控制」范围；没有时必须区分「待补参考图」和「创作者已明确选择文生视频」，只准备了一部分时则保留已有 <code>REF-...</code> 并追加「；待补参考图：……」。不得把提示词条目、还没生成的图或对话中的描述写成 <code>REF-...</code>——<code>REF-...</code> 的意思是「文件此刻在项目里」。\n创作者会在生成时自己挂载的图片走下面的 <code>PLAN-...</code>：它同样不声称文件存在，只是把这一镜要挂哪几张写清楚。</li>\n<li>每个 <code>REF-...</code> 必须逐字遵循唯一格式：<code>REF-&lt;slot&gt;（顺序：&lt;n&gt;）· &lt;项目相对路径&gt;《&lt;中文名称&gt;》（用途：&lt;用途&gt;；控制：&lt;范围&gt;；不得控制：&lt;范围&gt;）</code>。注意「顺序：」后的全角冒号和路径前的中点 <code>·</code>；不得用 <code>/</code> 代替字段分隔符。多图只用中文分号 <code>；</code> 连接，部分缺图则在最后一个完整槽位后接 <code>；待补参考图：&lt;缺口&gt;</code>，缺口之间用 <code>、</code> 分隔。写完后按此格式回读一次再交付。</li>\n<li><code>用途</code> 只能取 <code>身份</code>、<code>造型状态</code>、<code>地理</code>、<code>构图</code>、<code>尺度</code>、<code>效果</code>、<code>起始帧</code>、<code>结束帧</code>、<code>风格</code> 之一；逐条能控制什么见 <code>$short-drama</code> 的《参考角色》。\n本镜的起始画面图写 <code>用途：起始帧</code>，人物图写 <code>用途：身份</code> 或 <code>造型状态</code>，场景图写 <code>用途：地理</code>，道具状态图按它决定的那一件写。\n一张图承担两件事就拆成两个槽位；一镜最多一张 <code>起始帧</code> 和一张 <code>结束帧</code>，写 <code>结束帧</code> 时必须同时有 <code>起始帧</code>。\n下游视频提示词靠 <code>用途</code> 说清「本镜送哪一张分镜起始帧、哪些人物/道具/场景图」，所以缺 <code>用途</code> 的槽位不算准备好。</li>\n<li>本镜还没有起始画面图时有两条路。创作者用本套件生产：<code>用途：起始帧</code> 那一张由 <code>$short-drama-produce</code>\n用本镜的冻结关键帧正文生成，job 的 <code>source</code> 写 <code>剧集/&lt;EP&gt;/分镜.md</code>、<code>source_entry</code> 写本镜 <code>SHOT-...</code>，\n产出落在 <code>剧集/&lt;EP&gt;/制作成果/images/</code>，拿到真实文件后再绑成 <code>REF-...</code>。创作者在自己的工具里生产：\n把冻结关键帧正文复制过去出图，再把文件放进项目绑成 <code>REF-...</code>，或者本轮先写成\n<code>PLAN-SHOT-START（顺序：&lt;n&gt;）· &lt;本镜 SHOT-...&gt;《本镜冻结关键帧》（用途：起始帧；……）</code>。\n两条路都没走时，它仍然只是「待补参考图」里的一项。</li>\n<li>创作者在项目外出图、图片不进项目时，用 <code>PLAN-...</code> 槽位：语法与 <code>REF-...</code> 逐字相同，只把项目相对路径\n换成 <code>IMG-...</code> 或 <code>SHOT-...</code> 条目 ID，<code>IMG-...</code> 的中文名称必须与《图片提示词.md》标题一致。\n它声明的是「这张图由创作者在生成时按这个顺序挂载」，不声称项目里有文件，因此不是「待补」，\n也不能拿来投产。真实文件进了项目就改写成 <code>REF-...</code>。两种槽位可以混用，<code>顺序</code> 统一连续编号。</li>\n<li>自动绑定不是把所有图都塞进一镜。只选本镜可见、且身份、造型、地理、关键道具状态或起始构图确实需要稳定的图；逐张写清它的用途、能控制什么、不得控制什么。</li>\n<li>两条轴可以独立组合：有合法的图片提示词项时，输入参考图仍可为「待补」或创作者明确选择的文生视频；创作者给了真实参考图时，图片提示词项也可为「无」。</li>\n</ul>\n<h2>按需知识</h2>\n<p>默认只读本 SKILL、当前剧本和必要视觉事实。遇到对应问题时只打开一份：</p>\n<ul>\n<li>阶段边界与规则分级：<a href=\"references/stage-contract.md\">阶段契约</a></li>\n<li>镜头职责、切镜理由、镜长推导、对白覆盖和边界：<a href=\"references/shot-craft.md\">镜头手艺</a></li>\n<li>实际制作所需的镜头语法：<a href=\"references/production-shot-grammar.md\">生产镜头语法</a></li>\n<li>关键场次比较导演方案：<a href=\"references/scene-visual-plan.md\">场次视觉计划</a></li>\n<li>检查原文是否都有画面承载：<a href=\"references/coverage-audition.md\">Coverage Audition</a></li>\n<li>多人、群体和复杂空间调度：<a href=\"references/blocking-playbooks.md\">调度手册</a></li>\n<li>谁被照亮、怎么写才执行得出：<a href=\"references/lighting-craft.md\">光的设计</a></li>\n<li>冻结瞬间、注意中心和可读性：<a href=\"references/keyframe-craft.md\">关键帧手艺</a></li>\n<li>漫剧/二维漫画形态的共享画风词汇：<a href=\"references/comic-keyframe-lexicon.md\">漫剧关键帧词表</a></li>\n<li>剧本事实到关键帧的完整示例：<a href=\"references/screenplay-to-keyframe-example.md\">剧本到关键帧</a></li>\n<li>拆镜、并镜和稳定镜头 ID：<a href=\"references/shot-revision-identity.md\">镜头修订身份</a></li>\n<li>完成前的连续性检查：<a href=\"references/review-and-fixtures.md\">审查与示例</a></li>\n</ul>\n<h2>修订</h2>\n<p>保留未受影响的镜头 ID。拆镜、并镜或改变镜头职责时，说明哪些下游视频提示词需要刷新，但不自动\n重写用户没点名的文件。</p>\n<h2>完成</h2>\n<p>点名范围的原文都有镜头落实，每镜职责不重复、空间与状态连续、起止边界可制作、关键帧可冻结，\n每镜「来源」解析到《剧本.md》的真实场景、剧本里每个场景都有镜头承载或已记入「未拍场次」，\n且每镜关键帧里的可见人物、地点、道具都在本镜「视觉依据」里，即完成。画面需要、但《视觉设定.md》\n还没有条目的可见物件，在末尾报告里逐项点名。本次请求同时修改\n《图片提示词.md》与《分镜.md》时，当轮刷新受影响镜头的引用；不另建覆盖表。\n视频提示词、生产和审查只有用户点名时开始。\n五份创作文档齐备后，可转 <code>$short-drama</code> 对跨文档结构做一次机械核对；内容质量仍由创作者审查。</p>\n<h2>安装维护</h2>\n<p>只有安装、升级或排障时运行 <code>python3 scripts/selftest.py</code>。</p>\n","files":[{"path":"agents/openai.yaml","sizeBytes":273,"isText":true},{"path":"assets/coverage-audition.example.jsonl","sizeBytes":1985,"isText":false},{"path":"assets/coverage-template.json","sizeBytes":1195,"isText":true},{"path":"assets/keyframe-prompts.md","sizeBytes":1840,"isText":true},{"path":"assets/keyframe-template.jsonl","sizeBytes":2401,"isText":false},{"path":"assets/revision-lineage.fragment.json","sizeBytes":277,"isText":true},{"path":"assets/scene-visual-plan.example.jsonl","sizeBytes":2837,"isText":false},{"path":"assets/shot-template.jsonl","sizeBytes":3590,"isText":false},{"path":"references/blocking-playbooks.md","sizeBytes":12676,"isText":true},{"path":"references/comic-keyframe-lexicon.md","sizeBytes":11301,"isText":true},{"path":"references/coverage-audition.md","sizeBytes":2128,"isText":true},{"path":"references/keyframe-craft.md","sizeBytes":10255,"isText":true},{"path":"references/lighting-craft.md","sizeBytes":2118,"isText":true},{"path":"references/production-shot-grammar.md","sizeBytes":21285,"isText":true},{"path":"references/review-and-fixtures.md","sizeBytes":3326,"isText":true},{"path":"references/scene-visual-plan.md","sizeBytes":1826,"isText":true},{"path":"references/screenplay-to-keyframe-example.md","sizeBytes":7882,"isText":true},{"path":"references/shot-craft.md","sizeBytes":22545,"isText":true},{"path":"references/shot-revision-identity.md","sizeBytes":1732,"isText":true},{"path":"references/stage-contract.md","sizeBytes":12575,"isText":true},{"path":"scripts/selftest.py","sizeBytes":6933,"isText":true},{"path":"scripts/storyboard_check.py","sizeBytes":31133,"isText":true},{"path":"SKILL.md","sizeBytes":18759,"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-10-02T16:33:05.631115Z","sha256":"E7597847A8763E636A5797367956707BE25B7F6141C110DF0056B21FEA7777EB","sizeBytes":85935},"review":null,"source":{"repositoryUrl":"https://github.com/zenstory-ai/oh-story-dsh","path":"packages/knowledge/drama/skills/short-drama-storyboard","license":"MIT","commit":"d734089bae893783d8bfaf09f8e8fa0a99723ef0","subtreeSha":"89CEAA5315BA3151FF9F097A08FF2A4F3B1DF2F98684E11D336737C04ACBF0FC","lastSyncedAt":"2026-10-02T16:32:40.531554Z"},"reviewedAt":"2026-10-02T16:33:37.978002Z","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/oh-story-dsh/tree/main/packages/knowledge/drama/skills/short-drama-storyboard"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install zenstory-ai-oh-story-dsh@llmmart"},{"target":"git","command":"git clone https://github.com/zenstory-ai/oh-story-dsh.git"}]}