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

DVinyl is a modern, self-hostable collection manager designed for physical media enthusiasts. From Vinyls and CDs to Books and Movies, catalog, value, and organize your entire physical library through a single, customizable interface.
Built in JavaScript.
Overview
DVinyl allows you to keep track of your physical music, books or even DVD collection. It uses the Discogs API, Hardcover 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) 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 🇫🇷.
*<small>(may only work in France)</small>
Documentation
To keep things organized, I have split the documentation into specialized guides:
- 🏁 Getting Started - Manual installation and requirements.
- 🐳 Docker Deployment - Deploying via Docker Compose (Recommended).
- 🔑 API Configuration - How to obtain your Discogs, Hardcover and TMDB API keys.
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.
- Create a
docker-compose.yml(see Docker Deployment Guide for the full file). - Setup your environment variables in a
.envfile (go check how to get your api keys). - 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 |
Screenshots <small>with Ocean theme</small>
| 🖥️ Desktop View | 📱 Mobile View |
|-----------------|----------------|
|
|
|
|
|
|
|
|
|
🤝 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:
- Fork the project.
- Create your Feature Branch (
git checkout -b feature/AmazingFeature). - Commit your changes (
git commit -m 'Add some AmazingFeature'). - Push to the branch (
git push origin feature/AmazingFeature). - 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
