Nodes/EcoHash/EcoHash Dedicated STT
ComfyUI Node

EcoHash Dedicated STT

One Clip In, One Transcript Out, No Whisper Install

By ecohash-ai·Created 3 months ago·Updated 23 days ago· 1
EcoHash Dedicated STT
  • audio
  • STRING
◄model►
◄language►
◄connection►

Speech-to-text is the least glamorous node in any pack and the one that quietly holds a workflow together. EcoHash Dedicated STT takes an AUDIO clip and returns a plain STRING transcript. That's the entire surface: audio in, text out, one clip at a time.

Which raises the obvious question - why not just run Whisper locally, since it's free and small? Usually you should. The case for this node is narrower than for the image ones: you've already got a deployment serving a speech model, or you're transcribing something in a language where the hosted model beats the checkpoint you can fit, or you simply don't want a fourth model's worth of dependencies in a ComfyUI install that has already suffered through one too many transformers upgrades.

Audio tooling in ComfyUI is a layer that got bolted on late, and the tax is integration. Every local engine - Chatterbox, F5, Kokoro, the TTS Audio Suite hub that wraps half of them - brings its own dependency stack and its own chance to break the three that were working. An API node has the opposite failure profile: nothing to install, nothing to conflict, and if the endpoint is down you know in one second instead of one hour.

How it works

audio_to_wav_bytes takes ComfyUI's AUDIO dict (a [B, C, T] waveform plus a sample rate), converts to 16-bit PCM WAV at the clip's own sample rate, and posts it as a multipart form to /audio/transcriptions with model and, if you set it, language. The response is expected to be JSON with a text string. That's it - non-streaming, synchronous, one request.

The clip has to be a single one. If your AUDIO carries a batch, the conversion refuses rather than picking the first element, and the pack's docs say to split batches upstream. Note that the refusal here isn't wrapped in the pack's friendly error type, so you'll see the raw shape error rather than a helpful sentence - same outcome, less hand-holding.

The three inputs

audio is the clip. Anything that emits AUDIO works: a Load Audio, the output of an upscaler's weird cousin, or a TTS node - round-tripping your own synthetic voice through STT is a genuinely useful sanity check, and the pack ships a dedicated_speech_roundtrip.json example that does exactly that.

model is the exact model ID served by your endpoint, free text, no catalogue lookup. TTS and STT models are usually separate deployments even on the same host, so don't reuse the ID you used for speech synthesis.

language is optional and wants an ISO-639-1 code - en, ja, de. Empty means auto-detect, which is the right default. Force a code when you know it: it removes a guess, and on short or music-heavy clips it removes most of the wrong-answer failure mode.

connection picks the saved endpoint. It's the only route to a working run; with nothing selected, validation fails with "Select a dedicated connection".

Output: one STRING. Wire it into a Save Text to keep a transcript, into an LLM node in chat mode to summarise or rewrite it, or into a prompt on an image/video node if you're building something that generates from spoken description.

Install

Manager → search EcoHash → install → restart ComfyUI → refresh the browser. Manual:

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

requests is the only dependency. No model download. Windows Portable: use .\python_embeded\python.exe -m pip install -r .\ComfyUI\custom_nodes\ComfyUI-EcoHash\requirements.txt so it lands in the interpreter ComfyUI actually runs.

Then, outside the graph: sidebar EcoHash → Connections → save your key → Add connection with a name and the endpoint URL. Include the API prefix - nothing appends /v1 for you. For an EcoHash instance: https://api.ecohash.com/inference-instances/INSTANCE_ID/proxy/v1.

Troubleshooting

"Inference API returned no transcription text." The node says the audio may be silent or in an unsupported language, and it's usually right. Check the clip actually has audio before you go hunting for a config problem - a muted track and a broken endpoint produce the same error.

Audio has to be WAV on the wire, but you don't have to make it one. The node handles the conversion. What it can't fix is an endpoint that answers with something other than JSON containing text.

404 / 401 / 402. 404 is almost always the model ID or a missing API prefix. 401 is the key, and remember the environment variable wins over the saved value. 402 is credit.

It keeps returning the same transcript. ComfyUI's output cache - identical inputs, cached result, no request sent. Change the clip or any input.

Long files. There's no chunking in the node. One clip per request means you split long recordings yourself, upstream, and that's a real limitation rather than something you can configure around.

CategoryEcoHash/DedicatedModels

Inputs (4)

NameTypeDefaultDescription
audioAUDIO—
modelSTRINGExact model ID served by your dedicated endpoint; it need not appear in the public EcoHash catalog.
languageSTRINGISO-639-1 code, empty = auto-detect
connectionoptCOMBO1 options:

Outputs (1)

NameTypeDescription
STRINGSTRING—