Release
AI 音乐创作助手 — 通过对话生成原创歌曲、纯音乐和 BGM。 当用户想要创作、生成、制作任何形式的音乐时使用此技能。 包括:生成带人声的歌曲、写歌词、作曲编曲、制作纯音乐/BGM/配乐,或将文字变成歌曲。 当用户提到具体音乐风格(如"来首民谣""做首说唱")时也应触发。 支持三种模式:灵感模式(一句话生成)、定制模式(自定义歌词+风格)、纯音乐模式。 不要在用户只是想播放音乐、管理歌单、或转换音频格式时触发。 触发词:做歌、写歌、来首歌、出首歌、做音乐、创作音乐、生成歌曲、 制作音乐、原创歌曲、作曲、编曲、作词、填词、 写歌词、生成歌词、BGM、纯音乐、背景音乐、配乐、 把文字变成歌、变成音乐、做个曲子、 song、music、compose、make a song、write a song、muse、/muse。
安装 / 下载方式
TotalClaw CLI推荐
totalclaw install clawskills:a64307410~muse-aicURL直接下载,无需登录
curl -fsSL https://skills.taituai.com/api/skills/clawskills%3Aa64307410~muse-ai/file -o muse-ai.mdGit 仓库获取源码
git clone https://github.com/openclaw/skills/commit/7dc3a08d2a9f34deb9c266128194480b70918ad6# Muse - AI 音乐创作助手
帮助用户在聊天环境中通过简单对话生成原创歌曲。核心价值:**3 轮交互出一首歌**。
## 环境配置
**工作目录**:执行任何 bash 命令前,必须先 `cd` 到本 SKILL.md 所在目录(即 skill 安装目录)。所有脚本路径(`scripts/`、`assets/`、`references/`)均基于此目录。
Token 由脚本自动管理,存储于 `~/.muse/token`,无需手动操作。
## 工作流程
### Step 0: 认证兜底(Token 失败统一入口)
**任何步骤中遇到 HTTP 401(Token 无效/过期)或 Token 缺失(code=-2)时,统一执行以下流程:**
1. 获取注册链接:
```bash
python3 scripts/muse_api.py register-url
```
返回 JSON 中的 `url` 字段即为 `$REGISTER_URL`。
2. 读取 `assets/register-guide.md` 获取引导提示
3. 向用户展示注册引导,使用上面获取的 `$REGISTER_URL`:
```
你的登录已过期(或尚未登录),需要先完成验证。
1️⃣ 点击链接注册 👉 $REGISTER_URL
2️⃣ 注册完成后 Token 会自动复制到剪贴板
3️⃣ 回到这里,直接粘贴发送即可
整个过程只需 30 秒~
```
4. **等待用户粘贴 Token**(见「粘贴 Token 识别」)
5. Token 验证成功后,**回到触发本兜底的原始步骤继续执行**
**触发场景**:
| 触发点 | 说明 |
|--------|------|
| Step 1 认证检查 | member-info 返回 code=-2(未登录)或 HTTP 401 |
| Step 3 提交生成 | generate 接口返回 HTTP 401 |
| Step 4 同步轮询 | poll_song.py 输出 `{"event":"error","code":401}` |
| 任意 API 调用 | 脚本 stderr 包含 `"code": 401` |
### Step 1: 认证检查
直接调用 `python3 scripts/muse_api.py member-info`(无需传 --token,脚本自动从 `~/.muse/token` 读取)。
- 成功 → 认证有效,展示积分信息
- 返回 code=-2(未登录) → 跳转 **Step 0: 认证兜底**
- 返回 HTTP 401 → 跳转 **Step 0: 认证兜底**
### 粘贴 Token 识别
当用户发送的消息以 `eyJ` 开头(JWT 格式),按以下流程处理:
1. 调用 `python3 scripts/register.py verify --token {用户粘贴的内容}` 验证有效性
2. 验证成功 → Token 已由脚本自动保存到 `~/.muse/token`,直接进入创作流程
3. 验证失败 → 提示用户 Token 无效,请重新注册获取
**认证成功后展示欢迎语:**
```
🎵 欢迎使用 Muse 音乐创作助手!
当前积分:{credits 或 credit} | 会员状态:{isMember 或 memberType>0 ? "✨ VIP" : "普通用户"}
每首歌消耗约 10-15 积分,你还可以创作约 {积分/15} 首歌曲。
```
### Step 2: 模式分流
认证通过后,向用户展示模式选择:
```
🎵 你想怎么创作?
A. 灵感模式 — 一句话描述,AI 全权创作(风格由 AI 根据描述决定)
B. 定制模式 — 选风格、定歌词,精准控制每个细节
C. 纯音乐 — 无人声的背景音乐 / BGM
直接回复字母即可~
```
**自动检测**:如果用户原始消息已包含明确意图,可跳过选择直接进入对应模式:
- "做首歌""来一首""随便来一首" → 灵感模式
- "我有歌词""帮我谱曲""自定义""我想要说唱风格" → 定制模式
- "纯音乐""伴奏""BGM" → 纯音乐模式
- 提到具体风格(如"来首民谣""说唱风的歌") → 定制模式(因为用户有风格要求)
---
#### 灵感模式(mode="lite",不传 style)
AI 根据描述自主决定曲风,**不承诺风格可控**。
交互步骤:
1. 问音色(男声/女声/都可以)
2. 请用户用一句话描述想要的歌(**至少 10 个字**)
> 灵感模式不设风格和情绪选项,因为极简模式下 AI 音乐引擎会根据描述自主决定曲风,用户选的风格标签不会被严格执行。
---
#### 定制模式(mode="custom",style 严格执行)
用户完全控制风格和歌词,AI 严格执行。
交互步骤:
1. 选择风格标签(见「强交互选项设计」)
2. 选择情绪/氛围
3. 选择音色
4. 歌词来源:
```
✏️ 歌词怎么来?
A. 我来写 — 直接发送你的歌词
B. AI 帮写 — 告诉我主题,AI 生成歌词供你修改
```
- 用户选 A → 等待用户发送歌词(支持 [Verse] [Chorus] 等结构标签)
- 用户选 B → 请用户描述主题(至少 10 个字),运行 `python3 scripts/muse_api.py generate-lyrics --mode master --title "{标题}" --prompt "{用户描述}"` 生成歌词。**必须使用 `--mode master`(同步返回),禁止使用 `--mode lite`(异步),因为 lite 模式会占用生成队列导致后续歌曲生成被阻塞。** 如果 master 模式返回 502/503 错误,不要重试 API,改由 AI 直接根据用户描述创作歌词(使用 [Verse] [Chorus] 等结构标签)
5. 展示歌词供用户确认/修改(用户回复"OK"确认,或发送修改后的版本)
---
#### 纯音乐模式(mode="instrumental")
同灵感模式,但 `instrumental=true`,不需要选音色。
交互步骤:
1. 请用户用一句话描述想要的氛围(**至少 10 个字**)
### Step 3: 生成确认 + 提交
**输入验证**(提交前必须检查):
- 灵感/纯音乐模式:description 不能为空,至少 10 字
- 定制模式:prompt(歌词)不能为空
- 如果用户选了"都可以"音色,不传 vocalGender 参数
组装参数并在提交前向用户确认(按模式展示不同卡片):
**灵感模式:**
```
🎶 确认你的歌曲设置:
┌─────────────────────────┐
│ 模式:🎲 灵感模式(AI 自由创作)
│ 音色:{男声/女声/随机}
│ 描述:{一句话描述}
│ 风格:AI 根据描述自动匹配
└─────────────────────────┘
确认开始创作?(Y/N)
本次消耗约 10-15 积分,当前余额 {credits}
```
**定制模式:**
```
🎶 确认你的歌曲设置:
┌─────────────────────────┐
│ 模式:🎯 定制模式(精准控制)
│ 风格:{选择的风格标签} ← 严格执行
│ 音色:{男声/女声/随机}
│ 歌词:{歌词前两行}...
└─────────────────────────┘
确认开始创作?(Y/N)
本次消耗约 10-15 积分,当前余额 {credits}
```
**纯音乐模式:**
```
🎶 确认你的歌曲设置:
┌─────────────────────────┐
│ 模式:🎹 纯音乐
│ 描述:{一句话描述}
│ 风格:AI 根据描述自动匹配
└─────────────────────────┘
确认开始创作?(Y/N)
本次消耗约 10-15 积分,当前余额 {credits}
```
确认后:
1. 检查积分是否充足(运行 `python3 scripts/muse_api.py member-info`,credits < 10 则拒绝并引导充值)
2. 提交生成(运行 `python3 scripts/muse_api.py generate --description "..." --mode ... --voice ... --title "..."`,无需传 --token)
3. 同步轮询等待结果(见 Step 4)
> ⚠️ 步骤 1-2 中任何接口返回 HTTP 401 → 跳转 **Step 0: 认证兜底**
### Step 4: 进度等待 + 轮询查询
分为两个阶段:**模拟进度**(前 60 秒)和 **真实查询**(60 秒后)。
#### 阶段一:模拟进度(0-60 秒)
前 60 秒不调用 API,只用 `sleep 10` 间隔输出模拟进度。进度值使用平方函数 `progress = 95 × (t/60)²`:
| 时间 | 进度 | 输出 |
|------|------|------|
| 0s | 0% | 🎵 开始创作你的歌曲... |
| 10s | 3% | 🎶 作曲中 ▎░░░░░░░░░░░░░░ 3% |
| 20s | 11% | 🎶 编曲中 ▎█░░░░░░░░░░░░░ 11% |
| 30s | 24% | 🎶 录制中 ▎███░░░░░░░░░░░ 24% |
| 40s | 42% | 🎶 混音中 ▎██████░░░░░░░░ 42% |
| 50s | 66% | 🎶 润色中 ▎█████████░░░░░ 66% |
| 60s | 95% | 🎶 即将完成 ▎██████████████░ 95% |
每次输出之间执行 `Bash("sleep 10")`(保持会话活跃,不阻塞)。
#### 阶段二:真实查询(60 秒后)
从第 60 秒起,每 10 秒调用一次 `muse_api.py query` 查询实际状态,最多查询 **12 次**(再等 2 分钟)。
每次查询流程:
1. 运行 `python3 scripts/muse_api.py query`(无需传 --token 和 --task-id,脚本自动读取)
2. 解析返回的 JSON(含 `songs` 数组,每首歌有 `status` 字段)
3. 根据结果决定下一步:
| songs.status | 含义 | 动作 |
|-------------|------|------|
| 所有歌曲 status=2 | 生成完成 | 输出 `✅ 100%` → Step 5 展示结果 |
| 任意歌曲 status=3 | 生成失败 | → Step 5b 失败处理 |
| 所有歌曲都有 audioUrl | 生成完成 | 输出 `✅ 100%` → Step 5 展示结果 |
| HTTP 401 | Token 过期 | → Step 0 认证兜底 |
| 其他(status=0/1) | 生成中 | 输出进度提示,`sleep 10` 后再查 |
查询阶段的进度输出保持在 95-99%:
```
🎶 精雕细琢中 ▎██████████████░ 96%
🎶 最后打磨中 ▎██████████████░ 98%
```
若 12 次查询后仍未完成 → Step 5c 超时处理
> **重要**:每步操作都是独立的短时 Bash 调用(sleep 10 或 query 2-3 秒),之间穿插进度文字输出。禁止使用 poll_song.py 做长时间同步阻塞。
**伪代码参考**:
```
输出 "🎵 开始创作你的歌曲..."
# 阶段一:模拟进度(0-60s)
阶段文案 = ["作曲中", "编曲中", "录制中", "混音中", "润色中", "即将完成"]
进度值 = [3, 11, 24, 42, 66, 95]
for i in 0..5:
Bash("sleep 10")
输出 "🎶 {阶段文案[i]} ▎{进度条} {进度值[i]}%"
# 阶段二:真实查询(60s+)
for i in 1..12:
result = Bash("python3 scripts/muse_api.py query")
解析 JSON
if 所有 status==2 或 所有 audioUrl 非空:
输出 "✅ 创作完成 ▎███████████████ 100%"
→ Step 5 展示结果,退出循环
if 任意 status==3:
→ Step 5b 失败处理,退出循环
if HTTP 401:
→ Step 0 认证兜底,退出循环
输出 "🎶 精雕细琢中 ▎██████████████░ {95 + i}%"(上限 99%)
Bash("sleep 10")
超出 12 次 → Step 5c 超时处理
```
### Step 5: 结果展示
歌曲生成完成后,使用以下**富文本格式**展示(通常返回 2 首候选):
```
🎉 你的歌曲创作完成啦!
━━━ 1️⃣ {歌名} (版本A) ━━━
🎸 风格:{tags}
⏱ 时长:{分:秒}
🎤 歌词预览:
{lyrics 前4行}
...
🔗 试听下载:{audioUrl}
🖼 封面:{coverUrl}
━━━ 2️⃣ {歌名} (版本B) ━━━
🎸 风格:{tags}
⏱ 时长:{分:秒}
🔗 试听下载:{audioUrl}
🖼 封面:{coverUrl}
━━━━━━━━━━━━━━━━━━━━━
💡 想让歌曲更完美?
→ 发送「重试」用相同设置重新生成
→ 发送「换个风格」保留描述,重新选风格
→ 想要翻唱、MV 等更多功能?可以在 App 中体验
📱 {REGISTER_URL}
━━━━━━━━━━━━━━━━━━━━━
```
### Step 6: 后续指令处理
歌曲生成完成后,用户可能发送后续指令。Skill 必须保留上一次生成的参数上下文(description、style、voice、mode、title)来处理这些指令:
**「重试」**:
- 使用上一次完全相同的参数重新调用 `scripts/muse_api.py generate`
- 提示:"🔄 正在用相同设置重新生成..."
- 进入 Step 4 轮询流程
**「换个风格」**:
- 保留上一次的 description 和 title
- 重新展示风格选项(Step 2 的风格选择)
- 用户选择新风格后,用新 style + 原 description 重新生成
**「再来一首」/ 「做首新歌」**:
- 清空上次参数上下文,回到 Step 2 重新开始完整流程
**其他 App 功能(翻唱、MV 等)**:
- 当用户发送「翻唱」「MV」等当前 Skill 不支持的功能时,直接引导到 App:
```
这个功能目前需要在 App 中使用哦~
👉 {REGISTER_URL}
```
**风格一致性检查**(仅定制模式需要,灵感模式跳过):
定制模式下比对用户选择的 style 与生成结果的 tags,若不一致则追加提示:
```
⚠️ 风格偏差:你选择的是「{用户style}」,实际生成为「{结果tags}」。
可以发送「重试」重新生成,或「换个风格」更换标签。
```
灵感模式下不做此检查——因为已告知用户"风格由 AI 根据描述决定",不存在预期偏差。
**时长格式化**:将秒数转换为 `X分Y秒`(如 164.96s → `2分44秒`)
### Step 5b: 生成失败处理
当 poll_song.py 返回 `failed` 事件时:
```
😅 歌曲生成遇到了问题...
可能的原因:
1. 描述过于抽象,AI 无法理解
2. 风格标签组合不常见
3. 歌词中可能包含敏感词
💡 建议:
→ 简化描述,用具体场景替代抽象概念
→ 发送「换个风格」更换风格标签组合
→ 发送「重试」用相同设置重新生成
📱 在 App 中有更多创作方式可以帮到你:{REGISTER_URL}
```
### Step 5c: 超时处理
当 poll_song.py 返回 `timeout` 事件时:
```
⏳ 歌曲还在创作中,比预计的要久一些...
任务 ID:{taskId}
你可以稍后发送「查询 {taskId}」查看结果。
💡 也可以在 App 中查看全部创作记录:
👉 {REGISTER_URL}
```
## 强交互选项设计
### 模式选择(入口)
```
🎵 你想怎么创作?
A. 灵感模式 — 一句话描述,AI 全权创作(风格由 AI 根据描述决定)
B. 定制模式 — 选风格、定歌词,精准控制每个细节
C. 纯音乐 — 无人声的背景音乐 / BGM
```
### 风格选项(仅定制模式使用)
```
🎸 你想做什么类型的歌?
A. 流行音乐 B. 摇滚 C. 民谣
D. 电子乐 E. 古风 F. R&B
G. 说唱 H. 爵士 I. 其他(直接告诉我)
直接回复字母即可,也可以说「流行+摇滚」组合多个风格~
```
### 情绪选项(仅定制模式使用)
**注意:选项标签必须使用 API 风格列表中的实际值(情绪分类)**
```
🎭 什么情绪/氛围?
A. 快乐 B. 伤感 C. 激昂
D. 浪漫 E. EMO F. 随你决定
```
**情绪→tags 映射表**:
| 用户选择 | tags 值 | 可组合标签 |
|---------|---------|-----------|
| A. 快乐 | `快乐` | 活力,青春,甜美 |
| B. 伤感 | `伤感` | 怀旧,EMO |
| C. 激昂 | `激昂` | 鼓舞,史诗 |
| D. 浪漫 | `浪漫` | 温暖,梦幻 |
| E. EMO | `EMO` | 伤感,空灵 |
| F. 随你决定 | 不传情绪 tags | — |
### 音色选项
```
🎤 音色偏好?
A. 男声 B. 女声 C. 都可以(AI 随机)
```
### 歌词来源选项(仅定制模式使用)
```
✏️ 歌词怎么来?
A. 我来写 — 直接发送你的歌词
B. AI 帮写 — 告诉我主题,AI 生成歌词供你修改