Local-LLM-driven terminal based music generator
Project description
vibetune
A lightweight terminal music generator that uses local LLMs (via Ollama) as the creative brain to produce MIDI background music for videos.
Features
- LLM-driven composition: Ollama translates a vibe description into a full music spec (key, tempo, chords, instruments)
- Built-in player: Play, pause, and stop without leaving the terminal
- Trim & crop: Cut clips to any length
- Loop-friendly export: Crossfade-loop a clip seamlessly for video backgrounds
- Presets: Save favorite vibes and reuse them
- Variations: Generate riffs on a track you liked
- Save/discard: Audition before committing
Installation
1. Install prerequisites
Ollama — runs the local LLM (ollama.com):
ollama pull qwen3.5:4b
FluidSynth — MIDI synthesis (vibetune will remind you if it's missing):
# macOS
brew install fluidsynth
# Ubuntu/Debian
sudo apt install fluidsynth fluid-soundfont-gm
2. Install vibetune
pip install vibetune
3. Run
vibetune
Usage
Generating a track
Describe any vibe and vibetune composes a MIDI track via the local LLM:
vibetune> gen lofi study beat, rainy afternoon, jazzy chords
vibetune> gen upbeat 8-bit adventure theme, fast tempo
vibetune> gen dark ambient drone, cinematic, building tension
Auditioning and editing
vibetune> play # play the current track
vibetune> pause # pause
vibetune> resume # resume
vibetune> stop # stop playback
vibetune> trim 0 30 # cut to the first 30 seconds
vibetune> trim 0:10 0:45 # also accepts mm:ss format
vibetune> loop # crossfade the end into the start for seamless looping
vibetune> loop 2.5 # longer crossfade (seconds)
vibetune> undo # revert the last edit
vibetune> info # show key, tempo, instruments, chord progression
Saving
vibetune> save # save with an auto-generated name
vibetune> save my_track # save with a custom name
vibetune> library # list all saved tracks
vibetune> discard # throw away the current track without saving
Variations
Generate a new track with the same vibe but different chords, tempo, and instruments:
vibetune> vary
Presets
Save a vibe you like and reuse it later:
vibetune> preset save # interactive: pick current vibe or enter a new one
vibetune> preset list # show all saved presets
vibetune> preset use lofi-study # generate a track from a preset
vibetune> preset edit lofi-study # edit the preset's name or vibe inline
vibetune> preset delete lofi-study # remove a preset
Other
vibetune> duration 60 # set default track length to 60 seconds
vibetune> model qwen3.5:9b # switch to a different Ollama model
vibetune> help # full command reference
vibetune> quit
Configuration
| Env var | Default | Description |
|---|---|---|
VIBETUNE_HOME |
~/.vibetune |
Data directory (cache, library) |
VIBETUNE_MODEL |
qwen3.5:4b |
Ollama model to use |
VIBETUNE_SOUNDFONT |
auto-detected | Path to a custom .sf2 soundfont |
OLLAMA_HOST |
http://localhost:11434 |
Ollama server URL |
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file vibetune-0.1.1.tar.gz.
File metadata
- Download URL: vibetune-0.1.1.tar.gz
- Upload date:
- Size: 57.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
deddbb480b93e691586f035789d0215999673c07fa789166961060b71a3b9a61
|
|
| MD5 |
289507273cc9752b98920d3a19ed074f
|
|
| BLAKE2b-256 |
30b8d828d6545c0b2d95536fc8c6d25f3c15669fad68427fba87357b190fef62
|
Provenance
The following attestation bundles were made for vibetune-0.1.1.tar.gz:
Publisher:
release.yml on SucksToBeAnik/vibetune
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
vibetune-0.1.1.tar.gz -
Subject digest:
deddbb480b93e691586f035789d0215999673c07fa789166961060b71a3b9a61 - Sigstore transparency entry: 1569828540
- Sigstore integration time:
-
Permalink:
SucksToBeAnik/vibetune@e4d5a368bc5c1c88c4d4158563202b2554f42d10 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/SucksToBeAnik
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e4d5a368bc5c1c88c4d4158563202b2554f42d10 -
Trigger Event:
push
-
Statement type:
File details
Details for the file vibetune-0.1.1-py3-none-any.whl.
File metadata
- Download URL: vibetune-0.1.1-py3-none-any.whl
- Upload date:
- Size: 20.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2e5dd11b98804f3d16e2ac7079453e4260a59e58ce8b0966e8bcc6ea09057a0b
|
|
| MD5 |
28309ed3e971d4cda16a04c774eac6fe
|
|
| BLAKE2b-256 |
9e9866cad65cb2498e9a815a7edac7d17adfba1221638765a2f2f6d3b6dcd97d
|
Provenance
The following attestation bundles were made for vibetune-0.1.1-py3-none-any.whl:
Publisher:
release.yml on SucksToBeAnik/vibetune
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
vibetune-0.1.1-py3-none-any.whl -
Subject digest:
2e5dd11b98804f3d16e2ac7079453e4260a59e58ce8b0966e8bcc6ea09057a0b - Sigstore transparency entry: 1569828558
- Sigstore integration time:
-
Permalink:
SucksToBeAnik/vibetune@e4d5a368bc5c1c88c4d4158563202b2554f42d10 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/SucksToBeAnik
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e4d5a368bc5c1c88c4d4158563202b2554f42d10 -
Trigger Event:
push
-
Statement type: