mcpField
H
hologram-presenter-video

hologram-presenter-video

github.com/yangagentクリエイティブ・メディア1366 回インストール9 週間前に更新
リポジトリ

hologram-presenter-video について

再利用可能なキャラクターとシーンの Profile、確認 Gate、クリップ単位の生成を使って、ホログラム解説動画を制作する Skill です。内容と生成開始時点を明示的に管理したい制作者向けです。

主な機能

  1. 01キャラクターとシーンの Profile を再利用
  2. 02文稿・絵コンテ・生成を Gate で確認
  3. 03クリップごとの英語プロンプト作成
  4. 04台詞密度と構図の確認
  5. 05クリップをハードカットで MP4 に結合
  6. 06失敗時も成功クリップを保持

活用シーン

  1. 01確認済み文稿から解説動画を制作
  2. 02既存のキャラクターとシーン設定を再利用
  3. 03絵コンテと生成範囲をクリップごとに確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/yangagent/hologram-presenter-video-skill --skill hologram-presenter-video

インストール後、Claude Code で/hologram-presenter-videoを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
profile-interview.md
scripts/
check_dialogue_density.py
concat_videos.py

詳細

全息讲解视频

在复用一套角色与场景档案的前提下,通过多个确认 Gate 建立可追溯的视频生产流程。讲解角色在每个生成片段中说出已经确认的口播文稿;不同片段通过硬切改变视角和构图,最后合并为一个 MP4 视频。

不可违反的规则

  • 只维护一套当前 Profile,不得实现 Profile 选择器。
  • 将角色图与场景图视为彼此独立的风格参考。遇到卡通角色与写实场景或其他混合组合时,不得强行统一成同一种艺术风格。
  • 以用户确认的口播文稿作为知识内容的唯一事实来源,不得静默增加外部事实。
  • Gate3 未确认前,不得调用任何视频生成 API。
  • 不得添加背景音乐或转场。
  • 指令、脚本、配置和持久化运行产物中的路径必须使用相对路径。用户可以提供绝对的源图片路径,但复制图片后不得持久化保存该绝对路径。
  • 每个 Gate 都必须等待用户明确确认,不得把沉默视为同意。

相对路径基准

  • Skill 资源相对于本 Skill 所在目录解析。
  • profile/profile.json 内的路径相对于 profile/ 解析。
  • 运行产物创建在用户当前工作目录下。
  • 单次运行清单内的路径相对于该次运行目录解析。
  • 不得假设本 Skill 安装在任何固定位置。

执行顺序与阶段边界

Profile 构建和单次视频任务是两个严格串行、不能并行推进的阶段。每次调用本 Skill 时必须先检查 Profile,再从当前适用的阶段开始;需要构建 Profile 时,只有 Gate0 确认并成功写入完整 Profile 后,才可以在同一次调用中继续进入单次视频任务阶段:

  1. 如果 profile/profile.json 不完整、引用图片缺失,或用户明确要求重新设计 Profile,进入 Profile 构建阶段。
  2. Profile 构建阶段只处理角色图、场景图、图片分析、长期风格偏好和 Gate0。Gate0 确认并且完整 Profile 已成功写入前,不得询问本期内容、目标时长、单次受众、单次讲解深度或其他本期视频要求;不得创建 hologram-video-runs/ 运行目录、run.json、口播稿或分镜,也不得提前执行 Gate1 及之后的步骤。
  3. 用户如果已经主动提供了本期内容或目标时长,可以在对话中保留这些信息,但 Profile 构建阶段不得处理、补问或据此创建运行产物。Profile 成功启用后再复用已经提供的信息,不要重复询问。
  4. 只有检查确认 Profile 在本次调用开始时已经完整可用,或刚刚通过 Gate0 成功建立,才能进入 单次视频任务阶段;此时才获取尚未提供的本期内容和目标时长。

不得为了减少对话轮次而并行或混合两个阶段的提问。

Gate0:建立可复用 Profile

