Communitygithub.com

Conz-Wilts/ai-editor

ショート動画クリエイターのフォーマットを実際の数字からリバースエンジニアリングします。TikTokやYouTube Shortsのプロフィール(リンクの貼り付け、Instagramリールも対応)から視聴数、いいね数、保存数を取得し、上位動画を文字起こし、ペースや間、フィラーを測定し、各動画をタイムドビートにマッピング。撮影可能なteardown.md、グラフィック・モーション・サウンドを示すteardown.html、そしてstyle-editスキルが編集に使用するstyle.jsonを出力します。

ai-editor とは?

このスキルは、人気ショート動画クリエイターの動画フォーマットを、実際のパフォーマンスデータ(視聴数、いいね数、保存数)に基づいて徹底的に分析・分解するためのツールです。TikTok、YouTube Shorts、Instagramリールに対応し、指定されたハンドル名または動画リンクを元に、トップパフォーマー動画と中央値のコントロール動画をダウンロード・文字起こしします。Whisper(無料・ローカル)またはElevenLabs Scribe(有料・高精度)を使用し、WPM(1分あたりの単語数)、間、フィラー、文の長さ、人称、繰り返しフレーズなどのメトリクスを測定。さらに、カット種類、ズーム、パン、シェイク、字幕スタイル、顔のフレーミング、グラフィック、効果音、音楽など、視覚・聴覚的な要素も詳細に計測します。分析結果は、構造化された`teardown.md`、視覚的に確認できる`teardown.html`、そしてAI編集スキル(style-edit)が利用する数値化された`style.json`として出力されます。これにより、ユーザーは特定のクリエイターの成功パターンを理解し、自身の動画編集に応用することが可能になります。特に、中央値のコントロールグループとの比較によって、クリエイターの個人的な癖ではなく、本当に効果的なフォーマット要因を特定できる点が強みです。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Conz-Wilts/ai-editor/tree/HEAD/.claude/skills/creator-teardown

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

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

ドキュメント

クリエイターティアダウン(Creator Teardown)

パス: ${CLAUDE_SKILL_DIR} は、このSKILL.mdが置かれているフォルダを指します。Windowsでは、python3と書かれているコマンドの代わりにpyを使用してください。

ユーザーへの質問はすべて質問ボックスを使用します。AskUserQuestionツールを呼び出し、選択肢は2〜4個(推奨を先頭に)提示します。そのツールがないエージェントでのみ、番号付きの質問をテキストで行います。

出力

creator-teardowns/<handle>/ に以下を出力します:

  • teardown.md (分析結果)
  • teardown.html (ユーザーが参照するページ)
  • look.md (Claudeが読み取る要約)
  • style.json (このスタイルで編集するためのすべての測定値)
  • 各動画のファイル (${CLAUDE_SKILL_DIR}/references/outputs.md に一覧)

編集計画は edit-plans/<name>/ に出力されます。 このスタイルに一致するかどうかの判定: scripts/match.py (references/outputs.md "Match check" 参照)

最初に: doctor

python3 "${CLAUDE_SKILL_DIR}/scripts/fetch.py" doctor

セッション内で最初のティアダウンを実行する前に、このコマンドを必ず実行してください。Ready. と表示されれば準備完了です。Not ready と表示された場合、またはユーザーがスキルのインストールやセットアップを依頼した場合は、${CLAUDE_SKILL_DIR}/references/setup.md に従ってください。ElevenLabsキーはオプションです。チャット内でキーを要求しないでください。ユーザーは自身のターミナルで setkey コマンドを使用して保存します。

VPY="${CLAUDE_SKILL_DIR}/scripts/run.py"; 以下のコマンドで python3 "$VPY"(Windowsではpy)を使用すると、AI_EDITOR_HOME が指定する場所にあるツール用venvのPythonでスクリプトが実行されます。

パイプライン

クイックモード(ai-editorのstart、setup、style-editから呼び出された場合)

別のスキルがstyle.jsonだけを必要とする場合、以下の手順を正確に実行します: Step 1の list、Step 2のコマンド(--top 5 付き: 5 + コントロール2 + 予備2。リンク貼り付けの場合はすべて)、Step 3bの4つのコマンド、次にStep 3cの4つのコマンドを実行し、そこで停止します。Step 0の質問パートは、呼び出し元がまだ質問していない場合のみ行います。metrics.py、Step 3の筆記パス、Steps 4〜6はスキップします。14コアのMacで約3分(測定値は2〜3分、予備で最悪約1分追加)、8コアのラップトップではその約2倍かかります。その旨を先に伝えてください。

