.vibrai project files
A .vibrai file is a plain YAML text file — a song blueprint. It sits next to your .als file and describes:
- Sections — the named parts of the arrangement (Verse 1, Chorus 1, Drop, etc.), their lengths, tension category, and positions.
- Parts — what plays in each section: which track, which generator, and any scale or variation overrides.
- Templates — arrangement-view clip placements and automation slot definitions.
- Generation settings — global tempo, scale (root + name), and a deterministic seed.
.vibrai files are a lightweight way to version-control your music. The vibrai capture command (CLI) or capture_project tool (MCP) creates a .vibrai from whatever is currently in your Live set — you don’t have to write one from scratch.
Generators
The engine ships four generators. Each generator receives a section’s tension level, the active scale, and a stable seed, and produces a set of MIDI notes: Euclidean — for rhythmic parts (kick, snare, hi-hat, percussion, crash, fill, roll). Uses the Bjorklund algorithm to spread hits evenly across a step grid. Tension controls density: higher tension = more hits; lower tension = sparser patterns. Melodic — for line-based parts (bass, lead, arp, riff, melody, hook, solo). Walks a 16-step grid over a chord progression chosen per tension category, drawing pitches from a per-genre melodic cell that defines step density, interval pool, octave range, and accent shape. Scale-aware and deterministic per seed. Ambient — for sustained harmonic parts (pads, chords, ambience, loops). Generates drop-2 chord voicings from a bank of chord progressions, chosen per tension category. Scale-aware: output respects the resolved scale for each (section, part) pair. FxSweep — for FX risers and releases. Emits one whole-note trigger per bar of the section; the rising or falling motion itself is a filter-cutoff sweep the arrangement engine writes as automation (exponential up for a riser, exponential down for a release). In a.vibrai part, the generator: field accepts Euclidean, Melodic, Ambient, or FxSweep.
Genre presets (.vibraigenre files) wire each part type to the appropriate generator and configure section lengths, tempo, and templates. Fourteen genre libraries ship with Vibrai today.
Theme and variation
A Vibrai arrangement is built around a theme extracted from the first section (by position). Every other section’s output is derived from that theme, not from scratch — this guarantees coherence across a song. Variation operators let you modify the theme per-section without breaking coherence. Three operators ship today, applied in fixed order (transpose → density → motif) regardless of the order you write them in YAML:
Variation is relative to the theme, not cumulative. Section 3’s output depends only on the theme + section 3’s own variation block — never on section 2. This means you can re-render a single section without affecting any other, and
vibrai generate --dry-run can preview individual sections safely.
Harvested phrases
Generators synthesize notes. Harvested phrases are the alternative: literal MIDI you played, lifted out of your own Live set and replayed. Vibrai never authors phrase content. The only way one enters a genre isvibrai genre extract --faithful, which captures a phrase per part per section from the set you have open.
A harvested phrase reaches a section two ways:
- In the section it was captured from, it replays verbatim — the notes you played, transposed only by the scale root. That capture is ground truth, so nothing adjusts it.
- In a section that has no phrase of its own, the part borrows one from elsewhere and re-fits it to that section’s chords: each note shifts by the root offset of the chord window it lands in, so intervals inside a window stay intact and the riff tracks the harmony.
- Drum phrases are pooled but never re-fitted. A drum pitch is a pad identity, not a scale degree, so shifting it by a chord root would turn a kick into a tom.
- A phrase carries the tension of the section it came from, and borrowing prefers a matching tension. Phrases captured before that field existed show as
any— still eligible anywhere, just never preferred over a real match.
Curating a harvest
Extraction is indiscriminate, sophrase list shows you what it took and phrase remove drops a capture that did not survive contact with the rest of the song.
1
Harvest the open set
2
See what it captured
3
Drop a capture you do not want
--confirm is required — this rewrites the genre file and cannot be undone. Built-in genres are read-only and rejected.4
Regenerate and listen
list_phrases and remove_phrase. See Phrase for the full parameter reference.