每次收到请求时,首先检查 profile/profile.json 是否包含下述全部必要字段,以及其中引用的两张图片是否存在。

如果 Profile 完整,直接复用并省略图片收集。如果任意必要文件缺失,必须要求用户同时提供一张本地角色图和一张本地场景图。用户没有提供两张图片时,说明这一前置要求并终止后续视频生产流程。

如果用户明确要求重新设计、更换或重置 Profile,也必须重新提供两张图片并完整重建 Profile,不支持只替换其中一张。新 Profile 经确认并准备启用前,将旧的当前 Profile 保存为唯一的 profile.backup/;如果已有旧备份,则替换它。

凡进入 Profile 构建阶段,均完整读取并遵循 references/profile-interview.md。该参考文件负责图片分析、五个描述字段的起草、场景调度筛选、长期偏好访谈和 Gate0 语义复核;本入口文件只负责阶段编排与持久化。等待参考文件规定的 Gate0 明确确认后,把两张图片复制到 profile/assets/,保留有意义的文件扩展名,并写入下述最小化 Profile。持久化路径只记录复制后的相对路径。

写入以下最小化的 profile/profile.json:

{
  "updated_at": "YYYY-MM-DDTHH:mm:ss",
  "character_image": "assets/character.png",
  "scene_image": "assets/scene.png",
  "character_description": "一段自然语言描述",
  "scene_description": "一段自然语言描述",
  "visual_defaults": "一段自然语言描述",
  "presentation_defaults": "一段自然语言描述",
  "staging_defaults": "一段自然语言描述"
}

示例中的 .png 只表示字段格式;实际文件名保留复制后图片的真实扩展名,且两个路径必须与 profile/assets/ 中的文件一致。

开始一次视频任务

进入本阶段前必须再次确认完整 Profile 已存在且其中引用的图片可读取;否则返回 Gate0,不得询问单次任务信息。确认后才获得用户内容和目标时长。内容可以是高度凝练的笔记、完整脚本、粘贴的上下文或可读取的本地文件。从本次请求中提取受众、讲解深度、措辞保留程度和特殊表达要求;用户未说明时使用 presentation_defaults 合理推断。只有尚未解决的歧义会显著改变文稿时才向用户提问。

使用精确到秒的本地时间,在当前工作目录下创建:

hologram-video-runs/YYYYMMDDHHMMSS/
├── run.json
├── script.md
├── storyboard.json
├── prompts/
├── ref2v-tasks.json
├── clips/
└── final.mp4

如果同一时间戳目录已经存在,追加一个简短数字后缀,不得覆盖已有目录。

保持 run.json 最小化:

{
  "created_at": "YYYY-MM-DDTHH:mm:ss",
  "status": "awaiting_gate1",
  "target_duration": 30,
  "script_path": "script.md",
  "storyboard_path": "storyboard.json",
  "final_path": "final.mp4"
}

status 只允许使用 awaiting_gate1、awaiting_gate2、awaiting_gate3、generating、failed 和 complete。每次直接覆盖当前状态,不保存状态历史。

Gate1:确认口播文稿

从用户提供的信息中提炼并改写出约为目标时长的口播文稿。严格受输入来源约束:可以重组、澄清、简化和使用类比,但除非用户明确要求研究,否则不得联网补充或虚构新事实。遇到实质性矛盾或关键缺失时,应当指出问题,不得猜测。

生成文稿前,先按目标秒数计算整篇口播预算:

  • 理想写作区间为每秒 4.6–5.0 个口播单元。
  • 允许进入 Gate1 的区间为每秒 4.2–5.2 个口播单元。
  • 每秒大于 5.2 时必须精简;每秒大于 5.8 属于严重超量,必须重新改写。
  • 每秒少于 4.2 时应补充有效讲解内容;如果用户明确想保留慢节奏、长停顿或大量无台词表演,先说明影响并获得确认。

口播单元的计算规则与 Gate2 完全相同。按预算起草后,先把候选口播正文写入 script.md;文件中不得加入标题、字数、时长说明或其他非台词内容。然后在本次运行目录执行:

