All apps · 0 apps
Stillwater
Docker app from sydlexius' Repository
Overview
Readme
View on GitHub
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.nfofiles 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
Media gallery
1 / 3Install 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.
Categories
Related apps
Explore more like this
Explore allDetails
ghcr.io/sydlexius/stillwaterRuntime arguments
- Web UI
http://[IP]:[PORT:1973]- Network
bridge- Shell
sh- Privileged
- false
Template configuration
Web interface port.
- Target
- 1973
- Default
- 1973
- Value
- 1973
Stores configuration, database, and backups.
- Target
- /config
Path to your music library. Maps to /music inside the container.
- Target
- /music
User ID for file permissions. Default 99 maps to nobody on Unraid.
- Default
- 99
- Value
- 99
Group ID for file permissions. Default 100 maps to users on Unraid.
- Default
- 100
- Value
- 100
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 verbosity: info, debug, warn, or error.
- Target
- SW_LOG_LEVEL
- Default
- info
- Value
- info
Log output format: json or text.
- Target
- SW_LOG_FORMAT
- Default
- json
- Value
- json
URL prefix for subfolder reverse proxy deployments, for example /stillwater. Leave blank for root deployments.
- Target
- SW_BASE_PATH