opennote-cli
v1.4.4
Published
One note, unlimited vibes.
Downloads
653
Readme
OpenNote
One note, unlimited vibes.
Setup
npm installRun
npm run noteQuick templates
Copy/paste one:
- Dark grime lead
npm run note -- --no-interactive --provider=mock --instrument=lead --fx=grime --decay=long --theme="dark industrial pulse" --length=16 --bpm=130 --seed-source=manual --seed=60 --export-midi=./exports/template-01-dark-grime.mid --export-audio=mp4 --open-after-export=finder- Techno bass drive
npm run note -- --no-interactive --provider=mock --instrument=bass --fx=punch --decay=tight --theme="minimal techno groove" --length=16 --bpm=132 --seed-source=manual --seed=48 --export-midi=./exports/template-02-techno-bass.mid --export-audio=mp4 --open-after-export=finder- Lush ambient pad
npm run note -- --no-interactive --provider=mock --instrument=pad --fx=lush --decay=long --theme="ambient cinematic" --length=24 --bpm=96 --seed-source=manual --seed=52 --export-midi=./exports/template-03-lush-ambient.mid --export-audio=mp4 --open-after-export=finder- Retro synthwave keys
npm run note -- --no-interactive --provider=mock --instrument=keys --fx=dark --decay=balanced --theme="synthwave retro neon" --length=16 --bpm=118 --seed-source=manual --seed=64 --export-midi=./exports/template-04-synthwave-keys.mid --export-audio=mp4 --open-after-export=finder- Trap lead sparse
npm run note -- --no-interactive --provider=mock --instrument=lead --fx=punch --decay=tight --theme="trap melodic lead" --length=12 --bpm=145 --seed-source=manual --seed=57 --export-midi=./exports/template-05-trap-lead.mid --export-audio=mp4 --open-after-export=finder- House keys groove
npm run note -- --no-interactive --provider=mock --instrument=keys --fx=clean --decay=balanced --theme="melodic house uplifting" --length=16 --bpm=124 --seed-source=manual --seed=62 --export-midi=./exports/template-06-house-keys.mid --export-audio=mp4 --open-after-export=finder- Neo-soul keys smooth
npm run note -- --no-interactive --provider=mock --instrument=keys --fx=clean --decay=long --theme="jazz neo-soul phrasing" --length=16 --bpm=92 --seed-source=manual --seed=65 --export-midi=./exports/template-07-neo-soul.mid --export-audio=mp4 --open-after-export=finder- Industrial drums
npm run note -- --no-interactive --provider=mock --instrument=drums --fx=grime --decay=tight --theme="dark industrial pulse" --length=16 --bpm=136 --seed-source=manual --seed=60 --export-midi=./exports/template-08-industrial-drums.mid --export-audio=mp4 --open-after-export=finder- Lo-fi chill line
npm run note -- --no-interactive --provider=mock --instrument=keys --fx=dark --decay=balanced --theme="lofi chillhop" --length=16 --bpm=88 --seed-source=manual --seed=58 --export-midi=./exports/template-09-lofi.mid --export-audio=mp4 --open-after-export=finder- Export-ready MP4 run
npm run note -- --no-interactive --provider=mock --instrument=lead --fx=grime --decay=long --theme="industrial" --length=16 --bpm=130 --seed-source=manual --seed=60 --export-midi=./exports/take-01.mid --export-audio=mp4 --open-after-export=finder- AI backing (techno drums + bass)
npm run note -- --no-interactive --provider=mock --mode=backing --instrument=lead --fx=punch --decay=balanced --theme="minimal techno groove" --length=16 --bpm=132 --seed-source=manual --seed=60 --transpose=0 --pitch-range=mid --snap-scale=true --mod-rate=med --mod-depth=25 --mod-target=velocity --growth=build --duration-stretch=1.5 --timing-feel=offbeat --timing-amount=35 --backing-drums=true --backing-bass=true --backing-clap=true --backing-open-hat=true --backing-perc=true --metronome=count-in --swing=18 --gate=balanced --mutate=12 --deviate=10 --export-midi=./exports/template-11-ai-backing.mid --export-audio=mp4 --open-after-export=finder- Ambient growth (long phrases + human timing)
npm run note -- --no-interactive --provider=mock --mode=single --instrument=pad --fx=lush --decay=long --theme="ambient cinematic" --length=24 --bpm=94 --seed-source=manual --seed=52 --growth=build --duration-stretch=2 --timing-feel=human --timing-amount=22 --export-midi=./exports/template-12-ambient-growth.mid --export-audio=mp4 --open-after-export=finder- Trap pocket (offbeat hats + clap)
npm run note -- --no-interactive --provider=mock --mode=backing --instrument=lead --fx=grime --decay=tight --theme="trap melodic lead" --length=16 --bpm=145 --seed-source=manual --seed=57 --growth=build --duration-stretch=1 --timing-feel=offbeat --timing-amount=45 --backing-drums=true --backing-bass=true --backing-clap=true --backing-open-hat=true --backing-perc=false --metronome=count-in --swing=10 --gate=tight --mutate=14 --deviate=12 --export-midi=./exports/template-13-trap-pocket.mid --export-audio=mp4 --open-after-export=finder- Loose industrial groove (perc heavy)
npm run note -- --no-interactive --provider=mock --mode=backing --instrument=keys --fx=dark --decay=balanced --theme="dark industrial pulse" --length=16 --bpm=132 --seed-source=manual --seed=60 --growth=build --duration-stretch=1.25 --timing-feel=loose --timing-amount=38 --backing-drums=true --backing-bass=false --backing-clap=false --backing-open-hat=true --backing-perc=true --metronome=count-in --swing=14 --gate=balanced --mutate=16 --deviate=15 --export-midi=./exports/template-14-industrial-loose.mid --export-audio=mp4 --open-after-export=finderInteractive flow
The CLI uses arrow keys + Enter and runs this setup:
- Provider
- Demo mode (
mock) or live provider (openai,gemini,claude,groq,grok) - If provider key is missing, CLI prompts for it
- Setup path
basic: quick run with smart defaults (single,lead,clean,balanced,mp4 + Finder) plus style/structure/seedsurprise me: instantly auto-picks full config and goes straight to generationadvanced: full controls for pitch, modulation, and groove
Advanced-only steps:
- Mode
single(default): melody-only flowbacking: reveals drums/bass/metronome and groove controls
- Instrument
lead,bass,pad,keys,drums
- FX
- Preset:
clean,dark,grime,lush,punch - Decay:
tight,balanced,long
- Pitch
transposevia arrow flow: direction (Down/Neutral/Up) + amount (1..12)range(low|mid|high)snap to scale(on|off)
- Modulate
rate(off|slow|med|fast)depth(0..100)target(velocity|duration|pitch)
- Movement
growth(flat|build) for song energy over timeduration stretch(1.0x..3.0x) for longer phrase feeltiming feel(tight|human|offbeat|loose)timing amount(0..100)
- Backing controls (only when mode is
backing)
- Drums on/off
- Bass on/off
- Clap on/off
- Open hat on/off
- Perc on/off
- Metronome (
off|count-in|always) - Swing (
0..100) - Gate (
tight|balanced|long) - Mutate (
0..100) - Deviate (
0..100)
All paths include:
- Style
- Preset music categories or custom theme
- Structure
- Length (notes)
- BPM
- Input
basicandsurprise me: manual seedadvanced:keyboardormanualmode
- Export open action
nonefindergarageband
- Export media profile
mp4(default highlighted in prompt)mp3none(MIDI only)
- Summary + confirm (advanced only)
Start generationBack to setup
After playback, action menu order is:
Export MIDI + <open action> + finishExport MIDI + <open action> + retryRetry (new take)Finish
Notes:
- Export path auto-generates timestamped filename under
./exports/unless--export-midi=...is provided. - MP4 cover image is fixed to
./src/assets/cover.png(replace that file in the repo to change cover art). - MP3/MP4 exports also write MIDI stems by default (
-melody.mid,-bass.mid,-drums.midwhen present).
Cover art workflow
- Replace
./src/assets/cover.pngwith your own image. - Drag your image into Figma or Affinity, design album art, export as PNG.
- Save it back to
./src/assets/cover.png. - Run OpenNote and export MP4.
- Start making music.
Non-interactive usage
npm run note -- --no-interactive --provider=mock --theme="ambient" --length=16 --bpm=120 --seed-source=manual --seed=60With export + Finder reveal:
npm run note -- --no-interactive --provider=mock --theme="ambient" --length=16 --bpm=120 --seed-source=manual --seed=60 --export-midi=./exports/take-01.mid --open-after-export=finder --export-audio=mp4With AI backing + groove controls:
npm run note -- --no-interactive --provider=mock --mode=backing --theme="trap melodic lead" --length=16 --bpm=140 --seed-source=manual --seed=57 --transpose=0 --pitch-range=mid --snap-scale=false --mod-rate=slow --mod-depth=20 --mod-target=velocity --growth=build --duration-stretch=1.25 --timing-feel=offbeat --timing-amount=35 --backing-drums=true --backing-bass=false --backing-clap=true --backing-open-hat=true --backing-perc=false --metronome=count-in --swing=12 --gate=tight --mutate=10 --deviate=8 --export-midi=./exports/take-backing.mid --open-after-export=finder --export-audio=mp4CLI flags
--provider=mock|openai|gemini|claude|groq|grok--instrument=lead|bass|pad|keys|drums--fx=clean|dark|grime|lush|punch--decay=tight|balanced|long--mode=single|backing--transpose=-12..12--pitch-range=low|mid|high--snap-scale=true|false--mod-rate=off|slow|med|fast--mod-depth=0..100--mod-target=velocity|duration|pitch--growth=flat|build--duration-stretch=1..4--timing-feel=tight|human|offbeat|loose--timing-amount=0..100--backing-drums=true|false--backing-bass=true|false--backing-clap=true|false--backing-open-hat=true|false--backing-perc=true|false--metronome=off|count-in|always--swing=0..100--gate=tight|balanced|long--mutate=0..100--deviate=0..100--theme="..."--length=<notes>--bpm=<tempo>--seed=<0-127>--seed-source=keyboard|manual--beep=true|false--export-midi=<path.mid>--open-after-export=none|finder|garageband--export-audio=none|mp3|mp4--export-stems=true|false--no-interactive--help
Provider keys
- OpenAI:
OPENAI_API_KEY(optionalOPENAI_MODEL) - Gemini:
GEMINI_API_KEY(optionalGEMINI_MODEL) - Claude:
ANTHROPIC_API_KEY(optionalCLAUDE_MODEL) - Groq:
GROQ_API_KEY(optionalGROQ_MODEL) - Grok (xAI):
XAI_API_KEY(optionalGROK_MODEL)
npm publish checklist
- Keep
"private": trueduring development to prevent accidental publish. - Run pack preview:
npm run pack:check- When ready to publish, set
"private": falseinpackage.json. - Publish:
npm publishVersioning
- Versioning uses SemVer:
major.minor.patch. - Changelog lives in
CHANGELOG.md. - Bump version before release:
npm run version:patch # fixes only
npm run version:minor # new backward-compatible features
npm run version:major # breaking changesExport behavior
- MIDI: always supported (
.mid) - MP3/MP4: uses
ffmpeg-staticbundled via npm dependency - If bundled ffmpeg is unavailable on platform, install system ffmpeg and rerun