python3 <skill-dir>/scripts/check_dialogue_density.py \
  --script script.md \
  --target-duration <target-seconds>

检查未通过时,不得展示 Gate1;根据结果扩写或精简候选文稿并重新运行。不得为了满足预算引入来源中不存在的事实。唯一例外是检查结果为 TOO_SHORT,且用户已经在 Gate1 之前明确确认采用慢节奏、长停顿或较多无台词表演;除此之外,只有检查通过后才能进入 Gate1。

Gate1 只展示目标时长和完整文稿。用户要求修改时,先把修改后的完整正文覆盖写入 script.md 并重新运行整篇检查;检查通过且用户明确确认后,才把运行状态更新为 awaiting_gate2。因此进入 Gate2 的 script.md 始终是完全一致的最终确认稿。

Gate2:确认 H3 分镜

先按照完整的语义边界,把 Gate1 已确认的 script.md 切分为逐段台词:

  • 每段时长必须是 8–15 秒的整数,优先选择 10–12 秒。
  • 尽可能让一句话完整保留在同一个片段中。
  • 如果一句话明显过长,应在 Gate1 阶段缩短,而不是跨片段拆分。
  • 每段对应一个独立生成的视频,内部只有一个连续的 [Shot 1],不得再次切镜。
  • 在相邻片段之间改变视角、构图、景别和角色站位;片段之间直接硬切。

先创建 storyboard.json,使用顶层数组。每个元素只包含以下四个字段:

{
  "id": "001",
  "duration": 10,
  "dialogue": "本分镜中角色说出的完整台词。",
  "prompt_path": "prompts/001.txt"
}

dialogue 必须来自 Gate1 已确认文稿,并且是该分镜唯一的台词来源。所有分镜的 dialogue 按编号连接后,必须与 script.md 的内容和顺序一致;只允许按分镜边界拆分,不得在这一阶段改写、增删或润色。storyboard.json 不保存口播单元数、密度、建议时长或检查状态等派生字段。

所有分镜的 duration 之和必须尽量等于 run.json 中的 target_duration,允许最多 10% 的计划误差。如果受 8–15 秒整数片段限制而无法满足,应在 Gate2 前向用户说明并确认新的目标时长,不得静默改变最终计划。

台词密度检查

直接对 storyboard.json 中每个分镜的 dialogue 计算口播单元:

  • 每个中文字符记 1 个单元。
  • 每个连续英文单词、英文缩写或数字组记 1 个单元。
  • 标点和空格不计入单元。
  • 台词密度等于口播单元总数除以该分镜的设定秒数。

使用以下阈值:

  • 推荐区间:每秒 4.2–5.2 个单元。
  • 警戒区间:大于 5.2 且不超过 5.8。只有句式简单、视觉状态变化较少时才可保留。
  • 硬上限:每秒 5.8 个单元。超过时不得继续生成提示词,必须延长时长、缩短台词或拆分分镜。优先延长或拆分;如果缩短台词会改变 Gate1 确认稿,必须先把修改交给用户确认。
  • 枚举较多、专业词较多或全息状态变化较多时,目标密度应不高于每秒 5.0 个单元。

规划时可用 向上取整(口播单元 ÷ 5.0) 得到建议时长,再限制在 8–15 秒内;结果超过 15 秒时必须缩短或拆分。

在本次运行目录执行:

python3 <skill-dir>/scripts/check_dialogue_density.py \
  --storyboard storyboard.json \
  --target-duration <target-seconds>

<skill-dir> 只表示运行时解析得到的 Skill 目录,不得把安装位置的绝对路径写进持久化文件。检查出现 FAIL 时必须修正 storyboard.json 并重新运行;出现 WARNING 时必须结合句式和视觉动作负载复核,不能直接忽略。只有检查通过,或警戒项完成复核后,才能生成 H3 提示词。

全片场景调度与多样性

