π£οΈ Whisper Transcribe
Auto-Subtitle Any Video Without Running a Whisper Model
- ai_config
- audio
- srt_text
The name sounds like it bakes a Whisper model straight into ComfyUI. It doesn't, and that's the point. MF_WhisperTranscribe ships no AI at all - it's a thin wrapper that takes an audio source, turns it into an SRT subtitle string, and hands the actual transcribing to whatever backend an MF_AIConfig node points at. Provider-agnostic is the whole design of MediaForge's AI tier: one config node, and the whole chain follows when you swap providers.
You reach for it at the end of the pack's flagship workflow: transcribe a lecture, podcast, or interview, then wire the SRT into MF_TranslateSubtitle and MF_BurnSubtitle and you've got an automated subtitle pipeline. It slots into the same "API wrapper node" family as the rest of the ecosystem - the value is the plumbing, not the model.
How it works
First it extracts a mono 16 kHz WAV from your source with FFmpeg. That's a deliberate move: a two-hour podcast uploads as a few hundred megabytes of audio instead of a multi-gigabyte video. Then it dispatches to one of two backends based on ai_config.provider:
openai_compatible- POSTs the WAV to<base_url>/audio/transcriptions. Works with OpenAI, Groq, or any OpenAI-compatible server. Requires nothing beyond what the pack already installs.faster_whisper_local- lazy-importsfaster-whisperand runs CTranslate2 on your machine (cpu/cuda/autoper the config). First run downloads the model into your Hugging Face cache.
One clever bit: the node auto-substitutes the model. If your shared MF_AIConfig is set to gpt-4o-mini because it also feeds the translate node, Whisper spots that it isn't an STT model id and falls back to the backend default - whisper-1 for hosted, base for local. Set an explicit STT id (whisper-large-v3, distil-large-v3) to override.
The inputs that matter
ai_config(required) - wire from anMF_AIConfignode. Nothing else will do; anything else raises a "must be AI_CONFIG dict" error.audio_path- any media file with an audio stream. Also accepts anaudioAUDIO dict in the optional slot (overrides the path, downsampled to 16 kHz mono the same way).language- ISO 639-1 hint. Default iszh, because the author defaults to a Traditional Chinese audience. If your audio is English and you leave that alone, results degrade. Seten(or leave empty for auto-detect).
Output: srt_text, a STRING - the well-formed SRT, as text, not a file. Wire it into MF_BurnSubtitle's srt_text input or MF_TranslateSubtitle's srt_text. Use MF_ConvertChinese with a filename_prefix if you want it saved to disk.
Install
Part of the MediaForge pack: ComfyUI Manager β search "MediaForge", or git clone https://github.com/leon80148/comfyui_MediaForge.git into custom_nodes/, then restart. The pack's requirements.txt pulls in requests, so hosted backends work out of the box. The local backend is a separate, manual step because it's heavy:
pip install faster-whisper
That's ~500MB+ with CTranslate2, and it's the one thing here that actually downloads a model. You still need FFmpeg available.
Common issues
- Local CPU is painfully slow - README says roughly 0.3Γ realtime on a modern laptop. Don't run
large-v3on CPU for an hour-long podcast. Setdevice=cuda, or use Groq'swhisper-large-v3, which the author bills as ~5β10Γ faster than OpenAI'swhisper-1at similar quality. - Source with no audio stream - friendly error, before anything hits the network. Corrupt or silent audio that extracts to under 256 bytes of WAV also raises early.
- Key hygiene - use
env:OPENAI_API_KEYinMF_AIConfigso the secret never serializes into exported workflow JSON. This is an API-wrapper node, which is exactly the shape of node that carries credentials; keep the key out of the graph.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| ai_config | AI_CONFIG | β | |
| audio_path | STRING | input/sample.mp4 | β |
| language | STRING | zh | β |
| audioopt | AUDIO | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| srt_text | STRING | β |