Communitygithub.com

beachyphotoandfilm-arch/video-skills

トーキングヘッド動画用のYouTubeサムネイルとタイトルをデザインします。生素材からグレーディング済みのフル解像度フレームを抽出し、2つの実績あるレイアウトでブランドスタイルのバリエーションをレンダリングし、実際にクリックが決定されるスマートフォンサイズでプレビューします。「サムネイルを作って」「この動画のサムネイル」「タイトルとサムネイル」、または動画がカットされた後に起動します。

video-skills とは?

このスキルは、トーキングヘッド動画向けのYouTubeサムネイルとタイトルを自動生成するためのツールです。生の4K素材からグレーディング済みのフル解像度フレームを抽出し、2つの実証済みレイアウト(フルブリードとパネル)でブランドスタイルのバリエーションをレンダリングします。主にClaude Codeや類似のAIエージェント向けに設計されており、`bash`スクリプトと`node`スクリプトで動作します。スキルはCSS変数を使ってブランドカラーやフォントを簡単にカスタマイズでき、`variants.json`を介して各バリエーションにテキストやレイアウトの設定を渡せます。最終的には、スマートフォンサイズでのプレビューシートを生成し、実際の視聴判断に合わせた品質評価を可能にします。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/beachyphotoandfilm-arch/video-skills/tree/HEAD/skills/video-thumbnails

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

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

ドキュメント

サムネイルとタイトル

ブランド設定

scripts/layout-fullbleed.html と scripts/layout-panel.html の先頭にある :root ブロックを編集してください:

設定CSS変数デフォルト値
アクセントカラー--brand-accent (+ --brand-accent-rgb を r,g,b 形式で)#4a90e2
明るいテキスト色--brand-light#f2f2f2
暗いインク色 (ストローク、パネル背景)--brand-ink#0d131a
表示用フォント (大きなテキスト)--font-display'Anton','Bebas Neue',Impact,sans-serif
本文フォント (小さなテキスト)--font-body'Inter',sans-serif

表示用フォントはローカルにインストールされている必要があります。レンダリングは file:// からヘッドレスChromeで実行されるためです。Anton と Bebas Neue は Google Fonts で無料で入手できます。

また、scripts/frames.sh でグレーディング用LUTを設定してください (LUT_DEFAULT)。または実行時に LUT=/path/to.cube を渡すこともできます。

スタイルのデフォルト (好みに応じて変更)

  1. 顔の上には決して何も重ねないこと。 被写体にグラデーションをかけるのは避けてください。顔が完全に見えるハードエッジのパネルか、またはテキストを空きスペースに配置したフルブリードのいずれかを使用します。
  2. RAW 4Kからフレームを抽出し、書き出しからは抽出しないでください。 1080pの書き出しフレームはソフトに見えます。
  3. まずフレームをグレーディングします。 S-Log3などのログ素材はグレーディングされていないとフラットでグレーです。frames.sh の lut3d でLUTを焼き込みます。カメラが完成したプロファイルで撮影する場合はLUTをスキップしてください。

調査から得られたルール

  • 3〜5単語で、少ないほど良い。 サムネイルは動画を説明する場所ではありません。
  • 顔があると効果的。 ほとんどのブレイクアウト動画は顔を使用しています。強い表情が中立的な表情より優れています。
  • 1つの主要な被写体、2〜3色、高いコントラスト。
  • 約210pxで評価する。 ほとんどの視聴判断はスマートフォンで行われます。そこでうまく機能しなければ、他は何も重要ではありません。
  • タイトルとサムネイルは互いに繰り返さないこと。 1つのアイデアの2つの半分。タイトルは短く具体的に保ちます(約50〜60文字で切れないように)。
  • YouTube StudioでのA/Bテストは議論より勝るので、ユーザーに2〜3の実際の選択肢を提供します。

レイアウトの選択

フルブリードがスマートフォンサイズで優れており、デフォルトです。 210pxで並べて比較すると、顔のサイズはパネル版の約2倍に見え、パネルのサブラインは完全に消えます。

  • layout-fullbleed.html: グレーディングされたフレームを端から端まで配置。表示用フォントで1〜3単語、太いインクストロークを付け、顔に重ならないよう空きスペース(壁、ドア)に配置。プリセット: stab、stat、bottom、band (下部にソリッドなアクセントバンド)。従来の例バリアント: e、f、g、h。
  • layout-panel.html: 被写体をきれいな右側の正方形パネルに配置し、テキストを暗い左半分に配置。アイデアに図(ドットグリッド)や2行のテキストが必要な場合に使用。例バリアント: a〜d。

実行方法

# 1. 表情豊かな瞬間のRAWからグレーディングされたフレームを抽出(トランスクリプトを使用して見つける)
bash <skill>/scripts/frames.sh "<YOUR_FOOTAGE_DRIVE>/<folder>/C0001.MP4" "<work>" 178 310 459 503

# 2. 選択前にそれらを確認 - コンタクトシートが推測より優れている
ffmpeg -i hi-*.jpg -filter_complex hstack=... contact.jpg

# 3. バリアント + スマートフォンサイズのプルーフシートをレンダリング
WORK=<work> OUT=<out> node <skill>/scripts/render.mjs variants.json