通过台词密度检查后,读取 staging_defaults,把全部分镜作为一个整体规划,而不是逐段孤立选择构图。

  • 普通站立讲解始终是有效的基础方式,不要求每段都使用场景锚点。
  • 根据各段知识语义,选择适合的高价值调度能力及其场景锚点;不得为了变化而使用参考图中不存在或空间关系不可信的物件,也不得总是优先选择最容易联想到知识展示的信息设备。
  • 将 Profile 中共享核心物件、空间位置或全息承载区域的一组行为视为同一个锚点簇。更换同一锚点簇内的行为不等于更换了核心场景锚点,但独特的姿态、朝向、讲解状态或动作阶段变化仍属于有意义的行为多样性,不得在合并或规划时丢失。
  • 判断两个调度是否重复时比较完整可观察配置,包括身体支撑、姿态性质、角色与锚点的朝向关系、活动状态、互动对象和全息承载机制;不得只比较动作动词。
  • 状态变化不是每个分镜或锚点的必备项。只有参考图明确支持、变化确实由锚点造成、能够在安全构图内完成,并且相对于其他分镜带来新增价值时才采用;否则使用稳定姿态、操作状态或手势互动即可。
  • 确实采用状态变化时,在提示词中明确可观察的起始状态、由锚点支持的连接动作和结束状态;“改变朝向”“状态切换”等抽象标签本身不是分镜设计。优先描述角色相对于锚点的关系如何变化,不得把“固定正面”等通用机位结果持久化为调度能力。
  • 在全片中尽可能提高场景锚点、角色行为、人物位置、朝向、全息方位和安全机位的多样性。
  • 存在合适替代方案时,避免相邻分镜同时重复核心场景锚点和角色行为。必须复用时,从人物位置、朝向、动作阶段、全息方位或安全机位等其他维度制造明显差异。
  • 场景调度应当通过角色动作、信息来源或承载空间,与全息知识互动形成可信关系;不得用无关的场景动作取代本 Skill 的核心特点。
  • 知识表达、人物清晰度和生成稳定性始终高于形式上的不同。片段确实不适合场景锚点或全息因果互动时,不得强行加入。

这一规划只用于指导后续英文 H3 提示词。不得向 storyboard.json 增加调度字段,也不得创建调度清单、评分、配额或结构化重复检查脚本。全部提示词完成后,必须把它们作为一组复核整体多样性与跨片段声音一致性,再提交 Gate2。

构图安全区

视频模型会在主体或信息元素占画面比例过小时丢失身份、面部、肢体和文字细节,因此所有分镜必须从第一帧到最后一帧持续满足以下构图约束:

  • 角色默认采用肩部以上的特写(close-up)构图;需要为较大幅度的手部动作或互动对象保留更多画面空间的分镜,可以放宽到近景(medium close-up),但不得再远。不得把中景(腰部以上)、中远景、远景、全身构图或完整环境总览作为角色讲解镜头。
  • 开场构图必须已经位于安全景别内,不能依赖后半段推镜才让角色变清晰。
  • 角色的脸部必须持续处于清晰、显著的画面区域;用于互动的手部在互动发生时必须清晰可见,可以抬入画面或位于画面下缘,其余时刻允许画面只保留脸部与肩部。
  • 用画面占比复核景别,而不只依赖景别名称:视频模型实际出图通常小于提示词声明的占比,因此提示词中按脸部约占画面高度 40% 来写,从第一帧到最后一帧都不得声明更低。
  • 在提示词中用否定表述锁定景别下限:腰部及以下不得进入画面,场景中的家具、陈列与环境总览不得成为画面主体,最多出现在画面下缘。
  • 完整 Profile 仍用于保持角色身份,但 detailed_description 只能强调当前安全构图中实际可见的特征,不得为了展示完整造型而扩大景别。
  • 允许小幅推近、横移、摇摄、俯仰或环绕;任何时刻都不得拉远出近景范围,即不得退到中景或更远。分镜变化主要来自机位角度、角色左右位置、视线方向、全息元素方位和互动动作,而不是扩大景别。
  • 当前承载知识的主要全息信息单元应位于角色手部附近的前景或中景,建议至少占画面宽度约 25%,不得缩成远处背景装饰。
  • 如果 Profile 中某个承载位置无法与角色动作同时纳入安全构图,保留可信的场景锚点和动作关系,把全息信息调整到该锚点附近稳定可见的区域;不得为服从低位或不可见的承载位置而扩大景别。
  • 同一时刻优先突出 1–2 个主要信息单元。多步骤内容采用依次出现、当前项放大、已讲项弱化的方式;不得为了同时容纳全部信息而缩小角色或主要全息元素。
  • 如果角色与全部必要信息无法同时在安全构图内保持清晰,应拆分分镜,不得退回宽景解决空间不足。

