Nodes/ComfyUI-Foundation1/Foundation-1 Prompt Builder
ComfyUI Node

Foundation-1 Prompt Builder

The tag picker that writes your Foundation-1 music prompts so you don't have to

By Aero-Ex·Created 6 months ago·Updated 6 days ago· 1
Foundation-1 Prompt Builder
    • STRING
    instrumentSynth Lead
    timbre_presetNone
    genreNone
    moodNone
    recording_styleNone
    timbre
    notationMelody
    fxMedium Reverb
    keyC minor
    bpm120
    bars8

    If you've been typing Foundation-1 prompts by hand, you know the drill: it's not enough to say "warm digital piano." The model was trained expecting a specific, layered layout that ends with the production notes - the key, the bar count, the BPM - and getting that wrong is half of why your generations sound off. Foundation-1 Prompt Builder is a big structured picker that assembles that whole string for you. Pick from dropdowns, type the odd custom bit, and out pops one prompt-ready STRING.

    Quick context, because it matters for how you use this: Foundation-1 is RoyalCities' text-to-sample music model - a finetune of Stable Audio 1.0 that ComfyUI supports natively. The model's own prompt style is deliberately formulaic, which is exactly what makes a builder node like this useful instead of a gimmick.

    How it works

    Internally the node joins your selections into one comma-separated string in a fixed order, following the Foundation-1 guidelines in the pack's foundation1_utils.py: [Genre] [Mood] [Instrument], [Timbre + Timbre Preset], [Notation], [FX], [Recording Style], [Key], [Bars], [BPM]. Anything you leave on None gets dropped from the line entirely - so a lazy setup just produces Synth Lead, Warm, Melody, Medium Reverb, C minor, 8 Bars, 120 BPM. That last chunk, the 8 Bars and 120 BPM suffix, is the part people hand-type and then forget; the model was trained BPM/bars-aligned, so keeping it in the text genuinely steers the output.

    The inputs that matter

    You don't need all eleven. The ones worth touching on day one:

    • instrument (84 choices) - the actual instrument, from Synth Lead to Kalimba to Tuba. This is your main creative dial.
    • timbre / notation / fx - free-text boxes, not dropdowns. Defaults are "", Melody, and Medium Reverb. notation is where you describe what the part does ("plucked, complex melody"); treat fx as a light production hint.
    • genre, mood, timbre_preset, recording_style, key - dropdowns that default to None and only appear in the prompt when you pick something. C minor is the key default.
    • bpm (1–500) and bars (1–128) - these get appended as 8 Bars / 120 BPM.

    The output is a single STRING, and it's just text - wire it into a CLIPTextEncode's text input (the positive side), which goes into the sampler's conditioning. If you're using the pack's other node, the KSampler, note the trap: the prompt builder's bpm/bars are words in the prompt, while the sampler has its own bpm/bars that size the actual audio latent. Keep them in agreement or you get a prompt that promises 8 bars of 120 BPM over a latent built for something else.

    Installing it

    Same story as the rest of the pack - it ships in Aero-Ex/ComfyUI-Foundation1. Easiest via ComfyUI Manager: search "Foundation1" and install, then restart. Or the manual route:

    cd ComfyUI/custom_nodes
    git clone https://github.com/Aero-Ex/ComfyUI-Foundation1
    

    No pip extras, no requirements.txt - this pack is pure Python over ComfyUI's own nodes. The actual heavy lifting is the model files, which the README points at: Foundation_1.safetensors (RoyalCities/Foundation-1) into models/checkpoints/, and t5-base.safetensors into models/text_encoders/. Load the T5 with a CLIPLoader set to the stable_audio type, and load the checkpoint with CheckpointLoaderSimple.

    Where people get burned

    The node is a text assembler, so failure modes are mostly self-inflicted. The None defaults mean a bare run is a very plain prompt - fill in at least genre, mood, and instrument. And don't fight the layout: the whole point is the fixed order, so let it build the line instead of dropping your own comma soup into timbre. If the output sounds nothing like your tags, your T5 encoder is usually the culprit (wrong or missing t5-base.safetensors), not this node. It's a small, opinionated tool - but it's the difference between typing Piccolo, Flute, Airy, Music Box, plucked, complex melody, 8 Bars, 140 BPM, C# mino and getting that for free.

    CategoryFoundation1

    Inputs (11)

    NameTypeDefaultDescription
    instrumentCOMBOSynth Lead84 options: None, Synth Lead, Synth Bass, Digital Piano, Pluck, Grand Piano, +78
    timbre_presetCOMBONone51 options: None, Warm, Bright, Gritty, Clean, Retro, +45
    genreCOMBONone24 options: None, Cinematic, Lo-fi, Techno, House, Ambient, +18
    moodCOMBONone18 options: None, Epic, Chill, Aggressive, Sad, Happy, +12
    recording_styleCOMBONone12 options: None, Studio, Live, Raw, Processed, Analog, +6
    timbreSTRING
    notationSTRINGMelody
    fxSTRINGMedium Reverb
    keyCOMBOC minor25 options: None, C major, C# major, D major, D# major, E major, +19
    bpmINT1201–500
    barsINT81–128

    Outputs (1)

    NameTypeDescription
    STRINGSTRING