ZIM - Terminal-Based Audio Project Scaffold and Metadata System
A Zettelkasten Information System for Music
The main two functions of this tool are:
- Initialize a project structure of directories and placeholder README.md files for each new project as needed
- Generate sidecar Metadata files for all audio media
The sidecar format is yaml embedded in markdown. It isn't as bad as it sounds.
The yaml has facts about the track or project and the markdown lets the user
create long-form notes about the work, links to inspiration, TODO checklists,
etc...
See example sidecar file for a complete example.
The motivation for creating zim is twofold:
- Maintain a workflow where DAWs are guests in my workflow rather than the other way around.
- I use neovim and telescope for my personal note taking and rely on no proprietary company to enable my ability to work in software ... I wanted the same detailed note taking independent of any vendor for my music making. I use DAWs but am not ok living in DAWs or any vendor's closed system.
Installation
Quick Start
# Initialize ZIM with your music projects directory
# Create a new project
# Creates: ~/Music/Projects/my_greatest_hits/
# Navigate to your project and add some audio files
# Generate sidecar metadata files
# Creates: masters/track1.flac.md, masters/track2.wav.md
# Edit the generated sidecar files to add your notes
# Validate all YAML frontmatter
# View/edit global configuration
Project Structure
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
├── processed/ # Processed audio (stems, etc)
└── project/ # DAW project files
├── ableton/
└── reaper/
Sidecar Files
zim update generates a .md sidecar for each audio file with:
- YAML frontmatter: Structured metadata (technical specs, tags, etc.)
- Markdown body: Free-form notes, ideas, TODO lists
The YAML is designed to be both human-editable and scriptable for automation. See the example sidecar for what this looks like in practice.
Shell Completions
Add to your shell configuration:
# Bash (~/.bashrc)
# Zsh (~/.zshrc)
# Fish (~/.config/fish/config.fish)
|
# PowerShell ($PROFILE)
| |
Development
# Run all checks locally (matches CI)
# Individual commands
License
MIT