Foundation-1 Prompt Builder
The tag picker that writes your Foundation-1 music prompts so you don't have to
- STRING
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 LeadtoKalimbatoTuba. This is your main creative dial. - timbre / notation / fx - free-text boxes, not dropdowns. Defaults are
"",Melody, andMedium Reverb.notationis where you describe what the part does ("plucked, complex melody"); treatfxas a light production hint. - genre, mood, timbre_preset, recording_style, key - dropdowns that default to
Noneand only appear in the prompt when you pick something.C minoris 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.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| instrument | COMBO | Synth Lead | 84 options: None, Synth Lead, Synth Bass, Digital Piano, Pluck, Grand Piano, +78 |
| timbre_preset | COMBO | None | 51 options: None, Warm, Bright, Gritty, Clean, Retro, +45 |
| genre | COMBO | None | 24 options: None, Cinematic, Lo-fi, Techno, House, Ambient, +18 |
| mood | COMBO | None | 18 options: None, Epic, Chill, Aggressive, Sad, Happy, +12 |
| recording_style | COMBO | None | 12 options: None, Studio, Live, Raw, Processed, Analog, +6 |
| timbre | STRING | — | |
| notation | STRING | Melody | — |
| fx | STRING | Medium Reverb | — |
| key | COMBO | C minor | 25 options: None, C major, C# major, D major, D# major, E major, +19 |
| bpm | INT | 1201–500 | — |
| bars | INT | 81–128 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| STRING | STRING | — |