Sign inSign up

pjmeca/volume-normalizer

By pjmeca

•Updated about 2 years ago

This Docker image normalizes the volume of your entire music library using rsgain.

Image
Integration & delivery
Developer tools
Monitoring & observability
2

7.1K

pjmeca/volume-normalizer repository overview

⁠pjmeca/volume-normalizer

GitHub Repo stars Docker Image Version (tag) GitHub Actions Workflow Status

This Docker image normalizes the volume of your entire music library using rsgain⁠. Your audio files will not be modified; only a metadata tag with the ReplayGain value will be added or updated (more details can be found in the rsgain repo⁠).

I created this image because I couldn't find a way to run rsgain periodically using cron in a container, as it can take a long time to process all the files in a large library.

You can find the Dockerfile and all the resources I used to create this image in my GitHub repository⁠. If you find this useful, please leave a ⭐. Feel free to request new features or make a pull request if you're up for it! 💪

⁠Usage

The following example creates a container that normalizes your music library everyday at 4 AM. You can configure how rsgain behaves by passing arguments via the ADDITIONAL_ARGS environment variable and define your own presets by mounting a preset file (by default, the no_album preset is used).

⁠Using docker run:
docker run -d --name volume-normalizer -v /your/main/music/path:/mnt -v /your/preset.ini:/root/.config/rsgain/presets/user_preset.ini:ro -v /etc/localtime:/etc/localtime:ro -e CRON_SCHEDULE="0 4 * * *" -e ADDITIONAL_ARGS="-S" --restart unless-stopped pjmeca/volume-normalizer:latest
⁠Using docker-compose:
name: volume-normalizer

services:
  volume-normalizer:
    image: pjmeca/volume-normalizer:latest
    container_name: volume-normalizer
    volumes:
      - /your/main/music/path:/mnt # Change this
      #- /your/preset.ini:/root/.config/rsgain/presets/user_preset.ini:ro # Custom preset
      - /etc/localtime:/etc/localtime:ro
    environment:
      CRON_SCHEDULE: "0 4 * * *" # Customize your cron if needed
      # ADDITIONAL_ARGS: "-S" # Additional arguments
    restart: unless-stopped

Then run:

docker compose -f ./docker-compose.yml up -d

⁠Output example

Cron configured to run with 0 4 * * *: At 04:00
Starting rsgain...
[✔] Applying preset 'no_album'...
[✔] Building directory tree...
[✔] Found 224 directories...
[✔] Scanning directories for files...
[✔] Scanning with 4 threads...
Scanning Complete
Time Elapsed:      00:42:53
Files Scanned:     10830
Clip Adjustments:  308 (2.8% of files)
Average Gain:      -6.46 dB
Average Peak:      0.944932 (-0.49 dB)
Negative Gains:    9916 (91.6% of files)
Positive Gains:    914 (8.4% of files)
Job finished.
Sleeping until next run.

⁠TODO list

Here are some pending ideas that I might try to implement if needed. I am open to suggestions.

  • Reduce image size
  • Optionally pass arguments to rsgain using environment variables A preset file will be used instead (suggested in #1⁠)
  • Omit previously scanned files (possibly by storing them in a SQLite database)

⁠Changelog

  • 1.4.0: Add HEALTHCHECK
  • 1.3.2: Store environment variables in /etc/environment for cron to read
  • 1.3.1: Fix line endings from CRLF to LF
  • 1.3.0
    • Upgrade rsgain to v3.5.1
    • Customize rsgain arguments
  • 1.2.0: Mount a custom preset file
  • 1.1.0: Reduce Docker image size
  • 1.0.0: Initial release

⁠Special Thanks To

  • The rsgain project⁠ for providing the core functionality of this image.
  • The cron project⁠ for offering an easy way to display cron expressions in a human-friendly way.

Tag summary

Content type

Image

Digest

sha256:493253882…

Size

136.4 MB

Last updated

about 2 years ago

docker pull pjmeca/volume-normalizer