安装方式
命令行安装
在项目根目录执行以下命令,完成 Skill 安装。
npx bzskills add MiniMax-AI/skills --skill minimax-music-playlist 通过分析用户的音乐品味和生成反馈历史,生成个性化音乐播放列表。触发条件为任何涉及播放列表生成、音乐品味分析或个人化音乐推荐的请求。支持多语言触发——匹配任何语言的等效短语。
42
下载量
命令行安装
在项目根目录执行以下命令,完成 Skill 安装。
npx bzskills add MiniMax-AI/skills --skill minimax-music-playlist name: minimax-music-playlist
description: 通过分析用户的音乐品味和生成反馈历史,生成个性化音乐播放列表。触发条件为任何涉及播放列表生成、音乐品味分析或个人化音乐推荐的请求。支持多语言触发——匹配任何语言的等效短语。
license: MIT
metadata:
version: "2.0"
category: creative扫描用户的音乐品味,构建品味画像,生成个性化播放列表并创作专辑封面。该技能同时支持代理直接调用和用户直接调用——根据上下文调整交互风格。
npm install -g mmx-cli。认证:mmx auth login --api-key <key>。mpv、ffplay 或 afplay(macOS 内置)。根据用户消息检测用户语言。所有面向用户的文本必须与用户提示使用相同语言——不要混用语言。如果用户用中文书写,所有输出(画像摘要、主题建议、播放列表计划、播放信息)必须完全使用中文。如果用户用英文书写,则全部使用英文。
所有 mmx 生成提示应使用英文以获得最佳质量。
每首歌曲的歌词语言遵循其流派(K-pop → 韩语,J-pop → 日语等),而非用户的界面语言。
---
1. 扫描本地音乐应用 → 2. 构建品味画像 → 3. 规划播放列表
→ 4. 生成歌曲(mmx music) → 5. 生成封面(mmx image) → 6. 播放 → 7. 保存与反馈
---
从可用来源收集用户的收听数据。
支持的来源:
| 来源 | 方法 | 数据格式 |
|---|---|---|
| Apple Music | 使用 osascript 查询 Music.app(官方 AppleScript 接口) | 曲目名称、艺术家、专辑、流派、播放次数 |
| Spotify | 用户通过 Spotify 隐私设置 自行导出数据 | ZIP 中的 JSON 文件(Streaming_History_Audio_*.json) |
| 手动输入 | 用户直接描述他们的品味 | 自由文本 |
Spotify 数据导出流程:
Spotify 不在本地存储有用数据。为了包含 Spotify 收听历史,首先检查用户是否已有 Spotify 数据导出:
find ~ -maxdepth 4 -name "my_spotify_data.zip" -o -name "Streaming_History_Audio_*.json" 2>/dev/nullSpotify Extended Streaming History/Streaming_History_Audio_*.jsonopen https://www.spotify.com/account/privacy/Spotify 数据格式:
导出文件包含 Streaming_History_Audio_YYYY.json 文件(每年一个),每个文件是一个 JSON 数组形式的收听事件。需要提取的关键字段:
master_metadata_album_artist_name — 艺术家名称master_metadata_track_name — 曲目名称master_metadata_album_album_name — 专辑名称ms_played — 播放时长(毫秒),作为权重(越长=信号越强)ts — 时间戳过滤掉 ms_played < 30000(少于30秒,可能跳过)的条目。不要使用或存储 ip_addr 或其他敏感字段。
从每个来源提取的内容:
方法:
osascript 查询)隐私规则: 永远不要向用户显示原始曲目列表。仅显示聚合统计数据。
---
从扫描的数据中构建品味画像,涵盖以下内容:
如何从艺术家名称推断流派/情绪:
大多数原始数据只包含艺术家和曲目名称,没有流派标签。为了丰富数据:
<SKILL_DIR>/data/artist_genre_map.json 的本地映射表中查找艺术家——该表覆盖 20,000 位热门艺术家,预先映射了流派、人声类型和语言
https://musicbrainz.org/ws/2/artist/?query=artist:<name>&fmt=json
——从响应中提取流派标签;遵守速率限制(1 请求/秒)
——将结果缓存到 <SKILL_DIR>/data/artist_cache.json 以避免重复查询
画像缓存:
<SKILL_DIR>/data/taste_profile.json向用户显示摘要:
您的音乐画像:
数据来源:Apple Music 230 | Spotify 140
流派:J-pop 20% | R&B 15% | 古典 10% | 独立流行 9%
情绪:忧郁 25% | 平静 20% | 浪漫 18%
人声:女声 65% | 男声 35%
热门艺术家:王菲、坂本龙一、Taylor Swift、周杰伦、大贯妙子
如果由代理使用明确参数调用,则跳过确认直接进行。
如果由用户直接调用,则在继续之前询问画像是否正确。
---
在生成之前询问用户主题/场景。 这是工作流程中唯一的交互步骤。其他所有步骤自动运行。
如果调用时已经提供了主题(例如,代理或用户说“生成一个深夜放松播放列表”),则直接使用并跳过提问。否则,询问:
您希望播放列表采用什么主题?这里有一些建议:
- “深夜放松” — 放松的慢歌
- “通勤” — 欢快有活力的
- “雨天” — 忧郁舒适
- “给我惊喜” — 根据您的品味随机生成
或者告诉我您自己的氛围!
一旦用户选择了主题,自动进行生成、封面、播放和保存——无需进一步确认。
确定播放列表参数:
每首歌的歌词语言遵循流派:
| 流派 | 歌词语言 |
|---|---|
| K-pop、韩语 R&B/民谣 | 韩语 |
| J-pop、城市流行、J-rock | 日语 |
| C-pop、中国风、国语流行 | 中文 |
| 西方流行/独立/摇滚/爵士/R&B | 英语 |
| 拉丁流行、巴萨诺瓦 | 西班牙语/葡萄牙语 |
| 器乐、Lo-fi、氛围 | 无歌词(--instrumental) |
通过人声描述自然地嵌入语言:
"一首忧郁的中文 R&B 情歌,温柔的男声内省,电钢琴、贝斯,慢速""R&B 情歌,忧郁... 用中文演唱"在生成之前显示播放列表计划。 每首歌曲显示两行:第一行显示流派、情绪和人声/语言标签;第二行显示歌曲的简短描述。所有面向用户的文本(计划、描述、情绪、标签)必须与用户提示使用相同语言。 只有实际传递给 mmx 的 --prompt 参数应为英文——这是内部参数,不应向用户展示。示例:
播放列表计划:深夜放松(5 首歌曲)
1. 新灵魂 R&B — 内省 英语/男声
一首柔和的新灵魂 R&B 情歌,温暖的男中音,电钢琴,流畅的贝斯
2. Lo-fi 嘻哈 — 梦幻 纯器乐
梦幻 Lo-fi,采样钢琴,黑胶噼啪声,柔和的电子鼓
3. 流畅爵士 — 浪漫 英语/女声
丝滑女声,萨克斯风,钢琴,浪漫星光之夜
4. 独立民谣 — 忧郁 英语/男声
温柔的男声,原声吉他,口琴,安静的孤寂
5. 氛围电子 — 平静 纯器乐
柔和的合成器垫音,温柔的琶音,梦幻氛围
显示计划后,直接进行生成——无需确认。用户已经选择了主题;显示计划是为了透明,而不是为了批准。
---
使用 mmx music generate 创建所有歌曲。并发生成(最多并行 5 个)。
# 示例:5 首歌曲并行
mmx music generate --prompt "<英文提示词_1>" --lyrics-optimizer \
--out ~/Music/minimax-gen/playlists/<名称>/01_desc.mp3 --quiet --non-interactive &
mmx music generate --prompt "<英文提示词_2>" --instrumental \
--out ~/Music/minimax-gen/playlists/<名称>/02_desc.mp3 --quiet --non-interactive &
# ... 更多歌曲 ...
wait
关键标志:
--lyrics-optimizer — 从提示词自动生成歌词(用于人声曲目)--instrumental — 无演唱--vocals "<描述>" — 人声风格(例如,“温暖的中文男声男中音”)--genre、--mood、--tempo、--instruments — 精细控制--quiet --non-interactive — 抑制批量模式的交互式输出--out <路径> — 保存到文件文件命名: <NN>_<短描述>.mp3(例如,01_rnb_midnight.mp3)
输出目录: ~/Music/minimax-gen/playlists/<播放列表名称>/
如果歌曲生成失败,重试一次,若仍失败则跳过。记录错误并继续处理其余歌曲。
---
在步骤 4 生成歌曲的同时并发生成专辑封面,而非之后。将 mmx image generate 调用与歌曲生成调用并行启动。
构造一个反映播放列表主题、情绪和流派混合的提示词。图像应具有专辑封面的艺术感、唤起共鸣,而非直白描述。
mmx image generate \
--prompt "<基于播放列表主题和情绪的封面描述>" \
--aspect-ratio 1:1 \
--out-dir ~/Music/minimax-gen/playlists/<播放列表名称>/ \
--out-prefix cover \
--quiet
提示词指导:
---
检测可用的播放器并按顺序播放播放列表:
| 播放器 | 命令 | 控制 |
|---|---|---|
| mpv | mpv --no-video <文件> | q 跳过,空格暂停,方向键快进/快退 |
| ffplay | ffplay -nodisp -autoexit <文件> | q 跳过 |
| afplay | afplay <文件> | Ctrl+C 跳过 |
按文件名顺序播放播放列表目录中的所有 .mp3 文件。仅播放本次会话生成的歌曲——如果目录中有先前运行的旧文件,先清除它们或根据已知文件名过滤。如果未找到播放器,则仅显示文件路径。
---
将播放列表元数据保存到 <playlist_dir>/playlist.json:
{
"name": "深夜放松",
"theme": "深夜放松",
"created_at": "2026-04-11T22:00:00",
"song_count": 5,
"cover": "cover_001.png",
"songs": [
{"index": 1, "filename": "01_rnb_midnight.mp3", "prompt": "...", "rating": null}
]
}
如果用户在场,征求反馈(按歌曲或总体)。更新品味画像的反馈部分,记录喜欢/不喜欢的流派和提示词,以改进未来的播放列表。
---
如果要求播放之前的播放列表:ls ~/Music/minimax-gen/playlists/,显示可用的播放列表,并播放所选的那个。
---
<SKILL_DIR> = 包含此 SKILL.md 文件的目录。数据/缓存文件放在 <SKILL_DIR>/data/ 中。