1
1
Fork
You've already forked saccamuse
0
No description
  • Rust 99.1%
  • Shell 0.9%
Le Calicot e104db276f
All checks were successful
Cargo Build & Test / Rust project - latest (push) Successful in 2m57s
[VERSION] Hotfix 1.1.1
2026年06月14日 22:02:44 +02:00
.forgejo/workflows [CI] Set up CI ( #41 ) 2026年05月20日 00:20:21 +02:00
.vscode First Commit 2024年04月30日 20:10:57 +02:00
assets [NIT] Update Readme ( #58 ) 2026年06月14日 19:25:25 +02:00
examples [RELEASE] Version 1.1.0 2026年06月14日 18:46:44 +02:00
scripts [CI] Set up CI ( #41 ) 2026年05月20日 00:20:21 +02:00
src [FIX] Fix compatibility issue with pipewire ( #59 ) 2026年06月14日 21:49:19 +02:00
tests [TEST][EXAMPLE] 2024年09月30日 00:29:29 +02:00
.gitignore [FEAT] Use eframe_template 2024年10月02日 21:09:12 +02:00
.gitlab-ci.yml [FIX] Fix CI 2025年11月15日 10:21:49 +00:00
Cargo.lock [VERSION] Hotfix 1.1.1 2026年06月14日 22:02:44 +02:00
Cargo.toml [VERSION] Hotfix 1.1.1 2026年06月14日 22:02:44 +02:00
LICENSE-MIT [FEAT] Use eframe_template 2024年10月02日 21:09:12 +02:00
README.md [FIX] Fix compatibility issue with pipewire ( #59 ) 2026年06月14日 21:49:19 +02:00
saccamuse.code-workspace [DEPS] Update all dependencies 2025年11月15日 10:55:15 +01:00

Saccamuse

A social dance DJ software for song preview and library management

Saccamuse song view

Background & Presentation

As a swing dance DJ (or any partner dance DJ), where beatmatching is not a consideration, there is a multitude of possible tools to sort and play music.

Personally, I have been using the following setup:

  • A (linux) laptop + an external USB sound card
  • A basic music player, which plays the songs for the dancefloor through the USB sound card. I have been using Clementine Music Player.
  • A software which can display my database of all songs, with the ability to display tags, that I use to preview music live through the native soundcard of the laptop to the headphones, but also that I use to tag my music beforehand.

Historically, I was using TagSpaces to tag my music by saving the tags directly in the file names. The reasoning is that the support of ID3 tags varies a lot depending on the software. Some softwares supports custom fields, some don't and, therefore, has limited portability. Even though more limited, using tags encoded in filenames allows for emergency DJ sessions from a phone or USB key with any kind of music player. It's easy to synchronize among devices to create multiple backup of the music database (please, do backups!).

Unfortunately, starting from version 3.0, Tagspaces has started to have performances issues when manipulating a large number of tags. Therefore, I have decided to create my own app as a replacement. The tag file should still be compatible with Tagspaces.

Goals & Non-goals of Saccamuse

The main goals of Saccamuse are:

  • Displaying list of audio files with Tagspaces-like tags, where the tags are highlighted with colors. It helps during live DJ session to find music fast.
  • Allows listening to the song by opening the VLC player.
  • Allows to create/edit tag groups and tags
  • Allows to add/remove tags from audio files
  • No metadata stored in a database, which means full portability
  • Tags are stored in a JSON file (easy export)

Non-goals:

  • Saccamuse is not meant to be a universal tagging and previewing system.
  • There won't be any smartphone release
  • No BPM detection (sorry!)
  • Accessability features. This software is already so niche, it's hard to justify the work.

Optional goals if more people are interested in the project:

  • Prettier UI and better UX
  • Embedded music player (instead of VLC)
  • Releases for MacOS & Windows
  • Mass tagging / tagging multiple files at once.

Features

Filename-based tag system
No database for full portability
Enqueuing in external music player (selectable)
Tag management system
Filtering & sorting by BPM (manual input) or name
Random playlist creation based on BPM
Audio output selection

Drawbacks

The main drawback of this approach is that if you modify the tags in the filename, any playlist containing this song will not be able to play. But, hey, you should never do the same set twice, so it shouldn't be an issue.

Since it doesn't use a database, all the information of all the files is scanned when starting the app. Since it uses Rust, it takes only a few seconds to parse about a thousands of files. Once started, it only updates modified files, so there is not performance issue once opened.

Installation

Download binary

Go to the release page and download the package from the latest release for your OS.

There is no release for MacOS as I don't have a mac and cross-compilation is hard. However, you can compile the software from source (seel below).

Install VLC player.

If using pipewire, you may have to install pulseaudio-utils.

Compile from source

Follow the instructions:

  • Install rust on your computer
  • Clone the repo git clone https://codeberg.org/LeCalicot/saccamuse.git
  • Open a terminal and go to the folder cd saccamuse
  • Compile the software: cargo build --release
  • There should be a binary in saccamuse/target that you can execute.

User Manual

Saccamus offers all the feature that I need, but the interface was not meant to be clear for external user.

Open Saccamuse by executing the binary. The configuration of the app will be stored in your home folder, in linux it's in /home/[user]/.config/saccamuse/

In the folder you will find the .json file with all your tags. This file is edited every time you add new tags to your collection.

Folder Selection

You are welcomed with the folder selection screen:

Saccamuse song folder selection

You can add the folder with your music through Select folder then Add folder to list, then select the folder in the list.

You can click on Finish to open the app with the specified folder. You can have multiple instances of Saccamuse open. We expect the music folder to have a flat structure, no sub-folders.

Remove folder from list is to remove a folder. Clean folders removes all the folders that do not exist anymore.

You can also select the audio output. This will force VLC, used for previewing, to use this audio output such that you never open the song preview on the speakers of the dance floor.

You should specify the command used to enqueue songs into your favorite music player. For instance clementine + append or exaile + (no extra argument).

Song view

This is the main interface of Saccamuse. It displays all the audio files in the folder. Saccamuse song view annotated

The way it works with the BPM is that Saccamuse assumes that the first tag with only a number is the BPM. It uses this information to filter the view or select N songs to add randomly to the music player when asked.

Saccamuse assumes that a file name is structured as follows:

Artist name - Song name[tag1 tag2].mp3

Tags cannot have space in them. We only display audio format, other files are ignored.

The Min and Max fields filter the view based on the BPM, while being sorted by name or BPM. On top of that, you can randomize the filtered view.

The two main actions:

  • Double clicking on the song name open VLC on the specified audio output
  • Double clicking on one of the tag will open the tag editor for this song

Tag Editor

This is the windows where we can edit tags and the song name. Changes are applied when Save is clicked, the file name is then edited with the changes.

Saccamuse tag editor annotated

Here you can:

  • Change the name of the song
  • Create/delete tag groups in the tag database
  • Create/delete tags in the tag database
  • Rename a song / artist in the file name
  • Add / move / remove a tag in the file
  • Delete the song

All the changes are done in the filename, none of the ID3 tags (=mp3 metadata) are changed!. So even if you screw up the name, the actual data that are displayed in your music player will be unaffected.

If a tag is not part of tag group, it will be added to the Auto tag group, with the associated colors.

The color of a tag is set automatically based on the group colors. If you want to change a specific tag color, you can edit it directly in /home/[user]/.config/saccamuse/tags.json. You can also delete the tag from the database and re-add it to another group. When "deleting" tags or groups, it does not change the filename, only list of tags and groups in the json file. Therefore, even if you lose the json file, you do not loose all the already tagged music.

The BPM group is just a group like any other. As described earlier, Saccamuse considers that numerical tags are BPM tags.


Have fun DJ sets!