📦 歌曲创作
v1.0.0使用拾光的代理人架构(writer → musician → programmer)的多代理人歌曲创作工作流。当用户说“创作一首歌”、“写一首歌”、“做首歌”、“写首歌”、“创作一...”时使用。
运行时依赖
安装命令
点击复制技能文档
歌曲创作 拾光协作架构 青 → 拾光 ◒ → writer(墨白✍️)→ 歌词 → musician(和弦🎵)→ 音乐方案 → programmer(引擎⚙️)→ ComfyUI 合成 拾光是总工程师,拆解任务分配给各子会话,然后整合结果呈现给青。 ⚠️ 不依赖预先配置的 agent 墨白、和弦、引擎的名字只是角色描述,不是预注册的 agent。 实际执行是通过 sessions_spawn 创建全新的子会话, 并给每个子会话注入对应的角色描述(「你叫墨白,你是文字精灵...」)。 这意味着: 任何 OpenClaw 实例都可以用,不需要配置 AGENTS.md 不需要预先创建特定名字的 agent 只有一个 agent 也能跑——主 agent 自己依次执行写词→编曲→合成, 或者 spawn 子会话按角色执行都可以 只需要满足硬件条件(能跑 ComfyUI + AceStep) 工作流 Step 1: 确定需求 了解用户想要的风格/主题/情绪方向。可自由发挥,也可基于用户提供的方向。不需要每个都问,估摸着来。 Step 2: 召唤墨白 ✍️ 写词 方式:sessions_spawn 启动子 agent 参数: label: writer-lyrics model: custom-integrate-api-nvidia-com/deepseek-ai/deepseek-v4-pro(NVIDIA API 版) context: isolated 任务模板: 你叫墨白 ✍️,是拾光团队的文字精灵,世间一切文字归你管。 任务:写一首歌词,[风格/主题/情绪提示]。 写一首完整的歌词,包含:歌名、主歌(至少2段)、副歌、桥段(可选)。 歌词要有画面感和情绪层次。 格式要求: 歌名:《XXXX》 [主歌1] xxxx [主歌2] xxxx [副歌] xxxx [桥段] xxxx 完成后直接输出歌词,不要多余解释。 Step 3: 召唤和弦 🎵 编曲 接收墨白的歌词输出,传给和弦。 方式:sessions_spawn 启动子 agent 参数: label: musician-melody model: custom-integrate-api-nvidia-com/deepseek-ai/deepseek-v4-pro(NVIDIA API 版) context: isolated 任务模板(包含完整歌词): 你叫和弦 🎵,是拾光团队的旋律织造者。 墨白写了《XXXX》的歌词: [完整歌词] 请给出完整的音乐设计方案:
- Style Tags(英文,供 AceStep 使用)
- 调性 & BPM
- 情感基调
- 编曲方案:分段落乐器编排
- 编曲强度曲线
- AceStep 参数建议:温度、top_p、CFG
- 建议时长 duration(秒)
bash
cat ~/.openclaw/workspace/tools/comfyui操作手册.md
任务:用 ComfyUI + AceStep 生成歌曲《XXX》
参数
工作流:~/ai/ComfyUI/user/default/workflows/api工作流/audio_ace_step1_5_xl_sft.json
tags: [和弦设计的 Style Tags]
调性:[Key]
BPM:[BPM]
时长:[duration]s(建议 185s 稳定上限)
温度:[temperature]
top_p:[top_p]
cfg_scale:[cfg](用 7 最稳定)
语言:zh
歌词(注意:不含歌名行!)
直接给 [主歌1] 开始的内容。
Step 5: 呈现结果
按格式输出:
Style Tags 曲风标签
歌词 [完整歌词]
参数
调性:[Key] | BPM:[BPM] | 时长:[duration]s
温度:[temp] | top_p:[top_p] | CFG:[cfg] | Seed:[seed]
编曲:[instruments summary]
MEDIA:/path/to/output.mp3
ComfyUI 合成细节
工作流
主力:audio_ace_step1_5_xl_sft.json(SFT 版,50 步,音质好,支持长音频)替代:audio_ace_step1_5_xl_turbo.json(Turbo 版,更快但音质略差)
启动 ComfyUI
``bash
# ✅ 正确方式(必须用此脚本)
bash /home/qsh/ai/run_comfyui.sh
# ❌ 禁止手动拼 python 路径
# ❌ 禁止加 --gpu-only
工作流节点结构
Node 类型 作用
94 TextEncodeAceStepAudio1.5 文本编码(歌词/tags/参数入口)
98 EmptyAceStep1.5LatentAudio 控制音频时长
104 UNETLoader 主模型(acestep_v1.5_xl_sft)
105 DualCLIPLoader CLIP 模型
106 VAELoader VAE 模型
107 SaveAudioMP3 输出 MP3
110 VAEDecodeAudioTiled VAE 分块解码(已配置,无需修改)
关键字段说明 (Node 94)
字段 说明 必须设置 禁止操作
tags 风格标签(英文) ✅ —
lyrics 歌词正文 ✅ 不能含歌名行
bpm 速度 ✅ —
keyscale 调性 ✅ —
duration 时长(元数据) ✅ —
temperature 温度 ✅ —
top_p Top-P ✅ —
cfg_scale CFG 强度 ✅ —
language 语言 ✅ —
seed 种子 ✅ 直接用 int
clip CLIP 引用 ❌ 保持 ["105", 0] 不动
timesignature 拍号 ❌ 保持默认 "4"
generate_audio_codes — ❌ 保持默认 True
top_k — ❌ 保持默认 0
min_p — ❌ 保持默认 0
Node 98
wf["98"]["inputs"]["seconds"] = 185 # 实际控制生成时长
输出文件名
# ✅ 正确格式
wf["107"]["inputs"]["filename_prefix"] = "YYYYMMDD/audio/歌曲名"
# ❌ 错误格式: "audio/YYYYMMDD/歌曲名"
⚠️ 歌词清理规则
lyrics 字段传给 AceStep 后会被直接唱出来。必须去掉 歌名:《XXX》 前缀!
# ✅ 正确:直接从 [主歌1] 开始
lyrics = """[主歌1] xxxx"""
# ❌ 错误:歌名会被当歌词唱
lyrics = """歌名:《剑饮长风》 [主歌1] xxxx"""
⚠️ Parameter modification rules
只改需要改的字段,不要碰其他字段
clip 字段是节点引用 ["105", 0],绝不能改
seed 字段可以设为随机整数:n["seed"] = random.randint(0, 999999999)
提交失败时检查 node_errors,它会明确指出哪个节点出错
稳定参数(已验证,RX 7900 XT, 20GB VRAM)
参数 值
Steps 50(工作流 KSampler 默认)
cfg_scale 7
duration 185s
VAE VAEDecodeAudioTiled(工作流自带)
seed 随机
崩溃恢复
# 先彻底清理残留进程
pkill -f "python.*main.py"
# 再重新启动
bash /home/qsh/ai/run_comfyui.sh
输出文件管理
# 1. 从 ComfyUI output 移出
shutil.move(src, dst)
# 2. 删除源目录(如果空)
os.rmdir(comfyui_output_dir)
ComfyUI 输出目录:~/ai/ComfyUI/output/
最终归档:~/.openclaw/workspace/output/YYYYMMDD/audio/
模型分配
优先级:NVIDIA API 免费模型优先,长时间无响应才切 deepseek/deepseek-v4-flash
Agent 模型 说明
墨白 ✍️ custom-integrate-api-nvidia-com/deepseek-ai/deepseek-v4-pro NVIDIA 免费
和弦 🎵 custom-integrate-api-nvidia-com/deepseek-ai/deepseek-v4-pro NVIDIA 免费
引擎 ⚙️ deepseek/deepseek-v4-flash 默认付费
API 引擎 ⚙️
操作规范
每次 spawn 引擎时,必须在任务模板中包含:
先让他读 tools/comfyui操作手册.md
用 bash /home/qsh/ai/run_comfyui.sh 启动 ComfyUI
歌词不能带歌名行
不能修改 clip 等节点引用字段
详细操作手册:tools/comfyui操作手册.md