Nodes/ComfyUI_VoxCPM_SM/VoxCPM_SM_Model
ComfyUI Node

VoxCPM_SM_Model

Your Whole TTS Voice Engine in One Node

By smthemex·Created 8 months ago·Updated 11 days ago· 29
VoxCPM_SM_Model
    • model
    dit
    gguf
    vae
    version
    lora
    lora_rank32
    lora_alpha16
    lora_dropout0.00
    enable_lmtrue
    enable_dittrue
    enable_projfalse
    denoisefalse

    Every VoxCPM workflow in ComfyUI starts here. This is the loader - the node that pulls VoxCPM1.5 or VoxCPM2 off your disk, fuses it with an audio VAE, optionally bolts on a GGUF-quantized backbone and a LoRA, and hands you a single model output that the VoxCPM_SM_KSampler turns into speech. Nothing else in the pack runs without it, and it's the one you'll fiddle with first.

    If you've never met VoxCPM: it's OpenBMB's tokenizer-free TTS, the model behind the 2025 paper, a diffusion-autoregressive system that generates continuous speech directly instead of predicting discrete tokens the way older TTS does. That's the mechanism behind the two things people actually want from it: context-aware prosody and zero-shot voice cloning from a few seconds of reference audio. This node is where that engine gets assembled in ComfyUI.

    What you actually set

    Four combo boxes matter, plus one boolean worth knowing about:

    • dit - the language-model / diffusion backbone. Drop VoxCPM.safetensors (1.5) or VoxCPM2.safetensors (v2) into ComfyUI/models/diffusion_models.
    • vae - the audio VAE. audiovae.pth for 1.5, VoxCPM2_audiovae.pth for v2, in ComfyUI/models/vae. Trap: the v2 VAE only outputs 16 kHz audio; 1.5 gives you 44.1 kHz.
    • version - v15 or v2. Match it to your files, or the node will try to load the wrong repo's config.
    • gguf - the optional quantized backbone from ComfyUI/models/gguf. This is the VRAM escape hatch. The full VoxCPM2 safetensors is something like 96 GB; a Q6 GGUF runs inference in ~4.8 GB of VRAM, and the int8_convrot (2.4 GB) and int4_convrot (1.3 GB) variants go lower still - int4 reportedly runs in about 2 GB. GGUF Q6 is the sweet spot if it fits; Q8 is basically fp16 at half the size.
    • lora plus lora_rank / lora_alpha / lora_dropout / enable_lm / enable_dit / enable_proj - LoRA loading. The nice part: when you load a LoRA trained by this pack, the node reads the training config out of the safetensors metadata and overrides your rank/alpha widgets for you. You only hand-set these for LoRAs without embedded config.
    • denoise - loads an external denoiser on top. It can clean up output, but it restricts things to 16 kHz and can introduce distortion. Leave it off unless you know why you're turning it on.

    The output is a single model socket (type VoxCPM_SM_Model). Feed it straight into the KSampler's model input. That's the whole wiring: loader → sampler.

    Installing it

    This is a real install, not a one-click. From ComfyUI/custom_nodes:

    git clone https://github.com/smthemex/ComfyUI_VoxCPM_SM
    cd ComfyUI_VoxCPM_SM
    pip install -r requirements.txt
    

    Restart ComfyUI, then grab the weights. The repo ships the config files but not the actual model - the weights come from HuggingFace (openbmb/VoxCPM1.5 or openbmb/VoxCPM2). You only need model.safetensors and the audio VAE, renamed into the folders above (model.safetensorsVoxCPM.safetensors for 1.5, → VoxCPM2.safetensors for v2). You can also find the quantized variants under the author's smthem/VoxCPM2-gguf-notcpp repo on HuggingFace.

    The requirements list reads like a small ML party: torch>=2.5, torchaudio, transformers, funasr, modelscope, and a pinned datasets>=3,<4. That pin plus funasr is the kind of thing that collides with other packs' versions. If the loader dies on import with a transformers or datasets mismatch, that's the fight - and audio-in-ComfyUI is the corner where dependency conflict is the default failure mode. A dedicated venv for this pack is a reasonable move.

    Gotchas

    • The node asserts that you've picked both a model and a VAE: leave dit or vae on none and you get "Please select a valid model and vae."
    • dit and gguf are alternatives - you need one of them plus the VAE.
    • Don't reflexively download the 96 GB v2 safetensors. The quantized variants exist precisely because the full thing is silly on consumer hardware.
    • The author, smthemex, is a one-person porting machine (LLM_party, Sonic, StoryDiffusion and friends), and the community reception is genuine enthusiasm plus an occasional "anyone got it running end-to-end?" thread. When a smthemex pack breaks, it's almost always the environment, not you.

    Once this node loads and the KSampler starts talking, you're done with the fiddly part - the fun starts there.

    CategoryVoxCPM_SM

    Inputs (12)

    NameTypeDefaultDescription
    ditCOMBO1 options: none
    ggufCOMBO1 options: none
    vaeCOMBO1 options: none
    versionCOMBO2 options: v2, v15
    loraCOMBO1 options: none
    lora_rankINT328–128
    lora_alphaINT161–128
    lora_dropoutFLOAT0.000–1
    enable_lmBOOLEANtrue
    enable_ditBOOLEANtrue
    enable_projBOOLEANfalse
    denoiseBOOLEANfalse

    Outputs (1)

    NameTypeDescription
    modelVoxCPM_SM_Model