Step 0: 質問(1回のみ)

メッセージで既に回答済みの内容はスキップします。質問ボックスを1回呼び出します:

  1. どのクリエイター? ユーザーが指定したハンドル名またはリンク(推奨) / 後でさらに貼り付けます。複数のクリエイターを指定するのは普通です。あるクリエイターのキャプションスタイルと別のクリエイターのペースが好き、といったことがあります。各クリエイターのスタイルは1つのフォーマットです。
  2. 複数の場合: 誰からどの部分を取る? まだ決めていない(推奨): Step 3bの後、各クリエイターのlook.mdを比較して再度質問します。または、キャプション、ペース(カット、ズーム、モーション)、ビジュアル(グラフィック、顔のフレーミング、カード)、サウンドから選びます。

Step 1: 動画を取得する

python3 "${CLAUDE_SKILL_DIR}/scripts/fetch.py" list <handle> --platform tiktok --limit 40   # または youtube
python3 "${CLAUDE_SKILL_DIR}/scripts/fetch.py" list <name> --urls picks.txt   # 貼り付けられたリンク(1行に1つ)

ランク付けされたテーブル(視聴数、x中央値)を表示し、videos.json を書き込みます。* は中央値の3倍を示します。

Instagram: list <handle> --platform instagram は、ユーザーのブラウザでのinstagram.comログインを介して、視聴数付きの最新リールを読み取ります(データはinstagram.comにのみ送信されます)。ログインしていない場合、1文のメッセージとともに終了コード1で終了します。そのメッセージをユーザーに伝えるか、6つ以上のリールリンクを picks.txt に入れて --urls を使用します(いいね数でランク付けされます。その旨伝えてください)。

Step 2: 勝者動画とコントロールグループのダウンロードと文字起こし

python3 "$VPY" "${CLAUDE_SKILL_DIR}/scripts/visual.py" download <handle>
python3 "${CLAUDE_SKILL_DIR}/scripts/fetch.py" transcribe <handle>

--top N は、N個の動画に加えて2つのコントロール動画(中央値に最も近い2つ、--control で変更可能)、さらにフォーマットチェック用の2つの予備動画(--spare)をダウンロードし文字起こしします。動画の数が十分にある場合、クリエイターの通常の長さの動画が選ばれます。貼り付けられたリンクの場合は、すべての動画が対象です。デフォルトの --top 8 は合計12動画、--top 5(高速実行)は合計9動画です。両方のコマンドに渡してください。両方のコマンドは最初に動画数を出力します。--ids <id>,<id> で特定の動画を選択できます。中央値の動画がコントロールです。視聴数50万の動画と3千の動画の両方に見られる動きは、そのクリエイターの習慣であり、50万の動画が成功した理由ではありません。少なくとも2つは保持してください。

すべての測定スクリプトは複数の動画を同時に処理します(CT_JOBS=1 で、小型ラップトップでこの機能をオフにできます)。

まず所要時間を伝えてください(ダウンロード+文字起こし:14コアMacで1動画あたり約10秒)。Whisper(無料、ローカル)がデフォルトです。ElevenLabsキーがある場合、transcribe はScribeを使用し、すべてのフィラーを保持します(音声1時間あたり0.22ドル。10動画以上の場合は見積もりを提示してください)。Whisperの文字起こしにフィラーカウントが依存する場合は、その旨をティアダウンに記載してください。

Step 3: 測定、そして分析

python3 "${CLAUDE_SKILL_DIR}/scripts/metrics.py" <handle>

metrics.json(3分割ごとのWPM、間、フィラー、文の長さ、you/I/weの使用、繰り返しフレーズ)を書き込みます。すべて単語のタイムスタンプから計算されます。

最初にStep 3bを実行し、format.json で除外された動画を以降のパスがスキップするようにします。その後、${CLAUDE_SKILL_DIR}/references/analysis-framework.md を読み込み、そのパスを実行してください。パス1では、動画ごとに1つの video-analyst エージェントを起動します(すべて1つのメッセージで送信し、同時に実行されます)。各エージェントには絶対パス creator-teardowns/<handle>/ と1つの動画IDを渡します。各エージェントはJSONのビートマップを返します。それをテーブルにマージします。Agentツールがない場合は、transcripts/<id>.timed.txt を自分で読み取り、一度に1動画ずつ処理します。transcripts/<id>.json や metrics.json 全体を絶対に読まないでください。

  1. ビートマップ+タイミング。 各動画をラベル付きビートに分割し、秒数マークと単語数を記録します。
  2. 音声/語彙プロファイル。 文の長さ、人称、命令形、繰り返しフレーズ、ユーザーが通常言わないような動き。
  3. ビジュアルパス。 常に実行: Step 3b。これにより、ユーザーは自分の動画をこのスタイルで編集できるようになります。
  4. カードイベント(クリエイターのカードやグラフィックに関する質問がある場合、または編集計画が作成される場合のみ)。${CLAUDE_SKILL_DIR}/references/edit-plan.md で定義された形式の events.json を書き込みます。scripts/strip.py には ffmpeg、numpy、pillow が必要です。

