mcpField
C
cloud-uploader

cloud-uploader

github.com/bitwize-music-studio云与 DevOps603218 次安装2 周前更新
代码仓库

关于 cloud-uploader

用于将专辑宣传视频和试听样片上传至 Cloudflare R2 或 AWS S3 的技能。支持预览上传内容,并可选择上传宣传视频、样片或两者,作为发行前的可选步骤。

主要功能

  1. 01上传至 Cloudflare R2 或 AWS S3
  2. 02使用 dry-run 预览文件
  3. 03选择宣传视频、样片或全部
  4. 04将上传文件设为公开访问
  5. 05按艺人和专辑组织云端路径

适用场景

  1. 01上传已生成的宣传视频以供托管
  2. 02通过直链分享专辑试听样片
  3. 03将专辑宣传媒体备份到云存储

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/bitwize-music-studio/claude-ai-music-skills --skill cloud-uploader

安装后在 Claude Code 中输入/cloud-uploader确认已加载。

详细介绍

Cloud Uploader 技能

将宣传视频和其他专辑内容上传到云存储(Cloudflare R2 或 AWS S3)。

用途

使用 /bitwize-music:promo-director 生成宣传视频后,将其上传到云存储,以便:

  • 托管在网站上
  • 通过直接链接分享
  • 通过 CDN 分发
  • 备份和存档

使用时机

  • 生成宣传视频后,用户希望将其上传到云端
  • 用户说“将宣传视频上传到 R2”或“上传到 S3”
  • 用户说“上传 [专辑] 的宣传视频”
  • 仅手动调用(不自动执行)

工作流中的位置

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 → Your bucket
  • 文件应出现在 {artist}/{album}/ 下

对于 S3:

  • 检查 AWS Console → S3 → Your bucket
  • 或使用 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、艺人是 "bitwize" 的专辑 "my-album":

  • 本地:~/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 - 此技能运行脚本并协调工作流。不需要大模型生成创意内容。

版本历史

  • v0.14.0 - 初始实现
    • 通过 boto3 支持 R2 和 S3
    • 试运行模式
    • 公开/私有上传选项
    • 按艺人/专辑组织路径

评论

支持 Markdown