DVinyl

DVinyl

Docker app from Kyonew's Repository

Overview

A self-hosted media collection manager for your Vinyls, CDs, Books, Games, and DVDs.

banner dvinyl


DVinyl is a modern, self-hostable collection manager designed for physical media enthusiasts. From Vinyls and CDs to Books, Movies and Games, catalog, value, and organize your entire physical library through a single, customizable interface.

Built in JavaScript.

License: MIT Self-Hosted Docker

Overview

DVinyl allows you to keep track of your physical music, books or even DVD collection. It uses the Discogs API, Hardcover API, IGDB API & TMDB API to retrieve important metadata and, for music, market valuations for your collection. This provides you with a convenient and full customizable dashboard for your home server.

✨ Key Features

📚 Universal Collection Management

  • Multi-Format Support: Manage your Music (Vinyls, CDs, Cassettes), Books (Manga, Comics, Hardcover), and Movies (Blu-ray, 4K, VHS, LaserDisc) and video games in one unified library.
  • Smart Import: Add items instantly using Discogs Release IDs or import your entire existing Discogs collection in one click.
  • Physical Scanner:* Scan your physical media to bridge the gap between your shelf and your digital database.
  • Advanced Organization: Easily track the physical location of every item in your home.

🎨 Fully Customizable Experience

  • Tailored Interface: Customize your navigation bar with shortcuts that matter to you.
  • Personalized Analytics: Build your dashboard with modular statistics widgets.
  • Category Themes: Apply unique visual themes to differentiate your music, book, and movie libraries.
  • Native Design: Optimized for mobile with seamless Dark & Light modes.

💎 Advanced Tools & Privacy

  • Market Insights: Get real-time value estimates (Low/Median/High) for your music collection.
  • Wishlist System: Keep track of your future finds.
  • Secure Access: Integrated authentication system for private viewing or sharing your collection with others.
  • Multilingual: Fully localized in English 🇬🇧 and French 🇫🇷.

*(may only work in France)

Documentation

To keep things organized, I have split the documentation into specialized guides:


Quick Start (Docker)

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

  1. Create a docker-compose.yml (see Docker Deployment Guide for the full file).
  2. Setup your environment variables in a .env file (go check how to get your api keys).
  3. Run the application:
    docker compose up -d
    

Access the application at http://localhost:3099.

Tech stack

Component Technology
Backend Node.js / Express
Database MongoDB
Frontend EJS Templates
Styling Tailwind CSS
Localization i18next
API Discogs / Hardcover / TMDB / IGDB

Screenshots with Ocean theme

🖥️ Desktop View 📱 Mobile View
Dashboard Desktop Dashboard Mobile
Collection Desktop Collection Mobile
Detail Desktop Detail Mobile

🤝 Contributing

Honestly, this is my first app of this kind. I am open to any help and advice for this app and my future ones!

If you want to help, you can:

  1. Fork the project.
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature).
  3. Commit your changes (git commit -m 'Add some AmazingFeature').
  4. Push to the branch (git push origin feature/AmazingFeature).
  5. Open a Pull Request.

📄 License

Distributed under the MIT License. See LICENSE for more information.


[!IMPORTANT]

Please note that parts of the frontend and docstrings 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. You must install a MongoDB container first and link it via the MONGODB_URL variable.

Download Statistics

567
Total Downloads

Related apps

Details

Repository
kyonew/dvinyl:latest
Last Updated2026-05-30
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