cloud-uploader について
アルバムのプロモーション動画やサンプラーを Cloudflare R2 または AWS S3 にアップロードするスキルです。転送内容を事前確認でき、動画、サンプラー、または両方を選べるリリース前の任意工程です。
主な機能
- 01Cloudflare R2 または AWS S3 へのアップロード
- 02dry-run によるファイルの事前確認
- 03プロモ動画、サンプラー、両方の選択
- 04アップロードファイルの公開設定
- 05アーティストとアルバム別のクラウドパス整理
活用シーン
- 01生成済みプロモ動画のホスティング
- 02アルバムサンプラーの直接リンク共有
- 03アルバムのプロモーション素材のクラウド保存
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ bitwize-music-studio/ claude-ai-music-skills --skill cloud-uploaderインストール後、Claude Code で/cloud-uploaderを入力して読み込まれたか確認します。
詳細
Cloud Uploader Skill
プロモーション動画やその他のアルバムコンテンツをクラウドストレージ(Cloudflare R2 または AWS S3)にアップロードします。
目的
/bitwize-music:promo-director でプロモーション動画を生成した後、次の用途でクラウドストレージにアップロードします。
- ウェブサイトでのホスティング
- 直接リンクでの共有
- CDN 配信
- バックアップとアーカイブ
使用するタイミング
- プロモーション動画の生成後、ユーザーがクラウドへのアップロードを希望した場合
- ユーザーが「プロモーション動画を R2 にアップロード」または「S3 にアップロード」と言った場合
- ユーザーが「[album] のプロモーション動画をアップロード」と言った場合
- 手動でのみ実行します(自動実行はされません)
ワークフロー内での位置
Generate → Master → Promo Videos → **[Cloud Upload]** → Release
promo-director の後、release-director の前に実行する任意のステップです。
前提条件
クラウド設定
クラウドの認証情報を ~/.bitwize-music/config.yaml に設定する必要があります。
cloud:
enabled: true
provider: "r2" # or "s3"
# For Cloudflare R2
r2:
account_id: "your-account-id"
access_key_id: "your-access-key"
secret_access_key: "your-secret-key"
bucket: "promo-videos"
# For AWS S3
s3:
region: "us-west-2"
access_key_id: "your-access-key"
secret_access_key: "your-secret-key"
bucket: "promo-videos"
詳しい設定手順については、${CLAUDE_PLUGIN_ROOT}/reference/cloud/setup-guide.md を参照してください。
必要なファイル
- プロモーション動画が生成済みであること(先に
/bitwize-music:promo-directorを実行してください) - 保存先:
{audio_root}/artists/{artist}/albums/{genre}/{album}/promo_videos/ - アルバムサンプラーの保存先:
{audio_root}/artists/{artist}/albums/{genre}/{album}/album_sampler.mp4
Python の依存関係
# If using the shared venv (recommended)
~/.bitwize-music/venv/bin/pip install -r ${CLAUDE_PLUGIN_ROOT}/requirements.txt
# Or install separately
pip install boto3
アップロードスクリプトは、利用可能な場合は ~/.bitwize-music/venv を使用し、それ以外の場合はシステムの Python を使用します。
ワークフロー
1. 前提条件の確認
設定を確認します:
cat ~/.bitwize-music/config.yaml | grep -A 20 "cloud:"
次の項目を確認してください。
cloud.enabled: true- プロバイダーの認証情報が設定されていること(r2 または s3)
- バケット名が設定されていること
プロモーション動画があることを確認します:
ls {audio_root}/artists/{artist}/albums/{genre}/{album}/promo_videos/
ls {audio_root}/artists/{artist}/albums/{genre}/{album}/album_sampler.mp4
ない場合:
Error: Promo videos not found.
Generate with: /bitwize-music:promo-director {album}
2. Python コマンドの取得
最初に get_python_command() を呼び出し、venv の Python パスとプラグインルートを取得します。以下のすべての bash 呼び出しでこれらを使用してください。
PYTHON="{python from get_python_command}"
PLUGIN_DIR="{plugin_root from get_python_command}"
3. アップロードのプレビュー(ドライラン)
最初にプレビューします。
$PYTHON "$PLUGIN_DIR/tools/cloud/upload_to_cloud.py" {album} --dry-run
出力には次の情報が表示されます。
- プロバイダーとバケット
- アップロードするファイル
- S3 キー(バケット内のパス)
- ファイルサイズ
4. ファイルのアップロード
すべてアップロード(プロモーション動画とサンプラー):
$PYTHON "$PLUGIN_DIR/tools/cloud/upload_to_cloud.py" {album}
トラックのプロモーション動画のみアップロード:
$PYTHON "$PLUGIN_DIR/tools/cloud/upload_to_cloud.py" {album} --type promos
アルバムサンプラーのみアップロード:
$PYTHON "$PLUGIN_DIR/tools/cloud/upload_to_cloud.py" {album} --type sampler
パブリックアクセスを有効にしてアップロード:
$PYTHON "$PLUGIN_DIR/tools/cloud/upload_to_cloud.py" {album} --public
5. アップロードの確認
R2 の場合:
- Cloudflare ダッシュボード → R2 → お使いのバケットを確認します
- ファイルは
{artist}/{album}/の下に表示されます
S3 の場合:
- AWS Console → S3 → お使いのバケットを確認します
- または AWS CLI を使用します:
aws s3 ls s3://{bucket}/{artist}/{album}/
5. 結果の報告
## Cloud Upload Complete
**Provider:** R2 (or S3)
**Bucket:** {bucket}
**Album:** {album}
**Uploaded Files:**
- {artist}/{album}/promos/01-track_promo.mp4
- {artist}/{album}/promos/02-track_promo.mp4
- ...
- {artist}/{album}/promos/album_sampler.mp4
**Total:** 11 files, 125.4 MB
**Next Steps:**
1. Verify files in cloud dashboard
2. If public: Test URLs work
3. Continue to release: /bitwize-music:release-director {album}
アップロードパスの構造
重要:クラウドのパスはフラットで、ジャンルフォルダーはありません。
クラウドのパス構造はローカルのコンテンツ構造とは異なります。
| 場所 | パスの構造 |
|---|---|
| ローカルコンテンツ | {content_root}/artists/{artist}/albums/{genre}/{album}/ |
| ローカルオーディオ | {audio_root}/artists/{artist}/albums/{genre}/{album}/ |
| クラウド | {artist}/{album}/(ジャンルなし) |
ファイルはバケット内で次のように整理されます。
{bucket}/
└── {artist}/
└── {album}/
└── promos/
├── 01-track_promo.mp4
├── 02-track_promo.mp4
├── ...
└── album_sampler.mp4
rock ジャンルの「my-album」を「bitwize」がリリースした場合の例:
- ローカル:
~/music/artists/bitwize/albums/rock/my-album/ - クラウド:
bitwize/my-album/promos/(bitwize/albums/rock/my-album/ではありません)
コマンドのオプション
| オプション | 説明 |
|---|---|
--type promos | トラックのプロモーション動画のみアップロードします |
--type sampler | アルバムサンプラーのみアップロードします |
--type all | 両方をアップロードします(デフォルト) |
--dry-run | アップロードせずにプレビューします |
--public | ファイルをパブリック読み取り可能に設定します |
--audio-root PATH | 設定の audio_root を上書きします |
呼び出し例
基本的なアップロード:
/bitwize-music:cloud-uploader my-album
プレビューのみ:
/bitwize-music:cloud-uploader my-album --dry-run
プロモーション動画のみアップロード:
/bitwize-music:cloud-uploader my-album --type promos
パブリックアクセスを有効にしてアップロード:
/bitwize-music:cloud-uploader my-album --public
エラー処理
「クラウドへのアップロードが有効になっていません」
- 設定に
cloud.enabled: trueを追加します ${CLAUDE_PLUGIN_ROOT}/reference/cloud/setup-guide.mdを参照してください
「認証情報が設定されていません」
- 設定ファイルに認証情報を追加します
- R2 の場合:account_id、access_key_id、secret_access_key
- S3 の場合:access_key_id、secret_access_key
「アルバムが見つかりません」
{audio_root}/artists/{artist}/albums/{genre}/{album}/にアルバムが存在することを確認します- 設定内のアーティスト名が一致していることを確認します
「アップロードするファイルが見つかりません」
- 先にプロモーション動画を生成します:
/bitwize-music:promo-director {album}
「アクセスが拒否されました」
- 認証情報が正しいことを確認します
- R2 の場合:API トークンに書き込み権限があることを確認します
- S3 の場合:IAM ポリシーで s3:PutObject が許可されていることを確認します
「バケットが見つかりません」
- 先にクラウドダッシュボードでバケットを作成します
- 設定内のバケット名を確認します
セキュリティに関する注意事項
- 認証情報は設定ファイルに保存されます(適切なファイル権限を設定してください)
- ユーザーのコンテンツリポジトリでは、設定ファイルを gitignore に追加してください
- デフォルトでは、ファイルは非公開でアップロードされます(公開されません)
--publicフラグは、公開アクセスを意図したファイルにのみ使用してください- CI/CD では環境変数の使用を検討してください(今後の機能強化)
他のスキルとの連携
受け渡し元
promo-director:
プロモーションの生成後:
Promo videos generated successfully.
**Optional:** Upload to cloud storage: /bitwize-music:cloud-uploader {album}
受け渡し先
release-director:
クラウドへのアップロード後:
Cloud upload complete.
Ready for release workflow: /bitwize-music:release-director {album}
対応プロバイダー
Cloudflare R2
- S3 互換 API
- エグレス料金なし
- グローバル CDN との連携
- トラフィックの多いコンテンツに適しています
AWS S3
- 業界標準
- きめ細かな IAM 権限
- CloudFront CDN を利用可能
- AWS エコシステムとの連携に適しています
今後の機能強化
- 環境変数による認証情報の設定(CI/CD 用)
- 複数バケットへの対応
- CDN の自動キャッシュ無効化
- 大容量アップロード用のプログレスバー
- 失敗したアップロードの再開
- バケットが存在しない場合の作成
- 追加プロバイダー(Backblaze B2、DigitalOcean Spaces)
関連ドキュメント
${CLAUDE_PLUGIN_ROOT}/reference/cloud/setup-guide.md- 詳細なセットアップ手順${CLAUDE_PLUGIN_ROOT}/skills/promo-director/SKILL.md- プロモーション動画の生成${CLAUDE_PLUGIN_ROOT}/skills/release-director/SKILL.md- リリースのワークフロー
モデルの推奨
Sonnet 4.5 - このスキルはスクリプトを実行し、ワークフローを調整します。LLM による創造的な出力はありません。
バージョン履歴
- v0.14.0 - 初回実装
- boto3 経由の R2 および S3 対応
- ドライランモード
- 公開/非公開アップロードのオプション
- アーティスト/アルバム別のパス整理