Stillwater

Stillwater

Docker app from sydlexius' Repository

Overview

Curates the artist and composer metadata for your music library and gets it where it needs to go: into the artist.nfo files your servers read, pushed to Emby or Jellyfin over their APIs, or both. Per-library locking keeps your manual edits from being clobbered the next time a server refreshes.

Stillwater

CI Release codecov OpenSSF Scorecard License: GPL-3.0 Go Version

Stillwater is a self-hosted web app that curates the artist and composer metadata for your music library and gets it where it needs to go: into the artist.nfo files your servers read, pushed to Emby or Jellyfin over their APIs, or both. It pulls from ten metadata providers with per-field fallback, so the indie, regional, classical, and non-Latin-script artists that leave other tools blank usually resolve here, and per-library locking keeps your manual edits from being clobbered the next time a server refreshes.

Full documentation: https://sydlexius.github.io/stillwater/

Features

  • Ten metadata providers, per-field fallback. MusicBrainz, Fanart.tv, Discogs, TheAudioDB, Spotify, Last.fm, Deezer, Genius, Wikidata, and Wikipedia, ranked per field so when one source comes up empty another fills the gap, plus opt-in DuckDuckGo web image search for the stragglers.
  • Deliver by NFO writeback, direct API push, or both. Write artist.nfo files that Emby, Jellyfin, and Kodi all read cleanly, and/or push edits straight to Emby and Jellyfin over their APIs. Stillwater only ever touches metadata and artwork, never your audio files.
  • Per-library edit locking. Your manual corrections stay put instead of drifting back every time a media server rewrites the file on refresh.
  • Rule-driven cleanup with a conflict gate. A rule engine flags missing, inconsistent, or low-quality metadata and artwork and fixes it in bulk or one at a time, with a round-trip conflict check guarding every write-back.
  • Artwork pipeline. Fetch, compare, and crop thumbnails, fanart, logos, and banners across providers from a single comparison view.
  • Reports and a live dashboard. Library-health scoring, a prioritized action queue, duplicate detection, the Unmatched Files report, and a live activity feed.
  • Runs on your hardware. Single binary or container, SQLite, no cloud, no telemetry, no account, with a REST API at /api/v1/ and webhooks for automation.

Quick start

# docker-compose.yml
services:
  stillwater:
    image: ghcr.io/sydlexius/stillwater:latest
    container_name: stillwater
    ports:
      - "1973:1973"
    environment:
      - PUID=99
      - PGID=100
      - GOMAXPROCS=2  # keep equal to `cpus` below
      - GOMEMLIMIT=2400MiB  # keep at ~80% of `mem_limit` below
    volumes:
      - stillwater-data:/config
      - /path/to/your/music:/music:rw
    restart: unless-stopped
    cpus: "2.0"
    pids_limit: 512
    mem_limit: 3g
    mem_reservation: 512m
    ulimits:
      nofile:
        soft: 8192
        hard: 8192

volumes:
  stillwater-data:
docker compose up -d

Then open http://localhost:1973.

Looking for a different install path, configuration knobs, or details on how Stillwater plays with media-server NFO write-back? It's all on the project site: install guides (Docker, binary, Unraid Community Applications, reverse proxy), environment-variable reference, encryption-key handling, the round-trip-conflict gate, and the full OpenAPI reference.

Binary downloads live on the Releases page. Nightly builds (nightly-YYYYMMDD) ship from main each day there are new commits. See the self-update guide for the nightly channel.

Release binaries are code-signed; see the Code Signing Policy for the signing process and role listing. For a description of what network connections Stillwater makes, see the Privacy Policy.

Contributing

Contributions are welcome. See CONTRIBUTING.md for the dev environment setup, code style, and pull-request workflow. Participants are expected to follow the project Code of Conduct.

License

GPL-3.0

Media gallery

1 / 3

Install Stillwater on Unraid in a few clicks.

Find Stillwater in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.

Open the Apps tab on your Unraid server Search Community Apps for Stillwater Review the template variables and paths Click Install

Related apps

Explore more like this

Explore all

Details

Repository
ghcr.io/sydlexius/stillwater
Last Updated2026-09-19
First Seen2026-04-27

Runtime arguments

Web UI
http://[IP]:[PORT:1973]
Network
bridge
Shell
sh
Privileged
false

Template configuration

Web UI PortPorttcp

Web interface port.

Target
1973
Default
1973
Value
1973
AppdataPathrw

Stores configuration, database, and backups.

Target
/config
Music LibraryPathrw

Path to your music library. Maps to /music inside the container.

Target
/music
PUIDVariable

User ID for file permissions. Default 99 maps to nobody on Unraid.

Default
99
Value
99
PGIDVariable

Group ID for file permissions. Default 100 maps to users on Unraid.

Default
100
Value
100
Encryption KeyVariable

AES-256 encryption key for API secrets stored at rest. Auto-generated on first run if left blank. Set an explicit value to preserve access to stored secrets across container recreations.

Target
SW_ENCRYPTION_KEY
Log LevelVariable

Log verbosity: info, debug, warn, or error.

Target
SW_LOG_LEVEL
Default
info
Value
info
Log FormatVariable

Log output format: json or text.

Target
SW_LOG_FORMAT
Default
json
Value
json
Base PathVariable

URL prefix for subfolder reverse proxy deployments, for example /stillwater. Leave blank for root deployments.

Target
SW_BASE_PATH