Nodes/arkennemasis - ChatGPT / Codex / fal AI nodes/arkennemasis fal · xAI Grok Voice · $0.00083/s
ComfyUI Node

arkennemasis fal · xAI Grok Voice · $0.00083/s

This one is a voice agent, not a transcriber

By Hishamahmer·Created 3 months ago·Updated 9 days ago· 11
arkennemasis fal · xAI Grok Voice · $0.00083/s
  • audio
  • audio
  • audio_path
  • text
  • duration
  • info
◄prompt►
◄voice(not set)►
◄tools{"x_search": {"enabled": false}, "web_search": {"enabled": false}, "mcp_servers": []}►
◄max_cost_usd20.0►
◄reuse_identical_runtrue►
◄extra_json►
◄max_concurrent1►

At $0.00083 per second this is the cheapest node in the pack by a mile - a ten-second exchange costs less than a cent - and it's also the one people install for the wrong job. It doesn't transcribe. You hand it a recording of someone speaking, and Grok listens and replies, out loud, with its own voice, and the transcript of what it said comes back on the text output.

So it's a conversational agent with a microphone socket: a recorded prompt in, a spoken answer out. In a ComfyUI graph that makes it weird and occasionally very useful - a node that gives your workflow an opinion it can say out loud.

Inputs

audio is required: the recording of the user's speech, up to 10 minutes and 50 MB, converted to 16-bit 24 kHz mono PCM before it's sent. Most common formats are fine.

prompt is optional and is not the thing you're saying - it's the system instruction. The tooltip describes it as the persona and conversation context. Leave it empty and you get Grok's default persona, which is chatty and a bit much. This is the field that makes it useful in a pipeline: "you are a continuity checker for a shot list; answer in one sentence" gets you a far more usable node than no prompt at all.

voice is a dropdown of xAI's built-in voices - carina, zagan, helix, orion, luna, iris, altair, zenith, perseus, helios, lux and more, plus (not set) which falls back to Grok's default.

tools is a JSON field that decides whether the agent can reach outside itself: x_search, web_search and mcp_servers, all disabled in the default blob. Switch a search on and the reply is no longer just a model's opinion, it's one grounded in something it looked up - and takes correspondingly longer and costs more seconds. Note what's deliberately absent: the tooltip says file_search and collections are unsupported here because of xAI's Zero Data Retention requirements, and caller-side function tools aren't in this configuration either.

Outputs: audio (the spoken reply, as an AUDIO you can save or mix), audio_path, text (the transcript of the reply), duration, and info with the request id, estimate and fal's full response.

Shared controls: max_cost_usd (default $20 - you will never hit this), reuse_identical_run, extra_json, max_concurrent.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis
pip install httpx

Manager → arkennemasis. Then in the .env next to run_nvidia_gpu.bat:

FAL_KEY=your-key-from-fal.ai/dashboard/keys

Restart ComfyUI. The node appears under arkennemasis/fal/Audio/xAI; results land in output/fal/xai_grok-voice/.

Where people go wrong

  • Expecting a transcript of their own audio. text is what Grok said, not what you said. If you want a transcript, that's a speech-to-text endpoint, and there are several in this pack's audio menu.
  • Leaving prompt blank and being surprised by the tone. The default persona is a general-purpose assistant; for anything structured, write the persona.
  • Malformed tools JSON. It's a JSON object, edited by hand, with three keys. Break it and the node refuses the run before anything is uploaded.
  • Enabling a search tool without thinking about latency. A web-search reply is several extra seconds of billed time, and the duration output shows you exactly how much.
  • Re-running the same graph and getting the same reply. That's reuse_identical_run doing its job; turn it off for a second opinion on identical inputs.
Categoryarkennemasis/fal/Audio/xAI

Inputs (8)

NameTypeDefaultDescription
audioAUDIOURL of the audio containing the user's speech. The Grok agent listens to it and replies with speech. Most common audio formats are supported; the audio is converted to 16-bit 24 kHz mono PCM before being sent to Grok. Maximum duration 10 minutes, maximum file size 50 MB.
promptSTRINGOptional system instructions describing the agent's persona and conversation context. Uses Grok's default persona when omitted. Empty leaves it out.
voiceCOMBO(not set)Built-in xAI voice for the agent's reply. Uses Grok's default voice when omitted. '(not set)' leaves it to the model.
toolsSTRING{"x_search": {"enabled": false}, "web_search": {"enabled": false}, "mcp_servers": []}Typed xAI tools supported by this app's convenience configuration. Every tool is disabled in the default configuration: the searches must be switched on via their ``enabled`` flags and ``mcp_servers`` starts empty. ``file_search`` / collections are intentionally absent and unsupported due to Zero Data Retention (ZDR) requirements. Caller-side function tools are likewise absent from the typed configuration — they requ
max_cost_usdoptFLOAT20.00–100000Safety cap. If the estimated cost of this run is above this many US dollars the node stops BEFORE sending anything to fal. 0 = no cap.
reuse_identical_runoptBOOLEANtrueIf these exact inputs (the settings AND the same pictures/clips/audio) were already paid for and the files are still in output/fal, return them instead of paying again - also after a ComfyUI restart. Turn off for a fresh take with the same settings.
extra_jsonoptSTRINGAdvanced: a JSON object merged into the request last, for any fal field this node has no box for. Example: {"seed": 7}. Leave empty normally.
max_concurrentoptINT11–32How many paid fal calls may run at the same time in one run, across every fal node. 1 (default) = one after another. This node starts its paid part only while fewer than this many fal calls are running. Once any fal node fails, the ones still waiting are not started, so nothing more is billed.

Outputs (5)

NameTypeDescription
audioAUDIO—
audio_pathSTRING—
textSTRING—
durationFLOAT—
infoSTRINGJSON: request id, cost estimate, saved files and fal's full answer.