Nodes/comfyui-mixlab-nodes/Sense Voice ♾️Mixlab
ComfyUI Node Runs on cloud

Sense Voice ♾️Mixlab

Fast multilingual speech-to-text with subtitles built in

By MixLabPro·Created 3 years ago·Updated 2 months ago· 1,859
Sense Voice ♾️Mixlab
  • audio
  • result
  • srt
  • text
  • total_seconds
deviceauto
languageauto
num_threads4
use_int8true
use_itntrue

Sense Voice wraps SenseVoice-Small, the speech-recognition model from Alibaba's FunAudioLLM project - the same family that shows up elsewhere in the ComfyUI ecosystem via ComfyUI-FunAudioLLM alongside its sibling CosyVoice. Mixlab's version is a straightforward transcription node: feed it an audio clip and it gives you back the words, punctuated, plus subtitle timing if you want it. Don't confuse this with the pack's SpeechRecognition node - that one's a live, browser-mic input for talking to your workflow interactively; this one takes an already-recorded AUDIO clip and transcribes it properly, batch-style, which makes it the one you want for turning a voiceover or dialogue track into text or subtitles rather than for hands-free prompting.

The settings are all about accuracy versus speed. language defaults to auto, with explicit options for zh, en, yue (Cantonese), ja, ko, and nospeech - pin it to the actual spoken language if you know it, since auto-detection can guess wrong on short or ambiguous clips, especially between closely related languages. device is auto or cpu. num_threads (default 4, up to 32) only matters on CPU - more threads, faster CPU inference, no effect if you're on GPU. use_int8 (default on) runs the quantized int8 model, which is smaller and faster with a small accuracy trade - worth leaving on unless you have a specific reason to want full precision. use_itn (default on) turns on inverse text normalization, which is the difference between the model outputting "one two three" as words versus formatting it as "123" with real punctuation - leave this on for anything you're going to read, turn it off if you specifically want raw spoken-word tokens.

Four outputs come back: text, the plain transcript you'll use most often; srt, the same transcript pre-formatted as SubRip subtitles with timestamps, ready to drop next to a video file; total_seconds, the clip's duration; and result, typed as a wildcard * - the raw structured output the other three get derived from, there if you need something the simpler outputs don't expose.

Install is the standard pack route:

cd ComfyUI/custom_nodes
git clone https://github.com/shadowcz007/comfyui-mixlab-nodes.git
cd comfyui-mixlab-nodes
install.bat

or via ComfyUI Manager (search "comfyui-mixlab-nodes"), or pip3 install -r requirements.txt in a venv. SenseVoice's own weights download automatically on first use through the underlying FunASR toolchain rather than needing a manual placement step like the pack's TripoSR or rembg nodes - but that also means your first run on a fresh install needs internet access and will sit for a while pulling the model down before it does any actual transcribing. Don't assume a slow first run means it's broken.

Common friction: a transcript in the wrong script or wrong language usually traces back to language being left on auto against a short or accented clip - pin the language explicitly and re-run before suspecting the model itself. Garbled or empty output on otherwise clean audio is worth checking against the source file directly - noisy background audio, very quiet speech, or a clip that's mostly music or silence will all degrade or empty out the transcript, and nospeech is there specifically because the model can (correctly) decide there's nothing to transcribe. If srt timestamps look off relative to the actual audio, confirm you fed the node the full, untrimmed clip - timing is computed against what SenseVoice actually processed, so trimming or re-encoding the audio between recording and this node will shift it.

Category♾️Mixlab/Audio

Inputs (6)

NameTypeDefaultDescription
audioAUDIO
deviceCOMBOauto2 options: auto, cpu
languageCOMBOauto7 options: auto, zh, en, yue, ja, ko, +1
num_threadsINT41–32
use_int8BOOLEANtrue
use_itnBOOLEANtrue

Outputs (4)

NameTypeDescription
result*
srtSTRING
textSTRING
total_secondsFLOAT