プラグインインストール: セットアップまたは更新コマンドの前に、このスキルが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(フレームごとに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。
ステップ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エンジンを使用するかローカルエンジンを使用するか、そしてサインアウトしている場合のサインイン方法が報告されます。1つの分岐を適用します:
- 協調モード: ユーザーがサインインするか、明示的に
offline/goを選択するのを待ちます。 - 自律モード: ステータスを述べ、利用可能なローカルエンジンで続行します。
オフラインプロバイダが存在しない場合に、必要な機能を黙って省略しないでください。ブロッカーを表面化してください。この決定を別の質問に折りたたんだり、リポジトリごとの .env にキーを書き込んだりしないでください。認証の所有権とオフラインフォールバック: /media-use references/setup-providers.md § Providers。
ゲート: hyperframes.json と BRIEF.md が存在する。プリファレンスに基づく回答が記録された(ブリーフ契約§2)。サインインステータスが表示された(サインイン済み、またはオフラインで続行)。
ステップ1: ブリーフ(キャプチャなし)
目標: ユーザーのテキストを情報源としてプロジェクトに組み込みます。ウェブサイトのキャプチャや実際のアセットはありません — これはfaceless explainerです。
ユーザーの入力をそのまま保存し、次に手動で合成キャプチャパッケージを作成します:
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/ にデータを入力したりしないでください — facelessビジュアルはステップ4-5で発明され、キャプチャされません。唯一の例外: ユーザーが実際の画像を提供した場合、それを public/<basename> の下に配置し、ステップ3のためにメモします。
ゲート: capture/extracted/visible-text.txt と capture/extracted/tokens.json が存在する。説明者のトピックと対象読者を1つの明確な文で述べることができる。
ステップ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 にコピーし、自己検証します(マッピングが壊れているとexit 1)。exit 0になったらすぐに進みます — 仕様の手動編集は行いません。
faceless explainerには通常ブランドカラー/フォントはありません(tokens.jsonのcolors/fontsは空)→ スクリプトはプリセット独自のパレット、つまり完全に出荷可能なデザインを保持します。ユーザーがブランドカラー/フォントを指定した場合にのみ、実行前に tokens.json に追加し、マッピングが本当に必要な場合にのみ、後で手動で frame.md を調整します。
ゲート: build-frame.mjs がexit 0で終了した — frame.md が名前付きプリセットから存在する、および(プリセットが出荷する場合).hyperframes/caption-skin.html がキャプションスキンソースとして存在する。選択されたプリセットがプリファレンスとして記録された(--key style_preset --workflow <this workflow>、ブリーフ契約§2)。
ステップ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 から設定します — おおよその期待値です。アセンブリは、実際の尺がそれに対してどの程度かを報告します。
説明構造(コンセプト / ハウツー / リスト形式 / ストーリー)、フック戦略、明確化テクニック、感情のビート、タイプ列挙マッピング、VO_MODE には story-design.md を使用します。ビデオのシーケンスはナラティブデザインから来ており、入力テキストの段落順序ではありません — 並べ替え、統合、省略、圧縮を行います。ソフトガイドとして、../hyperframes-animation/blueprints-index.md の役割→ブループリントメニューを参照します。各ビートについて、その候補ブループリントが示唆する形状でナレーションを書き、該当する場合はその候補 blueprint: id をタグ付けします。教えるという真実がどのビートが存在するかを決定します — ブループリントに合わせるためにビートを強制したり、実績のある形状が利用可能だからといってビートを発明したりしないでください。facelessビジュアルは後工程で発明されるため、フレームはアセットインベントリを持ちません。ユーザーが実際の public/<basename> 画像を提供した場合を除き、asset_candidates は空のままにします。ストーリーボードとスクリプトのリファレンスから正確な必須フィールドを使用します。
ドラフト後、レビューループの計画パスを実行します — ../hyperframes/references/review-loop.md § 1: 計画を提案として提示し、2つの質問をします — 承認するか変更するか、そしてスケッチを先に(推奨)またはスキップするか。フィードバックはチャット返信として届きます。承認されるまでループします。これはチェックポイントゲートです(ブリーフ契約§1):自律モードでは質問するものはありません — 同じサマリーをヘッズアップとして投稿し、続行します。スケッチはビルドに折りたたまれ、プレビューに関する唯一の質問はステップ6で行われます。
ゲート: STORYBOARD.md が存在し、すべてのフレームに必要なナラティブフィールドがある。ナレーションが必要な場合は SCRIPT.md が存在する。ユーザーがフレームごとの計画を承認した(自律モード: サマリーがヘッズアップとして投稿された)。
ステップ3.1: オーディオ
目標: 承認されたスクリプトから、ナレーション、ワードタイミング、音楽、およびオーディオメタデータを生成します。
ステップ3の承認後にオーディオを開始します。バックグラウンドで実行し、その後ステップ4に進みます。(サインインステータスはステップ0ですでに表示されています。エンジンは自動的にフォールバックします。)
呼び出す前に、ユーザーの要望からナレーションボイスを選択します。 リクエストが声、性別、トーンを指定した場合、一致する音声IDを選択し、--voice <id> で渡します。デフォルトのパイプラインはそれ以外の場合 Marcia(女性)(HeyGen上)/ am_michael(Kokoro上) です — そのため、「男性の声」のようなリクエストは、フラグを渡さない限り黙って無視されます。音声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 を読んでください。
ナレーションがなく、SCRIPT.md もない場合は、音声生成をスキップします。ストーリーボードに音楽ムードがある場合は、BGMがまだ実行されることがあります。
正規の完全無音マーカー(このオーディオモデルを再利用するワークフロー間で共有されます): STORYBOARD.mdの先頭YAMLブロックに music: none かつ SCRIPT.md がないこと。この組み合わせにより、プロジェクトは無音としてマークされます — ナレーション、BGM、SFXなし。audio.mjs はこれを認識し、何も生成しません(古い audio_meta.json を削除します。存在しない audio_meta.json は、assembleが無音として扱うものです)。そのため、このステップはクリーンスキップです。ナレーションがある music: none はTTSを維持し、BGMのみをオフにします。この正確なスペルを使用してください — 他のマーカーを即興で作成しないでください。
ゲート: オーディオジョブが開始されたか、プロジェクトが無音としてマークされている(music: none + SCRIPT.md なし)。
ステップ4: フレームビジュアルデザイン
目標: 各ストーリーボードフレームに、ビジュアルの方向性、レイアウト意図、およびモーションの選択肢を追加します。
**まずストーリーボードシートをスケッチします(協調モード)
[原文が途中で切れているため、ここ以降の翻訳は提供された範囲に基づきます。完全な翻訳が必要な場合は、全文を再度ご提示ください。]