A terminal user interface (TUI) application for editing audio file tags. Built with Python and ncurses.
- 🎵 Support for multiple audio formats: MP3, FLAC, and AIFF
- 📝 Edit common tags: Title, Artist, Album, Date/Year, Genre, Track Number
- 📁 Work with single files or entire directories
- 🔀 Multi-file editing: Select and edit multiple files at once
- ⌨️ Keyboard-driven interface with vim-style navigation
- 💾 Save changes directly to audio files
- 📊 Visual feedback for varying tag values across selected files
- Python 3.7+
- ncurses (included with most Unix-like systems)
- Clone or download this repository
- Install uv if you haven't already:
curl -LsSf https://astral.sh/uv/install.sh | sh- Sync dependencies:
uv sync- Clone or download this repository
- Install dependencies:
pip install -r requirements.txtOr install directly:
pip install mutagenEdit a single file:
python ntags.py /path/to/audio/file.mp3Edit all audio files in a directory:
python ntags.py /path/to/music/directoryMake the script executable (optional):
chmod +x ntags.py
./ntags.py /path/to/audio/file.mp3↑/k- Move to previous file↓/j- Move to next fileSPACE- Enter/exit selection or deselection modea- Select all filesc- Clear selectionTAB- Switch to Editor Modee- Switch to Editor Modes- Save changes to selected files (or current file)q- Quit application
Selection/Deselection Mode:
- Press
SPACEon an unselected file to enter selection mode - navigate with arrow keys to select more files - Press
SPACEon a selected file to enter deselection mode - navigate with arrow keys to deselect files - Press
SPACEagain to exit either mode
↑/k- Move to previous tag field↓/j- Move to next tag fieldENTER/e- Edit current fieldTAB- Switch to Browser Modes- Save changes to selected files (or current file)r- Reload current file (discard unsaved changes)q- Quit application
- Type to edit the field
ENTER- Confirm changes (must presssto save to file)ESC- Cancel editBACKSPACE- Delete character
When multiple files are selected:
- Tag values that are identical across all files are displayed normally
- Tag values that differ are shown as
*(varying) - Editing a field applies the change to all selected files
- Press
sto save changes to all selected files at once
Selection/Deselection Mode:
- Press
SPACEon an unselected file to activate selection mode, then use arrow keys to quickly select multiple consecutive files - Press
SPACEon a selected file to activate deselection mode, then use arrow keys to quickly deselect multiple files - Press
SPACEagain to exit either mode
- Launch ntags with a file or directory path
- Press
TABto switch to Editor Mode - Navigate between fields using
↑/↓orj/k - Press
ENTERoreto edit a field - Type your changes and press
ENTERto confirm - Press
sto save changes to the audio file - Press
qto quit
- Launch ntags with a directory path
- In Browser Mode, use
↑/↓orj/kto navigate files - Press
SPACEon an unselected file to enter selection mode - Navigate with arrow keys to automatically select multiple files
- Press
SPACEagain to exit selection mode (or useato select all) - To deselect: Press
SPACEon a selected file and navigate to deselect more - Press
TABto switch to Editor Mode - Fields showing
*have varying values across selected files - Edit any field to apply the change to all selected files
- Press
sto save changes to all selected files - Press
qto quit
- Title - Song title
- Artist - Artist/performer name
- Album Artist - Album artist (often different from track artist)
- Album - Album name
- Date/Year - Release date or year
- Genre - Music genre
- Track # - Track number
- Disc # - Disc number (for multi-disc albums)
- Composer - Composer of the track
- Comment - Comments or notes about the track
| Format | Extension | Tag System |
|---|---|---|
| MP3 | .mp3 |
ID3v2 |
| FLAC | .flac |
Vorbis Comments |
| AIFF | .aiff, .aif |
ID3v2 |
- Built with Python's
cursesmodule (ncurses wrapper) - Uses
mutagenlibrary for audio tag manipulation - Supports recursive directory scanning
- UTF-8 encoding for text fields
Terminal too small error: Resize your terminal window to be larger.
Unsupported file format: Ensure your file is MP3, FLAC, or AIFF format.
Permission errors: Make sure you have write permissions for the audio files.
Display issues: Ensure your terminal supports unicode and colors.
This project is licensed under the MIT License.
Feel free to submit issues or improvements!