# ComfyUI-RVC-Trainer **Repository Path**: TF-boy/ComfyUI-RVC-Trainer ## Basic Information - **Project Name**: ComfyUI-RVC-Trainer - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-27 - **Last Updated**: 2026-10-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ComfyUI-RVC-Trainer 在 ComfyUI 内训练 RVC(Retrieval-based Voice Conversion)音色模型。训练代码使用VibeCoding参考[RVC-Project](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI)项目实现: 静音切片、高通滤波、f0 提取、HuBERT 特征、对抗训练,以及导出的 `assets/weights/*.pth` 格式。 导出的音色可由本插件的 **RVC Voice Loader** 直接加载——推理节点读取相同的模块布局和 18 元素 config 列表(与 RVC-Project 上游一致)。 ## 模型链接 ### RVC推理模型权重和预训练模型 - [fcpe.safetensors](https://huggingface.co/Aero-Ex/ComfyUI-RVC/resolve/main/rvc/fcpe.safetensors) - [hubert_base.safetensors](https://huggingface.co/Aero-Ex/ComfyUI-RVC/resolve/main/rvc/hubert_base.safetensors) - [rmvpe.safetensors](https://huggingface.co/Aero-Ex/ComfyUI-RVC/resolve/main/rvc/rmvpe.safetensors) - [pretrained](https://huggingface.co/lj1995/VoiceConversionWebUI/tree/main/pretrained) - [pretrained_v2](https://huggingface.co/lj1995/VoiceConversionWebUI/tree/main/pretrained_v2) 网盘直达:https://pan.quark.cn/s/299ebe4a22ff ### 模型存放位置 `ComfyUI/models/rvc/` ## 音色训练 | 节点 | 输入 | 输出 | | --- | --- | --- | | **RVC Train Dataset** | `audio_folder`、`version`、`sample_rate`、`f0_method`、`experiment`、`overwrite` | `dataset` | | **RVC Train Audio List** | `audios`(autogrow 音频接口)、`version`、`sample_rate`、`f0_method`、`experiment` | `dataset` | | **RVC Train Model** | `dataset`、`model_name`、`epochs`、`batch_size`、`save_every_epoch`、`learning_rate`、`pretrained`、`resume` | `log`、`model_path` | `dataset` 是自定义的 `RVC_DATASET` 类型,携带准备好的实验目录、采样率、版本和切片记录。 - **version / sample_rate** —— `v1` 或 `v2` 特征,`32k` / `40k` / `48k` 输出。`40k` 仅 `v1` 可用。该组合从 `rvc_train/configs` 中选取打包配置,与 RVC-Project 的`configs/` 完全一致。 - **f0_method** —— `rmvpe`(默认)或 `pm`(需要 `praat-parselmouth`)。 - **RVC Train Dataset** 首次遍历文件夹,之后的运行复用已有的切片、特征和频谱缓存;已存在切片的音频源会被跳过。勾选 `overwrite` 可重建。 - **RVC Train Audio List** 把连接的音频写到磁盘并始终重建,所以接口里看到的就是数据集。 - **pretrained** —— 预训练模型,用于微调(**选择规则见「pretrained 参数说明」**)。不选则从随机权重开始训练,小数据集训不出可用音色。同时接受 `{"weight": ...}` 和 `{"model": ...}` 两种检查点格式,单说话人 `emb_g` 嵌入会自动扩展到 109 个说话人。 - **resume** —— 从实验 `checkpoints` 文件夹中最新的 `G_*.pth` / `D_*.pth` 继续训练,并恢复优化器和轮次计数。 ## 音色替换(推理) 推理节点将从 RVC-Project 项目代码提炼出的音色替换工作流封装为四个 ComfyUI 节点,与训练节点共用 `models/rvc` 目录。产物可直接接入 ComfyUI 的 Load Audio / Save Audio / Preview Audio 流程。 | 节点 | 输入 | 输出 | | --- | --- | --- | | **RVC Voice Loader** | `voice_pth`(下拉,来自 `models/rvc/**/*.pth`,多级目录,自动排除 pretrained 底模)、`index_file`(默认 `(auto)`:匹配同名 `.index`/`.npy`;也可选 `(none)` 或手动指定) | `voice`、`index` | | **RVC Voice Blend** | `voice_a`、`voice_b`、`ratio`(B 的权重 0–1)、`model_name`、`overwrite` | `voice`、`model_path` | | **RVC Hubert & Pitch Loader** | `hubert_file`(默认 `hubert_base.safetensors`)、`pitch_file`(默认 `rmvpe.safetensors`,可选 `fcpe.safetensors`) | `hubert`、`pitch` | | **RVC Execute** | `voice`、`hubert`、`pitch`、`audio`、`index`(可选)+参数 `f0_method`、`f0_up_key`、`speaker_id`、`index_rate`、`protect`、`filter_radius`、`rms_mix_rate`、`resample_sr` | `audio` | | **RVC Audio Synthesis** | `audios`(Autogrow,可拖入任意多个)、`mode`(`merge`=重叠部分直接相加并做峰值保护,`concat`=顺序拼接) | `audio` | 使用方法: 1. 将音色模型放到 `models/rvc//`,`hubert_base.safetensors` 与 `rmvpe.safetensors`(或 `fcpe.safetensors`)放到 `models/rvc/`。 2. 依次创建 Voice Loader / Hubert & Pitch Loader / Execute,把 Load Audio 的输出接到 Execute 的 `audio`。 3. `f0_method` 必须与 Hubert & Pitch Loader 所选的 pitch 模型匹配(`rmvpe.safetensors` ↔ `rmvpe`,`fcpe.safetensors` ↔ `fcpe`)。 4. `index_file` 默认 `(auto)`,按 `.index` / `.npy` 自动配对;找不到匹配索引时禁用检索并打日志。手动选中的索引会校验特征维度(v1 256 维 / v2 768 维),不匹配直接报错,避免用错索引污染音色。 5. 输出采样率跟随音色模型,除非 `resample_sr` ≥ 16000;`resample_sr` 在 1–15999 之间会被忽略并打警告。 6. 1–3 秒的短句也能直接转换:内部对不足 3 秒(CPU 窗口 1 秒)的音频做尾部补零,输出再按原时长裁回;长音频按内部切片显示进度条。 7. 输出接 Save Audio 或 Preview Audio。 **RVC Voice Blend** 把两个已加载音色的权重按 `A*(1-ratio)+B*ratio` 融合,并保存为 `models/rvc/.pth`,输出可直接接 `RVC Execute`。两个模型的 version、采样率、f0 和说话人槽位必须一致;`overwrite` 默认关闭,防止覆盖已有模型。融合音质属实验性,建议多试几档比例。 推理代码完全内置(`rvc_inference/`):高通滤波、长音频自动切片、f0 提取(RMVPE/FCPE)、ContentVec 特征、faiss/npy 检索混合、保护度加权、合成器推理。`fp16 autocast` 在任何 CUDA GPU 上启用,无 CUDA 时回退 fp32。`faiss-cpu` 为可选依赖(读取 `.index`);没有时 `.npy` 兜底可用。 注意:输出与 RVC-Project 上游一致,是随机采样的(相同输入两次运行有约 0.4-0.7 的幅值波动)——这是模型的后验采样本性,不是 bug。 ## pretrained 参数说明 * 可以选择 `models/rvc` 目录下的任意 `*.pth` 模型(包括你之前训练导出的音色模型),**用它等于"从某个已有音色继续微调"**; * **练全新声音时选官方 `f0G*.pth` 底座即可**。 ### 必须与 dataset 的版本 + 采样率匹配 以你数据集节点(RVC Train Dataset / Audio List)选的 version/sample_rate 为准: | dataset 配置 | pretrained 应选 | | --- | --- | | v2 + 48k | `f0G48k.pth`(来自 `pretrained_v2/`) | | v2 + 32k | `f0G32k.pth`(来自 `pretrained_v2/`) | | v1 + 40k | `f0G40k.pth`(来自 `pretrained/`) | | v1 + 32k / 48k | `f0G32k.pth` / `f0G48k.pth`(来自 `pretrained/`) | 注意点: - 下拉只保留 `f0G*.pth` 官方底模和已训练音色模型,`D*.pth`、无 f0 的 `G*.pth` 不会出现在列表里。 - **务必选 f0 变体**(`f0G*.pth`)—— 本插件只训练 f0 引导模型,[`_load_pretrained`](rvc_train/train.py#L318-L319) 遇到非 f0 文件会直接报错。 - 官方 `f0G*.pth` 不带采样率元数据,现在会用文件名校验(`f0G48k.pth` 必须配 48k);版本不匹配([L319](rvc_train/train.py#L319))和权重 shape 不匹配也会给出"采样率/版本不匹配,请选 f0Gk.pth"的提示,不再静默训出坏模型。v2 没有 40k 配置,所以 v2 只配 32k/48k 两个文件。 ## 文件 所有产物写在 `/rvc_train//_<采样率>/` 下: ``` 0_gt_wavs/ 模型采样率下的切片音频(线性频谱的来源) 1_16k_wavs/ 同样的切片重采样到 16 kHz 2a_f0/ 量化 f0 bins(1..255),用于音高嵌入 2b-f0nsf/ NSF 声源用的 Hz 值 f0 3_feature256/ HuBERT 第 8 层 + 最终投影特征(v1) 3_feature768/ HuBERT 第 11 层特征(v2) checkpoints/ G_.pth 和 D_.pth,含优化器状态 ``` `G_.pth` 保存生成器(含仅训练用的 `enc_q` 后验编码器)及其 AdamW 状态,`D_.pth` 保存周期判别器及其 AdamW 状态。它们只用于恢复训练——可推理的模型是导出的音色文件。每对都很大(48k 下约 0.4 GB + 0.8 GB),保存新检查点时会自动删除更早的,只保留最近 5 对。 导出的音色模型写入第一个 `rvc` 模型文件夹(通常是 `models/rvc/.pth`),训练完即可在本插件的 **RVC Voice Loader** 下拉中直接看到。 同一次运行还会用数据集的 HuBERT 特征构建检索索引:`.npy`(原始向量,供本插件 **RVC Voice Loader** 的 `index_file` 读取)和 `.index`(FAISS `IVF,Flat`、`nprobe 1`,RVC-Project 等工具期望的格式)。没有 faiss 时只写 `.npy`,日志会说明。超过 20 万帧的特征集会按 RVC-Project 的做法聚类到 1 万个中心,保证文件可加载。 ## 依赖 - 本插件使用的转换后检查点:`models/rvc/hubert_base.safetensors` 和`models/rvc/rmvpe.safetensors`(按 `rvc_hubert.format_version` /`rvc_rmvpe.format_version` 元数据识别,其他文件名按关键词匹配)。 - `torch`、`librosa`、`scipy`、`soundfile` —— 使用pip install挨个安装或`pip install -r requirements.txt`统一安装。 - 可选:`faiss` 和 `scikit-learn` 用于检索索引(`.index`,以及超大特征集的 1 万中心聚类)。没有它们训练照常进行,`.npy` 向量照常写出。 - 强烈建议 CUDA GPU。Ampere 及更新的 GPU(compute capability ≥ 8.0)使用 fp16 autocast,其余用 fp32。 ## 快速上手 1. **RVC Train Dataset**:填入音频文件夹路径,选 `v2` + `48k`,f0 用 `rmvpe`,`experiment` 填一个名字,执行后完成切片、音高与 HuBERT 特征提取。也可以改用 **RVC Train Audio List**,把音频直接连到 autogrow 接口上。 2. **RVC Train Model**:接上 `dataset`,设置 `epochs`、`batch_size`(默认 4)、`save_every_epoch`;`pretrained` 按「pretrained 参数说明」选择(如 v2/48k 用 `f0G48k.pth`)——不选则从随机权重开始训练,小数据集训不出可用音色;执行后输出训练日志和模型路径。 3. 训练产物:`output/rvc_train//_<采样率>/`(切片、特征、检查点),导出的音色模型写入 `models/rvc/.pth`,可直接用本插件的 **RVC Voice Loader** 加载。 4. 中断后把 `resume` 设为 true 可继续训练;改采样率或版本请改 `experiment` 名字,或勾选 `overwrite` 重建。 ## 说明 - 训练在 ComfyUI 进程内运行并阻塞队列;保持窗口打开,用常规取消按钮停止。已写出的检查点会保留,`resume` 可从中继续。 - 只训练 f0 引导模型(`f0 = 1`),即当前 RVC 音色使用的形式。 - 训练日志以文本返回,同时镜像到 ComfyUI 控制台。 - **RVC Train Model** 用已完成轮次 / 总轮次驱动 ComfyUI 进度条,恢复的运行从上次停止处开始。