Communitygithub.com

talking-clip

ユーザーのキャラクターがカメラに向かって話す短いクリップ(デフォルト20秒)を作成します。ElevenLabs(ユーザーのキーと音声)、macOS say、または音声なしに対応し、表情やジェスチャーをタイミングに合わせて、キャラクターのセット上でHyperFramesを使ってレンダリングします。

talking-clip とは?

このスキルは、ユーザーが「<キャラクター>が…と言っているクリップ」といった短いリアクションや回答クリップ、トークキャラクター動画を要求した際に使用します。スクリーン、コード、図を含む教育動画には対応していません(その場合はexplainerスキルを使用)。処理は4ステップで構成されています。スクリプト作成(キャラクターの声で台詞を書く)、音声生成(scripts/tts.py。ElevenLabsはクレジット消費、sayやnoneは無料)、演技の計画(plan.jsonにジェスチャーや表情を記述)、動画の構築とレンダリング(scripts/build_clip.py → scripts/verify.py → scripts/render.py)です。出力はHyperFramesプロジェクトとMP4ファイル(デフォルトは1080x1920の縦長)。 対応プラットフォームはClaude Code(.claude-plugin/ディレクトリの存在から)であり、HyperFramesスキル(hyperframes、hyperframes-cli)に依存しています。また、各種依存関係(ffmpeg、Node.js 18+、Playwright、tesseract、ASR)の事前チェックとセットアップを自動化しています。ユーザーはElevenLabs APIキーを自ら環境変数に設定する必要があります。クリップごとにスタイル(セット、フレーミング、モーション)を選び、同一オープニングやクロージングラインを繰り返さないよう配慮します。キャラクターファイル(personality、speaking_style.rules)に従い、ユーザーの要求と矛盾する場合はユーザー要求を優先します。

対応✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/NightZpy/talking-character-skill/tree/HEAD/skills/talking-clip

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

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

ドキュメント

talking-clip は何をしますか?

クリップは4つのステップで構成されます:台詞作成、音声生成、演技計画、構築とレンダリング。 出力:HyperFramesプロジェクトとMP4ファイル(デフォルトは1080x1920の縦長)。

1. 台詞    あなたが書く、キャラクターの声で
2. 音声    scripts/tts.py          (ElevenLabsはクレジット消費;sayとnoneは無料)
3. 計画    あなたがplan.jsonを書く (単語ごとのジェスチャーと表情)
4. 動画    scripts/build_clip.py -> scripts/verify.py -> scripts/render.py

パスはこのパッケージのルートを基準とします:.claude-plugin/ を含むフォルダ(このファイルの2階層上、シンボリックリンクは解決済み)。公開HyperFramesスキル(hyperframes、hyperframes-cli)が必要です:手動でコンポジションを編集する前に hyperframes を必ず一度読んでください。

0. 事前チェック(必ず最初に実行)

python3 scripts/setup.py doctor を実行してください(--json を追加するとパース可能です)。これにより、すべての依存関係、その目的、このマシン用の正確なインストールコマンドが一覧表示されます。必要な項目が不足している場合は終了コード1で終了します。

  • 必須不足(ffmpeg、Node.js 18+、HyperFramesスキル、および該当する音声設定時のElevenLabsキーまたは say):各項目の目的を1行でユーザーに伝え、表示されたコマンドを提案します。ユーザーが承諾した場合のみ実行します。APIキーを自分で入力したり尋ねたりしないでください:ユーザーにシェルで ELEVENLABS_API_KEY をエクスポートするよう指示します。
  • オプション不足:一度だけ提案し、各機能が何を可能にするか伝えます。Playwrightは要素ズームボックス付きのWebキャプチャと全ページショットを提供し、tesseract(OCR)はスクリーンショットのシークレットスキャンを提供し、ASR(mlx-whisper / openai-whisper)は音声チェックと正確な単語タイミングを提供します。ユーザーが辞退した場合はスキップします。該当するチェックは手動の review ステップになります。
  • HyperFramesスキル(hyperframes、hyperframes-cli、hyperframes-registry、media-use):不足している場合、npx hyperframes skills を推奨します。コンポジションの構築や編集の前に hyperframes(およびレンダリング問題の場合は hyperframes-cli)を読んでください。

セットアップ(初回実行時、またはユーザーが何かを変更したい場合)

設定を確認する:python3 scripts/setup.py show。設定がない場合、またはユーザーがキャラクター、音声、レンダリング、スタイルの変更を要求した場合、インタビュー形式で質問(1回に1つずつ短い質問、デフォルト値を提示)し、フラグを使用して書き込みます:

質問フラグオプション
どのパーツ?--featurescharacter、explainer、または両方
どのキャラクター?--characterバンドルサンプル(pkg:characters/host/character.json)またはユーザーのパス(絶対パスで保存)
ナレーション言語--languageISOコード;say の場合、適切な音声が選択される(setup.py voices --lang <code> で一覧表示、--say-voice で上書き可)
どの音声?--voiceelevenlabs(ELEVENLABS_API_KEY 内のキー、--voice-id)、say(macOS、無料)、none
クレジットガード(ElevenLabs)--max-chars、--max-seconds、--daily-credit-capユーザーが選択する数値;空欄 = ガードなし
レンダリング方法?--renderlocal(無料、このマシン)、cloud(HyperFramesクラウド、npx hyperframes auth login が必要)、preview(Studioのみ)
サイズ--size1080x1920、1920x1080、1080x1080
python3 scripts/setup.py init --features character --voice say --render local --yes

init は最初にdoctorを実行し、同じインストールを提案します。すでに設定が存在する場合、上書き前に確認を求めます。非対話モードの場合は --force が必要です。

