BookBinder helps you catalogue every book, vinyl LP and CD in your home using your phone camera and Claude AI. Here's how.
Download and install Docker Desktop from docker.com. It's free.
Wait until Docker Desktop shows "Docker is running" before continuing.
Unzip BookBinder into a folder. Open a Terminal (Mac/Linux) or Command Prompt (Windows), navigate to the folder, and run:
docker compose up -d
Docker will set everything up automatically — database included. When it's done, open http://localhost:8585 in your browser.
Open app/config.php in a text editor and find this line:
define('BB_EDIT_PASS_HASH', password_hash('bookbinder', PASSWORD_DEFAULT));
Replace bookbinder with your chosen password. Anyone can browse your catalogue, but only someone with this password can edit it.
See the Cataloguing your books section below — it's the same for everyone.
Copy the SQL from Claude and paste it in using either method:
If you added phpMyAdmin to your docker-compose.yml (see README), go to http://localhost:8586, select the bookbinder database, click the SQL tab, paste and click Go.
docker exec -i bookbinder_db mysql -u bookbinder -pbookbinder123 bookbinder << 'EOF' -- paste your SQL here EOF
INSERT IGNORE — safe to re-run as many times as you like.These steps are the same whether you're using Docker or a manual install.
For best results:
Group the photos for each location into a folder and zip it. Name it clearly:
bcase1_lounge_main.zipbcase2_hall_by_stairs.zipbcase3_study.zipOn a Mac: select the photos → right-click → Compress.
On Windows: select photos → right-click → Send to → Compressed folder.
Go to claude.ai and start a new chat. Paste this prompt to get Claude set up:
I'm cataloguing my home collection using BookBinder. 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 should be one of: Fiction, Non-Fiction, Sailing, Medical, TEFL, Reference, Gardening, Cookery, Art, Music, Humour, Games, Sport, Motoring, Health, Poetry, Nature, Travel, DIY, Magazines
- sub_category for Medical: Anatomy, Osteopathy, Homeopathy, Nutrition, Physiotherapy, Orthopaedics, Clinical, Alternative Health
- 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 - [Artist/Author] LP/CD/book' in the title itself (not just in notes), so multiple unclear items on the same shelf don't collide on the unique constraint. Add 'Title unclear - check' to notes as well.
- If I give you a NEW bookcase number that hasn't been used before, first output a single INSERT for the `bookcases` lookup table:
INSERT INTO bookcases (id, name, location, photo_path, notes) VALUES
(BOOKCASE_NUMBER, 'Bookcase Name', 'Room Name', NULL, NULL);
before the books INSERT block, so it appears correctly in BookBinder's navigation.
After each stack, output the complete SQL block(s) ready to paste into phpMyAdmin.
Ready — I'll upload bookcase 1 now.
Drag your zip files into the Claude chat (or use the attachment button). You can upload several bookcases at once. Tell Claude which bookcase number each one is and what room it's in, for example:
These are bookcases 1, 2 and 3. Bookcase 1 = Lounge Bookcase 2 = Hall by stairs Bookcase 3 = Study
Claude will read the spines and generate the SQL for each bookcase.
Log in and go to the Bookcases page. Upload an overview photo for each bookcase — it appears on the bookcase card so you can see at a glance where a book lives.
On the Browse page you can:
bookcases table automatically as part of the SQL block — just import it first, then the books import will show up correctly