Nodes/comfyui-magic-hour/Magic Hour: AI Voice Generator
ComfyUI Node

Magic Hour: AI Voice Generator

1,266 Voices in a Dropdown, and a Billing Meter Behind It

By magichourhq·Created about 16 hours ago·Updated about 15 hours ago· 0
Magic Hour: AI Voice Generator
    • audio
    • audio_path
    • credits_charged
    ◄prompt►
    ◄voice_name21 Savage►

    This is the node you want when the video is done and silent. Type the line, pick a voice from a list, get an AUDIO back that you can drop into Lip Sync or Talking Photo - or just save as narration. No reference clip needed, no cloning, no local TTS install. It's the least dramatic node in the pack and probably the one you'll use most.

    How it works

    Same pattern as the rest: the text and the chosen voice name go to Magic Hour's ai_voice_generator endpoint inside an HTTP call. Their servers synthesize, the node waits out the job, downloads the result into ComfyUI/output/magic_hour/, decodes it and hands you a ComfyUI AUDIO - a waveform tensor plus sample rate.

    No weights load, no VRAM is touched. That's the deal with every node in this pack, and the KB's API-wrapper nodes essay lays out the trade honestly: per-call cost and your text leaving the machine, in exchange for a capability you don't have to install. For TTS the local alternative is genuinely good now - Kokoro, Piper, Chatterbox, F5-TTS - and the audio generation essay walks that decision tree properly. Reach for this node when you want zero setup and a huge voice roster; reach for Chatterbox when you want it offline, free, and private. This one is the convenience purchase, and it's a first-party pack (Apache-2.0, Magic Hour's own repo), not a random key-harvesting wrapper.

    The inputs

    Two fields. That's the whole node.

    prompt is the text to be spoken. Everything in the box gets read. There's no SSML field, no per-word emphasis, no pause control - if you need a beat, write punctuation and hope, or generate the line in pieces and cut them together.

    voice_name is a dropdown with 1,266 entries, and it's the reason this node gets screenshotted. The list is celebrity and character names - A$AP Rocky, Abraham Lincoln, Ada Wong, Adele, and so on. It's read live from the installed SDK's typed params at import time, which is why it's that long and why it changes when the SDK does. Default is whatever sorts first, currently 21 Savage; change it before you run anything.

    Treat that roster as a legal question, not a feature list. The names are the vendor's; the rights to a real person's voice aren't. For character work, a cloned voice you actually have permission to use (the Voice Cloner node) is the safer route.

    Outputs

    audio - the synthesized speech as a ComfyUI AUDIO, ready to wire into Magic Hour: Lip Sync, Magic Hour: Talking Photo, Magic Hour: Audio to Video, or a save/preview audio node. audio_path - the downloaded file path as a string, and your fallback if in-app decoding misbehaves. credits_charged - an INT with the run's actual cost, which makes a narration batch auditable.

    Install

    ComfyUI Manager → search "Magic Hour", or by hand:

    cd ComfyUI/custom_nodes
    git clone https://github.com/magichourhq/comfyui-magic-hour
    pip install -r comfyui-magic-hour/requirements.txt
    

    The only dependency is the magic-hour SDK, on Python 3.10+, plus a ComfyUI with the VIDEO type. Restart, then set the key before launch:

    export MAGIC_HOUR_API_KEY=...
    # or: echo 'YOUR_KEY' > ComfyUI/custom_nodes/comfyui-magic-hour/api_key.txt
    

    Deliberately not a node field - widget values are serialized into workflow JSON, so a key typed into a node travels with every workflow you share.

    Where people get burned

    The node is missing from the menu. Voice nodes are hidden entirely when MAGIC_HOUR_DISABLE_VOICE_NODES=1 is set in the environment ComfyUI started with. If you inherited that env var, both voice nodes are gone and no amount of reinstalling brings them back.

    A saved workflow whose voice disappeared. Because voice_name is populated from the installed SDK, updating (or downgrading) magic-hour can change the list under an existing graph. If a workflow throws on an unknown value, re-pick the voice:

    pip install -U 'magic-hour>=0.87.1'
    

    402 mid-batch. Voice generation is cheap compared to video, but a fifty-line narration run is fifty calls. The pack surfaces the API message: 402 means credits or plan limits, 401 means the key is bad. Watch credits_charged on the first run and multiply before you queue the rest.

    Audio arrives but won't preview. The pack decodes with PyAV, which comes with ComfyUI rather than this pack - a mangled install can fail to decode a job that already succeeded and was already billed. audio_path still points at the file.

    You still need a "who said this" answer. Generating a voice that sounds like a specific famous person and publishing it is the part no node can help with. Check Magic Hour's terms and the law where you live before you post it anywhere.

    CategoryMagic Hour

    Inputs (2)

    NameTypeDefaultDescription
    promptSTRING—
    voice_nameCOMBO21 Savage1266 options: 21 Savage, 50 Cent, A$AP Rocky, A.R. Rahman, Aamir Khan, Aang (Avatar), +1260

    Outputs (3)

    NameTypeDescription
    audioAUDIO—
    audio_pathSTRING—
    credits_chargedINT—