Open source · GPL-3.0 · Python + Faust + SwiftUI

Electronic music as code,
built for AI.

Pulsar is a small, readable music language and a studio-grade synthesis engine. An AI model writes a song, renders it, reads a mix report instead of listening — and iterates until it sounds right.

Pulsar Studio: a code editor on the left and an Ableton-style arrangement with piano rolls, drum lanes and automation curves on the right

Written by a fresh AI agent, from the docs alone

We handed a new agent nothing but the language reference and the CLI. It composed this deep house track, rendered it six times, and used the mix report to fix its balance and energy arc. Every sound is synthesized, including the vocal: an original lyric sung by a neural voice — no samples, no recorded singers.

Deep House Agent122 BPM · A minor · 3:09 · 9 tracks · rendered by Pulsar

A language models already almost know

Rhythms use TidalCycles-style mini-notation, wrapped in a tiny conventional syntax: tracks, sections that extend each other, play, automate, arrange — plus variables, functions, lambdas, loops and conditionals.

Music theory built inNote names, scale degrees, chord symbols (Am9, Fmaj7) and roman numerals in the song's key, with smooth voice-leading.
Errors that teachEvery error has a line, a column and a “did you mean” — so a model fixes itself in one shot.
DeterministicSeeded randomness, no hidden state: the same source always renders the same audio.
tempo 122
key "A minor"

track kick = drums("house")
track bass = synth("moog_bass", duck: 0.6)
  >> comp(ratio: 3)
track pad  = synth("pad", reverb: 0.4, duck: 0.6)

let prog = "<Am9 Dm9 Fmaj9 Em7>"

section intro 8 {
  play kick "bd*4, [~ hh]*4"
  play pad prog.voicing("smooth")
  automate pad.cutoff 0.25 -> 0.5
}

section drop 16 extends intro {
  play kick "bd*4, ~ cp ~ cp, [~ hh]*4"
  play bass "<a1 d2 f1 e1>".struct("x ~ ~ x ~ ~ x ~")
}

arrange intro, drop, drop

The sound quality matters

Pulsar renders every note individually at 96 kHz through Faust DSP compiled to native code, places it sample-exactly, and masters the result to a loudness target.

~

Analog-modelled synths

Band-limited oscillators with unison and drift through Moog ladder, TB-303 diode, Korg MS-20 and Oberheim SEM filter models. Plus FM and Karplus-Strong engines.

●

34 tuned presets, 5 kits

Every preset is loudness-calibrated with a balanced fader, so a song that only picks presets already sits right in the mix.

◐

A real mix bus

Zita reverb, ping-pong delay, sidechain ducking, glue compression, a 4× oversampled soft clipper and a true-peak limiter.

♪

Neural singing voices

54 Kokoro text-to-speech voices that sing your lyrics on your melody — one word per note, re-pitched with formants preserved, doubled for width. Or speak lines on the beat.

◆

Sampler

Pitch, slice, gate and fit any audio file to the grid — one-shots, loops and chops.

A mix report that replaces ears

A model can't listen, so every render tells it what an engineer would hear: loudness, true peak, tonal balance per band, stereo image, the energy arc of each section, per-track levels, frequency masking between tracks — and concrete fixes.

Match a reference you own with pulsar compare and pulsar match, or fit a synth patch to a recording's timbre with pulsar timbre.

loudness -10.0 LUFS   true peak -1.0 dBTP   crest 10.2 dB
spectrum: sub +0  bass -1  low_mid -3  mid -11  presence -17
stereo: correlation 0.93, width 0.19
energy arc:
  intro      bar  0   -12.1 LUFS  ###########
  drop       bar 24    -8.8 LUFS  ##############
  breakdown  bar 40   -14.0 LUFS  ##########
  drop2      bar 64    -8.5 LUFS  ##############
tracks:
  kick   peak -3.9 dB  rms -20.8 dB  mostly sub
  keys   peak -5.2 dB  rms -25.6 dB  mostly low_mid
- chord and keys both peak in the low_mid band and may
  mask each other; separate them by octave, eq, or pan

Pulsar Studio for macOS

A native editor with an Ableton-style arrangement beside it. Piano rolls for melodic tracks, one row per voice for drums, automation curves under their tracks, sections on the ruler — and a playhead that lights up notes as they sound. It recompiles as you type.

Live arrangement

Every edit re-renders the view in a fraction of a second; errors are marked inline.

Zoom & stretch

Pinch to zoom time, ⌥-pinch to stretch lanes taller, click the ruler to move the playhead.

Render & play

⌘R renders in parallel across your cores and plays; renders are cached per source.

Made for agents

An MCP server exposes referencecheckrenderanalyze_fileplay so Claude or any MCP client can compose, render, read the report and revise in a loop.

# give Claude Code a music studio
claude mcp add pulsar -- /path/to/pulsar/.venv/bin/pulsar mcp

# or drive it yourself
pulsar docs            # the reference, ready for a prompt
pulsar check song.pulse
pulsar render song.pulse -o song.mp3
pulsar render song.pulse --only drop   # fast iteration

Get started

Python 3.10+ on macOS or Linux. ffmpeg for MP3 export. The Studio app needs only the Xcode command line tools.

git clone https://github.com/ronreiter/pulsar && cd pulsar
uv venv --python 3.12 .venv && uv pip install --python .venv/bin/python -e ".[mcp,dev]"

.venv/bin/pulsar render examples/deep_house_agent.pulse --play

app/build_app.sh && open "app/build/Pulsar Studio.app"