๐๏ธ RVC Training Config
Train your own voice model inside ComfyUI
- training_config
- config_info
Most people use RVC models other people trained. This node is for making your own. ๐๏ธ RVC Training Config holds the training hyperparameters - epochs, batch size, learning rate, checkpointing - and outputs a TRAINING_CONFIG that feeds the suite's unified ๐ Model Training node. It's part of a genuinely nice feature: RVC training that lives inside ComfyUI, using the same node style as the rest of the suite, instead of the usual detached web-UI-and-scripts dance that scares people off training their own voices.
The pack's own framing is worth repeating: this node exposes "practical training controls with tooltip guidance instead of raw upstream garbage." RVC's original training configs are notoriously cryptic; this cleans them up.
How it works
RVC training fine-tunes a pretrained generator/discriminator pair (the pretrained_v2 checkpoints) on your dataset of a target speaker until the model can reproduce that voice. This node doesn't do the training - it describes it. You set the schedule and loss weights here, wire the training_config output into ๐ Model Training alongside a prepared dataset (from ๐ฆ RVC Dataset Prep) and an โ๏ธ RVC Engine, and Model Training runs the loop with a live in-node dashboard for epoch progress, ETA, and loss trend. Required init checkpoints (HuBERT, RMVPE, pretrained_v2) auto-download.
The inputs and outputs that matter
The handful a beginner should actually set:
- epochs (1โ20000, default 100) - how long to train. For a clean, decently-sized dataset, somewhere in the low hundreds is typical; more isn't automatically better and can overfit.
- batch_size (1โ64, default 4) - bump it up if you have VRAM headroom for faster training, down if you OOM. This is the main memory dial.
- learning_rate (default 0.0001) - leave it. The default is sensible; changing it blindly is how training diverges.
- save_every_epoch (default 5) and max_checkpoints (default 1) - how often to snapshot and how many to keep. Raise
max_checkpointsif you want to compare epochs later. - save_best_model (default true) with best_model_threshold (default 30) - auto-keeps a low-loss candidate. Heed the README's warning, though: "save_best_model is only a low-loss inference candidate, not a magical quality oracle. You still need to listen." Low loss โ good voice.
Everything else - fp16_run, num_workers, cache_data_in_gpu, the pretrained generator/discriminator pickers, and the whole family of loss-weight coefficients (c_adv, c_mel, c_kl, c_fm, and the experimental use_multiscale/use_balancer/use_pareto switches) - are advanced. Leave them on auto/default unless you know exactly what you're tuning. Outputs are training_config (to Model Training) and config_info (a readable summary).
Installing it
Ships with TTS Audio Suite. Easiest: ComfyUI Manager โ search TTS Audio Suite โ install โ restart, which runs the pack's install.py to handle the RVC and training dependencies plus the usual conflicts (NumPy, librosa, s3tokenizer) and Python 3.13. Manual: cd ComfyUI/custom_nodes && git clone https://github.com/diodiogod/TTS-Audio-Suite.git, then python install.py from inside the folder with your ComfyUI venv active - run the script, not a bare requirements install. Linux: portaudio19-dev libsamplerate0-dev first. There's an "RVC ๐ Model Training" example workflow in the repo - start there rather than wiring the training graph from scratch. Training logs and resumable checkpoints go to ComfyUI/output/tts_audio_suite_training/rvc/; finished .pth and .index files land in ComfyUI/models/TTS/RVC/.
Common issues
- This node alone does nothing. It only produces a config. You need ๐ฆ RVC Dataset Prep, an โ๏ธ RVC Engine, and the ๐ Model Training node for anything to actually train.
- Out-of-memory during training. Lower
batch_size, keepfp16_runon, and consider turning offcache_data_in_gpuif the dataset is large. - "Best" model sounds worse than a later epoch. Exactly the trap the README calls out - low loss isn't quality. Save multiple checkpoints (
max_checkpointsup,save_every_weightson) and audition them by ear. - Garbage in, garbage out. No hyperparameter rescues a noisy or tiny dataset. Clean, consistent source audio matters more than any setting here.
- Interrupting training. ComfyUI's interrupt saves resumable state at a safe boundary when it can, so you can resume rather than restart - but don't count on it mid-step; let it reach a checkpoint.
Inputs (28)
| Name | Type | Default | Description |
|---|---|---|---|
| epochs | INT | 1001โ20000 | Actual RVC epoch count. Around 20 is a smoke test, 50-100 is a first real pass, and 100+ is where cleaner datasets usually become worth judging. Loss helps spot trends, but listening tests still decide quality. |
| batch_size | INT | 41โ64 | Use the largest stable batch that fits VRAM. Bigger is usually faster and a bit smoother; lower it first if you hit OOM or instability. |
| learning_rate | FLOAT | 01e-8โ1 | 1e-4 is the normal safe default. Lower it if training gets spiky or noisy; raising it is one of the fastest ways to make adversarial training worse. |
| gpu_ids | STRING | CUDA device ids in the odd RVC format, for example '0' or '0-1'. Leave blank unless you deliberately want multi-GPU behavior. | |
| num_workers | INT | 00โ16 | PyTorch dataloader workers. Keep this at 0 on Windows; worker processes there can respawn ComfyUI internals and break training. |
| fp16_runopt | BOOLEAN | true | Keep this on for normal CUDA training. Turn it off only if you see NaNs, weird instability, or hardware/driver-specific fp16 issues. |
| save_every_epochopt | INT | 50โ1000 | Checkpoint cadence. Save a resumable training checkpoint every N epochs. 5 is a good default, 1 is safest, and 0 disables periodic resume checkpoints entirely. |
| cache_data_in_gpuopt | BOOLEAN | true | Cache batches in VRAM for speed. Usually worth it if you have room; turn it off if VRAM pressure becomes the real bottleneck. |
| max_checkpointsopt | INT | 11โ999 | Checkpoint retention policy. Keep the newest N checkpoint pairs and delete older ones. 1 means keep only the latest resumable checkpoint, 3 means keep the latest three, and so on. |
| save_every_weightsopt | BOOLEAN | false | Export extra standalone weight files at each save interval. Mostly useful for inspection or experiments; normal training does not need this. |
| train_indexopt | BOOLEAN | true | Build the matched FAISS index after training. Usually keep this on; normal RVC inference often sounds worse without the proper index. |
| save_best_modelopt | BOOLEAN | true | Track generator loss and save the lowest-loss model as an extra inference checkpoint candidate. Useful for listening tests, but lowest loss is not guaranteed to be the best sounding model. |
| best_model_thresholdopt | INT | 301โ100 | Initial gate for first 'best model' capture. Leave this alone unless you are debugging why low-loss checkpoint saving triggers too early or too often. |
| log_every_epochopt | FLOAT | 1.00.1โ2 | Logging cadence within an epoch. This affects dashboard/log granularity, not training quality. 1.0 is about once per epoch, 0.5 is about twice. |
| pretrained_generatoropt | COMBO | auto | Generator initialization checkpoint. Keep this on auto unless you know exactly why you want a different base; training from scratch on a small dataset is usually a bad idea. |
| pretrained_discriminatoropt | COMBO | auto | Discriminator initialization checkpoint. Auto is the sane default and should stay matched to the generator/sample-rate setup. |
| c_advopt | FLOAT | 1.00โ100 | Adversarial loss weight. Advanced knob. Do not touch this unless you are intentionally rebalancing training and understand the side effects. |
| c_melopt | FLOAT | 45.00โ100 | Mel reconstruction weight. One of the main terms keeping speech recognizable. Usually leave it at default unless you are doing real loss tuning. |
| c_klopt | FLOAT | 1.00โ100 | KL regularization weight. Changing this can absolutely destabilize training, so leave it alone unless you know the tradeoff you want. |
| c_fmopt | FLOAT | 2.00โ100 | Feature-matching weight. Usually helps texture/stability. Leave it at default unless you are deliberately rebalancing losses. |
| c_tefsopt | FLOAT | 0.00โ100 | Experimental TEFS auxiliary loss. Keep this at 0 unless you are explicitly experimenting with that feature. |
| c_hdopt | FLOAT | 0.00โ100 | Experimental harmonic-detail auxiliary loss. Keep this at 0 for normal training. |
| c_tsiopt | FLOAT | 0.00โ100 | Experimental TSI auxiliary loss. Keep this at 0 unless you are intentionally testing it. |
| c_gpopt | FLOAT | 0.00โ100 | Gradient-penalty weight. This is mostly a stabilization/debug knob, not a normal training control. Leave it at 0 unless adversarial loss is misbehaving. |
| use_multiscaleopt | BOOLEAN | false | Use experimental multiscale mel loss. Heavier and not needed for a normal first pass. |
| use_balanceropt | BOOLEAN | false | Enable dynamic loss balancing. Advanced only. If you do not already know why you want this, you do not want this. |
| use_paretoopt | BOOLEAN | false | Pareto-style balancing on top of the dynamic balancer. Ignore this unless you are already deliberately using the balancer. |
| fast_modeopt | BOOLEAN | false | Speed tweak for the advanced balancer path. It does nothing useful unless you already enabled those advanced balancing options. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| training_config | TRAINING_CONFIG | โ |
| config_info | STRING | โ |