Audio Transcript Batch (CRT)
Batch transcription that actually pairs each transcript with its file
- audio
- strings_batch
- display
- status
Want to turn a folder of audio into transcripts without babysitting each file? Audio Transcript Batch (CRT) takes a batched AUDIO input - the kind Audio Loader Crawl Batch (CRT) produces - runs faster-whisper over every item, and returns one transcript per batch slot as a list. The design goal is obvious once you see the outputs: strings_batch lines up item-for-item with the loader's file_names, so a Save Text With Path (CRT) node can write each .txt next to the audio it describes. Transcribing a hundred clips becomes "load window, transcribe, save, next window."
It's part of the PGCRT CRT-Nodes pack, the author's steadily growing grab-bag that started with a Z-Image LoRA loader in late 2025 and expanded into a full audio+video toolkit. Transcription sits in its audio corner, and it leans on two real dependencies rather than reinventing anything: faster-whisper (the CTranslate2-accelerated Whisper) for the actual decoding and MelBandRoFormer for optional voice isolation.
How it works
Every batch item gets decoded through faster-whisper. Under the hood the model is downloaded from HuggingFace on first use and cached, then runs with batched decoding - transcribe_batch_size (default 8) is how many 30-second chunks get decoded in parallel per file. That's the setting that turns a long podcast from "wait forever" into "wait a bit"; set it to 1 to disable batched decoding entirely.
Three of the settings do the heavy lifting in practice:
vad_filter(default on) - runs Silero VAD to cut silences before inference. For long files this is a real speed win, and it keeps Whisper from hallucinating over dead air.beam_size(default 5) - beam search width. Drop to 1 for greedy decoding when you want speed over the last few percent of accuracy.compute_type-float16is the default and the right call on a GPU;int8_float16andint8shrink memory if you're tight.
The whisper_model menu starts at large-v3-turbo, which is the sensible modern default - near-large accuracy at turbo speed. tiny through medium exist if you want something lighter, and language defaults to auto so it'll figure out the language per file.
isolate_voice is the interesting one: flip it on and each file first runs through a MelBandRoFormer voice-isolation model before transcription. If your audio is music or has heavy background noise, separating the vocals first is often the difference between a transcript and a word salad. The cost is an extra model load and slower runs.
Inputs and outputs
Required inputs are just audio, isolate_voice, and keep_model_loaded. That last one defaults to true so the Whisper model stays warm in VRAM between runs - turn it off if you're memory-starved and want it freed as soon as the batch finishes.
Outputs:
strings_batch- one transcript per batch item, as a list. This is the one to wire into a text-saver; it pairs with the loader'sfile_names.display- the same transcripts stitched into one readable string with blank lines between items. Good for a quick look or a text-preview node.status- a summary line: model, compute type, and how many of the batch transcribed.
Installing it
It ships in the CRT-Nodes pack, so install once: ComfyUI Manager → search CRT-Nodes, or:
cd ComfyUI/custom_nodes
git clone https://github.com/PGCRT/CRT-Nodes.git
pip install -r requirements.txt
then restart. The requirements file pulls in faster-whisper, openai-whisper, transformers, and the rest of the pack's heavy stack, so the install is slow even if this is the only node you wanted. First run also downloads the Whisper weights (large-v3-turbo is roughly 1.6 GB) and, if you enable it, the MelBandRoFormer model.
Common issues
- First run "downloads" forever - that's the model pull. It's one-time; subsequent runs load from cache.
- Long files crawl - enable
vad_filterif you haven't, and raisetranscribe_batch_size. The two together are most of the speed story. - Red nodes / NaN after an update - CRT nodes change socket names between versions. Right-click → Fix node (recreate).
- VRAM pressure -
large-v3-turboin float16 is a big resident model. If you batch a lot, either dropcompute_typetoint8_float16or uncheckkeep_model_loaded.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | — | |
| isolate_voice | BOOLEAN | false | Run MelBandRoFormer voice isolation on each file before transcription. |
| keep_model_loaded | BOOLEAN | true | Keep the Whisper model loaded in VRAM after batch transcription. Disable to free VRAM immediately. |
| whisper_modelopt | COMBO | large-v3-turbo | 14 options: tiny.en, tiny, base.en, base, small.en, small, +8 |
| compute_typeopt | COMBO | float16 | 4 options: float16, int8_float16, int8, float32 |
| vad_filteropt | BOOLEAN | true | Cuts silences before inference for faster long-audio processing. Uses Silero VAD to skip silent regions. |
| transcribe_batch_sizeopt | INT | 81–64 | Number of 30s chunks decoded in parallel per file. 1 disables batched decoding. |
| beam_sizeopt | INT | 51–10 | Beam search width. 1 = greedy decoding (faster, slightly less accurate). |
| languageopt | STRING | auto | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| strings_batch | STRING | One transcript per batch item as a list — pairs item by item with the batch loader's file_names in SaveTextWithPath. |
| display | STRING | Same transcripts stitched into one display string, separated by a blank line per item. |
| status | STRING | Summary status for the batch run. |