在 H3 的英文 detailed_description 中明确写出:角色全程保持 close-up(肩部以上)构图,或在本分镜允许时放宽到 medium close-up,脸部大而清晰、约占画面高度五分之二,开场第一帧即满足该占比;并说明相机全程不会拉远到中景或更宽的画面,腰部及以下与环境总览不进入画面主体。任何房间布局、完整外观或信息总览要求都不得覆盖这项约束。

セリフの動詞とホログラムインタラクション

ナレーションのセリフに含まれる動詞は、ホログラムインタラクションを最も効果的に演出できる要素です。各プロンプトを書く前に、その段落の dialogue にホログラムインタラクションへ変換できる動詞があるか確認し、ある場合は、その段落の見せ場となるビートとして設計してください。

適用判定。動詞は、意味上ホログラム情報を作用対象にでき、目に見える手や体の動作に変換できるものでなければなりません。たとえば、「取り出す、書き込む、圧縮する、展開する、分解する、積み重ねる、比較する、反転させる」などです。抽象的な状態動詞(考える、意味する、表す)、純粋な発話動詞(話す、伝える、説明する)、指向性の弱い動詞(見る、指さす)は対象外です。指向性の弱い動詞は一般的なジェスチャーに属し、見せ場にはなりません。動詞の作用対象がホログラム情報ではなくシーン内の実体アンカーである場合は、シーンの演出として扱い、本節の対象外とします。

設計方法。動詞によるインタラクションは、セリフでその動詞を発するタイミングと同期させてください。detailed_description には、<Subject 1> (S1) がその語を発したときに動作が起きることを明記し、開始状態 → 手の動き → ホログラムの終了状態の順に記述してください。キャラクターは動作中も自然に話し続けます。インタラクションは段落内の一つのビートとし、全体を通して続けず、それ以外の時間は安定した解説を保ちます。各段落で能動的な動詞インタラクションは最大一つとします。候補が複数ある場合は、知識との関係が最も強く、動作が最も見えやすいものを選びます。動詞によるインタラクションは、キャラクターとホログラム情報の因果的なやり取りを実現する際の優先手段です。適切な動詞がない場合は既存のルールに戻り、無理に追加しないでください。

制約。

  • 動作は構図の安全領域内で無理なく行えるものとし、手は画面内に見える位置に保ってください。大きな腕の動きや低い位置の空間を必要とする動詞は、インタラクションをやめて安定したジェスチャーに切り替えます。
  • インタラクションには、その段落で現在使っている主要なホログラム情報ユニットを再利用し、動作のために新しい情報ユニットを追加しないでください。
  • インタラクションを成立させるために、確定済みのセリフを書き換えたり、追加・削除したりしてはいけません。
  • 全編の多様性を確認する際、隣り合うショットで同じ種類の動詞インタラクションを繰り返してはいけません。セリフの動詞が似ている場合は、手の動き、ホログラムの反応方法、またはインタラクションの位置を変えてください。

Few-shot の例(判定と記述方法を示すものであり、固定の対応関係を定めるものではありません。同じ動詞でも、ショットごとに現在のホログラム内容に合わせて動作を設計してください)。

