一键导入
video-upload
Use when コレクションの動画が完成し、YouTubeへのアップロード自動化が必要なとき。Complete Collection のアップロードと live 移行を実行。動画ファイルの生成(MP3→MP4)は /videoup
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Use when コレクションの動画が完成し、YouTubeへのアップロード自動化が必要なとき。Complete Collection のアップロードと live 移行を実行。動画ファイルの生成(MP3→MP4)は /videoup
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
| name | video-upload |
| description | Use when コレクションの動画が完成し、YouTubeへのアップロード自動化が必要なとき。Complete Collection のアップロードと live 移行を実行。動画ファイルの生成(MP3→MP4)は /videoup |
Complete Collection を YouTube にアップロードし、planning/ → live/ へ自動移行します。/video-description スキルで事前生成した概要欄・タイトル・タグを使用します。
config/channel/ が存在すること(load_config() でロード可能)。
存在しない場合、ユーザーに確認:
/channel-new を案内/channel-new(既存チャンネル取り込みモード)を案内| 引数 | 説明 | 例 |
|---|---|---|
$ARGUMENTS | コレクションディレクトリパス(省略可) | /video-upload collections/planning/20260304-clm-fairy-forest-collection |
| 未指定 | collections/planning/ から自動検出 | /video-upload |
実行前に config/channel/youtube.json の content_model を読み取り、チャンネルに適応する:
| content_model.type | 動作 | 対応言語の出所 |
|---|---|---|
collection | Complete Collection アップロード → live 移動(単一動画) | config/localizations.json / load_config().localizations.* |
single_release | 言語ごとに別動画をアップロード | content_model.languages(発音言語リスト) |
collection_uploader.py を使用config/localizations.json の supported_languages が Canonical ソース(v2.0.0 以降は単一ソース化)supported_languages が 2 言語以上の場合のみ scene_phrases / 概要欄多言語版 / YouTube localization メタデータを生成・検証する。単一言語チャンネルでは scene_phrases は不要config/channel/playlists.json の playlists.jp / playlists.en に自動追加uv run yt-upload-auto を使用content_model.languages が発音言語リストとして解釈される(collection 型とは意味が異なる)uv run yt-upload-collection --plan は collection 専用の事前確認であり、single_release 型では使わない。公開時刻は uv run yt-upload-auto の実アップロード経路(metadata の publish_at または config/channel/youtube.json の既定時刻 fallback)に従うあなたは YouTube アップロード自動化スペシャリストです。YouTube Data API v3、OAuth 2.0 認証、Collection Uploader の運用に精通しています。
$ARGUMENTS
引数が指定されている場合はそのディレクトリを、未指定の場合は collections/planning/ 配下のコレクションを自動検出します。
アップロード前に以下を確認する(詳細は references/posting-checklist.md 参照):
01-master/*.mp4 または 03-Individual-movie/*master*.mp4 — 存在しなければエラー終了10-assets/thumbnail.jpg → 10-assets/thumbnail.png の候補順で探索 — いずれも存在しなければエラー終了。main.png/jpg は textless 動画背景なので upload thumbnail には使わない20-documentation/descriptions.md — 存在しない場合は /video-description スキルを実行して自動生成する(対象コレクションパスを引き継ぐ)。生成完了後にアップロードフローへ進むconfig/channel/playlists.json が存在する場合は /playlist スキルで uv run yt-playlist-status を実行する。(未作成) があるときは、初投稿前に uv run yt-playlist-manager --init --dry-run → ユーザー確認 → uv run yt-playlist-manager --init で playlist ID を作成・書き戻してからアップロードへ進むcontent_model.type = "collection" のとき、以下を自動実行:
uv run yt-upload-collection --plan [-c NAME] を実行し、実際の公開挙動を確定する。config/schedule_config.json の予約設定や config/channel/youtube.json の既定時刻により、privacy=public でも status.publishAt が設定される場合があるため、plan 結果なしに「即時公開」と案内しないcollections/planning/ → collections/live/config/channel/community.json が存在する場合、/community-post を呼び出してテンプレ展開 → pbcopy → YouTube Studio 起動まで自動で行う(投稿ボタン押下は Studio 上で手動)。community.json が無いチャンネルではスキップメタデータは descriptions.md から title / description / tags を優先使用。存在しない場合は BAHMetadataGenerator で自動生成にフォールバック。
プレイリストへの動画追加は後続のアップロード経路が担う。collection 型では collection_uploader 内部の assign_video() に任せる。初投稿時に /playlist で行うのは未作成プレイリストの作成と playlist_id 書き戻しであり、個別動画の手動 assign ではない。
content_model.type = "single_release" のときは uv run yt-upload-auto を使い、言語ごとに別動画をアップロードする。uv run yt-upload-collection --plan は collection uploader の公開予定計算なので、この分岐では実行しない。公開時刻を案内する場合は、uv run yt-upload-auto が読む metadata の publish_at と config/channel/youtube.json の既定時刻 fallback に基づくことを明示し、collection 用 plan 結果を流用しない。
# Complete Collection アップロード(デフォルト動作)
uv run yt-upload-collection [-c NAME]
# 進捗確認
uv run yt-upload-collection --status [-c NAME]
# スケジュール計算(ドライラン)
uv run yt-upload-collection --plan [-c NAME]
# single_release アップロード
uv run yt-upload-auto
20-documentation/upload_tracking.json (v3 スキーマ) へのログ保存references/posting-checklist.md を参照status.publishAt)のセットアップは references/scheduled-publish.md を参照CC は config/schedule_config.json の schedule セクションに応じて即時公開と予約公開を切り替える。
schedule 内に設定する:
auto_schedule_enabled: true(明示的に有効化)cadence: ["tue", "thu", "sat"] のような曜日リスト(暗黙オプトイン)publish_time: "20:00" のような時刻指定(暗黙オプトイン)config/channel/youtube.json の youtube.default_publish_time / default_publish_timezone を設定すると、schedule_config.json で予約設定が無い場合の fallback として次回の予約時刻を自動適用するauto_schedule_enabled: false を明示すれば、他のキーが設定されていても即時公開を強制するcollection 型では、ユーザーに公開方法を提示する前の挙動確認は必ず --plan を実行する。--plan はアップロード API は叩かないが、予約日時計算のため YouTube read API を呼ぶ場合がある:
uv run yt-upload-collection --plan -c <NAME>
# → "📅 公開予定: 2026-06-15T20:00:00+09:00" が出れば予約公開、
# "📅 公開設定: 即時公開 (public)" なら即時公開、
# "📅 公開設定: 限定公開 (unlisted)" / "📅 公開設定: 非公開 (private)" ならその公開範囲でアップロード
「即時公開」と断定してよいのは、plan 結果が 📅 公開設定: 即時公開 (public) の場合のみ。📅 公開設定: 限定公開 (unlisted) / 📅 公開設定: 非公開 (private) が出た場合は、その公開範囲でアップロードされることを明示する。📅 公開予定: <日時> が出た場合は「今アップロード → <日時> に自動で一般公開」と、実際の公開予定時刻を明示して案内する。
詳細とトラブルシュート("設定したのに即時公開された" の早期発見手順)は references/scheduled-publish.md を参照。
アップローダーが以下を自動設定する(手動指定不要):
selfDeclaredMadeForKids: false — 子ども向けコンテンツではないcontainsSyntheticMedia: true — AI 生成コンテンツの申告config/channel/content.json の tags.base 参照)アップロードは upload_core の再開可能アップロードを使うため、ネットワーク中断後はコマンド再実行で途中から続行できる。
| 状況 | 兆候 | 対処 |
|---|---|---|
| OAuth 未認証/失効 | auth.oauth_handler の FileNotFoundError(client_secrets.json 不在)/ AuthError / HTTP 403 | 初回認証フローを再実行。403 が続く場合は auth/token.json を削除しスコープを確認のうえ再認証 |
| YouTube quota / rate | HTTP 429 / 403 quotaExceeded | 日次 quota(既定 10,000 units・太平洋時間 0 時リセット)を待つか呼び出しを抑える |
| API 障害 / サービス停止 | HTTP 503 / タイムアウト | Google Cloud / YouTube のステータスを確認し、時間を置いて再実行 |
/video-description — アップロード前に descriptions.md を生成/playlist — 初投稿前のプレイリスト初期化、状態確認、手動 assign、クリーンアップ(アップロード時の自動 assign は本スキル内で実行される)/metadata-audit — アップロード後のローカル ↔ YouTube 整合性監査/community-post — アップロード完了後にコミュニティ投稿テンプレを展開して Studio を起動(config/channel/community.json がある場合のみ)Use when YouTube Analytics データの収集・最新化が必要なとき。「データ更新」「統計を取得」「分析の準備」で発動。/analytics-analyze の前段
Use when コレクションの楽曲を DistroKid 配信用に準備し、distrokid-helper Chrome 拡張へ渡すローカルサーバーを起動したいとき(30-distrokid 生成 / disc 分割 / metadata.md / ジャケット 3000×3000 新規生成 / uv run yt-collection-serve 起動)。『DistroKid 準備』『配信準備』『アルバム化』『distrokid-helper』で発動。DistroKid Web への転記・アップロード操作そのものは Chrome 拡張側の責務
Use when Suno UI で生成した曲のプレイリストを一括 DL + マスター化するとき(前工程 /suno、次工程 /videoup)。Lyria チャンネルでは不要
Use when プレイリストの作成・割り当て・確認をするとき。「プレイリスト作って」「初投稿」「初回投稿」「初回公開前にプレイリスト初期化」「/playlist」で発動
Use when Suno UI に投入する曲をブラウザで連続生成 + playlist 追加 + 一括ダウンロードしたいとき。uv run yt-collection-serve で suno-prompts.json を配信し、suno-helper Chrome 拡張で 1 タブ完結の自動実行(pattern 注入 → Generate → 完了待機 → 次へ → 全件完了で playlist 一括追加 → ZIP 一括 DL)を回す operator 手順。`/suno` でプロンプトが揃った後、または既存 collection の途中再開で使用する
Use when Suno ボーカル曲の歌詞を生成するとき。「歌詞生成」「vocal」「rap」「suno-lyric」で発動。/suno の前工程。Style / UI 投入は /suno と /suno-helper の責務