Nodes/ComfyUI-OpenAI-FM/OpenAI FM TTS
ComfyUI Node

OpenAI FM TTS

Shockingly good, free voiceovers with no API key

By fairy-root·Created about a year ago·Updated about a year ago· 50
OpenAI FM TTS
    • AUDIO
    textEnter text here
    voiceShimmer
    vibe---
    optional_vibe_text

    The name is half a lie, and the lie is the good news. This node is called "OpenAI FM TTS" and it does send your text to an OpenAI-run service, but there's no API key, no billing, and no official OpenAI API involved. It talks to openai.fm, OpenAI's free web demo, through an endpoint the author reverse-engineered - the README says so, in writing, complete with a legal disclaimer. What you get is genuinely good expressive text-to-speech, a dozen distinct voices, and emotional control, all dropped into your ComfyUI graph for the price of an internet connection.

    Reach for it whenever a workflow needs a voice: narration for an image-to-video or Wan clip, character lines for a scene, a quick voiceover you don't want to record yourself. The community has been doing exactly this - the r/StableDiffusion crowd was using openai.fm for anime voiceovers back in 2025, and this node just makes that a node instead of a browser tab.

    How it works

    Under the hood it's one HTTP call. The node POSTs a multipart form to https://www.openai.fm/api/generate with your text, a "vibe" prompt, the voice (lowercased), and vibe=null. The response is WAV bytes, which torchaudio decodes into a [batch, channels, samples] tensor at 44.1kHz - the standard ComfyUI AUDIO format. It also auto-saves a openaifm_<timestamp>.wav into your output folder, so even if you skip the Save Audio node you still get a file.

    Two things worth knowing before you trust it. First, it's a cloud call: no network, no audio, and openai.fm is a demo site, not a contract - if OpenAI changes or shuts the endpoint, this node breaks and nobody can fix it but them. Second, on any failure it returns one second of silence instead of throwing an error, so a silent output is a symptom, not a result. Check the console for "API request failed" before you blame your speakers.

    The inputs that matter

    • text - multiline, so long scripts and dialogue are fine. This is the thing you're actually writing.
    • voice - 11 choices: ALLoy, Ash, Ballad, Coral, Echo, Fable, 0nyx, Nova, Sage, Shimmer, Verse. Yes, "0nyx" with a zero; that's openai.fm's branding, not a typo.
    • vibe - 49 emotional styles loaded from data/vibes.json, defaulting to ---.
    • optional_vibe_text - a freeform field that overrides the vibe dropdown when filled.

    Here's the quiet trap: vibe resolution is optional_vibe_text first, then the dropdown if it isn't ---, then a hard fallback to "Calm". So set vibe to ---, leave the optional text empty, and you'll silently get Calm voice acting. If a line comes out weirdly soothing, that's why.

    The single output is AUDIO, which wires straight into any audio node - a Save Audio node, or whatever else your audio pipeline has. Remember it's already writing a WAV for you, so don't add a second save unless you want the file in a specific spot.

    Installing it

    ComfyUI Manager is the easy route - search "OpenAI FM" or "ComfyUI-OpenAI-FM" and hit install. Manual:

    cd ComfyUI/custom_nodes
    git clone https://github.com/fairy-root/ComfyUI-OpenAI-FM
    cd ComfyUI-OpenAI-FM
    pip install -r requirements.txt
    

    Then restart ComfyUI and the node shows up under the audio category. The requirements are just requests, torch, and torchaudio - if ComfyUI runs on your machine at all, you already have two of those, so this is one of the lightest installs you'll do. No model downloads anywhere.

    Gotchas

    • No seed input. The README (and the original r/comfyui post) talks about a seed parameter for reproducible output. The shipped node has none - don't hunt for it, you can't retry-and-match a cloud generation.
    • Silence means failure, and the only real fix is checking your network and the console logs.
    • It's a demo endpoint. Fine for personal and educational use (the author's disclaimer leans on that), but don't build a product on it, and expect it to break whenever OpenAI redecorates the site.

    For a free, keyless voice in a ComfyUI graph, this is the one I'd grab. Just respect what it is: a scraper in a trench coat, not an API.

    The author is FairyRoot (fairy-root), MIT-licensed, and posts as Fairysubsteam on Reddit - the same account that shared this node's announcement back in March 2025.

    Categoryaudio

    Inputs (4)

    NameTypeDefaultDescription
    textSTRINGEnter text here
    voiceCOMBOShimmer11 options: ALLoy, Ash, Ballad, Coral, Echo, Fable, +5
    vibeCOMBO---49 options: ---, Angry, Anxious, Blissful, Calm, Compassionate, +43
    optional_vibe_textoptSTRING

    Outputs (1)

    NameTypeDescription
    AUDIOAUDIO