Communitygithub.com

zaddy99999/youtube-publish

端末から動画やShortsを安全にYouTubeにアップロードします。ユーザーがYouTubeチャンネルを認可したり、タイトル・説明・タグを付けて1つまたは複数の動画をアップロードしたり、公開時刻をスケジュールしたり、バッチでの重複投稿を防止したい場合に使用します。デフォルトで非公開アップロードを行い、アップロード台帳を保持します。

youtube-publish とは?

このスキルは、YouTube Data API v3を使用して、端末から直接動画やShortsをアップロードするためのCLIツールです。SDKに依存せず、プレーンなfetchと再開可能なチャンクアップロードを採用しており、バッチ処理に最適化されています。デフォルトで非公開アップロードを行い、SHA256台帳により再実行時の重複投稿を防止します。メタデータの検証、ドライラン、クォータ管理機能を備え、Claude Code、Cursor、CodexなどのAIエージェントが安全かつ効率的にYouTubeへの動画公開を自動化できるように設計されています。Google Cloud ConsoleでのOAuth設定と一度きりの認可フローを経て利用可能になり、主なワークフローは`jobs.json`で定義されたバッチジョブのドライラン検証と実行、単一ファイルのアップロードを含みます。プライバシー設定(非公開、限定公開、公開)、公開スケジュール、タグの制限などを厳格にチェックし、クォータ超過時は自動停止して翌日以降の再実行を促します。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/zaddy99999/video-editing-skills/tree/main/skills/youtube-publish

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

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

ドキュメント

youtube-publish は何をしますか?

YouTube Data API v3 アップローダー(SDK非依存、プレーンな fetch、再開可能チャンクアップロード)。バッチ処理向けに構築:デフォルトで非公開、sha256 台帳により再実行時の重複投稿を防止、メタデータ検証、ドライラン、クォータ認識機能を備えています。

初回セットアップ(ユーザーが行う作業。エージェントは行いません)

  1. Google Cloud Console:プロジェクトを作成し、YouTube Data API v3 を有効化、デスクトップアプリ タイプの OAuth クライアントID を作成します。
  2. クライアント情報をスクリプトに提供します(コミットしないでください): export YOUTUBE_CLIENT_ID=... YOUTUBE_CLIENT_SECRET=...(またはダウンロードした JSON をリポジトリ外に保持し、--client-secrets で指定します)。
  3. チャンネルを一度認可します:
    node scripts/auth.mjs --token-file .youtube-token.json
    
    同意画面が開き、リダイレクトを 127.0.0.1 でキャッチし(PKCE + state チェック)、リフレッシュトークンをモード 600 で保存します。トークンが出力されることはありません。

ワークフロー

# 1. ドライラン:メタデータを検証し、ファイルのハッシュを計算し、スキップ/アップロード計画とクォータコストを表示
node scripts/upload.mjs --jobs jobs.json --dry-run

# 2. アップロード(デフォルトで非公開)
node scripts/upload.mjs --jobs jobs.json --token-file .youtube-token.json

# 単一ファイル
node scripts/upload.mjs --file publish/short.mp4 --title "How I automated my edits" --tags shorts,automation --privacy unlisted

jobs.json:

[
  { "file": "publish/short-01.mp4", "title": "...", "description": "...", "tags": ["shorts"], "privacy": "private" },
  { "file": "publish/short-02.mp4", "title": "...", "privacy": "private", "publishAt": "2026-11-01T17:00:00Z" }
]

相対パスの file は、ジョブファイルのフォルダを基準に解決されます。

ルール

  • render-qc に合格し、ユーザーが承認したファイルのみアップロードします。
  • デフォルトのプライバシーは private(非公開)です。public(公開)は、ユーザーが明示的に要求し、--allow-public を渡した場合のみ許可されます。スケジュール公開動画(publishAt)は private でなければなりません。YouTube がその時刻に公開に切り替えます。
  • 必ず最初に --dry-run を実行し、計画をユーザーに表示してください。
  • トークン、クライアントシークレット、.env* ファイル、台帳を出力、ログ記録、コミットしないでください。リポジトリの .gitignore は *token*.json、*credentials*.json、*client_secret*.json、.env*、*ledger*.json をカバーしています。
  • 台帳(.youtube-upload-ledger.json)は、投稿された内容の信頼できる情報源です。アップロードごとに保存されます。「再試行」のために削除しないでください。--force-duplicate は、ユーザーが本当に2回目のコピーを必要とする場合にのみ使用します。
  • クォータ:プロジェクトのデフォルトは1日あたり10,000ユニットで、1回のアップロードのコストはこれまで1,600ユニット(1日あたり約6アップロード)です。--max-uploads(デフォルト6)は、クォータを消費し尽くす前に実行を停止します。--units-per-upload は、Google がコストを変更した場合の推定値を調整します。quotaExceeded が発生すると実行が停止し、残りのジョブは翌日再実行できます(台帳は完了済みのジョブをスキップします)。
  • タイトル:プレースホルダー(TODO、untitled、{{...}})不可、最大100文字、< または > 不可。タグの合計は最大500文字。lint がこれを強制します。
  • 未検証の API プロジェクトでは、Google がアプリを監査するまでアップロードが非公開に強制される場合があります。すべてのアップロードが非公開で返ってくる場合は、その旨をユーザーに伝えてください。

確認

各結果には videoId(非公開の間は https://youtu.be/<id> で開けます)または skipped 理由が含まれます。node scripts/upload.mjs --check-auth はアップロードせずに認証情報をテストします。

Individual skills in this repo

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

関連スキル