Free and self-hosted, for physical media
Worth
Keeping
Know if it's worth keeping before you buy it.
A free, self-hosted Docker app for anyone who collects books, DVDs and Blu-rays, CDs and vinyl. Scan a barcode in a charity shop and it tells you whether it's already on your shelf, how it fits your Letterboxd, book app and Plex taste, and whether the price is fair for the UK.
Vibe coded, tested by hand. I built Worth Keeping with AI coding tools and use it every time I'm in a charity shop. Not affiliated with Discogs, Letterboxd, Pagebound, Plex or eBay.
Just scanned
5 012345 678900The Long Field
The Quiet Harbour
The problem
Is it a find, or a second copy?
Charity shops and record fairs are full of things you might want, and some you already own. Standing in the aisle, it's hard to remember whether that Blu-ray is on your shelf, whether you liked the film, or whether £4 is a bargain.
Worth Keeping answers all three from one scan, using your own shelf and your own ratings. It works with no signal too, because your phone keeps a copy of your shelf.
How a scan works
Point your phone at the barcode, add the shop price if you like, and you get one plain verdict.
- Step 1Scan
Use your phone's camera, or type the barcode. Batch mode scans a whole shelf in one go.
- Step 2Look it up
Books come from Open Library, CDs and records from Discogs, and films and everything else from UPCitemdb.
- Step 3Check your taste
Your Letterboxd rating or watchlist, your book app rating or to-read list, and whether it's already on your Plex.
- Step 4Get a verdict
Good find, Fair price, Too much, Upgrade, or On your shelf. Tap Bought it and it's added, with what you paid and where.
The verdicts
| Verdict | What it means |
|---|---|
| Good find | Cheaper than it usually sells for. Music is priced against Discogs; books and films against eBay UK listings. |
| Fair price | About what it usually goes for |
| Too much | You'd usually pay less elsewhere |
| Upgrade | You own another edition or a lesser format, such as the DVD of a Blu-ray in your hand |
| On your shelf | You already have this one |
Scans that match your Discogs wantlist say so. The Hunt page lists things you love that you don't own physically yet: anything rated 4★ or more, or on a watchlist or to-read list, plus your Discogs wantlist.
What else it does
- A shelf of everything you own, as covers or a list, searchable and filterable by format
- Upgrade spotting, with the option to take the old copy off your shelf
- No-signal mode: "do I own it?" still works, and anything else is checked when you're back online
- Stats by format and decade, monthly spending, favourite shops, and what Discogs says your collection is worth
- A nightly refresh of Discogs and Plex, and covers found for anything missing one
- Find duplicates, and download your shelf as a spreadsheet
- Imports from Letterboxd, Pagebound, Goodreads or StoryGraph, plus Discogs and Plex connections
- One database file, with a backup download in Settings
Install with Docker
You need Docker with Compose. Discogs, Letterboxd, a book app and Plex are all optional, and you can connect them later in Settings.
1. Get the code
git clone https://github.com/MOON5H1N3/worth-keeping.git
cd worth-keeping
2. Start it
docker compose up -d --build
Open http://localhost:8787. Your shelf and settings live in the data folder next to it, and updates never touch it.
3. On Windows, update with one click
Put the folder in C:\docker\worth-keeping and double-click update.bat. It pulls the latest version, rebuilds the container and starts it. Run it again whenever there's a new version.
4. Use it on your phone
Phones only allow the camera on https addresses. Install Tailscale on your computer and phone, turn on MagicDNS and HTTPS certificates in its admin page, then run this on the computer:
tailscale serve --bg 8787
Open the https address it prints on your phone and add it to your home screen.
Optional connections
| Service | What it adds |
|---|---|
| Discogs | Your collection, wantlist and music prices |
| Letterboxd | Upload your export and tick which lists are physical copies you own |
| Book app | A Pagebound, Goodreads or StoryGraph CSV, with the shelves that mean you own a copy |
| Plex | Shows whether you already have a film digitally |
| eBay and TMDB | Free developer keys for book and film prices, and film posters |
All of these are set up on the Settings page.
Questions
How do I check if I already own a DVD or record while I'm in a shop?
Scan its barcode with Worth Keeping on your phone. It checks your shelf straight away, even with no signal, and tells you if you own it or own another edition.
How do I know if a second-hand price is good?
Add the shop price when you scan. Worth Keeping compares it with what the item usually sells for: Discogs for CDs and records, and eBay UK listings for books and films. It then says Good find, Fair price or Too much.
Does it work with Letterboxd and Discogs?
Yes. Upload your Letterboxd export to see your rating or watchlist on every film you scan, and connect Discogs to import your collection and wantlist.
Which book apps does it support?
Pagebound, Goodreads and StoryGraph CSV exports. You choose which shelves mean you own a physical copy.
Does it work without phone signal?
Yes. Your phone keeps a copy of your shelf, so "do I own it?" still works. Anything it can't answer is saved and checked when you're back online.
Why does it need Tailscale on my phone?
Phones only let websites use the camera over https. Tailscale gives your home server a private https address that only your own devices can reach.
Where is my data kept?
In one file on your own computer, data/worth-keeping.db. Settings has a backup download.
Is it free?
Yes. It's open source under the MIT licence and runs on your own computer. The optional eBay, Discogs and TMDB keys are free too.
Is Worth Keeping affiliated with Discogs, Letterboxd or eBay?
No. It's an independent hobby project.
Was Worth Keeping written with AI?
Yes, it's vibe coded: written with AI coding tools, then tested by hand on a real collection. The source is on GitHub, so you can read exactly what it does before you run it.