Create beautiful photo books from your Immich albums.
A web application that generates print-ready photo books from your Immich albums using the official Immich SDK. This is a self-hosted, private fork - it connects to a single Immich server through a server-side proxy (no manual connection screen, no public hosted instance).
- Connects to Immich through a server-side proxy (nginx injects the API key; see
nginx.conf.template) - no credentials ever reach the browser - Browse and select from all your albums
- Three composition styles per page - Bento (varied-size tiles matched to each photo's aspect ratio), Columns (Pinterest-style masonry), Collage (denser Bento variant) - assigned automatically, overridable per page
- Draggable bento split boundaries with magnetic snap, per-split axis flip, resizable photo frames
- Force how many photos land on a given page
- Page dimensions in millimeters, with A4/Square format presets, or fully custom
- Per-printer profiles (see below) with their own trim sizes, bleed, and page-count constraints
- Per-album configuration with global fallback
- Full undo/redo history of edits
- Polaroid, scrapbook and clean (edge-to-edge) card styles
- Drag & drop to reorder photos, or set a placed photo aside to pull it back into the unplaced list without losing your layout
- Optional date badge per photo
- Optional user-written caption per photo (only cards with a caption use the extra space), and an editable per-page caption band
- Textured or flat page backgrounds, with the background's hex code shown for matching a cover/spine color
- Front/back cover with photo+title, full-bleed, or text-only layouts, and an optional separated cover for printers that need one
- Live preview, automatically scaled to fit the window, with a page thumbnail navigation rail (cover/back-cover anchors pinned, scrollable interior pages)
- Printer-accurate bleed ("fond perdu"): bled photos extend past the trim edge so print-shop cutting tolerance never reveals a background sliver
- High-quality PDF export using @react-pdf/renderer
You will need:
- An Immich server with API access
- An Immich API key with the following permissions:
album.read- To browse and list albumsasset.read- To read asset metadata (descriptions, dates, etc.)asset.view- To access photo thumbnails, used for both the web preview and PDF export
- Log into your Immich instance
- Go to Account Settings → API Keys
- Click New API Key
- Give it a descriptive name (e.g., "Immich Book")
- Select the required permissions:
album.readasset.readasset.view
- Click Create
- Copy the API key (you won't be able to see it again!)
This app is meant to be deployed with Docker, behind a reverse proxy that reaches your Immich server on the same internal network.
Read INTEGRATION.md first - this app has no authentication of its own and expects a trusted upstream reverse proxy to provide it. Deploying it without that layer means anyone who can reach it has full access to every stored photobook.
git clone <this-repository>
cd immich-book
cp .env.example .envFill in .env (see .env.example for what each variable does):
IMMICH_API_KEY=your-immich-api-key
IMMICH_SERVER_URL=https://your-immich-server.example.com
EXTERNAL_NETWORK=name-of-your-existing-docker-networkThen build and run:
docker compose build
docker compose up -dnginx.conf.template proxies /api/ to immich_server:2283 (adjust the container name/port to match your Immich deployment) and injects IMMICH_API_KEY server-side. docker-compose.yml passes IMMICH_SERVER_URL through as the VITE_IMMICH_PROXY_TARGET build arg - the app auto-connects through the proxy on load, no manual entry.
- Select an Album - browse your albums, click one to open it
- Configure Page Layout - printer profile, page format/dimensions, spacing, dates, captions
- Adjust individual pages - switch a page's style (Bento/Columns/Collage), drag split boundaries, force its photo count
- Customize photos - drag & drop to reorder, add a per-photo caption, set a photo aside if you're not sure where it belongs yet
- Generate PDF - click "Generate PDF" to preview, use the PDF viewer toolbar to download
npm installCreate a .env file pointing at your Immich server (dev mode proxies /api through Vite):
# .env
VITE_IMMICH_PROXY_TARGET=https://your-immich-server.comnpm start # Dev server at http://localhost:5173
npm run build # Build for production (output in dist/)
npm run type-check # Run TypeScript type checkingOriginally based on ch1bo/immich-book, since substantially rewritten (layout engine, deployment model, captioning).
- Immich - the self-hosted photo management platform this depends on
- @react-pdf/renderer - PDF generation
This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0). See the LICENSE file for the full terms.