Communitygithub.com

KaranO-Dev/one-take

プロモ、ローンチ、ダイジェスト、舞台裏動画を一度の質問だけで完成させるスキル。シーン、参考、フォーマット、尺、プラットフォーム上限、リポジトリ、サイト、言語、音楽、ナレーション、ブランドを最初にまとめて尋ね、その後はストーリーボード、ビルド、スコア、全フォーマットのレンダリング、品質チェックまで一切の追加質問なしで実行します。

one-take とは?

このスキルは、ユーザーが一度だけ入力した情報に基づいて、プロモーション、ローンチ、ダイジェスト、舞台裏動画など、複数のフォーマットに対応した完成済み動画を納品するためのものです。エージェントはまずリポジトリやサイトを検出し、フォーマット、尺、サウンド、ナレーション/キャプションなどの主要項目を一度だけ尋ねます。その後は一切質問せずに、ストーリーボード、アニメーションビルド、オリジナル楽曲の生成(シーンエネルギーに合わせたシンセサイズスコア+効果音)、各アスペクト比ごとのレイアウト再構成、そしてラウドネス、無音・フリーズフレーム、エンドカード保持時間、スマホ画面でのテキストサイズ、プラットフォームセーフゾーンを含む品質チェック(QA)を自動実行します。HyperFrames レンダリングエンジン上に構築されており、共同作業ではなく、完全なマルチフォーマット動画をエンドツーエンドで納品する必要がある場合に最適です。

対応~Claude Code~Codex CLI~Cursor
npx skills add KaranO-Dev/one-take-skill

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

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. 一度きりのインプットラウンド。 まず検出し、その後で一度だけ質問します(フェーズ 1)。回答後は、それ以上質問しません。唯一の例外は、存在しないファイルや読み込みを拒否するサイトなど、デフォルトで回避できない重大な障害がある場合です。その場合のみ、その問題について正確に一度だけ質問し、続行します。
  2. インプットへの回答はレンダリングを承認します。 ユーザーが明示的に指定していない公開、アップロード、投稿、プッシュ、ダウンロードは承認しません。これらはレポートの後、別途ユーザーに確認してください。
  3. 事実は計算され、決して手入力しません。 画面上のすべての数値は facts.json またはユーザーが提供したソースから取得します。統計、引用、ロゴ、推薦文をでっち上げてはいけません。
  4. 映像が音を決定します。 聞こえるべきすべてのモーションは、それが発生した瞬間に T.cue() を呼び出します。スコアはこれらのキューから構築されるため、音と映像がずれることはありません。
  5. 完了 = 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. インプットシート を表示します:各フィールドが検出結果または推奨デフォルト値で事前に入力された状態で、各行に1つずつ表示します。ユーザーは間違っているものだけを変更します。

  2. 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;トラックのテンポ解析用の --analyze
  • scripts/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

関連スキル