タイミングを省略しないでください。「フックは0:03までに着地し、14単語で構成される。項目はそれぞれ8〜11秒」は撮影可能なフォーマットですが、「フック、リスト、クロージング」はそうではありません。

Step 3b: ビジュアルパス(測定値ベース。画像はClaudeが読み取る必要はありません)

python3 "$VPY" "${CLAUDE_SKILL_DIR}/scripts/visual.py" measure <handle>
python3 "$VPY" "${CLAUDE_SKILL_DIR}/scripts/look.py" measure <handle>
python3 "$VPY" "${CLAUDE_SKILL_DIR}/scripts/format_check.py" check <handle>

次にシートパス(後述の4)、続いて python3 "$VPY" "${CLAUDE_SKILL_DIR}/scripts/lookpass.py" merge <handle> を実行します。

これらは transcribe の後に実行します(look.py はOCRテキストを話された単語と一致させます)。

  1. visual.py: カットとその種類、ショットの長さ、ズーム、パン、シェイク。
  2. look.py: 1秒あたり3フレームのOCRとYuNet顔検出: 字幕(場所、サイズ、単語、大文字小文字、色、太さ、出現方法)、顔のフレーミング、グラフィックの割合、パレット、モーションパーソナリティ。1動画あたり約40秒。
  3. format_check.py: 1つのスタイルは1つのフォーマットであり、投稿されたすべてのスタイルのブレンドではありません。フレーム、顔、字幕、ショット長、動画長で動画をグループ化します。3つ以上の過半数グループは保持され、残りは video/left-out/ に移動されます(format.json に理由が記録されます。references/look-pass.md 参照)。差異がある場合、その最初の行をユーザーに伝えてください(「6個中4個を使用: 2個は別のフォーマットに見えます」)。混在している場合は、どちらか一方の種類の動画をさらに追加で要求します。
  4. シートパス: model: "haiku" を指定した1回のAgent呼び出しで、保持された各動画の sheets/<id>.jpg(visual.py が作成する1枚の3x3シート)を読み取り、lookpass.py のプロンプトに従って video/<id>.look-ai.json を書き込みます: フォント、グラフィックスタイル、トランジション、一般的でないもの。数値は絶対に含めません。正確な指示は references/look-pass.md にあります。lookpass.py merge がこれらを style.json に統合します。

その後、look.md(48行未満)を読み取ってください。フレームやシートは開かないでください。 すべてのフィールドは ${CLAUDE_SKILL_DIR}/references/look-pass.md に記載されています。style.json の数値はコードから生成されます。手動で編集しないでください。look.md とモデルの記述に矛盾がある場合(例: 測定値が「motion: punchy」、モデルが「smooth」と命名)、測定値が優先され、ティアダウンには両方を記載します。

OCRエンジンがない場合(doctorがオプションと表示): captions は未測定のままで、look.md にその旨が記載されます。自分でシートを読み取るのではなく、インストールしてください(doctor がインストール方法を表示します)。

Step 3c: 詳細パスとページの生成

python3 "$VPY" "${CLAUDE_SKILL_DIR}/scripts/graphics.py" measure <handle>
python3 "$VPY" "${CLAUDE_SKILL_DIR}/scripts/sound.py" measure <handle>
python3 "$VPY" "${CLAUDE_SKILL_DIR}/scripts/report.py" build <handle>

各measureコマンドは1行のサマリーと書き込んだファイル名を出力します(--json で完全なブロックを出力しますが、通常は不要: look.mdに数値があります)。Step 3bの後に実行します(graphics.py は look.py の顔検出結果を使用して話者をマスクします)。各グラフィック(クロップ、種類、配置、出現・退出方法(GSAPイージングでフィット))、カットの種類とカメラワーク(visual.py)、効果音と音楽、各動画の最初の3秒、コントロールグループに対する勝者の特徴、クリエイター自身の見た目に対するAIテルスキャンを追加します。フィールド、メソッド、上限、コストについては ${CLAUDE_SKILL_DIR}/references/teardown-page.md を参照してください。graphics.py measure の後、同リファレンスに従ってhaiku種類パスを実行し(実行しないと種類はコードの推測のまま)、その後 sound.py と report.py を実行します。

