ShelfMate catalogues your books, vinyl records and CDs using your phone camera and Claude AI. Choose your install method below, then follow the cataloguing steps.
Download and install Docker Desktop from docker.com โ it's free.
When Docker starts up, it will offer to create an account โ you don't need one.
Look for the small 'Skip' link in the top right of that screen
Wait until Docker Desktop shows "Docker is running" before continuing.
Purchase and download ShelfMate from the download page and unzip it into a permanent folder โ somewhere like Documents/ShelfMate/ rather than Downloads, as Docker needs to find it each time you start.
After installation, open Docker Desktop and you'll see your software listed with Start and Stop buttons. You can start and stop from there at any time (or just quit Docker to stop).
Linux / command line: navigate to the shelfmate folder and run:
Then open http://localhost:8585 in your browser.
phpMyAdmin is also available at http://localhost:8586 if you ever need direct database access.
Open app/config.php in any text editor and find this line:
Replace shelfmate with your chosen password. Anyone can browse your catalogue โ only someone with this password can edit it.
See Cataloguing your collection below โ it's the same for everyone.
Log in to edit (default password is 'shelfmate' change in config as above if required), then go to Import SQL in the top menu. Paste the SQL from Claude, or upload it as a .sql file โ check the preview, then confirm.
INSERT IGNORE โ safe to re-run as many times as you like. Import runs as a single transaction, so a mistake can't leave your catalogue half-updated.Your entire catalogue moves across โ no re-photographing, no re-typing.
In BookBinder, log in as editor, then go to Export SQL in the top menu and download your catalogue as a .sql file.
books and bookcases tables as data-only SQL with "INSERT IGNORE statements" checked.Log in to ShelfMate as editor, then go to Import SQL in the top menu. Upload your .sql file (or paste its contents), check the preview, and confirm.
Photos don't transfer with the SQL โ copy the contents of your BookBinder install's uploads/bookcases/ folder into ShelfMate's uploads/bookcases/ folder. Filenames match up, so your bookcase photos appear automatically.
These steps are the same whether you used Docker or a manual install. ShelfMate handles books, vinyl LPs and CDs equally well.
For best results:
Group each bookcase or CD/LP stack's photos into a folder and zip it. Name it clearly:
bcase1_lounge_main.ziplounge_lps_classical.zipoffice_cds.zipMac: select photos โ right-click โ Compress.
Windows: select photos โ right-click โ Send to โ Compressed folder.
Go to claude.ai and start a new chat. Paste this prompt:
I'm cataloguing my home collection using ShelfMate. I'll upload zipped photos of each bookcase, LP stack or CD stack and I need you to:
1. Read all the spines in the photos (books, LPs and CDs)
2. Generate SQL INSERT statements in this format:
INSERT IGNORE INTO books (title, author, category, sub_category, genre, bookcase, shelf, location_name, notes) VALUES
('Title Here', 'Artist/Author', 'Category', 'Sub-category or NULL', 'Genre or NULL', BOOKCASE_NUMBER, SHELF_NUMBER, 'Room Name', 'any notes');
Rules:
- category: Fiction, Non-Fiction, Music, Classical, Medical, Sailing, TEFL, Reference, Gardening, Cookery, Art, Humour, Games, Sport, Health, Poetry, Nature, Travel, DIY, Magazines
- sub_category for Music: CD or LP
- genre: for music use Jazz, Classical, Blues, Folk, Rock, Soul, Country, World etc. For fiction use Literary, Crime, Historical etc.
- shelf numbers count from top (1=top shelf), 0 = stacked flat
- bookcase number is the number I give you with each upload
- Use NULL for unknown authors/artists
- Flag unclear titles with 'Title unclear - check' in notes
After each stack, output the complete SQL block ready to paste into ShelfMate's Import SQL page.
Ready โ I'll upload bookcase 1 now.
Drag your zip files into the Claude chat. Tell Claude which bookcase number each one is and what it contains:
These are bookcases 1, 2 and 3. Bookcase 1 = Lounge main bookcase (books) Bookcase 2 = Lounge LP stack by the hifi (vinyl records) Bookcase 3 = Office CD rack (CDs)
Claude reads the spines and generates the SQL for each location.
Log in and go to the Bookcases page. Upload an overview shot for each bookcase or stack โ it appears on the location card so you can see at a glance where something lives.
On the Browse page you can:
Genre is one of ShelfMate's most powerful features for music collectors โ here's the best way to use it.
The setup prompt above already includes genre. When uploading a stack of jazz LPs, tell Claude:
This is bookcase 7 โ my jazz LP collection. Please set genre = 'Jazz' for all of these unless you can identify a different genre from the spine.
Claude will set Jazz as the default and override where it recognises something different (Classical, Blues etc.).
Already imported without genres? Use the Batch Edit panel in the Browse page โ no need to edit each item individually.
Once genres are assigned:
For vinyl collectors, the Condition field supports standard grades: Mint, NM, VG+, VG, Good, Fair, Poor.
You can add condition when editing any record inline (โ๏ธ button), or set it during the Add Item form. Use the Purchase value field alongside condition for insurance records.
A few features worth knowing about.
Mark any item as Wishlist status โ either when adding manually or via the inline edit โ๏ธ. Wishlist items appear in the sidebar with a count, styled differently in the browse list so they stand out.
Export your wishlist to CSV โ useful to take to record fairs, second-hand bookshops or car boot sales.
Go to the Export page (top nav). Filter by bookcase, category or wishlist, then download a CSV that opens in Excel, Numbers or Google Sheets.
Useful for insurance schedules, sharing your catalogue, or keeping an offline backup.
Click ๐ฒ Random in the top nav. Filter by category if you want (Fiction only, Music only), then click the button โ ShelfMate picks something at random from your shelves. Shows title, artist/author, location and condition. Hit it again if you're not feeling it.
lounge_lps_jazz.zip is more helpful than bookcase7.zipDocuments/ShelfMate/) and replace files directly in the app/ subfolder. Changes take effect immediately โ no Docker restart neededContents/Resources/shelfmate/app/ to replace filesReady to get started?
๐ Get ShelfMate โ ยฃ10