プラグインのインストール: セットアップやフレッシュネスコマンドを実行する前に、このスキルがHyperFramesプラグイン内にある場合は、プラグイン実行ルールに従ってください。スタンドアロンインストールの場合は、以下の更新手順に従ってください。
まず最初に、このスキルを最新の状態に保ってください — 実行前にユーザーに確認してください:
npx hyperframes skills update faceless-explainer。すべてが最新の場合は高速なno-op(何もしない)として動作し、そうでなければ、このスキルとそれが依存するコアドメインスキルを、実際に使用する前に更新します。
media-use: オーディオ/画像/ロゴを調達する前に、
/media-useを呼び出して、HeyGenカタログからBGM/SFX/画像を、ブランドロゴは公式ソースから解決してください。最初に--adoptを実行して既存のアセットを登録します。/media-useスキルを参照してください。ホストアプリが独自の音楽や効果音ツールを提供している場合は、音楽と効果音にそれらを使用してください。
Faceless Explainer to HyperFrames
このスキルを使用して、テキストの塊を解説動画に変換します:デザインシステムを選択し、教育的なストーリーを計画し、HyperFramesでフレームごとに構築します。Facelessとは、すべての視覚要素が後続の処理で生成されることを意味します — キャプチャ手順や実際のアセットインベントリはありません。
最初の入り口は
/hyperframesです。 あなたはオーケストレーターです。各ステップを実行し、そのゲートを確認してから続行してください。このスキルは製品やウェブサイトをキャプチャせずに、テキストからトピックを解説するためのものです。他の意図、単なる「動画を作成」、または不確かな場合は、最初に/hyperframesを読んでください — インテントレイヤーがすべてのルート決定を所有し、BRIEF.mdなしでここに到着した新しい作成リクエストは、とにかくそれを通過します(セットアップの最初のルール)。
あなたはオーケストレーターです。videos/<project>/内で作業します。ステップを順番に実行し、各ゲートを通過してから続行してください。ユーザーゲートのあるステップは、ステップ0、ステップ3、およびステップ6です。ステップ0の前に../hyperframes/references/brief-contract.mdを読んでください — これによりゲートタイプと、BRIEF.mdのflow/storyboardが、ステップ3/4/6のゲートを支配するモードをどのように導出するかが定義されています。ステップ5を除くすべてのステップを自分で実行してください。ステップ5では、フレームごとに1つのサブエージェントをディスパッチします。設計やモーションルールはここに置かないでください。これらはフレームワーカーサブエージェント、このスキルのローカルな../hyperframes-animation/rules/ + ../hyperframes-animation/blueprints/、およびhyperframes-creativeにあります。
ワークフロー:ステップ0 セットアップ → hyperframes.json;ステップ1 ブリーフィング → capture/extracted/;ステップ2 デザインシステム → frame.md;ステップ3 ストーリーボード/スクリプト → STORYBOARD.md と SCRIPT.md;ステップ3.1 オーディオ → audio_meta.json;ステップ4 ビジュアルデザイン → 拡張された STORYBOARD.md;ステップ5 フレーム → compositions/frames/NN-*.html と index.html;ステップ6 最終レンダリング → renders/video.mp4。
Step 0: セットアップ
目標:確定したブリーフィングを持って開始し、HyperFramesプロジェクトを作成し、ブリーフィングを永続化します。
ブリーフィングはインテントレイヤーによって確定されており、ここで質問して確定するものではありません。 開始ルール(順序):(1) BRIEF.mdが存在する → それを読み、何も質問しない — ブリーフィングは確定しており、そのflow/storyboardがモードを導出します(ブリーフ契約 § 1)。(2) BRIEF.mdはないがプロジェクトが存在する(ディスク上にhyperframes.json / STORYBOARD.mdがある) → ストーリーボードのフロントマターと記録された設定から再開し、中途半端に構築されたプロジェクトを再び尋問しないでください。(3) どちらでもない — ここに直接到着した新しい作成リクエスト → /hyperframesを読み、そのインテントレイヤー(references/intent-interview.md)を実行します:レシピと記憶されたデフォルトをチェックし、このルートの質問(../hyperframes/references/routes/faceless-explainer.md)を実施し、ロックされたブリーフィングを返します。編集リクエストはこれらすべてをスキップします — 編集を実行してください。
hyperframes.jsonがない場合にのみ初期化します。プロジェクト名<project>は、トピックからケバブケースで命名します(例:compound-interest-explained)。ワークスペース名やタイムスタンプは使用しないでください。
npx hyperframes init "videos/<project>" --non-interactive --example=blank --skill=faceless-explainer — initはインストール済みのスキルをGitHub上の最新と照合し、古いものがあればグローバルセットを更新します。
init後、<PROJECT_ROOT>をvideos/<project>とし、後続のすべての相対パスコマンドをそのディレクトリを作業ディレクトリとして実行してください。以下のコマンドで、.は<PROJECT_ROOT>を意味します。呼び出し元のディレクトリに.media、capture、または出力ファイルを決して書き込まないでください。
initの直後にBRIEF.mdを書き込んでください(決して前ではない — initは空でないディレクトリを拒否します):インテントレイヤーのロックされたブリーフィング、形式は../hyperframes/references/brief-format.mdに従います。<MEDIA_DIR>をインストール済みの/media-useスキルディレクトリとして解決します。次に、設定に基づく各回答をnode <MEDIA_DIR>/scripts/prefs.mjs record --hyperframes .で記録します(brief-format.mdがそのサブセットを指定します)。インテントレイヤーがレシピを採用した場合は、node <MEDIA_DIR>/scripts/recipe.mjs use --hyperframes . --name <name>を実行します。これにより、そのframe.mdがプロジェクトにコピーされ(ステップ2はスキップされます)、ステップ3がドラフトを元に戻すスケルトンが返されます。レシピは回答を埋めるものであり、承認ではありません。レビューゲートは引き続き実行されます。
セットアップを通過する前に、サインインステータスを表示してください — npx hyperframes auth statusを実行し、その出力をそのまま中継してください。これにより、音声/BGMがHeyGenを使用するかローカルエンジンを使用するか、およびサインアウトしている場合のサインイン方法が報告されます。以下のいずれかのブランチを適用します:
- 協調モード: ユーザーがサインインするか、明示的に
offline/goを選択するまで待ちます。 - 自律モード: ステータスを伝え、利用可能なローカルエンジンを使用して続行します。
オフラインのプロバイダーが存在しない場合に、必要な機能を静かに省略しないでください。障害を表面化させてください。この決定を別の質問に織り込んだり、キーをリポジトリごとの.envに書き込んだりしないでください。認証の所有権とオフラインフォールバック:/media-use references/setup-providers.md § プロバイダー。
ゲート: hyperframes.jsonとBRIEF.mdが存在すること。設定に基づく回答が記録されていること(ブリーフ契約 § 2)。サインインステータスが表示されたこと(サインインしている、またはオフラインで続行している)。
Step 1: ブリーフィング(キャプチャなし)
目標:ユーザーのテキストを情報源としてプロジェクトに組み込みます。ウェブサイトのキャプチャも実際のアセットもありません — これは顔出し不要の解説動画です。
ユーザーの入力をそのまま保存し、その後、手動で合成キャプチャパッケージを作成します:
capture/extracted/visible-text.txt— 完全な記事/ノート/トピック/概要。そのままのテキストです。これは情報のソースであり、ストーリーテンプレートではありません(ステップ3で再構成されます)。capture/extracted/tokens.json—{ "title": "", "description": "", "colors": [], "fonts": [] }。title/descriptionをブリーフィングから入力します。colors/fontsは、ユーザーが明示的にブランドカラーやフォントを指定した場合を除き、空のままにします — その場合は追加します(デザインプリセットが完全なパレットを提供します)。
ユーザーがスクリプトを貼り付けたり、自分の文言を維持したい場合は、user_script.txtとしてそのまま保存します。VO_MODE(逐語的または再構成)はBRIEF.mdから取得します — スクリプトが到着したときにインテントレイヤーが質問します。ブリーフィングにそれが欠けている場合のみ、ここで一度質問し、その回答をステップ3のために保存します。
npx hyperframes captureは実行しないでください(URLはありません)。asset-descriptions.mdを作成したり、capture/assets/を入力したりしないでください — 顔出し不要のビジュアルはステップ4-5で作成されるものであり、キャプチャされるものではありません。唯一の例外は、ユーザーが実際の画像を提供した場合です。その場合は、それをpublic/<basename>の下に配置し、ステップ3のためにそれをメモしておきます。
ゲート: capture/extracted/visible-text.txtとcapture/extracted/tokens.jsonが存在すること。解説のトピックと対象読者を1つの明確な文で述べられること。
Step 2: デザインシステム
目標:出荷済みのフレームプリセットを1つ選択します。スクリプトがそれをこの動画のframe.md + キャプションスキンに変換します。
BRIEF.mdがstyle_presetを指定している場合 — ユーザーはインテントレイヤーでショーケースを見てそれを選択しています — それを使用します。判断の呼び出しは、ブリーフィングが沈黙している場合のみあなたに委ねられます。その場合、あなたが唯一の判断を行います — どのプリセットか:../hyperframes-creative/references/design-spec.mdを読み、../hyperframes-creative/frame-presets/を閲覧します。トピック、トーン、対象読者に最も見た目が合うプリセットを選択します。その後、以下を実行します:
node <SKILL_DIR>/scripts/build-frame.mjs --preset <name> --hyperframes .
スクリプトは残りを決定論的に実行します:プリセットのFRAME.mdをframe.mdにコピーし、capture/extracted/tokens.json内の任意のブランドトークンにリミックスします(ブランドカラーは役割によってプリセットのカラーキーにマッピングされ、プリセットの見出しフォントと本文フォントはブランドのものと交換されます)。プリセットのキャプションスキンを.hyperframes/caption-skin.htmlにコピーし、自己検証します(マッピングが壊れている場合は終了コード1で終了します)。終了コード0で終了したらすぐに続行します — 仕様を手動で編集しないでください。
顔出し不要の解説動画は通常、ブランドカラー/フォントを持ちません(tokens.jsonのcolors/fontsは空です)→ スクリプトはプリセット独自のパレット(完全に出荷可能なデザイン)を保持します。ユーザーがブランドカラー/フォントを指定した場合のみ、実行前にそれらをtokens.jsonに追加し、その後、マッピングが本当に必要である場合にのみ、frame.mdを手動で調整します。
ゲート: build-frame.mjsが終了コード0で終了したこと — frame.mdが名前付きプリセットから存在し、(プリセットが提供する場合).hyperframes/caption-skin.htmlがキャプションスキンソースとして存在すること。選択したプリセットが設定として記録されたこと(--key style_preset --workflow <this workflow>、ブリーフ契約 § 2)。
Step 3: ストーリーボードとスクリプト
目標:テキストを承認されたフレームごとの教育計画に変換します。
../hyperframes-creative/references/story-spine.md(フックの言語、証拠より先の価値、提案としてのストーリーボード、ソース追跡可能なビジュアル)、references/story-design.md、../hyperframes-animation/blueprints-index.md、../hyperframes/references/storyboard-format.md、および../hyperframes/references/script-format.mdを読んでください。これらを使用して、STORYBOARD.mdと、ナレーションが必要な場合はSCRIPT.mdを作成します。フロントマターのduration:をブリーフィングのlengthから設定します — 大まかな期待値です。アセンブリは、そのカットがそれに対してどこに着地するかを報告します。
story-design.mdを解説構造(コンセプト/ハウツー/リスト記事/ストーリー)、フック戦略、明確化テクニック、感情的なビート、タイプ列挙マッピング、およびVO_MODEに使用します。動画のシーケンスはナラティブデザインから来ており、入力テキストの段落順ではありません — 並べ替え、マージ、省略、圧縮を行います。ソフトガイドとして、../hyperframes-animation/blueprints-index.mdの役割→ブループリントメニューを参照してください。各ビートについて、候補となるブループリントが示唆する形状でナレーションを書き、その候補が適合する場合にblueprint: idでタグ付けします。教育の真実がどのビートが存在するかを決定します — ブループリントに合わせるためにビートを強制したり、証明された形状が利用可能だからといってビートをでっち上げたりしないでください。顔出し不要のビジュアルは後続で作成されるため、フレームはアセットインベントリを保持しません。ユーザーが実際のpublic/<basename>画像を提供した場合を除き、asset_candidatesは空のままにします。ストーリーボードとスクリプトのリファレンスから正確な必須フィールドを使用します。
ドラフト後、レビューループの計画パスを実行します — ../hyperframes/references/review-loop.md § 1:計画を提案として提示し、2つの質問をします — 承認するか変更するか、そしてスケッチを先に(推奨)またはスキップするか。フィードバックはチャット返信として到着します。承認されるまでループします。これはチェックポイントゲートです(ブリーフ契約 § 1):自律モードでは質問することは何もありません — 同じサマリーを事前通知として投稿し、続行します。スケッチはビルドに統合され、最終プレビューとその1つの質問はステップ6で行われます。
ゲート: STORYBOARD.mdが存在すること。すべてのフレームが必要なナラティブフィールドを持っていること。ナレーションが必要な場合にSCRIPT.mdが存在すること。ユーザーがフレームごとの計画を承認したこと(自律モード:サマリーが事前通知として投稿されたこと)。
Step 3.1: オーディオ
目標:承認されたスクリプトから、ナレーション、ワードタイミング、音楽、オーディオメタデータを生成します。
ステップ3の承認後にオーディオを開始します。バックグラウンドで実行し、その後ステップ4に続行します。(サインインステータスはステップ0ですでに表示されています。エンジンは自動的にフォールバックします。)
ナレーションボイスは、呼び出す前にユーザーのリクエストから選択します。 リクエストが声、性別、トーンを指定した場合は、一致する音声IDを選択し、--voice <id>で渡します。パイプラインデフォルトはそうでなければHeyGenではMarcia(女性) / Kokoroではam_michaelです — そのため、「男性の声」のようなリクエストは、フラグを渡さない限り黙って無視されます。音声IDはプロバイダー固有です。ステップ0のサインインステータスによって選択されたプロバイダーに対して解決します:HeyGen(サインイン済み)の場合はnode <MEDIA_DIR>/audio/scripts/heygen-tts.mjs --list(またはGET /v3/voices?engine=starfish)。Kokoro(オフライン)の場合は<MEDIA_DIR>/audio/references/tts.mdの音声テーブル(プレフィックスam_/bm_が男性、af_/bf_が女性)。ユーザーが好みを表明しなかった場合は、パイプラインデフォルトよりも前に、記憶された音声(ブリーフ契約 § 2)にフォールバックし、どれを使用したかを伝えます。--voiceは、どちらも指定されていない場合にのみ省略します。ユーザーがこの実行で明示的に音声を選択した場合は、記録します(prefs.mjs record --key voice)。
node <SKILL_DIR>/scripts/audio.mjs --script ./SCRIPT.md --storyboard ./STORYBOARD.md --hyperframes . --out ./audio_meta.json --voice <voice-id> &
オーディオスクリプトは、ナレーション、ワードタイミング、HeyGenの音楽ライブラリからのBGMルックアップ、およびタイミングメタデータを処理します。BGMのムードはストーリーボードのmusic:フィールドから取得します。これは、HeyGen Audio APIを生成ではなく検索に使用し、TTSと同じ~/.heygen認証情報を使用します。プロバイダーの詳細については、../media-use/audio/references/tts.mdを読んでください。ホストアプリの独自ツールが音楽や効果音を作成する場合は、そのファイルをassets/の下に置き、"source": "host"とマークされたaudio_meta.jsonファイルにリストします:音楽はbgm { "path": "assets/…", "source": "host" }として、ストーリーボードにはmusic: noneを設定します。効果音はsfxエントリ{ "frame": <n>, "file": "assets/…", "offset_s": 0, "duration_s": <its length>, "source": "host" }として。すべてのオーディオパスはこれらを保持し、ホストサウンドのあるフレームは検索されたキューを取得しません。
ナレーションがなく、SCRIPT.mdもない場合は、音声生成をスキップします。ストーリーボードに音楽ムードがある場合は、BGMが引き続き実行されることがあります。
正規の完全無音マーカー(このオーディオモデルを再利用するワークフロー間で共有されます):STORYBOARD.mdのトップYAMLブロック内のmusic: none、SCRIPT.mdなし、かつsfx:キューやホストオーディオなし。この組み合わせはプロジェクトを無音としてマークします — すべてのオーディオ生成がスキップされ、プロジェクトはaudio_meta.jsonなしで存在します。このマーカーが設定された最終レンダーにはBGMもSFXもナレーションも含まれません。
ゲート: オーディオなし(無音マーカー)の場合を除き、audio_meta.jsonが存在し、そのdurationが一致すること。スクリプトが存在する場合、ナレーション時間が全ストーリーボードフレームをカバーしていること。--voiceが指定された場合、リクエストされた音声IDが使用されたこと。
Step 4: ビジュアルデザイン
目標:各フレームに、作成するビジュアルの正確な記述を注釈します。frame.mdからの設計ルールと、ブループリントからの構成テンプレートを使用します。ここではアセットは作成されません — フレームごとのブループリント(ステップ5で構成されます)の設計意図を作成します。
...
(訳注:原文がここで途切れているため、Step 4以降の翻訳は省略しています。完全な翻訳が必要な場合は、原文の全テキストを提供してください。)