A containerized service that watches a source folder and automatically transcodes audio files to multiple formats simultaneously.
Keep one library in several formats: lossless for the archive, lossy for phones and cars. Drop a FLAC into the source folder and the ALAC, MP3, AAC and Opus copies appear in their own trees.
Features
- Watches the source folder and reacts to new, changed, renamed and deleted files.
- Writes any number of outputs in one pass, in ALAC, AAC, MP3, Opus, FLAC or WAV at the bitrate you pick.
- Mirrors the Artist/Album folder tree in every output.
- Copies lossy sources (MP3, M4A, Ogg, Opus, WMA) unchanged instead of inflating them into a lossless output.
- Fails loudly on a source that does not decode cleanly, and writes no output for it.
- Keeps ReplayGain, MusicBrainz ids, ISRC, label and sort tags in ALAC and AAC copies.
- Fetches synced
.lrclyrics, and writes nothing when no real lyrics are found. - Embeds cover art if you want it.
- Writes atomically and removes orphaned outputs, but never deletes anything when a folder looks empty.
- Handles Unicode file names.
- Ships as a small container on Python 3.14-slim with FFmpeg.
Quick start
curl -fsSL -o config.yaml https://raw.githubusercontent.com/GeiserX/audio-transcode-watcher/main/config.example.yaml
docker run -d --name audio_transcoder -e CONFIG_FILE=/app/config.yaml \
-v ./config.yaml:/app/config.yaml:ro -v /path/to/flac:/music/flac:ro -v /path/to/mp3:/music/mp3 \
drumsergio/audio-transcoder:0.6.1
Edit config.yaml first so its outputs match the folders you mount; the example writes ALAC, MP3 and AAC. Getting started has Docker Compose and the full docker run.
Documentation
- Getting started: Docker Compose and Docker CLI
- Configuration: the full YAML example, supported codecs,
CONFIG_JSON - Usage: what happens once it runs, and the verification tool
- How it works: sync and watch mode, folder mirroring, safety guards, performance
- Development: tests, building the image, contributing
- Roadmap
- Changelog
Related projects
| Project | Description |
|---|---|
| slskd-transform | Bulk upgrade your music library from lossy to lossless via Soulseek |
| telegram-slskd-local-bot | Automated music discovery and download via Telegram |
| quality-gate-encoder (formerly jellyfin-encoder) | Automatic 720p HEVC, H.264 or AV1 copies for Jellyfin |
License
Metadata
Release files for audio-transcode-watcher 0.6.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| audio_transcode_watcher-0.6.1.tar.gz | 150.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| audio_transcode_watcher-0.6.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 190.1 kB
Release files / audio_transcode_watcher-0.6.1.tar.gz
| Download URL | audio_transcode_watcher-0.6.1.tar.gz |
|---|---|
| Size | 150.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
66f9318e9be5152c8d02a4466bbb318b6c349a30ccb848022d669fbd172f1b08
|
|
BLAKE2b-256 checksum How to use checksums |
4b0f028193f3a87fa984fc7f9fe3ca0132c7be9d9026b3bc3ae9b2c6cfeffccb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Release files / audio_transcode_watcher-0.6.1-py3-none-any.whl
| Download URL | audio_transcode_watcher-0.6.1-py3-none-any.whl |
|---|---|
| Size | 39.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
cdaf6d3c386725dab79f7a4ffe157623f63b22479396a36b3ebd735b820b2884
|
|
BLAKE2b-256 checksum How to use checksums |
9fef28c81cdbed31bf73b7f9c9839aaadde8618fe389a2f691d5a24d1fb7b0a3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|