NanoBanana - Audio Transcribe
Turn any ComfyUI audio into a timestamped transcript
- audio
- network
- transcript
ComfyUI generates a lot of things, and apparently one of them is now subtitles. This node takes any standard ComfyUI AUDIO object - a voice recording, a TTS output, a clip from a video workflow, even the music node's output if you're curious what Lyria "sang" - encodes it to WAV, and sends it to Gemini's flash model to transcribe. What comes back is a text transcript, with optional [HH:MM:SS] timestamps on every line.
Where it earns its place: captioning a TTS-generated narration so you can burn subtitles into a video, transcribing a recording you loaded in for a dubbing workflow, or just getting searchable text out of an audio asset that's already sitting in your graph. It's the text-side companion to the pack's TTS nodes - speak, then transcribe, then stitch captions in.
How it works
The mechanism is a single multimodal call. Your AUDIO (waveform + sample rate) gets encoded to WAV bytes and sent to Gemini as an audio part, alongside a transcription prompt. If you flip include_timestamps on, the prompt becomes "transcribe with timestamps in [HH:MM:SS] format at the start of each line" and Gemini does exactly that. Temperature is pinned to 0.0 - for transcription you want deterministic, not creative. The model defaults to gemini-2.5-flash, which is cheap and handles this well.
Inputs:
- audio - the ComfyUI AUDIO to transcribe.
- model - default
gemini-2.5-flash. - prompt - default is "transcribe verbatim, include speaker labels if multiple speakers" - and yes, it genuinely attempts speaker labels on multi-speaker audio.
- include_timestamps - off by default; flip it when you need subtitle timing.
Output: transcript, a plain STRING - wire it to a text display, a save node, or into a subtitle-generation step.
Installation
Part of the NanoBanana2 pack:
cd ComfyUI/custom_nodes
git clone https://github.com/IxMxAMAR/ComfyUI-NanoBanana2
pip install google-genai
ComfyUI Manager: search NanoBanana2. Needs a Gemini API key from aistudio.google.com.
Gotchas
Two limits to know before you throw an hour-long podcast at it. First, this node encodes whatever AUDIO you hand it into a single WAV and sends the whole thing - long audio means a big request, and the pack's own docs suggest using the Files Upload node + a file-based vision node for genuinely long recordings instead. Keep this node for clips measured in seconds to a few minutes. Second, it's a paid API call, and audio tokens add up fast - a long clip is not a free transcription. If you get a refusal or a garbled result, remember transcriptions are generative too: Gemini can hallucinate on noisy audio, so for critical text, keep the original and spot-check.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| api_key | STRING | — | |
| model | COMBO | gemini-2.5-flash | 35 options: gemini-pro-latest, gemini-flash-latest, gemini-flash-lite-latest, gemini-3-pro-preview, gemini-3-flash-preview, gemini-3.1-pro-preview, +29 |
| audio | AUDIO | — | |
| custom_modelopt | STRING | — | |
| promptopt | STRING | Transcribe this audio verbatim. Include speaker labels if multiple speakers are present. | — |
| include_timestampsopt | BOOLEAN | false | — |
| networkopt | NB_NETWORK | Optional. Wire a NanoBanana - Network Route node here to route this request through that proxy (e.g. US egress). |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| transcript | STRING | — |