適切な例:

  • セリフ「この概念を取り出して見てみましょう」→ <Subject 1> (S1) says "取り出して" のタイミングで、彼女は手元近くの浮遊するホログラム群に手を伸ばし、光るパネルを一枚、手前に引き寄せます。パネルは彼女の顔の横で大きくなって落ち着きます。
  • セリフ「結果を書き込みます」→ <Subject 1> (S1) says "書き込みます" のタイミングで、彼女はホログラムパネルに向けて短い線をなぞります。指先の動きに合わせて、新しいテキストの一行がパネルに書き込まれます。
  • セリフ「この情報は一つの指標に圧縮されます」→ <Subject 1> (S1) says "圧縮" のタイミングで、彼女は両手を内側に寄せます。散らばったホログラムのブロックが縮小して一つにまとまり、両手の間にコンパクトな表示として収まります。

不適切な例(無視し、インタラクションを設計しない):

  • 「このデータを見てみましょう」——指向性の弱い動詞なので、通常の視線とジェスチャーで十分です。
  • 「これは効率が高まることを意味します」——抽象的な状態動詞であり、物理的な動作に変換できません。
  • 「ある法則をお伝えします」——純粋な発話動詞であり、動作はホログラム情報と関係ありません。

セリフ密度の確認後、h3-prompt-writing Skill を使用していることをユーザーにはっきり伝えてください。この Skill と、完全な参照形式である Ref2VA ガイドを読み込み、現在のフィールド名、章の順序、タグ、時間ルール、詳細要件に従ってください。外部ルールを記憶から複製したり、それに近い形で再現したりしてはいけません。また、スクリプトで H3 プロンプトを連結、置換、注入してはいけません。

各クリップについて:

  • 複製したキャラクター画像を参照画像 1、シーン画像を参照画像 2 として使用します。
  • <Picture 1> に由来する解説キャラクターを <Subject 1>、<Picture 2> に由来する環境を <Subject 2> として定義します。
  • キャラクター、シーン、ビジュアル、解説スタイルの説明をプロンプト内に十分に再現し、各クリップが他のクリップのプロンプト文脈に依存せず、参照制約を単独で適用できるようにします。staging_defaults には、その段落で実際に選択したシーン演出方法のみを記述し、使用しない選択肢をすべて列挙してはいけません。
  • キャラクターが話すときは、必ず <Subject 1> (S1) と表記します。
  • セリフの唯一の出典として storyboard.json の該当段落の dialogue を使用し、h3-prompt-writing が現在定める形式に従って、対応する <d>[Language] ...</d> に記述します。文言を書き換えてはいけません。この Skill が明示的に求める言語タグと句読点の正規化のみ許可されます。
  • H3 の6つのプロンプト章はすべて英語にします。セリフ、固有名詞、画面内に表示されるテキストは元の言語のままにします。
  • Profile の解説者の好みの説明を使って、声の表現、表情、動作を記述します。すべてのクリップで声の説明は一字一句同じにし、演技上の修飾は外向的な感情表現に限ります。ささやき声など、発声方法を変える記述は禁止です。
  • 内容に適している場合は、キャラクターとホログラム情報との間に、はっきりと見える因果的なインタラクションを優先的に設計します。そのクリップに適切な題材がない場合は、無理にインタラクションを加えてはいけません。
  • 図表、モデル、比較、プロセス、または強調表示した概念で知識を伝えられる場合は、装飾的なホログラム効果だけを生成してはいけません。
  • テキストは、それ自体が知識を担う場合(重要な数値、数式、または中核となる用語)に限り、ホログラム情報内に表示できます。装飾的なラベル、見出し、リストのテキストはすべて図形で代用します。表示するテキストの字形の高さは、画面の高さの3分の1以上とし、各ショットにつきテキスト要素は最大一つとします。この基準は中国語、英語、数字に同様に適用されます。
  • プロンプトに絵文字を含めてはいけません。必要な図形はすべて言葉で記述し、「絵文字を使用しない」などの否定的な指示をプロンプトに記述する必要もありません。
  • キャラクターのセリフ、適切な環境音、控えめなホログラムインタラクション音を含めます。
  • BGM を明確に禁止し、non_diegetic_music: N/A を記述します。