次に、ユーザー向けに creator-teardowns/<handle>/teardown.html を開きます(Macでは open、Windowsでは start、Linuxでは xdg-open)。必要に応じてアーティファクトとして公開することを提案します。ページやその画像を自分で読み取らないでください。look.md に数値が記載されています。勝者の動画がコントロールと何が違うのか(look.md の Winners: 行(n付き))と、クリエイターの見た目にBANレベルのAIテルがある場合はその情報を、2〜3行でユーザーに伝えてください。

その後、質問ボックスで(ページは証拠を示すだけで、チェックボックスなどはありません)、1つの複数選択質問をします: 「@ のどの部分をあなたの編集でコピーしますか?」選択肢: キャプション、ペース、グラフィックの種類、出現モーション、レイアウト、サウンド(最大4つ。必要に応じて2つの質問に分割)。各選択肢の説明には、look.md から測定値の1行を含めます(例: 「0.25秒でオーバーシュートしながらスライドイン」)。選択された部分にBANテルが含まれる場合は、ユーザーが確認する前にそれを伝えてください。回答を保存します:

python3 "${CLAUDE_SKILL_DIR}/scripts/editplan.py" blend <handle>-mine --from <handle> \
    --take captions,pace,graphics,entrances,layout,sound    # 選択された部分のみ

style-edit は creator-teardowns/<handle>-mine/style.json を読み取ります。選択されなかった部分はデフォルト値が使用されます。report.py build と editplan.py blend はスタイルのスキル名を出力します(skill edit-like-<handle> -> <path>。ai-editorがインストールされている場合)。その名前をユーザーに伝えてください。そのスタイルで編集した結果に対するフィードバックは、そのスキルに対して行われます。

Step 3d: 複数のクリエイター(ユーザーが複数名を指定した場合)

${CLAUDE_SKILL_DIR}/references/blend.md に従ってください: クリエイターごとにSteps 1〜3b、look.md を並べて比較、その後 editplan.py blend。

Step 4: ティアダウンを書く

${CLAUDE_SKILL_DIR}/references/teardown-template.md のテンプレートに従って creator-teardowns/<handle>/teardown.md を作成します。各動画について、統計行、逐語的な文字起こし、タイミング付きのビートテーブル、保持すべきパターンと拒否すべきパターンを含めます。

Step 5(オプション): スキルとして登録する

このフォーマットを保存する価値があるかどうかをユーザーに尋ねます。保存する場合、${CLAUDE_SKILL_DIR}/references/skill-handoff.md に従ってフォーマットスキルを作成します(スタイル自体のスキルとは別に)。

Step 6(オプション): クリエイターのスタイルでユーザーの動画を計画する

ユーザーが自分の動画を提供した場合、${CLAUDE_SKILL_DIR}/references/edit-plan.md に従ってください。ビジュアルパスから生成されたクリエイターの events.json が必要です。レンダリングは行いません。

スクリプトが停止した場合

メッセージ対応方法
doctor Not ready: ...リストされた各項目について references/setup.md に従う
yt-dlp returned nothing / parsed 0 videos表示されるヒントを読む: yt-dlpを更新(doctorが方法を示す)、または単一動画リンクを要求し --urls を使用する
Instagramプロフィールが失敗表示される文を伝える: Chromeでinstagram.comにログインするか、6つ以上のリールリンクを提供する(Step 1 「Instagram」参照)
... Fix the key, then rerun (transcribe)ElevenLabsキーが間違っている: ユーザーは自身のターミナルで setkey を使用して再保存するか、キーを破棄してWhisperを使用する
no videos in ... Run download firstvisual.py download <handle> を実行する
download failed: <ids> (exit 1)表示される --ids を指定して再実行する。それでも失敗する場合は、サンプルが小さいことを伝えて続行する
yt-dlp not foundfetch.py doctor を実行し、リストされた問題を修正する
一部の動画の文字起こしに失敗--ids を指定して再試行し、それでも失敗した場合はどの動画が失敗したかを伝える。ギャップを埋めようとしない

