one-take は何をしますか?
すべてを一度に尋ねます。その後は、すべてのフォーマットについて、チェック済みの完全な動画を、追加の質問なしで作成します。
このスキルはオーケストレーションを行います。実際のレンダリングは HyperFrames が担当します。このスキルには HyperFrames スキル(hyperframes、hyperframes-core、hyperframes-animation)が必要であり、hyperframes-registry、hyperframes-keyframes、media-use、figma、humanizer があるとより効果的です。hyperframes-core がない場合は、停止してインストールコマンド npx skills add heygen-com/hyperframes を表示してください。
以下で SKILL_DIR はこのスキルのフォルダを指します。スクリプトはプレーンな Node(≥ 22)と ffmpeg で構成され、追加のインストールは不要です。
契約
- 一度きりのインプットラウンド。 まず検出し、その後で一度だけ質問します(フェーズ 1)。回答後は、それ以上質問しません。唯一の例外は、存在しないファイルや読み込みを拒否するサイトなど、デフォルトで回避できない重大な障害がある場合です。その場合のみ、その問題について正確に一度だけ質問し、続行します。
- インプットへの回答はレンダリングを承認します。 ユーザーが明示的に指定していない公開、アップロード、投稿、プッシュ、ダウンロードは承認しません。これらはレポートの後、別途ユーザーに確認してください。
- 事実は計算され、決して手入力しません。 画面上のすべての数値は
facts.jsonまたはユーザーが提供したソースから取得します。統計、引用、ロゴ、推薦文をでっち上げてはいけません。 - 映像が音を決定します。 聞こえるべきすべてのモーションは、それが発生した瞬間に
T.cue()を呼び出します。スコアはこれらのキューから構築されるため、音と映像がずれることはありません。 - 完了 = QA 合格。 ファイルは、
qa.mjsによるチェックに合格するか、2回の修正パスで修正できなかった理由がレポートに記載された場合に納品とみなされます。
フェーズ 0: 検出(質問前、サイレント)
node SKILL_DIR/scripts/detect.mjs <subject paths…> --out /tmp/one-take-detect.json
- 現在のリポジトリと、ユーザーが言及したすべてのパスまたはサイトに対して実行します。
- ソースごとに以下を返します:README のタイトルとタグライン、git の期間とコミット数、ロゴ、フォントファイルとフォントファミリー、カラートークン。また、ツールチェーン情報(node、ffmpeg、キャッシュされた
hyperframesバージョン、Chrome、heygen CLI、音楽 API キーが設定されているかどうか)も返します。 - ターゲットプロジェクトに既に
take.jsonが存在する場合は、再開とみなします。それを読み込み、インプットをスキップして、出力が欠落している最初のフェーズから続行します。
フェーズ 1: インプット(1メッセージ、1ラウンド)
references/intake.md を読んでください。1つのメッセージで以下のことを行います。
-
インプットシート を表示します:各フィールドが検出結果または推奨デフォルト値で事前に入力された状態で、各行に1つずつ表示します。ユーザーは間違っているものだけを変更します。
-
AskUserQuestion を1回呼び出し、作業内容を最も大きく変える4つの決定事項(フォーマット(複数選択可)、尺、サウンド、ナレーション/キャプション)について質問します。質問文には、シートへの変更があれば回答のメモとして追加するようユーザーに伝えます。
AskUserQuestion が利用できない場合は、同じ4項目をシートの最後に番号付きの選択肢として配置し、1つの返信を求めます。
その後、再度尋ねることなく以下のことを行います。
take.jsonを書き込みます(スキーマ:references/take-json.md)。言語コード、フォーマットID、スラッグ、output.nameは[a-z0-9][a-z0-9._-]{0,63}(大文字小文字は問わず、..は不可)に一致する必要があります。一致しない場合は実行が停止します。ユーザーが明示的に要求しない限り、hyperframesフィールドは設定しません。デフォルトバージョンはscripts/lib/platforms.mjs(HF_VERSION、0.8.223)に固定されています。- HyperFrames の
BRIEF.mdを、workflow: general-video、flow: automation、storyboard: noとして書き込みます。これにより、その後の/hyperframes呼び出しがこのプロジェクトを再インタビューせずに再開します。 - BRIEF.md の本文に回答(フォーマット、サウンド、キャプション、プラットフォームの上限)を記録します。
フェーズ 2: ソース
- Git の事実。
node SKILL_DIR/scripts/facts.mjs --repo <path> [--repo …] [--since …] --out <project>/facts.jsonを実行します。コミット数、期間、アクティブ日数、最長連続日、最も忙しかった日、言語別の行数、追加行数と削除行数、コミット単語のトップ、最初と最後のコミットの件名を収集します。著者名とメールアドレスは決して記録しません。ユーザーが許可した事実のみを使用します。 - サイト。 表示するURLがある場合は、
npx hyperframes capture <url> -o <project>/src/assets/capを実行します。ok:falseまたはBLOCKED.mdが返された場合は停止します。それはブロッカーです。 - 参考資料。 各参考資料について、STORYBOARD.md に1行、どのような要素(ペーシング、タイプ、色、トランジション)を参考にするかを記載します。Figma リンクの場合は、最初に
/figmaを実行します。 - ブランド。 ロゴのSVGとフォントファイルを
src/assets/brandとsrc/assets/fontsにコピーし、take.jsonのfontsで宣言し、カラートークンをテンプレートの:rootに引き上げます。
フェーズ 3: ディレクションとストーリーボード
視覚的なものを書き始める前に references/direction.md を読んでください。STORYBOARD.md を書きます。
- ディレクション、1段落:1つのアイデア、特徴的な動き、タイプの組み合わせ、パレット、各選択の根拠となった参考資料。
- テンポを最初に決める。 ターゲットの尺が小節数(4/4)の整数になるように bpm を選びます。次に、各シーンに小節数、
energy(0~1、スコアのアレンジを決定)、およびシーンの入り方(in)を割り当てます。 - シーンテーブル: id、小節数、energy、画面に表示するもの、モーション、キュー、コピー(テキスト)。
- 最後のシーンはエンドカードであり、
end: trueとマークします。エンドカードを完全に表示した状態で 3秒以上 保持できる十分な小節数を確保します。 - カットダウン版で使用できるシーンには
optional(1〜9、数字が小さいほど優先度が高い)をマークします。
- 最後のシーンはエンドカードであり、
- コピー は
copy/<lang>.jsonに、1行のテキストにつき1キーで格納します。利用可能な場合は/humanizerにかけます。見出しは、画面上に表示されている時間内に2回読める程度の短さに保ちます。
フェーズ 4: ビルド
SKILL_DIR/templates/index.htmlを<project>/src/index.htmlにコピーし、ストーリーボードからシーンを書き換えます。references/kit.md(T.*API)とhyperframes-coreの非交渉ルールを読んでください。モーションについては、hyperframes-animationのルールとブループリントを読んでください。名前付きエフェクトを手動で構築する前に、hyperframes-registryを検索してください。
すべてのフォーマットとQAを正直に保つルール:
- シーンはトップレベルの
<section class="clip scene" data-scene="id">であり、ネストせず、インラインstyleも使用しません。 - サイズはデザインピクセルを
--u(短辺の1%)で指定します。判読可能なテキストは--t-min(3.4u ≈ 1080p で 37 px)を下回ってはいけません。 - 判読可能なテキストは、そのフォーマットのプラットフォームUIバンドである
.safeの中に収めます。 - 1つのレイアウトをスケーリングするのではなく、
.f-tall、.f-wide、.f-square、.f-portraitルールを使用してフォーマットごとにレイアウトを再構成します。 - 次のシーンのトランジションがそれを覆う前に、シーンのテキストをクリアします(
s.end付近でT.sink/T.leaveを使用)。リビール(覆いが取れる演出)の下のテキストはレイアウトチェックに失敗します。 - すべてのシーンが動きます:カメラをシーン全体に
T.driftさせます。エンドカードの前では何も静止させてはいけません。 - エンドカードが完了した瞬間に
T.endCard(t)を呼び出します。最後のフレームにはエンドカードが表示されたままである必要があります。ホールド中にフェードアウトして黒にしてはいけません。 - 聞こえるべきものすべてにキューを設定します(
references/sound.mdにカテゴリがリストされています)。ほとんどのキットヘルパーはデフォルトでキューを設定します。瞬間を無音にしたい場合はcue: falseを渡します。 - 数値は
T.factsまたはコピーから取得します。T.countには有限の数値が必要であり、数値がない場合はエラーをスローするため、不足している事実がある場合は、でっち上げの数値を表示する代わりにプローブが停止します。 - スクリプトは
window.__timelines["main"] = T.done();で終了します。T.done()は、すべてのトゥイーンが追加された後、タイムラインを1回登録し、テンプレートはその行でそれを繰り返します。すべてのトゥイーンを最初に構築します。font-ready やその他の非同期コールバックの内部で構築しないでください。HyperFrames のリントは早期の登録を拒否します。
フェーズ 5: ドラフトパス
node SKILL_DIR/scripts/run.mjs <project> --draft
これは、フォーマット × 言語ごとに、ビルド → プローブ(ヘッドレスChromeによるキュー、テキストサイズ、エンドカードマークのチェック) → スコア → hyperframes check → ドラフトレンダリング → エンコード → QA → REPORT.md を実行します。
HyperFrames は scripts/lib/platforms.mjs(0.8.223)で HF_VERSION として固定されたバージョン、または take.json の hyperframes で指定されたバージョンで実行されます。初回実行時は npx でフェッチされ、ビルドは GSAP 3.14.2 を jsDelivr から ~/.cache/one-take/ に1回フェッチします。GSAP ファイルはダウンロード後およびキャッシュから読み取られるたびに、固定された sha256 と照合されます。一致しないファイルは決して使用されません。不良ダウンロードはキャッシュされず、不良キャッシュファイルは削除され、ビルドは停止します。再度実行すると、新しいコピーがフェッチされます。
その後:
- すべての
*.sheet.jpgコンタクトシートを開いて確認します。 REPORT.mdを読みます。- 失敗や、重なり、クリップ、デッドフレーム、小さすぎるテキスト、決まらないカットなど、問題のある箇所を修正します。
修正パスは最大 2回 です。各パスで run.mjs --draft を再実行します。変更があったものだけを再実行するには --only <format>-<lang> を使用します。
フェーズ 6: 最終
node SKILL_DIR/scripts/run.mjs <project>
これはすべての出力のフル品質レンダリングです。出力ファイルは renders/(または output.dir)に配置されます。各出力には以下が含まれます。
<name>.mp4:x264 CRF 12、AAC 320k、faststart.cover.jpg:エンドカード.sheet.jpg.qa.json
スコアのステムと marks.json は out/<format>-<lang>/score/ に保存されます。
フェーズ 7: レポート
以下を返信します:
REPORT.mdの出力テーブル(ファイル名、サイズ、尺、判定)- 主要フォーマットのコンタクトシート
- サウンドに関する1行の説明
- 未解決項目(ある場合)
次のステップを提案しますが、実行はしません:コピーの投稿、言語の追加、カットダウン版の作成、公開。ユーザーが依頼しない限り、何も投稿またはプッシュしません。
サウンドモード
sound.mode | 動作 |
|---|---|
score(デフォルト) | score.mjs がシーンエネルギーに基づいてバーチャル・インストゥルメントベッド、バンド、ドラムを小節グリッド上でシンセサイズします:mood と key からコード進行、キックにサイドチェイン、リフトごとにライザー、到着時にインパクト。fx ステムはキューから構築され、各キューの下のコードにチューニングされ、画面上の発生位置からパンニングされます。ミックス、リミッター処理、次に2パス loudnorm で lufs(デフォルト -14)に適合、トゥルーピーク -1.5。オリジナル作品のため、ライセンスは不要です。 |
track | ユーザー提供のファイル。score.mjs --analyze <file>(または npx hyperframes beats)で BPM と最初のビートを取得し、bpm をそれに設定し、その小節上にシーンを配置します。fx ステムはその上で再生されます。 |
library | /media-use resolve --type bgm(heygen CLI が必要)またはそのジェネレーターを使用します。結果は track として使用され、そのライセンスは sound.licence に記録されます。 |
none | オーディオ要素は一切ありません。 |
ナレーションがある場合は、src/assets/audio/vo.wav に配置します。Kokoro 経由の npx hyperframes tts またはユーザーの録音を使用します。スコアはその下の音楽を自動的に下げます(duckDb、デフォルト -9)。キャプションのタイミングは npx hyperframes transcribe vo.wav --model <model> から取得します。焼き込みキャプションは、.safe 内に --t-cap 以上のサイズで配置されたシーンテキストです。サイドカーキャプションの場合は、同じトランスクリプトから <name>.srt を各出力の隣に書き込みます。
ファイル
scripts/detect.mjs、facts.mjs:存在するものと数値scripts/build.mjs:1つのソース →out/<format>-<lang>/HyperFrames プロジェクト。サイズ、セーフバンド、シーンタイミングを設定し、TAKE(コピー、事実、シーン)をインライン化し、キットと GSAP 3.14.2(sha256 チェック済み)をベンダーとして含め、カットダウン用にシーンを削除scripts/probe.mjs:ヘッドレス Chrome パス。時間経過に伴うキュー、テキストサイズと位置、マークを読み取るscripts/score.mjs:シンセサイズスコア、ステム、ミックス、マスター、marks.json;トラックのテンポ解析用の--analyzescripts/encode.mjs、qa.mjs、report.mjs、run.mjs:配信、チェック、レポート、および実行全体scripts/selftest.mjs:ツールチェーンをチェックし、QAが意図的に失敗するように作られたファイルを正しく不合格にすることを証明scripts/lib/:共有ヘルパー(git、HF_VERSIONと名前チェックを含むプラットフォーム、WAV、DSP)kit/take.js:モーションキット(references/kit.md)templates/index.html:開始ステージreferences/:intake.md、take-json.md、direction.md、sound.md、formats.md、qa.md、kit.md