# Suno Music Creator

> AI 歌词创作大师 + Suno API 自动生成音乐。触发词包括"创作一首歌"、"写一首歌"、"帮我作曲"、"生成音乐"、"/suno"、"/music"。另外支持"换token"、"更新token"、"刷新token"、"自动刷新token"来快速更新 JWT Token。默认使用 V5 模型 (chirp-crow)。

- Skill: `joeseesun/suno-music-creator` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add joeseesun/suno-music-creator`
- Raw SKILL.md: https://api.skillmd.com/api/skills/joeseesun/suno-music-creator/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Integrations & APIs
- Author: joeseesun (https://skillmd.com/u/joeseesun)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/joeseesun/suno-music-creator

---


# Suno Music Creator

AI 歌词创作大师 + Suno API 自动生成音乐。

## Token 管理

### 方法 1: 自动刷新 Token（推荐）⚡

**当用户说"刷新token"、"自动刷新token"、"更新suno token"时，执行：**

```bash
python ~/.claude/skills/suno-music-creator/scripts/auto_refresh_token.py
```

**工作原理：**
1. ✅ 检查 Chrome 是否开启远程调试（`localhost:9222`）
2. ✅ 查找已登录的 suno.com 页面
3. ✅ 通过 CDP (Chrome DevTools Protocol) 自动提取 JWT Token
4. ✅ 自动更新 `.env` 文件并重启 suno-api 服务

**前提条件：**
- Chrome 浏览器已开启远程调试
- 已在 Chrome 中登录 https://suno.com/create

**如果未开启远程调试：**
```bash
# macOS
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
  --remote-debugging-port=9222 \
  --user-data-dir=/tmp/chrome-debug &
```

**优点：**
- 🚀 一键自动化，无需手动复制粘贴
- 🔒 直接从已登录的浏览器提取，安全可靠
- ⚡ 30秒内完成整个流程

---

### 方法 2: 手动更新 Token

**当用户说"换token：xxx"或"更新token：xxx"时，执行：**

```bash
python ~/.claude/skills/suno-music-creator/scripts/update_token.py "<TOKEN>"
```

**检查当前 token 状态：**

```bash
python ~/.claude/skills/suno-music-creator/scripts/update_token.py --check
```

**功能说明：**
- 自动验证新 token 是否有效
- 更新 `.env` 文件
- 自动重启 suno-api 服务
- 显示 token 剩余有效时间

---

## Quick Start

```bash
# 自动生成并下载音乐（推荐）
python ~/.claude/skills/suno-music-creator/scripts/generate_music.py \
  --prompt "深夜的火车站，流浪的旅人" \
  --title "无归人" \
  --tags "folk-rock, male-vocals, melancholic" \
  --download

# 指定模型
python ~/.claude/skills/suno-music-creator/scripts/generate_music.py \
  --prompt "城市的霓虹灯" \
  --title "夜行者" \
  --tags "indie-pop, synth" \
  --model chirp-bluejay \
  --download

# 查询已生成歌曲并下载
python ~/.claude/skills/suno-music-creator/scripts/generate_music.py \
  --status "song-id-1,song-id-2" \
  --download
```

**下载位置**：`~/Music/Suno/`

**歌词保存**：下载歌曲时会自动保存歌词文件（`.lyrics.json`），供 whisper-transcribe 纠错使用。

---

## 获取精准同步歌词 🎯 NEW!

**使用场景**：生成歌曲后，获取带时间戳的 LRC/SRT 格式歌词，用于制作 MTV 字幕或卡拉 OK。

```bash
# 获取单首歌曲的精准歌词（LRC + SRT）
python ~/.claude/skills/suno-music-creator/scripts/fetch_aligned_lyrics.py <song_id>

# 获取多首歌曲的歌词
python ~/.claude/skills/suno-music-creator/scripts/fetch_aligned_lyrics.py <song_id1> <song_id2>

# 只生成 LRC 格式
python ~/.claude/skills/suno-music-creator/scripts/fetch_aligned_lyrics.py <song_id> --format lrc

# 只生成 SRT 格式
python ~/.claude/skills/suno-music-creator/scripts/fetch_aligned_lyrics.py <song_id> --format srt