厳格なルール

  • 実際の数字のみ、または何もなし。 効果があると主張するすべての内容は、視聴数を併記してください。数値なしで「バズった」と決して言わないでください。
  • 逐語的な文字起こしのみ。 文字起こしされていない動画を要約しないでください。
  • 構造はコピーするが、声はコピーしない。 すべてのティアダウンで、何を拒否すべきかを明記します。
  • 中央値コントロールグループ。 少なくとも2つの中程度のパフォーマーの動画を文字起こししてください。そうしないと、フォーマットとクリエイターの習慣を区別できません。
  • 文字起こしの1行、カードの統計や引用を決して捏造しないでください。 文字起こしに失敗した場合は、--ids で再試行し、それでも失敗した場合はその旨を伝えてください。
  • チャット内でElevenLabsキーを決して要求しないでください。
  • style.jsonには測定値のみ。 pace と zoom は visual.py から。captions、face、graphics、motion は look.py から。単語情報(look、font_match)のみがモデルからのデータです。
  • look.mdを読むこと。フレームは読まない。 フレームを開くのは、look.mdで回答できない疑問を解決するためだけであり、その場合はどのフレームを開いたか明記してください。ユーザーはteardown.htmlを、Claudeはlook.mdを参照します。
  • 勝者とコントロールの比較: nを明記。 差異を「証明された」と呼んではいけません。「すべての勝者」は、このサンプル内で重複がないことを意味するだけです。

重要

分析フレームワーク、テンプレート、ルックパス、ブレンド、スキルハンドオフ、編集計画の詳細については、${CLAUDE_SKILL_DIR}/references/ 以下の各リファレンスファイルを参照してください。

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

Conz-Wilts/ai-editor

Turns one long video or podcast (a local file or a YouTube link) into the best 3-5 short vertical clips, each cut and styled in the user's profile style. Transcribes once, splits the talk into candidate clips at sentence boundaries inside the chosen length, scores every candidate in code (speech rate, loudness, laughter, numbers and names said), shows the shortlist on one page with a preview of each, then trims, cuts and style-edits each pick as its own edit. Use when the user says "clip this video", "make shorts from my podcast", "find the best clips", "cut this into TikToks", "turn this YouTube video into reels", "repurpose this long video", or drops a long video (over about 3 minutes) or a YouTube link and wants short clips. Not for editing one short take (that is start or cut), and not for measuring someone else's style (that is creator-teardown).

Conz-Wilts/ai-editor

Cuts raw talking-head footage into a clean jump cut. Takes one take or several joined (mp4 or mov, any aspect, 4K phone footage is fine), transcribes it word by word, removes retakes, false starts, fillers and dead pauses, and renders cut.mp4 at the source resolution plus words.json timed to the cut. The user approves the cut on a page with the whole transcript and every removed word struck through. Use when the user says "cut my video", "just cut it", "remove my mistakes", "cut out the retakes", "remove the pauses", "clean up this take", "jump cut this", "tighten this clip", or asks only for the cut of a raw take; start calls it for a full edit. Runs before style-edit. Not for a general request to edit a video or to make it look like a creator (that is start), not for adding captions, zooms or cards (style-edit), and not for analysing someone else's videos (creator-teardown).

Conz-Wilts/ai-editor

Generates new footage with Higgsfield and puts it on the edit's timeline. Prices every generation first, asks the user with the dollar amount (and, for their own footage, whether it may be uploaded to Higgsfield), then submits, waits, downloads into the edit's generated/ folder and adds the result to the timeline's Generated track. Covers motion transfer on a clip of the user's video (their moves onto a character or styled look), b-roll from a sentence (text to video), a still brought to life (image to video) and stills for cards (text to image). Use when the user says "generate b-roll", "make a shot of", "AI b-roll", "generate a clip", "use Higgsfield", "motion transfer", "put my moves on", "restyle this part with AI", or asks for footage they did not film. Not for animated diagrams or motion graphics (motion), not for real screenshots and logos (overlays, logo-pack), and not for the cut (cut).

Conz-Wilts/ai-editor

For the editor's maintainers. Turns what users corrected into lasting fixes in this repo, for every user, enforced by code and tests rather than notes. Reads the suggestions users marked "would help everyone" (~/.ai-video-editor/suggestions.jsonl), taste rules said twice (taste.py report), preview corrections (edits/*/corrections.jsonl), review-page notes (*/review.json) and open GitHub issues labelled feedback; groups repeats; for each item the maintainer accepts, writes the general rule into PRINCIPLES.md and the skill that owns it, adds or tightens the check that enforces it, adds a test that fails before and passes after, and runs the full test set. Use when the maintainer says "improve the editor", "turn feedback into fixes", "process suggestions", "what are users complaining about", "go through the feedback issues". Not for one user's own preferences (that is taste), and not for editing a video.

関連スキル