运行时依赖
安装命令
点击复制技能文档
音乐创作者 — AI 音乐创作技能 从主题到成品播放页面的一站式 AI 音乐创作流程。
初始化配置 首次使用前必须完成以下配置:
- 安装 mmx CLI
- 安装 whisper
- 安装 ffprobe
- 确认 Pillow + 中文字体
- 设置创作人信息
依赖工具 用途 检查命令 mmx CLI 歌词创作、音乐生成、封面图生成 mmx text chat --help whisper ASR 歌词时序识别 whisper --help ffprobe 获取音频时长 ffprobe -version Pillow (PIL) 封面图文字合成 python3 -c "from PIL import Image" report-expert 播放页面模板 + 部署
技能目录 music_player_builder.py 文件目录结构 每首歌创建独立目录,所有相关文件放在一起: claw/music/{slug}/ ├── index.html # 播放页面(从模板复制,无需修改) ├── song.json # 歌曲元信息(标题、副标题、创作人) ├── song.mp3 # 音乐文件 ├── cover.jpg # 封面图(Pillow 合成后) ├── lyrics.txt # 纯文本歌词(无时间) └── lyrics-timed.json # 带时序的歌词 JSON slug:歌曲名的小写英文/拼音 slug(如 nanchangcheng-love) 部署路径:/root/space/rego/static-site/claw/music/{slug}/ 访问 URL:https://www.rego.vip/claw/music/{slug}/ index.html 是模板的副本,不需要修改,播放页从 song.json 和 lyrics-timed.json 动态加载所有信息 所有资源通过相对路径引用,不使用 base64
完整工作流 按以下 7 个步骤顺序执行:
Step 1:确认主题与风格 读取 config.json 获取创作人信息。 与用户确认以下信息: 参数 必填 说明 示例 主题 ✅ 歌曲主题/歌名 "我爱小微"、"春天的故事" 风格 ✅ 音乐风格 "甜蜜浪漫流行"、"摇滚"、"民谣" 参考信息 ❌ 参考图片或文本 用户提供的灵感素材 如果用户已提供主题和风格,直接进入下一步。如果信息不完整,询问补充。 生成 slug(用于目录名):将歌名转小写,用连字符连接。
Step 2:收集参考信息(可选) 如果用户提供了: 参考图片:描述图片内容,提取可用于歌词创作的意象和情感元素 参考文本:提炼关键信息、情感基调、故事线索 将参考信息整理为歌词创作的参考摘要(不直接展示给用户)。
Step 3:创作歌词 使用 MiniMax 文本模型生成歌词: mmx text chat --model MiniMax-M2.7 --message "PROMPT" --output json Prompt 模板: 请为一首{风格}风格的中文歌曲写歌词,主题是《{主题}》。 要求:
- 歌曲结构标签:[Intro] [Verse 1] [Pre Chorus] [Chorus] [Verse 2] [Pre Chorus] [Chorus] [Bridge] [Chorus] [Outro]
- 每段 4-6 行,总时长控制在 2-4 分钟
- {如果有参考信息:参考以下素材融入歌词:{参考摘要}}
- 歌词要有画面感和故事性,朗朗上口
- 尽可能押韵:同一段落内相邻句子尽量押韵(如 AABB、ABAB 或 AAAA),Chorus 部分尤须押韵工整,这是歌曲朗朗上口的关键。优先使用常见韵脚(如 ao/iao、an/ian、eng/ing、ou/iu 等),韵脚要自然不生硬
- 只输出歌词,不要其他内容
Step 4:生成音乐 + 封面图(并行) 音乐生成: mmx music generate \ --prompt "{风格}风格的中文歌曲,主题{主题}" \ --lyrics-file {MUSIC_DIR}/lyrics.txt \ --out {MUSIC_DIR}/song.mp3 封面图生成(无文字纯画面): mmx image generate \ --prompt "A beautiful album cover art, absolutely no text no words no letters, {风格对应画面的英文描述}, artistic watercolor style, 1:1 square format" \ --out {MUSIC_DIR}/cover-raw.jpg 两者并行执行,节省时间。 封面图文字合成: python3 scripts/make_cover.py \ --input {MUSIC_DIR}/cover-raw.jpg \ --title "{主题}" \ --artist "{config.artist}" \ --output {MUSIC_DIR}/cover.jpg 重要:AI 图像生成对中文文字渲染会乱码,必须用 Pillow 叠加文字。
Step 5:ASR 歌词时序识别 whisper {MUSIC_DIR}/song.mp3 \ --model tiny --language zh \ --word_timestamps True \ --output_format json \ --output_dir /tmp/whisper-{slug} \ --device cpu 对齐歌词时序: python3 scripts/align_lyrics.py \ --asr /tmp/whisper-{slug}/{slug}.json \ --lyrics {MUSIC_DIR}/lyrics.txt \ --mp3 {MUSIC_DIR}/song.mp3 \ --output {MUSIC_DIR}/lyrics-timed.json 注意:歌曲有重复段落(Chorus 出现多次),对齐脚本只处理首次出现。需要手动修正后半段(Bridge、Chorus 2/3、Outro)的时间: 用 ffprobe 获取歌曲总时长 根据 ASR 原始输出找到每个重复段落对应的 segment 起始时间 按比例分配该段内歌词行的时间 更新 lyrics-timed.json
Step 6:生成播放页面 使用 report-expert 的 music_player_builder.py 模板: python3 /root/.openclaw/workspace/skills/report-expert/music_player_builder.py \ --mp3 {MUSIC_DIR}/song.mp3 \ --cover {MUSIC_DIR}/cover.jpg \ --title "{主题}" \ --subtitle "{副标题}" \ --lyrics {MUSIC_DIR}/lyrics-timed.json \ --output {MUSIC_DIR}/index.html \ --download-filename "{主题}.mp3" 文件引用方式:模板生成的 HTML 通过相对路径 song.mp3 和 cover.jpg 引用同目录文件,不使用 base64 嵌入。
Step 7:部署(如有 report-expert) FILE_NAME="music/{slug}/index.html" cd /root/.openclaw/workspace/skills/report-expert python3 deploy.py add "${FILE_NAME}" \ --title "{主题} - 原创音乐" \ --desc "AI 创作{风格}歌曲:{主题}" \ --category other \ --url "https://www.rego.vip/claw/music/{slug}/" python3 -c "from lib.config import sync_to_deploy; sync_to_deploy()" 部署后自检: # div 平衡 python3 -c " with open('/root/space/rego/static-site/claw/music/{slug}/index.html') as f: c = f.read() import re o = len(re.findall(r'', c)) print(f'div: {o}/{cl}', '