完成した英語のプロンプトを prompts/001.txt、prompts/002.txt などのファイルに順番に保存し、それぞれの prompt_path が実際のファイルと一致するようにします。セリフ密度の確認には storyboard.json 内の構造化された dialogue のみを使用します。プロンプト内のセリフの一致は、Agent が storyboard.json と照らし合わせて意味的に確認します。プロンプトを逆解析したり、スクリプトで書き換えたりしてはいけません。

Gate2 では、各段落の番号、長さ、英語のプロンプトのパスのみを表示します。中国語のプロンプトや中国語のレビュー用訳文を作成してはいけません。ユーザーの確認を待ってから、状態を awaiting_gate3 に更新します。

生成機能の検索と Gate3 の実行

Gate2 の確認後、現在利用可能な Skills を調べ、複数のローカル参照画像とプロンプトから動画を生成できる機能を探します。動画生成 Skill の名前をハードコードしてはいけません。

  • 該当するものが見つからない場合は、複数の参照画像を使った動画生成 Skill が必要であることを説明し、後続の処理を終了します。
  • 一つだけ見つかった場合は、その Skill を選択します。
  • 複数見つかった場合は、名称と実質的な違いを示し、ユーザーに選択してもらいます。
  • ユーザーが選択した Skill を読み込み、その入力、バッチ処理、再試行、出力のルールに従います。アップロード、ポーリング、再試行、ダウンロードの処理を独自に再実装してはいけません。

選択した Skill の要件に従って ref2v-tasks.json を作成します。ファイル内では今回の実行ディレクトリからの相対パスを使用し、その実行ディレクトリから生成処理を呼び出します。すべてのタスクで参照画像の順序を統一し、キャラクター画像を先、シーン画像を後にします。成功したクリップは clips/<id>.mp4 として保存するか、同じ形式に正規化し、最終的な順序が確定するようにします。

Gate3 では、分鏡の数、各段落の予定時間の合計、2枚の参照画像のパス、クリップのディレクトリ、最終動画のパスを表示します。外部生成を呼び出す前に、ユーザーの明確な確認を必ず待ちます。

生成、失敗からの復旧、連結

Gate3 の確認後、状態を generating に更新し、選択した生成 Skill を通じてタスクを送信します。

一部のタスクが失敗した場合、成功済みのクリップは保持し、不完全な動画を決して連結しません。選択した生成 Skill は、そのドキュメントで定められた内部再試行を実行できます。内部再試行をすべて使い切った後、状態を failed に更新し、失敗した分鏡の番号とエラーを報告します。その後、費用が発生する可能性のある生成呼び出しを再度行う前に、ユーザーの確認を待ちます。修正が確認されたら、ユーザーが明示的に変更範囲の拡大を求めない限り、失敗したプロンプトまたはタスクのみを変更します。

storyboard.json のすべての番号に、読み取り可能で正規化済みのクリップが揃ったら、次を実行します:

python3 <skill-dir>/scripts/concat_videos.py \
  --storyboard storyboard.json \
  --clips-dir clips \
  --output final.mp4

上記の <skill-dir> は、実行時に解決される本 Skill のディレクトリを表します。このプレースホルダーやインストール先の絶対パスを永続化される成果物に書き込んではいけません。

連結スクリプトはハードカットで連結します。必要に応じて、互換性のないクリップを H.264/AAC に統一し、結果が読み取り可能であることを確認します。スクリプトはトランジションや音楽を追加せず、最終的な長さも確認しません。元のクリップはすべて保持します。成功したら状態を complete に更新し、最終的なローカルパスをユーザーに伝えます。

ユーザーが要求した変更

ユーザーの要求どおりに厳密に変更します。独自に自動無効化、ロールバック、バージョンのルールを設計したり、ユーザーが指定した変更範囲を覆したりしてはいけません。変更に外部生成機能の再呼び出しが必要な場合は、更新後の生成範囲を先に提示し、呼び出す前にユーザーの確認を得ます。

コメント