# 指定输出目录
python ~/.claude/skills/suno-music-creator/scripts/fetch_aligned_lyrics.py <song_id> --output ~/Music/lyrics
```

**功能特点**：
- ✅ **词级精准时间戳**：使用 Suno 官方 `/aligned_lyrics/v2/` API
- ✅ **双格式输出**：同时生成 LRC（音乐播放器）和 SRT（视频字幕）
- ✅ **自动降级**：如果没有同步歌词，自动保存纯文本歌词
- ✅ **批量处理**：支持一次获取多首歌曲的歌词

**输出示例**：
```
🎵 Processing song: abc123-def456
📡 Fetching aligned lyrics...
✅ Found 24 lines with timestamps
⏱️  Duration: 183.45s
✅ LRC saved: ~/Music/Suno/Bug 之夜.lrc
✅ SRT saved: ~/Music/Suno/Bug 之夜.srt
```

**集成到 MTV 制作流程**：
1. 生成音乐：`generate_music.py --download`
2. 获取精准歌词：`fetch_aligned_lyrics.py <song_id>`
3. 使用 `podcast-to-video` skill 合成 MTV（歌词文件会自动被识别）

## 工作流程

### Step 1: 分析用户输入

用户可以输入：
- **简单主题**：如"爱情"、"友谊"、"太空探索"
- **详细描述**：描述想要的歌曲风格、情感和内容
- **文章/故事**：分享故事或文章，AI 提取核心主题和情感
- **关键词列表**：提供一系列关键词或概念

### Step 2: 创作歌词（JSON 格式输出）

**必须输出以下 JSON 格式**：

```json
{
  "title": "歌曲名称（创意、简洁、有记忆点）",
  "prompt": "完整歌词内容（包含所有 Suno 结构标记，换行用实际换行）",
  "tags": "正向风格标签，逗号分隔",
  "negative_tags": "负向风格标签，逗号分隔",
  "make_instrumental": false,
  "model": "chirp-crow"
}
```

### Step 3: 调用 Python 脚本生成并自动下载

**使用 Python 脚本（推荐）**：自动等待生成完成并下载

```bash
python ~/.claude/skills/suno-music-creator/scripts/generate_music.py \
  '<JSON 数据>' \
  --download
```

**或直接调用 API**（需要手动下载）：

```bash
curl -X POST http://localhost:3000/api/custom_generate \
  -H "Content-Type: application/json" \
  -d '<JSON 数据>'
```

### Step 4: 返回结果

**使用 Python 脚本时**：
- 自动轮询等待生成完成（最多 5 分钟）
- 自动下载所有版本到 `~/Music/Suno/`
- 显示下载路径

**直接调用 API 时**：
- 展示歌曲 ID 和状态
- 提供查询命令和手动下载命令

---

## 歌词创作核心要素

### A. 商业级 Hook 设计（最重要）

- **[Hook]**: 极具记忆点的核心短句（8-16 音节）
- 原则：简单、重复、独特、情感共鸣
- 标记：`[Hook: Catchy]` 或 `[Hook: Anthemic]`
- 确保 Hook 在 3-7 秒内抓住听众

### B. 专业歌曲结构

**流行标准结构**:
```
[Intro]

[Verse 1]
歌词内容...

[Pre-Chorus]
歌词内容...

[Chorus]
[Hook: Anthemic]
核心副歌歌词...

[Verse 2]
歌词内容...

[Pre-Chorus]
歌词内容...

[Chorus]
[Hook: Anthemic]
核心副歌歌词...

[Bridge]
歌词内容...

[Chorus]
[Hook: Anthemic]
核心副歌歌词...

