返回全部 Skills

minimax-music-playlist

其他 官方认证

通过分析用户的音乐品味和生成反馈历史,生成个性化音乐播放列表。触发条件为任何涉及播放列表生成、音乐品味分析或个人化音乐推荐的请求。支持多语言触发——匹配任何语言的等效短语。

41

下载量

AI SkillHub 能力展示图

安装方式

命令行安装

在项目根目录执行以下命令,完成 Skill 安装。

npx bzskills add MiniMax-AI/skills --skill minimax-music-playlist

skill.md

name: minimax-music-playlist
description: 通过分析用户的音乐品味和生成反馈历史,生成个性化音乐播放列表。触发条件为任何涉及播放列表生成、音乐品味分析或个人化音乐推荐的请求。支持多语言触发——匹配任何语言的等效短语。
license: MIT
metadata:
    version: "2.0"
    category: creative

MiniMax 音乐播放列表 — 个性化播放列表生成器

扫描用户的音乐品味,构建品味画像,生成个性化播放列表并创作专辑封面。该技能同时支持代理直接调用和用户直接调用——根据上下文调整交互风格。

前置条件

  • mmx CLI — 音乐和图像生成。安装:npm install -g mmx-cli。认证:mmx auth login --api-key <key>
  • Python 3 — 用于即时编写的扫描脚本(仅标准库,无需 pip)。
  • 音频播放器mpvffplayafplay(macOS 内置)。

语言

根据用户消息检测用户语言。所有面向用户的文本必须与用户提示使用相同语言——不要混用语言。如果用户用中文书写,所有输出(画像摘要、主题建议、播放列表计划、播放信息)必须完全使用中文。如果用户用英文书写,则全部使用英文。

所有 mmx 生成提示应使用英文以获得最佳质量。

每首歌曲的歌词语言遵循其流派(K-pop → 韩语,J-pop → 日语等),而非用户的界面语言。

---

工作流程

1. 扫描本地音乐应用 → 2. 构建品味画像 → 3. 规划播放列表
→ 4. 生成歌曲(mmx music) → 5. 生成封面(mmx image) → 6. 播放 → 7. 保存与反馈

---

步骤 1:收集音乐收听数据

从可用来源收集用户的收听数据。

支持的来源:

