DVinyl

DVinyl

Docker app from Kyonew's Repository

Overview

A self-hosted, plugin based collection manager for your Vinyls, CDs, Books, Movies, Games and LEGO sets.

DVinyl banner

DVinyl is a modern, self-hostable collection manager for physical media lovers.
Catalog, value and organize your vinyls, CDs, books, movies, games and more, all from one cozy place.

Live Demo Documentation Wiki

License: MIT Version Self-Hosted Docker


Hey there 👋

DVinyl is a little home for your physical collection. It lives on your own server, pulls in cover art and metadata from the big databases (Discogs, Hardcover, TMDB, IGDB, Rebrickable), can even estimate what your music is worth, and lays it all out on a dashboard you get to shape yourself.

DVinyl is plugin based: every media type is a plugin, so you turn on only what you care about, and you can add your own type without touching the core.

Want to see it before installing anything? Have a look at the live demo, a read-only preview of a finished instance.

What it can do

📦 Your whole shelf, in one place

  • Many formats. Music (vinyls, CDs, cassettes), books (manga, comics, hardcover), movies (Blu-ray, 4K, DVD, VHS, LaserDisc), video games and LEGO sets.
  • Multiple collections. Keep separate libraries (yours, the family's, a specific room) and switch between them whenever you like.
  • Smart import. Add an item by ID or barcode, or bulk import a whole existing collection (a full Discogs library, for example) in one click.
  • Barcode scanner. Point at the barcode of a physical item and let DVinyl find it for you.
  • Market value. Live low, median and high estimates for your music collection.
  • Wishlist. Keep an eye on the pieces you are still hunting for.

🎨 Make it yours

  • 14 color themes. Ocean, Forest, Sunset, Sakura, Midnight and more, each with a light and a dark variant, and you can even set a different theme per category.
  • Modular dashboard. Pick the stat widgets you want and add your own navbar shortcuts.
  • Responsive. Built to feel right on mobile too.
  • Multilingual. English, French, German, Spanish and Italian.

👥 Share it, your way

  • Users and roles. Invite people to a collection as admin, editor or viewer, so everyone gets the right level of access.
  • SSO login (OIDC). Optional single sign-on with providers like Authentik, Keycloak, Authelia or pocketID, with optional automatic account creation from an identity provider group.
  • Private or shared. Keep your collection to yourself or open it up for others to browse.
  • Public share links. Generate a read-only link or QR code so anyone can browse a collection (or just part of it, e.g. only Vinyls) without an account.

Built-in plugins

Plugin Media Metadata source
Music Vinyls, CDs, cassettes Discogs
Books Books, manga, comics Hardcover
Movies Blu-ray, 4K, DVD, VHS TMDB
Games Video games IGDB
LEGO LEGO sets Rebrickable

Every plugin can be turned on or off per collection from the admin panel.

Build your own type

DVinyl is made to grow with you. There are two ways to add a new kind of collection:

  • Plugin editor (no code). Create a manual collection type right from the app, with your own fields, formats, icon and colors. No restart, no coding required. See the Plugin editor guide on the Wiki.
  • Code plugin (with API). Drop a plugins/<id>/ folder that exports a plugin definition to add a full media type with its own external API, importers and stats. See the Plugin development guide. Built one you are proud of? Do not hesitate to open a PR, I would genuinely love to see it! 🙌

Quick start (Docker)

The fastest way to run DVinyl is the pre-built Docker image. All you need is a docker-compose.yml and a .env file.

  1. Create a docker-compose.yml (the Docker guide has the full file).
  2. Set your environment variables in a .env file (see API keys).
  3. Start it up:
    docker compose up -d
    

Then open http://localhost:3099 and you are good to go.

[!TIP] If you have make installed, make docker-up runs step 3 for you. Run make help to see every available command.

No Docker? No worries. Have a look at the other ways to install and run DVinyl in the Getting started guide.

Documentation

Guide What is inside
Getting started Manual installation and requirements
Docker deployment Deploy with Docker Compose (recommended)
API keys Get your Discogs, Hardcover, TMDB, IGDB and Rebrickable keys
Plugin development Build your own media type as a code plugin
Public share links Let anyone browse a collection (or part of it) read-only, no account needed
Wiki User guides and no-code tutorials

Tech stack

Component Technology
Backend Node.js, Express
Database MongoDB
Frontend EJS templates
Styling Tailwind CSS
Localization i18next
Metadata APIs Discogs, Hardcover, TMDB, IGDB, Rebrickable

Contributing

This is honestly my first app of this kind, so I am wide open to help, ideas and advice. If you want to jump in, have a look at CONTRIBUTING.md and the Code of Conduct first. Bug reports and feature ideas are just as welcome as code.

License

Distributed under the MIT License. See LICENSE for the details.

[!NOTE] Please note that parts of the frontend and comments were generated with the assistance of AI tools. While I reviewed and corrected the output where necessary, this project is not 100% human-made.

Your feedback is highly appreciated, even for the backend, where I may have made significant errors. I would be grateful for any suggestions or comments to improve the project.

Thank you for your understanding <3

Install DVinyl on Unraid in a few clicks.

Find DVinyl 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 DVinyl Review the template variables and paths Click Install

Requirements

MongoDB database. Install a MongoDB container first and link it via the MONGODB_URL variable. Recommended image: mongo:latest. Note the trade-off: latest can eventually jump a major version, and MongoDB refuses to start on data files a newer version already wrote, so export your database before any major upgrade. MongoDB 5.0+ needs a CPU with AVX support; on older hardware without AVX, use mongo:4.4.18 on a fresh database instead. Never point an older MongoDB at data files a newer version already wrote (downgrades are refused), and upgrade only one major at a time.

Download Statistics

4,945
Total Downloads

Related apps

Details

Repository
kyonew/dvinyl:latest
Last Updated2026-08-21
First Seen2026-05-24

Runtime arguments

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

Template configuration

WebUI PortPorttcp

The port DVinyl will be accessible on.

Target
3099
Default
3099
Value
3099
Uploads VolumePathrw

Directory to store uploaded files like covers.

Target
/app/public/uploads
Default
/mnt/user/appdata/dvinyl/uploads
Value
/mnt/user/appdata/dvinyl/uploads
MongoDB URLVariable

Connection string for your MongoDB instance. Replace [IP_OF_MONGODB] with your MongoDB container IP or Unraid IP if hosted on the same custom network.

Target
MONGODB_URL
Default
mongodb://[IP_OF_MONGODB]:27017/dvinyl
Value
mongodb://[IP_OF_MONGODB]:27017/dvinyl
JWT PasswordVariable

Password used for JWT token encryption.

Target
PASSJWT
Default
ChangeThisToAComplexPassword
Value
ChangeThisToAComplexPassword
Session SecretVariable

Secret used for sessions.

Target
SESSION_SECRET
Default
ChangeThisToAComplexSecret
Value
ChangeThisToAComplexSecret
HTTPS Production ModeVariable

Change to true ONLY if you use HTTPS via a reverse proxy.

Target
PROD
Default
false
Value
false
Vinyl Port VariableVariable

Internal port variable required by the app.

Target
VINYL_PORT
Default
3099
Value
3099
Base URLVariable

Base URL for serving on a sub-path, leave empty to serve from root.

Target
BASE_URL
Discogs API TokenVariable

Your Discogs API Token for Vinyls/CDs.

Target
DISCOGS_TOKEN
Hardcover API KeyVariable

Your Hardcover API Key for Books.

Target
HARDCOVER_API_KEY
TMDB API KeyVariable

Your TMDB API Key for DVDs.

Target
TMDB_API_KEY
Twitch Client IDVariable

Your Twitch Client ID for Games.

Target
TWITCH_CLIENT_ID
Twitch Client SecretVariable

Your Twitch Client Secret for Games.

Target
TWITCH_CLIENT_SECRET
Rebrickable API KeyVariable

Your Rebrickable API Key for LEGO sets.

Target
REBRICKABLE_API_KEY
OIDC Issuer URLVariable

Optional single sign-on. Your OIDC provider issuer URL (Authentik, Keycloak, Authelia, pocketID...). Leave empty to disable SSO.

Target
OIDC_ISSUER_URL
OIDC Client IDVariable

Optional single sign-on. The client ID registered on your OIDC provider.

Target
OIDC_CLIENT_ID
OIDC Client SecretVariable

Optional single sign-on. The client secret registered on your OIDC provider.

Target
OIDC_CLIENT_SECRET
OIDC Redirect URIVariable

Optional single sign-on. Must exactly match the callback registered on your provider, always ending with /login/oidc/callback.

Target
OIDC_REDIRECT_URI
OIDC Button LabelVariable

Optional single sign-on. Text shown on the SSO login button, for example 'Sign in with Authentik'.

Target
OIDC_BUTTON_LABEL