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 ZimaOS

--- ## 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, Open Library, TMDB, IGDB, ScreenScraper, Rebrickable, BoardGameGeek), 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](https://demo.kyonew.me/), 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, LEGO sets and board games. - **Multiple views & virtual shelves.** Browse in a grid, a compact table, or as realistic virtual shelves with spine view and customizable furniture. - **Lists & playlists.** Curate custom lists within a collection and assemble tracks into playlists. - **Multiple collections.** Keep separate libraries (yours, the family's, by room) and switch in one click. - **Smart import & barcode scanner.** Add items by ID, scan physical barcodes with your camera, or bulk import existing libraries (Discogs, Goodreads). - **AI assist.** Bring-your-own-key support for text, photo or barcode-fallback import, and for drafting a new no-code plugin from a one-sentence description. See the [AI Assist guide](./docs/ai.md) to set it up. - **Market value & price history.** Live valuation estimates for your music collection with historical charts over time. - **Game completion times.** Playtime estimates powered by IGDB. - **Printable labels.** Generate printable QR codes and barcodes for your physical media. - **Wishlist.** Keep track of items you are hunting for. ### ๐ŸŽจ Make it yours - **14 color themes.** Ocean, Forest, Sunset, Sakura, Midnight and more, with light and dark variants. - **Modular dashboard.** Pick your stat widgets and add custom navigation shortcuts. - **Collection info page.** Add a rich Markdown presentation page with photos for your collections. - **Responsive.** Designed to feel natural on desktop, tablet and mobile. - **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, Open Library | | Movies | Blu-ray, 4K, DVD, VHS | TMDB | | Games | Video games | IGDB, ScreenScraper | | LEGO | LEGO sets | Rebrickable | | Board games | Board games | BoardGameGeek | 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](https://github.com/Kyonew/DVinyl/wiki) on the Wiki. - **Code plugin (with API).** Drop a `plugins//` 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](./docs/plugin-development.md). Built one you are proud of? Do not hesitate to open a PR, I would genuinely love to see it! ๐Ÿ™Œ ## Quick start ### ๐Ÿณ Docker (Compose) The fastest way to run DVinyl on any Linux/macOS/Windows host is the pre-built Docker image: 1. Create a `docker-compose.yml` (the [Docker guide](./docs/docker.md) has the full file). 2. Set your environment variables in a `.env` file (see [API keys](./docs/api-keys.md)). 3. Start it up: ```bash 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. ### ๐ŸงŠ ZimaOS / CasaOS DVinyl is available through the community **TwoBytes Store**: 1. In ZimaOS, open **App Store โ†’ Sources โ†’ Add**, and enter: ``` https://raw.githubusercontent.com/NoNoBzH22/TwoBytes-Store/gh-pages ``` *(For older ZimaOS / CasaOS versions requiring a zip source, use: `https://github.com/NoNoBzH22/TwoBytes-Store/archive/refs/heads/main.zip`)* 2. Find and install **DVinyl** from the store. 3. Open `http://:3099` to complete setup. ### ๐Ÿงก Unraid An official Community Application template is available: - Install via Community Applications or add the [XML template](https://raw.githubusercontent.com/Kyonew/DVinyl/main/unraid-template/dvinyl.xml). - Follow the [Unraid setup instructions](./docs/getting-started.md#-unraid). No Docker or NAS? Have a look at the other ways to install and run DVinyl in the [Getting started guide](./docs/getting-started.md). ## Documentation | Guide | What is inside | | :---- | :------------- | | [Getting started](./docs/getting-started.md) | Installation options and requirements | | [Docker deployment](./docs/docker.md) | Deploy with Docker Compose (recommended) | | [API keys](./docs/api-keys.md) | Get your Discogs, Hardcover, TMDB, IGDB, ScreenScraper, Rebrickable and BoardGameGeek keys | | [AI Assist](./docs/ai.md) | Optional bring-your-own-key AI for text, photo and barcode-fallback import, and for drafting a no-code plugin | | [Plugin development](./docs/plugin-development.md) | Build your own media type as a code plugin | | [Public share links](./docs/sharing.md) | Let anyone browse a collection (or part of it) read-only, no account needed | | [Wiki](https://github.com/Kyonew/DVinyl/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, Open Library, TMDB, IGDB, ScreenScraper, Rebrickable, BoardGameGeek | ## 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](./.github/CONTRIBUTING.md) and the [Code of Conduct](./.github/CODE_OF_CONDUCT.md) first. Bug reports and feature ideas are just as welcome as code. ## License Distributed under the MIT License. See [LICENSE](./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