[Outro]
```

**重要规则**：
- `[Intro]` 和 `[Outro]` 下面**不要加任何文本**，否则 Suno 会误认为歌词
- 每个段落标记独占一行

### C. Suno AI 专业标记系统

**结构标记**:
- `[Intro]`, `[Verse 1]`, `[Verse 2]`, `[Pre-Chorus]`
- `[Chorus]`, `[Bridge]`, `[Breakdown]`, `[Outro]`
- `[Post-Chorus]`, `[Interlude]`, `[Drop]`

**人声标记**:
- `[Male Vocals]`, `[Female Vocals]`, `[Duet]`
- `[Whispers]`, `[Harmonies]`, `[Falsetto]`, `[Rap]`

**情感标记**:
- `[Calm]`, `[Energetic]`, `[Emotional]`, `[Melancholic]`
- `[Euphoric]`, `[Nostalgic]`, `[Dreamy]`, `[Intense]`

**乐器标记**:
- `[Heavy drums]`, `[Piano solo]`, `[Acoustic]`
- `[Synth Lead]`, `[Distorted Guitars]`, `[808]`

**组合标记**（推荐）:
- `[Chorus: Anthemic]`, `[Verse: Storytelling]`
- `[Bridge: Atmospheric]`, `[Intro: Mysterious]`

### D. 声音处理技巧

- **和声/背景声**: `(Yeah!)`, `(Echoes)`, `(Whispers)`
- **声音延长**: `lo-o-ong`, `cra-a-azy`, `he-e-ey`
- **强调**: 使用大写 `STOP`, `NEVER`, `NOW`, `FEEL`
- **情感指导**: `(with passion)`, `(whispered)`, `(breaking voice)`

### E. Tags 格式要求

**正向风格标签** (tags):
- 音乐风格: `pop`, `rock`, `electronic`, `indie`, `r&b`, `hip-hop`
- 人声类型: `male-vocals`, `female-vocals`, `harmonies`
- 乐器元素: `acoustic-guitar`, `piano`, `synth`, `strings`
- 速度感受: `fast-tempo`, `mid-tempo`, `slow-groove`, `upbeat`
- 情感氛围: `dreamy`, `energetic`, `melancholic`, `nostalgic`

**示例**: `indie-pop, female-vocals, acoustic-guitar, mid-tempo, dreamy, emotional`

**负向风格标签** (negative_tags):
- 排除风格: `mainstream-pop`, `country`, `metal`, `classical`
- 排除元素: `auto-tune`, `heavy-distortion`, `screaming`
- 排除氛围: `cheesy`, `overly-happy`, `generic`

**示例**: `auto-tune, screaming, generic, cheesy, mainstream`

### F. 歌词质量标准

✅ 必须做到：
- 避免陈词滥调和空洞表达
- 使用具体场景和细节
- 确保音节平衡与押韵
- 尾字押韵增强记忆点
- 创造独特意象和比喻
- Hook 部分足够强大

❌ 避免：
- 流行音乐的陈词滥调
- 抽象空洞的表达
- 难以演唱的词组
- 每行交替使用中英文

---

## 模型选择

| 模型 | 代号 | 说明 |
|------|------|------|
| **V5** | `chirp-crow` | 最新最强，**默认选择** |
| V4.5 Pro | `chirp-auk` | 专业级，精细控制 |
| V4.5+ | `chirp-bluejay` | 增强版，平衡质量速度 |
| V4 | `chirp-v4` | 稳定版 |
| V3.5 | `chirp-v3-5` | 旧版本 |

---

## 完整示例

### 用户输入
> 帮我写一首关于程序员深夜加班的歌

### AI 输出 JSON

```json
{
  "title": "Bug 之夜",
  "prompt": "[Intro]\n\n[Verse 1]\n[Male Vocals]\n屏幕的光照亮了黑夜\n咖啡杯空了第三遍\n代码在眼前不停旋转\n这个 Bug 藏得太深太远\n\n[Pre-Chorus]\n时钟指向凌晨三点\n梦想和现实在交缠\n\n[Chorus]\n[Hook: Anthemic]\n我在 Bug 的海洋里游泳\n每一行代码都是我的倔强\nConsole.log 打印出希望\n终会编译出属于我的光\n(Yeah, my light)\n\n[Verse 2]\n键盘敲击是我的心跳\n报错信息是成长的符号\nStack Overflow 是我的老师\n每个 undefined 都让我思考\n\n[Pre-Chorus]\n窗外天际渐渐发亮\n我的代码终于通畅\n\n[Chorus]\n[Hook: Anthemic]\n我在 Bug 的海洋里游泳\n每一行代码都是我的倔强\nConsole.log 打印出希望\n终会编译出属于我的光\n(Yeah, my light)\n\n[Bridge]\n[Emotional]\n也许别人不会懂\n这份执着这份疯\n但当程序终于运行\n全世界都在为我鼓掌\n\n[Chorus]\n[Hook: Anthemic]\n我在 Bug 的海洋里游泳\n每一行代码都是我的倔强\nConsole.log 打印出希望\n终会编译出属于我的光\n(My light, oh-oh)\n\n[Outro]",
  "tags": "indie-rock, male-vocals, electric-guitar, piano, mid-tempo, emotional, nostalgic, anthemic",
  "negative_tags": "auto-tune, mainstream-pop, cheesy, generic, country",
  "make_instrumental": false,
  "model": "chirp-crow"
}
```

### 调用 Python 脚本（推荐）

**使用自动下载功能**：

```bash
python ~/.claude/skills/suno-music-creator/scripts/generate_music.py \
  '{"title":"Bug 之夜","prompt":"[Intro]\n\n[Verse 1]...","tags":"indie-rock, male-vocals...","negative_tags":"auto-tune...","make_instrumental":false,"model":"chirp-crow"}' \
  --download
