The bookshelf

A screen is wall space. This hangs a bookshelf on it — built from the books you have actually read, spine by spine.

A desktop background is looked at more often than anything anyone hangs in a house, and it is usually a stock photograph. Goodreads exports a CSV of everything you have shelved; this page turns it into a wallpaper sized to your screen, entirely in the browser — the CSV is parsed here, the shelf is drawn here, the PNG is written here.

Interactive

Bookshelf, yours

Drop in a Goodreads export, give it your screen size, and download the wallpaper. By default the page works with the network cable out; switch on real covers and the shelf becomes a wall of your books’ actual covers.

Open it Download it to keep

Two shelves, one honest split

The default shelf is drawn. A spine’s width follows its page count and its dress follows its era — Victorians in banded leather with gilt rules, mid-century in cloth and paper labels, recent books in flat graphic colour. A five-star rating earns a gilt point at the foot. Everything is deterministic per title, so the same book always gets the same spine.

The bookshelf app drawing the demo library as book spines on three walnut shelves

The drawn shelf: the demo library at 1920 × 1080, spines sized by page count and dressed by era. Fully offline.

Cover mode turns the shelf into a wall of the covers themselves, fetched from the Open Library covers service by the ISBNs in the export — the page’s single use of the network, off by default, and the request carries the ISBN and nothing else. Scans of covers arrive in every vintage of exposure and colour, so each one is brought to a single matte finish: exposure pulled toward a common middle, saturation eased, one warm wash, one pass of grain. A book with no cover on file is left off the wall rather than faked — the caption says how many.

The bookshelf app in cover mode: a wall of real book covers, uniformly finished, on four shelves

Cover mode with Fit every book: 43 of the 44 demo books had covers on file, and the case was built to hold exactly those. All are brought to the same finish so six decades of printing read as one shelf.

A worthwhile limit stated plainly: there is no database of photographed book spines, at any scale, from anyone — spines were never scanned the way covers were. That is why the two modes are a real-cover wall and a drawn-spine shelf, and nothing in between.

Which books, and how many shelves

The shelf holds whichever slice of the library you ask for. The menu offers everything, read, and unread — unread being the to-read pile plus whatever is mid-flight — and then every shelf the export itself carries: whatever you have tagged on Goodreads shows up as a choice, with its count.

By default the case is built for the screen: a comfortable number of shelves at a readable size, holding as many books as happen to fit. Fit every book inverts that and builds the case for the library instead, searching for the fewest shelves that hold all of it — more, thinner shelves for a large export, fewer and taller ones for a small library that would otherwise sit in a corner of the wall. Capacity rises roughly with the square of the shelf count, since thinner shelves shrink every book in both directions, so the search settles in a few steps. If a library is too large even for sixty shelves, the case takes the count that holds the most and the caption says how many were left over.

Install and removal

The application is one HTML file; the download keeps working from a folder on your machine with no server and no internet. To set the result as your wallpaper, right-click the PNG, or use the included Windows script, which is made reversible: before the first change it saves the path of the current wallpaper to a single JSON file beside itself, and --undo restores it and deletes the file. No registry keys, nothing at startup; removal is deleting the folder.

The code

Dependency-free HTML and JavaScript, with a small Python wallpaper setter alongside. The download is on the code page.