来源方法数据格式
Apple Music使用 osascript 查询 Music.app(官方 AppleScript 接口)曲目名称、艺术家、专辑、流派、播放次数
Spotify用户通过 Spotify 隐私设置 自行导出数据ZIP 中的 JSON 文件(Streaming_History_Audio_*.json
手动输入用户直接描述他们的品味自由文本

Spotify 数据导出流程:

Spotify 不在本地存储有用数据。为了包含 Spotify 收听历史,首先检查用户是否已有 Spotify 数据导出:

  1. 搜索已有导出:find ~ -maxdepth 4 -name "my_spotify_data.zip" -o -name "Streaming_History_Audio_*.json" 2>/dev/null
  2. 如果找到,询问用户是否要使用
  3. 如果是 ZIP 文件,解压并找到 Spotify Extended Streaming History/Streaming_History_Audio_*.json
  4. 如果未找到,打开 Spotify 隐私页面:open https://www.spotify.com/account/privacy/
  5. 告诉用户登录,滚动到“下载您的数据”,点击“请求数据”
  6. 暂时跳过 Spotify,继续使用其他来源——告知用户数据导出到达后(通常需要几天)可以重新运行播放列表技能

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 或其他敏感字段。

从每个来源提取的内容:

  • 曲目名称 + 艺术家名称(主要信号)
  • 播放列表名称和所属关系(例如,名为“中国风”的播放列表指示流派偏好)
  • 播放次数或流媒体时长(如果可用,则对高频播放曲目加权)
  • 场景/情绪标签(如果可用)

方法:

  1. 检查 Apple Music 是否可用(尝试 osascript 查询)
  2. 询问用户是否提供 Spotify 数据导出 ZIP 文件
  3. 如果没有可用来源,请用户手动描述他们的品味

隐私规则: 永远不要向用户显示原始曲目列表。仅显示聚合统计数据。

---

步骤 2:构建品味画像

从扫描的数据中构建品味画像,涵盖以下内容:

  • 流派分布 — 用户收听哪些风格(例如,J-pop 20%,R&B 15%,古典 10%)
  • 情绪倾向 — 情感基调偏好(忧郁、充满活力、平静、浪漫等)
  • 人声偏好 — 男声与女声的比例
  • 节奏偏好 — 慢速/中等/欢快/快速的分布
  • 语言分布 — zh、en、ja、ko 等
  • 热门艺术家 — 收听最多的艺术家

如何从艺术家名称推断流派/情绪:

大多数原始数据只包含艺术家和曲目名称,没有流派标签。为了丰富数据:

  1. <SKILL_DIR>/data/artist_genre_map.json 的本地映射表中查找艺术家

——该表覆盖 20,000 位热门艺术家,预先映射了流派、人声类型和语言

  1. 对于映射表中未包含的艺术家,查询 MusicBrainz API:

https://musicbrainz.org/ws/2/artist/?query=artist:<name>&fmt=json

——从响应中提取流派标签;遵守速率限制(1 请求/秒)

——将结果缓存到 <SKILL_DIR>/data/artist_cache.json 以避免重复查询

  1. 如果 MusicBrainz 未返回结果,则跳过该艺术家

画像缓存:

  • 将画像保存到 <SKILL_DIR>/data/taste_profile.json
  • 如果存在小于 7 天的画像,则重用(提供重新扫描选项)
  • 如果更旧或缺失,则重新构建

向用户显示摘要:

您的音乐画像:
  数据来源:Apple Music 230 | Spotify 140
  流派:J-pop 20% | R&B 15% | 古典 10% | 独立流行 9%
  情绪:忧郁 25% | 平静 20% | 浪漫 18%
  人声:女声 65% | 男声 35%
  热门艺术家:王菲、坂本龙一、Taylor Swift、周杰伦、大贯妙子

如果由代理使用明确参数调用,则跳过确认直接进行。

如果由用户直接调用,则在继续之前询问画像是否正确。

---

步骤 3:规划播放列表

在生成之前询问用户主题/场景。 这是工作流程中唯一的交互步骤。其他所有步骤自动运行。

如果调用时已经提供了主题(例如,代理或用户说“生成一个深夜放松播放列表”),则直接使用并跳过提问。否则,询问:

您希望播放列表采用什么主题?这里有一些建议:

- “深夜放松” — 放松的慢歌
- “通勤” — 欢快有活力的
- “雨天” — 忧郁舒适
- “给我惊喜” — 根据您的品味随机生成

或者告诉我您自己的氛围!

一旦用户选择了主题,自动进行生成、封面、播放和保存——无需进一步确认。

确定播放列表参数:

  • 主题/情绪 — 来自用户输入,或默认使用画像中的最高情绪
  • 歌曲数量 — 来自用户输入,或默认为 5
  • 流派混合 — 按画像加权,确保多样性

每首歌的歌词语言遵循流派:

流派歌词语言
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. 氛围电子 — 平静  纯器乐
   柔和的合成器垫音,温柔的琶音,梦幻氛围

显示计划后,直接进行生成——无需确认。用户已经选择了主题;显示计划是为了透明,而不是为了批准。

---

步骤 4:生成歌曲

使用 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/<播放列表名称>/

如果歌曲生成失败,重试一次,若仍失败则跳过。记录错误并继续处理其余歌曲。

---

步骤 5:生成专辑封面

在步骤 4 生成歌曲的同时并发生成专辑封面,而非之后。将 mmx image generate 调用与歌曲生成调用并行启动。

构造一个反映播放列表主题、情绪和流派混合的提示词。图像应具有专辑封面的艺术感、唤起共鸣,而非直白描述。

mmx image generate \
  --prompt "<基于播放列表主题和情绪的封面描述>" \
  --aspect-ratio 1:1 \
  --out-dir ~/Music/minimax-gen/playlists/<播放列表名称>/ \
  --out-prefix cover \
  --quiet

提示词指导:

  • 抽象/艺术风格最适合专辑封面
  • 引用主导情绪和流派(例如,“梦幻的深夜城市景观,霓虹倒影,Lo-fi 美学”)
  • 不要在图像提示词中包含文字或歌曲标题
  • 宽高比应为 1:1(正方形,标准专辑封面)

---

步骤 6:播放

检测可用的播放器并按顺序播放播放列表:

播放器命令控制
mpvmpv --no-video <文件>q 跳过,空格暂停,方向键快进/快退
ffplayffplay -nodisp -autoexit <文件>q 跳过
afplayafplay <文件>Ctrl+C 跳过

按文件名顺序播放播放列表目录中的所有 .mp3 文件。仅播放本次会话生成的歌曲——如果目录中有先前运行的旧文件,先清除它们或根据已知文件名过滤。如果未找到播放器,则仅显示文件路径。

---

步骤 7:保存与反馈

将播放列表元数据保存到 <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/,显示可用的播放列表,并播放所选的那个。

---

注意事项

  • 代理 vs 用户调用:主题/场景问题(步骤 3)是唯一的交互点。如果调用时已经提供了主题,则跳过该问题。其他所有步骤自动运行。
  • 无硬编码脚本:根据需要即时编写扫描/分析脚本。仅使用 Python 标准库。缓存结果以避免重复工作。
  • 技能目录<SKILL_DIR> = 包含此 SKILL.md 文件的目录。数据/缓存文件放在 <SKILL_DIR>/data/ 中。
  • 所有 mmx 提示词使用英文以获得最佳生成质量。