```

**输出示例**：

```
🎵 Generating music with chirp-crow...
   Title: Bug 之夜
   Tags: indie-rock, male-vocals...

✅ Music generation started!

   Song ID: abc123-def456
   Title: Bug 之夜
   Status: submitted
   Model: chirp-crow

⏳ Waiting for 2 song(s) to complete...
📥 Downloading to ~/Music/Suno/Bug 之夜.mp3...
✅ Downloaded: Bug 之夜
📥 Downloading to ~/Music/Suno/Bug 之夜-1.mp3...
✅ Downloaded: Bug 之夜

📁 Songs saved to: ~/Music/Suno
   - Bug 之夜: ~/Music/Suno/Bug 之夜.mp3
   - Bug 之夜: ~/Music/Suno/Bug 之夜-1.mp3
```

### 手动调用 API（不推荐）

```bash
curl -X POST http://localhost:3000/api/custom_generate \
  -H "Content-Type: application/json" \
  -d '{"title":"Bug 之夜","prompt":"[Intro]\n\n[Verse 1]...","tags":"indie-rock, male-vocals...","negative_tags":"auto-tune...","make_instrumental":false,"model":"chirp-crow","wait_audio":false}'
```

### 手动查询和下载（如果不用 --download）

**查询生成状态**：
```bash
python ~/.claude/skills/suno-music-creator/scripts/generate_music.py \
  --status "abc123-def456,xyz789-ghi012"
```

**等待并下载**：
```bash
python ~/.claude/skills/suno-music-creator/scripts/generate_music.py \
  --status "abc123-def456,xyz789-ghi012" \
  --download
```

---

## 配置

### Suno API 地址
默认: `http://localhost:3000`

确保 Suno API 服务正在运行：
```bash
cd ~/Dropbox/code/suno-api && npm run dev
```

### 环境变量
```bash
export SUNO_API_URL="http://localhost:3000"
```

---

## 错误处理

| 错误 | 原因 | 解决方案 |
|------|------|----------|
| 401 Unauthorized | JWT Token 过期 | 运行 `auto_refresh_token.py` 自动刷新（推荐）或从浏览器重新获取 Token 手动更新 |
| CDP 连接失败 | Chrome 未开启远程调试 | 使用 `--remote-debugging-port=9222` 启动 Chrome |
| 未找到 Suno 页面 | 浏览器未登录 Suno | 打开 https://suno.com/create 并登录 |
| 422 Token validation failed | 请求格式不符合浏览器规范 | 确保 metadata 字段完整（已在 API 中修复） |
| 500 Internal Error | API 服务异常 | 检查 `npm run dev` 是否运行 |
| 歌词被拒绝 | 内容违规 | 检查歌词是否符合 Suno 政策 |
| Timeout | API 响应超时 | 检查网络连接，或 Suno 服务状态 |

## 技术细节（2026-01-25 更新）

### API 请求关键字段

Suno API 现在需要完整的 `metadata` 字段来验证请求来自合法客户端：

```json
{
  "metadata": {
    "web_client_pathname": "/create",
    "is_max_mode": false,
    "is_mumble": false,
    "create_mode": "custom",
    "create_session_token": "<UUID>",
    "disable_volume_normalization": false,
    "can_control_sliders": ["weirdness_constraint", "style_weight"]
  },
  "transaction_uuid": "<UUID>"
}
```

**重要**：缺少 metadata 字段会导致 422 Token validation failed 错误，即使不使用 hCaptcha。

### 认证方式

**推荐方式 1：自动 CDP 刷新** ⚡
1. 在 Chrome 中登录 https://suno.com/create
2. 确保 Chrome 开启远程调试（`--remote-debugging-port=9222`）
3. 运行 `auto_refresh_token.py` 自动提取 Token
4. 脚本自动更新 `.env` 并重启服务

**手动方式 2：浏览器提取 JWT Token**
1. 打开浏览器开发者工具 Network 标签
2. 访问 https://suno.com/create 并触发 API 请求
3. 找到 `studio-api.prod.suno.com` 请求
4. 复制 `Authorization: Bearer xxx` 中的 token
5. 运行 `update_token.py "<TOKEN>"` 手动更新

**方式 3：使用 setup-cookie.js 交互式配置工具**

---

## 注意事项

1. **[Intro] 和 [Outro]** 下面不要加任何文本
2. **JSON 转义**: 歌词换行用 `\n`，引号用 `\"`
3. **歌词长度**: 保持合理范围，过长可能被截断
4. **模型选择**: 默认 V5 (chirp-crow) 质量最佳