variants.json:

[{"id":"E-no-time","layout":"fullbleed","v":"e","img":"full-C0001-503.jpg"},
 {"id":"S-custom","layout":"fullbleed","img":"full-C0001-310.jpg",
  "data":{"preset":"stab","head":"TOO BUSY?","kicker":"TRY THIS"}},
 {"id":"B-3x","layout":"panel","v":"b","img":"cut-C0001-97.jpg"}]

フルブリードのテキストはバリアントごとに data (preset、head、kicker、side、size) として渡すか、レイアウトHTMLに新しい従来の v ブロックとして追加できます。パネルのテキストは layout-panel.html の v ブロックにあります。新しいバリアントを追加するには、ブロックを追加し、3単語以内に保ちます。

puppeteer-core が必要です: ../video-overlays/scripts/node_modules を再利用するか、scriptsディレクトリで npm i を実行してください。render.mjs は /Applications/Google Chrome.app/... を起動します。他のシステムではパスを変更してください。

フレームの選び方

上げた眉毛、開いた手、言葉を発している途中の口を探します。トランスクリプトを使用してエネルギーがある瞬間を見つけ、そこから1秒後のフレームを抽出します。死んだ目のフレームは失敗です。frames.sh の crop= オフセットは、被写体がフレーム幅の約46% を占める4K (3840x2160) ソースを想定しています。フレーミングが異なる場合は調整してください。

出力

1920x1080でレンダリングします(YouTubeはきれいにダウンサンプリングします)。2MB未満に保ちます。

関連

  • paper-edit、video-overlays: ビデオパイプラインの残りの部分

Individual skills in this repo

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

beachyphotoandfilm-arch/video-skills

Sync camera footage to a separate lapel or field-recorder track (e.g. Tascam DR-10L and similar) and lay it up in DaVinci Resolve. Stitches the recorder's split files, finds each clip's exact place in the audio by matching words then waveforms, cuts one lapel slice per clip so every later skill works unchanged, checks for clipping, and builds a synced timeline in a new Resolve project. Trigger on "sync the lapel", "sync my audio", "line up the recorder", "I used a lav", or any shoot with a separate audio folder (live talks, events, workshops). Run it before paper-edit or video-reels.

beachyphotoandfilm-arch/video-skills

Turn raw talking-head footage into an assembled rough cut inside DaVinci Resolve. Pulls the clips off your footage drive, transcribes them locally, removes failed takes, restarts, asides and dead air, then creates a new Resolve project with two paper-edit timelines ready for your fine trim. Trigger on "paper edit", "cut my raw footage", "make a rough cut", "clean up this video", or when the user points at a folder of raw camera files for a YouTube video.

beachyphotoandfilm-arch/video-skills

Design a unique Instagram cover for each reel in your house style. Reads what the reel is about, writes a short hook headline, picks one of your own photos from a tagged photo library, lays it out like your existing covers, and proofs it in grid view at phone size. Renders locally, never with AI image generation. Can be called by a scheduling skill before reels are scheduled. Trigger on "make covers", "reel covers", "cover photo for this reel", "design the IG covers".

beachyphotoandfilm-arch/video-skills

Render finished reels out of DaVinci Resolve, write captions in the creator's voice, attach a custom Instagram cover from reel-covers, and schedule them to Instagram, TikTok and YouTube Shorts through Metricool. Handles the Drive upload hop, collision checks against the existing calendar, and cleanup. Trigger on "schedule the reels", "post these", "put these on the calendar", or after reels are approved.

beachyphotoandfilm-arch/video-skills

Build animated brand overlays (motion graphics) for a talking-head video, timed to the speaker's exact words, plus a DaVinci Resolve import file. House style is in-scene type (text beside and behind the speaker's head) plus diagrams. Transcribes the rough cut locally, picks the moments, renders transparent .mov clips, and writes an FCPXML that drops every clip onto the timeline already in position. Trigger on "make animations for this video", "add overlays/motion graphics", "animate this", "b-roll graphics for my YouTube video", or when the user shares a rough cut and asks for graphics.

beachyphotoandfilm-arch/video-skills

Cut vertical Instagram reels out of a long-form talking-head video, hook first. Picks the strongest standalone moments from the transcript, opens each reel on its punchiest line, builds vertical timelines in DaVinci Resolve framed on the speaker's face with the LUT applied, and finishes them: a hook (a held text card, or a word-by-word "build" hook with punch-in) and burned-look captions on V3; this-or-that reels get product graphics and a comment-keyword CTA card. You trim and render, nothing to import. Trigger on "make reels", "clip this for Instagram", "cut some verticals", or after a YouTube video is cut.

beachyphotoandfilm-arch/video-skills

Run the whole YouTube video pipeline end to end, one stage at a time, stopping for the creator's approval at every gate. Paper edit, punch-ins, reels, reel covers, scheduling the reels, overlays, thumbnail and title, then scheduling the long-form video, all through Metricool. Keeps state per video so you can stop anywhere and pick up later. Trigger on "/youtube", "let's do the whole video", "run the video pipeline", "continue the <name> video", or when handed raw footage for a YouTube video.

関連スキル