☁️Fish ASR
Turn audio into text inside a comfyui_LLM_party workflow
- audio
- text
If you're building a voice-driven agent in comfyui_LLM_party - someone talks, an LLM answers, maybe TTS talks back - you need a node that turns audio into text first. That's this one. Fish ASR takes an audio clip and hands you back a plain string transcript, ready to drop straight into an LLM node's prompt input.
The "Fish" in the name points at Fish Audio (the team behind the open Fish Speech TTS/ASR models) - this node is a thin wrapper around their hosted speech-to-text API rather than something the pack invented from scratch. That matters for how you use it: you're not running a local Whisper model here, you're making an API call, so you need a real API key and a network connection at run time.
How it works
You give it audio, one of two ways, and it comes back with text. There's no local model to download and no GPU work happening on your end - the transcription happens on Fish Audio's servers.
The inputs and outputs that matter
audio_path(required) - a file path to your audio clip.audio(optional,AUDIOtype) - ComfyUI's native audio object, the kind you get out of aLoadAudionode or a TTS node earlier in the graph.api_key(optional) - your Fish Audio API key. Leave it blank and the call will fail once you actually try to transcribe something real.is_enable- the pack's standard on/off toggle; flip it off to bypass the node without deleting it from the graph.
Output: text (STRING) - the transcript. Wire it into an LLM node's user-message input, or into get_string-style plumbing if you need to combine it with other text first.
Which input to actually use: if you're wiring this into a live graph, prefer the audio input over audio_path. A file path only works if the file is actually sitting on the filesystem the node executes on - fine on a local install, a real trap on a hosted/cloud executor where "the filesystem" isn't your laptop. Feed it a live AUDIO object from upstream instead and you sidestep the whole question.
How to install it
Via ComfyUI Manager: search comfyui_LLM_party, install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/heshengtao/comfyui_LLM_party.git
Then, from inside the pack's folder, run pip install -r requirements.txt using ComfyUI's own Python (not your system Python - if you're on the portable/launcher build, that's python_embeded\python.exe -m pip install -r requirements.txt). Restart ComfyUI. This one node doesn't need any local model weights - the whole point is that Fish Audio does the work remotely - but the shared requirements.txt for the whole pack is heavier than this single node needs, since it also pulls in dependencies for the local-LLM and GGUF nodes you may never touch. If you don't need those, the README's fast_installed = True setting in config.ini skips the GGUF-related install weight.
Common issues & troubleshooting
Empty or error output, no obvious cause. Check api_key first - an empty or wrong key is by far the most common reason an API-backed node in this pack silently does nothing useful. Get one from Fish Audio's own developer dashboard.
Works locally, fails when run elsewhere (a shared server, a cloud executor, a friend's machine). This is the audio_path-vs-audio trap above. A hardcoded path like C:\Users\you\clip.wav is meaningless anywhere but your own machine. Switch to the audio input fed by an upstream node so the actual audio data travels with the workflow instead of a path that only resolves for you.
Both audio_path and audio are filled in. The schema doesn't spell out which one wins - if you're getting a transcript that doesn't match what you expected, try clearing one of the two and leaving only the input you actually mean to use.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| is_enable | BOOLEAN | true | — |
| audio_path | STRING | — | |
| api_keyopt | STRING | — | |
| audioopt | AUDIO | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| text | STRING | — |