Nodes/Protoface/Protoface Eleven Music · Generate Music
ComfyUI Node

Protoface Eleven Music · Generate Music

A prompt-to-song node for when ACE-Step won't cut it

By protoface-ai·Created 22 days ago·Updated 13 days ago· 0
Protoface Eleven Music · Generate Music
    • audio
    • files
    • run id
    ◄prompt►
    ◄force_instrumentaltrue►
    ◄music_length_ms10000►
    ◄output_formatmp3_standard►
    ◄generation_id0►
    ◄request_scope►

    A song generator, inside the graph

    For about two years the local answer to "I want music" was ACE-Step, and it's a genuinely good answer - a Sana-style deep-compression autoencoder that renders minutes of audio in seconds, with LoRAs and an XL variant grown around it. What it is not is ElevenLabs' music model: coherent arrangements, actual vocals, a mix that doesn't need rescuing.

    This node puts that on your canvas. Part of Protoface, a beta pack that wraps hosted models as native ComfyUI nodes - paid per generation, running on their side, no weights and no VRAM.

    The case that makes it worth the money: you have a 30-second vertical clip and need a score that lands with the cut. You can spend an evening prompting ACE-Step and still get a track that wanders, or a minute describing what you want. For anything you'll publish, the second path usually wins on time.

    How it works

    Under the hood it's the same adapter every Protoface node uses: your widgets become a request against the provider's public schema, the pack validates it, submits the job, polls, journals the intent in a local SQLite file so a crash can't double-charge you, and then materialises the result as a native AUDIO.

    The control that trips people up isn't musical at all. generation_id is the paid-request identity, not a seed. Keep it where it is unless you deliberately want to buy another take.

    The inputs that matter

    Four of them, really.

    prompt is the description - genre, instrumentation, mood, tempo, the usual. Multiline, so write it as a paragraph rather than keywords if you can; the model responds better to a scene than to a tag list.

    force_instrumental defaults to true, which is worth noticing. If you prompted for a vocal track and got a karaoke bed, that's why. Flip it off when you want singing - and expect to iterate on the vocal, because this is the part of music generation least under your control.

    music_length_ms is in milliseconds, from 5,000 to 300,000. The default is 10,000, i.e. ten seconds - a sting, not a track. Keep the math in your head: 1,000 ms per second, so 30 s is 30000, a minute is 60000, three minutes 180000. It's a target length, not a hard guarantee, and longer costs more.

    output_format defaults to mp3_standard. Fine for a video soundtrack. If you're processing it further - ducking it under dialogue, limiting, passing it to another node - check whether a lossless option exists before you commit, because you don't want to transcode twice.

    Outputs

    audio is a list of native AUDIO. Wire it to Save Audio, or into whatever else wants audio. Because it's a list, "the model returned two takes" is normal, and any connected downstream node runs once per take.

    files is a list of PROTOFACE_FILE - the original downloads, in whatever format the provider served. Useful when you want the API's file rather than ComfyUI's re-encode.

    run id is a plain string. If the render finished after your browser dropped, that plus the Protoface Resume Run node gets you the result without paying again.

    Install

    In ComfyUI Manager, search Protoface and install protoface-nodes, then restart and reload the browser. Manual, from your ComfyUI directory:

    git clone --branch v0.1.0 --depth 1 https://github.com/protoface-ai/protoface-comfyui.git custom_nodes/protoface
    python -m pip install -r custom_nodes/protoface/requirements.txt
    

    Then restart. ComfyUI 0.41.0+ and Python 3.10+ are required; the four dependencies (httpx, jsonschema, Pillow, av) install fast and don't touch your torch environment. Click Protoface in the lower-right corner and enter a key - separate from Comfy credits, billed to Protoface directly.

    One structural note: this pack ships one implementation for all its nodes. If Add Node search shows nothing, the problem is pack discovery, not the music node - check that custom_nodes/protoface/__init__.py exists and that you haven't got a second copy under a different folder name.

    Where people get burned

    The 10-second default. Most first complaints about this node are really complaints about forgetting to set music_length_ms.

    Expecting a fixed-length file. Length is a target. Ten-second requests have come back slightly over; if you're cutting to a timeline, trim rather than trusting the number.

    Requeueing to "get a better take" while generation_id is fixed. You'll get the same recorded result back, because that's exactly what fixing it means. Increment it if you want a new render - and accept that it's a new charge.

    Losing the key on restart. Interactive keys live in server memory only. On a headless box, set PROTOFACE_API_KEY_FILE to a private file before launch. And remember anyone who can queue workflows on that server can spend on your key.

    CategoryProtoface/Music/elevenlabs

    Inputs (6)

    NameTypeDefaultDescription
    promptSTRINGText description of the music you want to generate.
    force_instrumentalBOOLEANtrueGenerate instrumental music without vocals.
    music_length_msINT100005000–300000Target duration in milliseconds (5,000-300,000ms, i.e., 5 seconds to 5 minutes).
    output_formatCOMBOmp3_standardAudio output format and quality.
    generation_idINT00–9007199254740991Keep fixed to reuse/resume this paid job. Increment for a fresh paid generation; independent of the model seed.
    request_scopeSTRINGAutomatically assigned per node. Headless clients must supply a stable unique workflow/node ID. This is not a secret.

    Outputs (3)

    NameTypeDescription
    audioAUDIO—
    filesPROTOFACE_FILE—
    run idSTRING—