Nodes/EcoHash/EcoHash STT
ComfyUI Node

EcoHash STT

Speech to text in the graph — subtitles and roundtrips without a Whisper install

By ecohash-ai·Created about a month ago·Updated about a month ago· 0
EcoHash STT
  • audio
  • STRING
model
language

EcoHash STT takes an AUDIO clip and hands you back a STRING transcript, with the speech recognition running on EcoHash's servers. It's the last of the six nodes in the ComfyUI-EcoHash pack, and it fills the return leg of the audio pipeline: if TTS gives your renders a voice, STT is what lets you turn audio back into text inside the graph.

Why you'd reach for it

Three genuinely useful jobs. Subtitles/captions for a video render - transcribe the voiceover you just made and feed the text into a subtitle workflow. Prompt-from-speech - dictate a rough idea, get a transcript, pipe it into the pack's LLM node for enhancement and then into Image Generate. And the pack's favorite party trick, the TTS → STT roundtrip: synthesize a line with EcoHashTTS, wire the audio straight into STT, and verify the voiceover landed word-for-word. The smoke test the authors ran did exactly this and got an exact match back. Installing Whisper locally is easy enough, but if you're already paying for hosted TTS, keeping STT hosted means zero model files and zero torch/transformers juggling - same reasoning as the TTS node.

How it works

The node converts the AUDIO tensor to 16-bit WAV bytes and uploads them as a multipart POST /audio/transcriptions. Three hosted models sit in the dropdown: whisper-large-v3-turbo (the fast standard Whisper and your safe default), qwen3-asr-1-7b, and fun-asr-nano. The language input takes an ISO-639-1 code (en, zh, ja…) and defaults to empty, which means auto-detect - you'll rarely need to set it, but it's there when auto-detect guesses wrong.

The inputs that matter

  • audio - an AUDIO tensor, e.g. from EcoHashTTS or a loaded audio file. One clip per call.
  • model - whisper-large-v3-turbo as your default first pick.
  • language - leave empty for auto-detect; set an ISO-639-1 code if you know the language and want a speed/accuracy boost.

Output is a single STRING transcript - wire it into a text viewer, a save node, an LLM, or anything that takes text.

Where people get burned

  • Silent or unclear audio returns nothing. The node raises an explicit "no transcription - the audio may be silent or in an unsupported language" error instead of silently handing you an empty string, which is the right failure mode. If you hit it, check the clip isn't silent and that the language isn't wildly off from what auto-detect can handle.
  • One clip per call. Batch an AUDIO tensor and it errors with a hint to split it upstream. This is deliberate - the pack fails loudly rather than dropping frames.
  • The cache. Re-queue an unchanged graph and you get the cached transcript with no new call. Change any input to force a fresh transcription.
  • 401 / 402 - invalid key or out of credit, the same two errors for every node in this pack.

Install

ComfyUI Manager: search EcoHash, install "ComfyUI-EcoHash", restart. Or:

cd ComfyUI/custom_nodes
git clone https://github.com/ecohash-ai/ComfyUI-EcoHash.git
cd ComfyUI-EcoHash
pip install -r requirements.txt   # just `requests`

Get a key at ecohash.com (free starter credit on signup) and set it via the ECOHASH_API_KEY env var or a config.ini copied from config.ini.example. There's deliberately no key widget on any node - the key is read from the environment or config at request time, so it never ends up inside a workflow JSON you share. The pack is brand new with no community presence yet, so the usual fresh-node rule applies: it's MIT-licensed and thin enough to skim the source before you point a real key and your audio at it.

CategoryEcoHash

Inputs (3)

NameTypeDefaultDescription
audioAUDIO
modelCOMBO3 options: qwen3-asr-1-7b, fun-asr-nano, whisper-large-v3-turbo
languageSTRINGISO-639-1 code, empty = auto-detect

Outputs (1)

NameTypeDescription
STRINGSTRING