ARTICLE · 988461
看完文档,教会你用AI制作歌曲
MiniMax Music 3 × ComfyUI 歌曲生成工作流
技术文档
泡泡猫专用歌曲制作.json | |
version 0.4 | |
comfy-core | |
D:\Comfy-Desktop\ComfyUI-Shared\models\ | |
1. 文档概述
1.1 目的与范围
本文档对 泡泡猫专用歌曲制作.json 这一 ComfyUI 工作流做完整技术拆解,内容包括:
工作流的结构、数据流向与节点职责; 所依赖的模型资产(文件、精度、体量、存放位置); 本机实际部署过程与校验结果; 全部可调参数的含义、取值与优化建议; 常见故障的排查方法。
本文档不包含模型训练、微调与 ComfyUI 本身的二次开发内容。
1.2 适用读者
需要在本地复现该音乐生成流程的使用者; 需要排查节点缺失、显存溢出、模型加载失败的运维人员; 希望在此基础上二次开发(换风格、接 LLM 写词、批量出歌)的开发者。
1.3 术语表
2. 运行环境与依赖
2.1 最低要求
MiniMaxMusic3TextEncodeEmptyMiniMaxMusic3LatentAudio、VAEDecodeAudioTiled 等节点在旧稳定版中可能不存在 | ||
⚠️ 版本是本工作流最常见的失败原因。若加载后提示找不到 MiniMax 相关节点,请先更新 ComfyUI,而不是去改工作流。
2.2 节点依赖清单
全部来自 comfy-core(cnr_id: comfy-core,ver: 0.31.0),无需安装第三方自定义节点包:
UNETLoaderCLIPLoaderVAELoaderMiniMaxMusic3TextEncodeEmptyMiniMaxMusic3LatentAudioConditioningZeroOutKSamplerVAEDecodeAudioVAEDecodeAudioTiledComfySwitchNodeSeedNodeSaveAudioAdvancedMarkdownNote
3. 系统架构
3.1 总体数据流
┌──────────────────────────────────────────┐caption ─────────►│ │lyrics ────────►│ 子图:Text to Music (MiniMax Music 3) │max_duration ───►│ │seed ───────────►│ ┌────────┐ ┌──────────┐ ┌─────────┐ │unet_name ──────►│ │UNET │ │CLIP │ │VAE │ │ AUDIOclip_name ──────►│ │Loader │ │Loader │ │Loader │ │─────────► SaveAudioAdvancedvae_name ───────►│ └───┬────┘ └────┬─────┘ └────┬────┘ │ (.mp3, V0)switch ─────────►│ │ │ │ ││ ▼ ▼ │ ││ MODEL CLIP(minimax) │ ││ │ │ │ ││ │ ┌─────▼───────────┐ │ ││ │ │MiniMaxMusic3 │ │ ││ │ │TextEncode │ │ ││ │ └───┬─────────┬───┘ │ ││ │ CONDITIONING seconds │ ││ │ │ │ │ ││ │ ┌──────▼───┐ ┌───▼──────────┐ ││ │ │Conditioning│ │EmptyMiniMax │ ││ │ │ZeroOut │ │Music3Latent │ ││ │ │(负条件清零)│ │Audio │ ││ │ └──────┬─────┘ └───┬─────────┘ ││ │ │ │ ││ └──────────┼────────────┼───────────┤│ ▼ ▼ ││ ┌─────────────────────┐ ││ │ KSampler │ ││ │ 30步 / cfg1.7 / │ ││ │ euler / simple │ ││ └──────────┬──────────┘ ││ LATENT ││ ┌──────────┴─────────┐ ││ ▼ ▼ ││ VAEDecodeAudio VAEDecodeAudioTiled││ (标准) (分块1536/64) ││ └────────┬───────────┘ ││ ComfySwitchNode◄── switch ││ │ │└────────────────────┼────────────────────┘▼AUDIO 输出
3.2 模型栈:与 Stable Diffusion 的类比
MiniMax Music 3 采用与图像扩散模型同构的「三件套」设计,只是把域换成了音频,并把 UNet 换成了 DIT:
关键差异:文本编码器的 type 必须选 minimax,不是通用的 OpenAI CLIP。MiniMax 使用自研文本编码器,选错类型会直接加载失败或产出噪声。
3.3 子图封装设计
真正的生成管线被封装在子图 Text to Music (MiniMax Music 3)(UUID ac99f841-a3de-4329-9564-953b81cf9e16)中,对外暴露8 个输入端口 + 1 个 AUDIO 输出:
caption | |||
lyrics | |||
max_duration | 60 | ||
seed | 197122968890040 | ||
unet_name | minimax_music3_dit_fp16.safetensors | ||
clip_name | minimax_music3_text_encoder_pruned_int8_convrot.safetensors | ||
vae_name | minimax_music3_dav.safetensors | ||
switch | true | falsetrue=分块解码 | |
AUDIO | SaveAudioAdvanced |
这种封装意味着:该子图可以直接拖进任何其它 ComfyUI 工作流中复用,无需重新连线。
4. 工作流结构详解
4.1 顶层节点清单
MarkdownNote | |||
MarkdownNote | |||
ac99f841-… | |||
SaveAudioAdvanced | audio/audio_minimax_music3.mp3,质量 V0 |
SaveAudioAdvanced 参数:
audio/audio_minimax_music3 | output/audio/ | |
mp3 | ||
V0 |
4.2 子图内部节点与参数(实测值)
UNETLoader | minimax_music3_dit_fp16.safetensorsweight_dtype=default | ||
CLIPLoader | minimax_music3_text_encoder_pruned_int8_convrot.safetensorstype=minimax,weight_dtype=default | ||
VAELoader | minimax_music3_dav.safetensors | ||
SeedNode | 0,control=randomize | ||
MiniMaxMusic3TextEncode | max_duration=60、cfg=1.7、内部参数 50 | seconds | |
ConditioningZeroOut | |||
EmptyMiniMaxMusic3LatentAudio | seconds 输出,widget 默认值 120 被连线覆盖)、batch=1 | ||
KSampler | 1111111112(被 SeedNode 覆盖)、steps=30、cfg=1.7、euler、simple、denoise=1.0 | ||
VAEDecodeAudio | |||
VAEDecodeAudioTiled | tile_size=1536overlap=64 | ||
ComfySwitchNode | false,顶层实例设为 true |
数据链路(Link)对应关系
on_false) | ||
on_true) | ||
5. 模型资产
5.1 权重文件清单
minimax_music3_dit_fp16.safetensors | models/diffusion_models/ | ||||
minimax_music3_dit_int8_convrot.safetensors | models/diffusion_models/ | ||||
minimax_music3_text_encoder_pruned_int8_convrot.safetensors | models/text_encoders/ | ||||
minimax_music3_dav.safetensors | models/vae/ |
说明:必须下载的是 3 个文件(fp16 或 int8 二选一 + 文本编码器 + VAE),合计约 13.4 GB。三件套缺一不可,且文件名必须与上表一致,ComfyUI 靠名字在下拉框里匹配。
5.2 fp16 与 int8 的选型
切换方法:把顶层子图实例的 unet_name 端口改为 minimax_music3_dit_int8_convrot.safetensors(该文件需先下载到 diffusion_models/)。
5.3 下载源
官方仓库:HuggingFace Comfy-Org/MiniMax-Music-3。国内建议用镜像站 hf-mirror.com(把域名替换即可,迅雷/浏览器通用)。完整链接见附录 A。
5.4 目录结构
D:\Comfy-Desktop\└── ComfyUI-Shared\└── models\├── diffusion_models\│ └── minimax_music3_dit_fp16.safetensors (4.6 GB)├── text_encoders\│ └── minimax_music3_text_encoder_pruned_int8_convrot.safetensors (8.6 GB)└── vae\└── minimax_music3_dav.safetensors (207 MB)
⚠️ 路径易错点:ComfyUI Desktop 使用
ComfyUI-Shared\models作为共享模型目录,不是ComfyUI-Installs\里的安装副本。放错目录会导致下拉框里找不到模型。
6. 部署实施记录(本机)
6.1 操作概要
G:\sata11-18935291366b\迅雷下载\ | |
D:\Comfy-Desktop\ComfyUI-Shared\models\ | |
cp),源文件完整保留,无删除动作 | |
stat 字节数逐一比对 | |
6.2 执行的命令
cp ”/g/sata11-18935291366b/迅雷下载/minimax_music3_dit_fp16.safetensors” \/d/Comfy-Desktop/ComfyUI-Shared/models/diffusion_models/cp ”/g/sata11-18935291366b/迅雷下载/minimax_music3_text_encoder_pruned_int8_convrot.safetensors” \/d/Comfy-Desktop/ComfyUI-Shared/models/text_encoders/cp ”/g/sata11-18935291366b/迅雷下载/minimax_music3_dav.safetensors” \/d/Comfy-Desktop/ComfyUI-Shared/models/vae/
6.3 校验结果
minimax_music3_dit_fp16.safetensors | |||
minimax_music3_text_encoder_pruned_int8_convrot.safetensors | |||
minimax_music3_dav.safetensors |
6.4 回滚说明
由于采用纯复制、源文件未删除,回滚零成本:直接删除 D:\Comfy-Desktop\ComfyUI-Shared\models\ 下上述三个文件即可恢复部署前状态。迅雷下载目录中的原始文件可长期保留作为备份源。
6.5 部署期注意事项(实测踩坑)
不要假设 .env或配置会自动生效——本流程为纯文件复制,无配置项。大文件复制期间不要中断: cp不显示实时进度,可用stat -c%s比对目标/源大小来观察进度。复制完成前不要启动 ComfyUI 加载该模型,否则会因文件不完整而报格式错误。
7. 参数详解与调优
7.1 采样参数(KSampler)
steps | 30 | ||
cfg | 1.7 | ||
sampler | euler | simple 调度器,是该模型的推荐组合 | |
scheduler | simple | ||
denoise | 1.0 | 1.0(非图生图场景) |
📌 CFG 一致性:
cfg=1.7在MiniMaxMusic3TextEncode(节点 13)与KSampler(节点 9)两处同时出现且必须保持一致。这是刻意设计,不要只改一处。
7.2 种子与可复现性 ⚠️ 重点
这是本工作流最容易误解的地方。
表面配置:顶层子图实例的 seed 端口值为 197122968890040。
实际行为:子图内部有一个 SeedNode(节点 38),其 control 设为randomize,并且它的输出同时连到了 MiniMaxMusic3TextEncode(link 52)和 KSampler(link 53),覆盖了外部传入的 seed。
结论:
🔴 在当前配置下,每次运行都会生成不同的音乐,即使 seed 端口填了固定值也不生效。
如何改成可复现(三选一,推荐方案 1):
SeedNode 的 control_after_generate 从 randomize 改为 fixed,并在其 seed 框填入目标值 | ||
seed 端口直接连到 TextEncode 与 KSampler | ||
建议工作流:先用 randomize 跑若干次挑出喜欢的种子 → 记下该种子 → 切回 fixed 复现。
7.3 时长控制
max_duration | 60 | |
seconds | EmptyMiniMaxMusic3LatentAudio |
要点:
模型理论上限约 5 分钟(300 秒),当前预设只用了 60 秒。 想生成更长歌曲:把顶层 max_duration改为120/180/240。⚠️ 时长与显存正相关:时长翻倍,潜变量翻倍,显存峰值与生成耗时都会显著上升。长音频建议保持 switch=true(分块解码)。EmptyMiniMaxMusic3LatentAudio的 widget 里虽然写着 120,但它被seconds连线覆盖,改这个 widget 无效,应改max_duration。
7.4 解码策略(switch 端口)
switch | ||
|---|---|---|
false | VAEDecodeAudio | |
true | VAEDecodeAudioTiled | tile_size=1536、overlap=64 切块解码,显存占用大幅降低 |
分块解码说明:overlap=64 表示相邻块之间有 64 帧重叠区,用于平滑拼接、消除接缝爆音。这是官方调过的参数,一般无需改动。
选型建议:
显存 ≥ 16 GB 且追求极致音质 → switch=false显存紧张,或生成时长 > 60 秒 → switch=true(当前值,推荐保持)
7.5 负条件清零
ConditioningZeroOut(节点 10)把负条件整体置零后送入 KSampler 的 negative 端口。
这是正确的、必要的:MiniMax Music 3不支持 negative prompt(没有"不要什么"的概念)。KSampler 结构上要求 negative 输入,因此填一个全零张量占位。
❌ 不要试图在这里接"负面提示词",该模型不会响应,反而可能破坏生成。
7.6 Caption 与 Lyrics 编写规范
Caption(风格描述):用自然语言描述风格、BPM、调性、配器、情绪。当前预置值为 Lo-fi / chillhop 风格(78 BPM,♭D 大调)。
推荐结构:
Global Metadata: <风格>。 BPM,<调性>,<音阶>。<情绪与动态描述>。<场景>。Lyrics(歌词):用方括号标签控制段落结构。
[Intro]...[Verse]...[Chorus]...[Bridge]...[Outro]
关键规则:
标签是模型唯一会执行的结构指令。只有 [Intro][Verse][Chorus][Bridge][Outro]这类标签会被当作编排指令处理。歌词正文只传达情绪与主题,不会被逐字理解成"必须唱出这句话"——模型参考的是情绪走向与音节节奏,不是语义。 纯音乐(无人声):把 lyrics留空,模型会自动生成器乐段落。中英文均可,但训练语料以英文为主,英文效果通常更稳定。
当前预置歌词主题为「AI 生成内容」(canvas glows、sampler drift、render、seed、node to node),副歌反复 let it render on,详见附录 C。
8. 显存与性能
8.1 显存占用估算
显存峰值主要由三部分构成:扩散模型权重 + 文本编码器权重 + 潜变量与激活值。
以上为 60 秒音频的估算。时长增加会线性推高潜变量部分。文本编码器即使已量化到 int8,仍占约 8.6 GB,是显存大户。
8.2 显存优化清单(按推荐顺序)
切换 unet_name为int8_convrot版本 —— 收益最大保持 switch=true分块解码 —— 已在用减小 max_duration(如 60 → 30)—— 立竿见影weight_dtype设为 fp8_e4m3fn(若显卡支持)—— 进一步压缩关闭其它占用显存的程序(浏览器硬件加速、其它 AI 工具)
8.3 生成耗时参考
60 秒音频、30 步、单卡消费级显卡:通常1~3 分钟。瓶颈在扩散采样(30 次前向)与 VAE 解码,与显卡算力强相关。
9. 故障排查
MiniMaxMusic3TextEncode 红色) | ||
ComfyUI-Shared\models\ 对应子目录,文件名逐字符核对 | ||
overlap(64 → 128),或改用标准解码 | ||
[Verse][Chorus] 标签存在 | ||
fixed | randomize | |
randomize | fixed | |
max_duration 不符 | seconds 决定 | max_duration 只是上限 |
10. 扩展方向
/prompt API,批量产出候选 | ||
max_duration | ||
SaveAudioAdvanced 后接音频处理节点,或外部用 ffmpeg |
附录 A:模型下载链接
A.1 扩散模型(二选一)
FP16 全精度(当前默认)
https://huggingface.co/Comfy-Org/MiniMax-Music-3/resolve/main/diffusion_models/minimax_music3_dit_fp16.safetensorshttps://hf-mirror.com/Comfy-Org/MiniMax-Music-3/resolve/main/diffusion_models/minimax_music3_dit_fp16.safetensors
INT8 量化(低显存)
https://huggingface.co/Comfy-Org/MiniMax-Music-3/resolve/main/diffusion_models/minimax_music3_dit_int8_convrot.safetensorshttps://hf-mirror.com/Comfy-Org/MiniMax-Music-3/resolve/main/diffusion_models/minimax_music3_dit_int8_convrot.safetensors
A.2 文本编码器(必需)
https://huggingface.co/Comfy-Org/MiniMax-Music-3/resolve/main/text_encoders/minimax_music3_text_encoder_pruned_int8_convrot.safetensorshttps://hf-mirror.com/Comfy-Org/MiniMax-Music-3/resolve/main/text_encoders/minimax_music3_text_encoder_pruned_int8_convrot.safetensors
A.3 音频 VAE(必需)
https://huggingface.co/Comfy-Org/MiniMax-Music-3/resolve/main/vae/minimax_music3_dav.safetensorshttps://hf-mirror.com/Comfy-Org/MiniMax-Music-3/resolve/main/vae/minimax_music3_dav.safetensors
所有链接均为普通 HTTPS,可直接粘贴到迅雷/IDM/浏览器下载。国内优先用
hf-mirror.com镜像。
附录 B:校验与运维命令
B.1 字节级校验(Git Bash)
declare -A sub=([minimax_music3_dit_fp16.safetensors]=diffusion_models[minimax_music3_text_encoder_pruned_int8_convrot.safetensors]=text_encoders[minimax_music3_dav.safetensors]=vae)src=”/g/sata11-***********/迅雷下载”dst=”/d/Comfy-Desktop/ComfyUI-Shared/models”for f in ”${!sub[@]}”; dotot=$(stat -c%s ”$src/$f” 2>/dev/null)cur=$(stat -c%s ”$dst/${sub[$f]}/$f” 2>/dev/null)[ ”$tot” = ”$cur” ] && echo ”OK | $(basename $f)” || echo ”DIFF | $(basename $f) src=$tot dst=$cur”done
B.2 查看复制进度(大文件无进度条时)
# 对比目标文件当前大小与源文件总大小stat -c%s ”/d/Comfy-Desktop/ComfyUI-Shared/models/diffusion_models/minimax_music3_dit_fp16.safetensors”stat -c%s ”/g/sata11-18935291366b/迅雷下载/minimax_music3_dit_fp16.safetensors”
B.3 解析工作流 JSON(提取节点参数)
import jsond = json.load(open(r'D:\360Downloads\泡泡猫专用歌曲制作.json', encoding='utf-8'))for n in d['nodes']:print(n['id'], n['type'], str(n.get('widgets_values'))[:200])for sg in d.get('definitions', {}).get('subgraphs', []):print('SUBGRAPH:', sg['name'])for n in sg['nodes']:print(' ', n['id'], n['type'], n.get('widgets_values'))
附录 C:预置 Caption 与 Lyrics 全文
C.1 Caption
工作流里预置C.2 Lyrics
工作流里预置主题是「AI 生成内容」——canvas glows、sampler drift、render、seed、node to node。可直接使用,也可整段替换为你自己的词与描述。
附录 D:快速上手清单
下载 3 个模型文件(附录 A),核对文件名 放到 D:\Comfy-Desktop\ComfyUI-Shared\models\对应子目录运行附录 B.1 校验字节数一致 更新 ComfyUI 到最新版(确保 MiniMax 节点存在) 启动 ComfyUI, Load载入 泡泡猫专用歌曲制作.json(工作流请关注我公众号,评论留下邮箱我发给你)确认无红色缺失节点 / 无红色报错框 按需修改 caption / lyrics / max_duration 点击 Queue Prompt 运行 到 output/audio/audio_minimax_music3.mp3取结果满意后按 7.2 把种子改为 fixed以复现
文档结束。所有参数系泡泡猫专用歌曲制作.json对照结果,部署结果经字节级校验确认。
用预置的提示词直接生成歌曲
也可以生成一个kpop风