Crates.io | zim-studio |
lib.rs | zim-studio |
version | 1.1.0 |
created_at | 2025-07-07 03:35:54.315034+00 |
updated_at | 2025-09-03 03:00:52.290406+00 |
description | A Terminal-Based Audio Project Scaffold and Metadata System |
homepage | |
repository | |
max_upload_size | |
id | 1740680 |
size | 2,439,196 |
A Zettelkasten Information System for Music Production with Integrated Audio Player
Implemented in Rust and Ratatui with optional nvim plugin support.
ZIM Studio provides three main functions:
*.flac
and *.wav
(so far)The sidecar format is YAML embedded in markdown, providing both structured metadata and free-form notes. The YAML contains facts about the track while the markdown enables long-form notes, links to inspiration, TODO checklists, etc.
See example sidecar file for a complete example.
The motivation for creating zim
is twofold:
# Install with just the project management and metadata features
cargo install zim-studio
# Install with the audio player feature included
cargo install zim-studio --features player
If you use neovim (untested with regular vim) you may want to try the nvim plugin.
# Initialize ZIM with your music projects directory
zim init ~/Music/Projects
# Create a new project
zim new "My Greatest Hits"
# Creates: ~/Music/Projects/my_greatest_hits/
# Navigate to your project and add some audio files
cd ~/Music/Projects/my_greatest_hits
cp ~/Desktop/track1.flac masters/
cp ~/Desktop/track2.wav masters/
# Generate sidecar metadata files
zim update .
# Creates: masters/track1.flac.md, masters/track2.wav.md
# Edit the generated sidecar files to add your notes
$EDITOR masters/track1.flac.md
# Validate all YAML frontmatter
zim lint .
# View/edit global configuration
zim config view
zim config edit
When you create a new project with zim new
, it generates:
my_greatest_hits/
├── .gitignore # Ignores audio/video files
├── README.md # Project overview
├── masters/ # Final mastered tracks
├── mixes/ # Mix versions
├── sources/ # Raw recordings, samples
├── edits/ # Edited/comped audio
├── bounced/ # Bounced/rendered audio (stems, etc)
└── project/ # DAW project files
├── live/ # Ableton Live
├── reaper/ # Reaper
├── bitwig/ # Bitwig Studio
└── renoise/ # Renoise
zim update
generates a .md
sidecar for each audio file with:
The YAML is designed to be both human-editable and scriptable for automation. See the example sidecar for what this looks like in practice.
Add to your shell configuration:
# Bash (~/.bashrc)
source <(zim completions bash)
# Zsh (~/.zshrc)
source <(zim completions zsh)
# Fish (~/.config/fish/config.fish)
zim completions fish | source
# PowerShell ($PROFILE)
zim completions powershell | Out-String | Invoke-Expression
# Run all checks locally (matches CI)
make ci
# Individual commands
make fmt # Format code
make clippy # Run lints
make test # Run tests
make check # Check compilation
The optional audio player provides a fast, keyboard-driven interface for browsing, auditioning, and editing audio samples directly from the terminal.
# Launch with no file (opens browser)
zim player
# Launch with a specific audio file
zim player path/to/audio.wav
The player interface consists of:
[space]
- Play/Pause toggle[←]
- Seek backward 5 seconds[→]
- Seek forward 5 seconds[Shift+←]
- Jump backward 20% (great for long recordings)[Shift+→]
- Jump forward 20% (great for long recordings)[i]
- Set mark in at current position[o]
- Set mark out at current position[x]
- Clear all marks[l]
- Toggle loop playback of marked selection[/]
- Open file browser[s]
- Save/export (full file or marked selection)[q]
- Quit playerThe built-in file browser searches through your audio files using their sidecar .md
metadata:
/
to open the browser[↑/↓]
to navigate results[Enter]
to load the selected file[Esc]
to close browserNote: The browser displays audio files but searches their .md
sidecar content. For example, if you have kick.wav
with kick.wav.md
containing "punchy 808 style", searching for "808" will find this file.
The mark feature lets you select a portion of the audio:
[i]
at the desired start point[o]
at the desired end point[l]
to loop the selection continuously[3.5s]
When saving ([s]
), the save dialog provides:
[↑/↓]
and [Enter]
[Tab]
to switch between directory list and filename.wav
(even from FLAC sources)Example auto-generated filenames:
original_edit.wav
original_edit_2.wav
, original_edit_3.wav
, etc.[IMAGE: Close-up of LED indicators showing different levels]
The stereo LED indicators show real-time audio levels:
[l]
to loop your selection before saving# Mix with equal volume
zim play drums.wav bass.wav vocals.wav
# Mix with custom gains (0.0-2.0 range)
zim play drums.wav bass.wav vocals.wav --gains 0.8,1.2,0.6
See mixing guide for detailed examples.md
sidecar files exist (run zim update
)MIT