ユーザー独自のキャラクター:python3 scripts/setup.py new-character --name "<name>" --out ./characters/<name> --activate でサンプルをコピーしてアクティブにします(2回目の init は不要)。その後、表示されるキーを埋めるのを手伝ってください:description、personality、speaking_style.rules、rig.colors(またはスプライト)、expressions / poses / gestures、set、voice_moods。

APIキーを尋ねたり、表示したり、書き込んだりしないでください。ELEVENLABS_API_KEY が不足している場合、ユーザーにシェルでエクスポートするよう指示します。設定スキーマは config/config.schema.json にあります。キャラクターファイルの形式はREADME(「あなた独自のキャラクター」)にあります。

このクリップのスタイルを選ぶ

固定の見た目はありません。クリップごとに、トピック、視聴者、ユーザーのブランドや好みに合わせてスタイルを選びます:セット({"type": "color"|"gradient"|"image", ...})、フレーミング(close、medium、wide)、モーション強度(calm、normal、lively)。選択が重要な場合(例:ブランド、公開チャンネル、シリーズ向けのクリップ)はユーザーに尋ねます。前回のクリップと繰り返しにならないよう、スタイルを変えてください。設定に brand キットがある場合、その background があなたの選択より優先されます。ファイルに書き込み、--style で渡します:

{"set": {"type": "gradient", "colors": ["#FFF4E6", "#FFD9B3"]}, "framing": "medium", "motion": "lively"}

台詞についても同様です:キャラクターの個性の範囲内で視聴者に合わせたトーンを選び、クリップ間で同じオープニングやクロージングラインを再利用しないでください。

1. 台詞を書く

設定(character キー)で指定されたキャラクターファイルを読んでください:personality と speaking_style.rules が声のガイドラインです。これらに従ってください。ただし、ユーザーの要求がこれらと矛盾する場合はユーザー要求を優先します。

  • 長さ:最大 styles.talking_clip.max_seconds 以内。speaking_style.chars_per_second(約14)で20秒のクリップなら約260文字以内。1つのアイデア、1つのクロージングライン。
  • 言語:ユーザーの言語(別途指定がない限り)。
  • ElevenLabs v3以降のモデル(オーディオタグ対応)は、英語の感情タグを角括弧内で対象単語の前に挿入することで解釈します:[excited]、[calm]、[whispers]、[laughs]、[pause]。say と none はこれらを無視します(削除されます)。代わりにジェスチャーで演技します。

2. 音声を作成する

python3 scripts/tts.py estimate --text "<line>" --max-seconds 20
python3 scripts/tts.py speak --text "<line>" --out out/voice.wav [--mood excited] [--confirm]
  • ElevenLabs:必ず最初に estimate を実行し、ユーザーにコストを伝えます。speak は --confirm なしでは拒否し、ユーザーが設定したガード(最大文字数、最大秒数、1日あたりのクレジット上限)を超える場合も拒否します。--takes 2 で代替案を作成します。単語のタイミングは out/voice.wav.words.json に保存されます。
  • --mood はキャラクターの voice_moods(ElevenLabs設定+オプションのffmpegフィルター)からムードを選択します。
  • say / none:無料です。none の場合は音声がありません。代わりに --text をビルダーに渡します。

3. 演技を計画する

python3 scripts/timings.py out/voice.wav --text "<line>" で単語の開始時間を取得します。plan.json を書きます:

{"expression": "neutral",
 "events": [{"t": 0.0, "gesture": "hello"},
            {"t": 2.1, "gesture": "explain", "dur": 2.5},
            {"t": 5.0, "expression": "happy"},
            {"t": 6.2, "gesture": "wink"}]}
  • gesture と expression のIDはキャラクターファイル(gestures、expressions)から取得します。各ジェスチャーには説明と標準の dur があります。計画前に読んでください。
  • 口、まばたき、呼吸、アイドル時の揺れは自動処理されます。あなたは演技のビートだけを配置します。
  • 強いジェスチャーは、対応する単語の0.2~0.3秒前に配置します。1ビートにつき1つのリアクション。同じ秒に2つのジェスチャーを入れないでください。落ち着いた、保持されたジェスチャーで終了します(自動的に最後まで保持されます)。

4. 構築、確認、レンダリング

python3 scripts/build_clip.py --audio out/voice.wav --plan out/plan.json --style out/style.json --project out/clip
python3 scripts/render.py out/clip --out out/clip.mp4 --quality draft
python3 scripts/verify.py all --project out/clip --text "<line>" --video out/clip.mp4

確認は必須です(詳細はexplainerスキルの「確認」セクションを参照、同じループ):build はエラーなしで完了する必要があります。render はコンタクトシートを生成するので、必ず確認してください(口が動いているか、ジェスチャーが計画通りか、何も切れていないか)。audio はASRで単語をチェックし、長さ制限を確認します。問題があれば修正し、失敗した段階から再実行します。各 verify.py all の実行が1イテレーションです。verify.max_iterations に達すると終了コード2で終了し、ユーザーに何がまだ失敗しているかを伝え、出荷しません。render は、あなたがコンタクトシートを確認し、verify.py mark render pass|fail --project out/clip --note "..." で記録するまで review 状態のままです。その後、再度 verify.py all を実行します(再構築するとマークは無効になります)。

その後、設定されたバックエンドで最終レンダリングします:python3 scripts/render.py out/clip --out out/clip.mp4(render.max_mb はアップロード制限に合わせて再エンコードします)。mp4やwavファイルは決してコミットしないでください。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

関連スキル