Shrug ASR
Turn audio inside your graph into text you can prompt with
- connection
- audio
- text
You've got a voiceover, a dialogue track, or a field recording sitting in your workflow as a ComfyUI AUDIO node, and you want it as text - for a prompt, a transcript, a condition, a filename. Shrug ASR is the speech-to-text node in this pack: it takes that audio, transcribes it on your local heylookitsanllm server, and hands you back a plain string.
It's one of those nodes you don't think you need until you do. Video workflows are the obvious case - pull the audio off a clip, transcribe it, and use the dialogue to drive captioning or re-prompting without ever leaving the graph.
How it works
The ComfyUI AUDIO input arrives as a dict holding a waveform tensor and a sample rate. The node encodes that to 16-bit PCM WAV bytes (via the standard library's wave module, so no extra codec dependency), then POSTs it to the server's /v1/audio/transcriptions endpoint. The server runs the actual ASR model and returns a transcript string, which is your single output.
It's a thin node, and that's the right design - the transcription model lives server-side, same as the vision model, so you swap models by changing what's loaded on the server rather than touching the graph.
The gotcha that matters most
Audio support on heylookitsanllm is model-dependent in a way that will bite you. Per the server's own README, audio input is supported on GGUF models served through its managed llama.cpp subprocess - not on MLX models, whose audio towers are skipped at load. Point ShrugConnection at an MLX vision model and Shrug ASR will come back with a hard 400. The fix is a config change, not a node change: load a GGUF model with audio support on the server.
That asymmetry is worth internalizing: this pack's nodes don't care which engine the server uses - except the ones where the engine decides what's even possible.
Inputs and outputs
Just two inputs, both required:
connection- aSHRUG_CONNfromShrugConnection. The model you picked there is the model doing the transcribing.audio- a ComfyUIAUDIOnode output (waveform + sample rate).
One output: text - the transcript as a STRING. Wire it into a ShowText node, a prompt builder, or anything else that eats strings.
How to install
Standard pack install. ComfyUI Manager → search Shrug-Prompter → Install → restart, or:
cd ComfyUI/custom_nodes
git clone https://github.com/fblissjr/shrug-prompter
Dependencies (httpx, orjson, pillow, torch, numpy) are already in any modern ComfyUI - nothing heavy to install, no models to download into ComfyUI (those live on the server). You do need a current ComfyUI build, since the pack registers through the V3 extension API.
Common issues
- HTTP 400 on transcribe. Almost always the model-on-the-server problem above: MLX models reject audio. Load a GGUF model with audio support.
- Blank transcript. Quiet source, wrong channel layout, or the model isn't great at your language/accent. Check the server logs for what it actually received.
- Node not appearing. Old ComfyUI build without the V3 API, or the pack isn't installed/enabled. Verify under the
shrugcategory.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| connection | SHRUG_CONN | — | |
| audio | AUDIO | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| text | STRING | — |