Nodes/ComfyUI Silver Nodes/Silver Pocket TTS
ComfyUI Node

Silver Pocket TTS

CPU Voice Cloning Straight Into ComfyUI

By SilverAndJade·Created about a year ago·Updated about a month ago· 0
Silver Pocket TTS
    • audio_path
    text
    voice_file_path
    output_filename

    TTS is usually the fiddly part of an audio pipeline: another install, another Python venv, another GPU you don't have to spare. Silver Pocket TTS sidesteps all of that by wrapping Kyutai's Pocket TTS, the CPU-only open model that can clone a voice from about five seconds of reference audio. No GPU needed, no API key, no account. Type text, point it at a voice sample, get a WAV.

    What it is

    Pocket TTS is the interesting corner of the lightweight TTS space. In a mid-2026 community benchmark of four CPU models it was the slowest of the bunch (about 1.4x realtime on four CPU cores) with a solid MOS around 4.1 - but it was the only one of them that does zero-shot voice cloning, which is a much bigger deal than the speed gap. Where Kokoro gives you fixed voices, Pocket TTS will approximate your voice from a short reference clip. That's what this node gives ComfyUI: narration or character dialogue generated locally, on CPU, while your GPU stays free for the image or video work.

    How it works

    Under the hood the node is a thin wrapper around the pocket_tts Python package. It loads the model, builds a "voice state" embedding from your reference WAV via get_state_for_audio_prompt, and generates audio from your text. The code does one thing worth knowing about: if your reference WAV is float-format, it converts it to int16 first, because Pocket TTS's wave module rejects float WAVs. Then it writes the result to a WAV file and hands you the path as a string.

    The one gotcha hiding in that flow is where the file lands. It saves to os.getcwd() - the directory ComfyUI was launched from, not its output folder. Default filename is generated_speech.wav. That's easy to lose, so give it a real output_filename or you'll be hunting for your audio in the wrong place.

    The inputs

    • text - what to say. Multiline, so write a paragraph.
    • voice_file_path - path to a reference WAV of the voice you want. This is required in practice; leave it empty and the node fails at the file-read step. Clean, longer clips clone better than noisy five-second ones.
    • output_filename - where the WAV goes. Set this to something absolute so you can actually find it.

    The single output is audio_path (a string path), which you'd typically hand to whatever loads audio into your video or lipsync workflow.

    Installing it - the part the README won't tell you

    This is the real trap, and it's specific to this node. The pack's requirements.txt does not list Pocket TTS or its dependencies. So ComfyUI Manager's dependency installer will happily install the pack and leave you with a node that fails on import. You need to add the missing pieces yourself:

    pip install pocket-tts scipy
    

    scipy is used for reading/writing WAVs and isn't in the pack's requirements either. Install both, restart ComfyUI, and the node will download Pocket TTS's own weights on first run. Everything else in the pack (like the Silver loaders) installs cleanly via Manager; this one is the exception that needs the manual step.

    Common issues

    Beyond the missing dependency and the working-directory output, the usual suspects are: no reference file supplied (fails at startup of the node), and the node having no change-detection override - if inputs are identical across runs, ComfyUI caches the output and won't regenerate, so change something to force a new render. And temper expectations on cloning: the community consensus is that five seconds of audio isn't enough to fully capture a voice, so use the cleanest, longest reference you have. For a lightweight, fully local voice in your graph, though, this is hard to beat.

    Categorysilver

    Inputs (3)

    NameTypeDefaultDescription
    textSTRING
    voice_file_pathSTRING
    output_filenameSTRING

    Outputs (1)

    NameTypeDescription
    audio_pathSTRING