Create photo books from immich albums
See the codeCreate 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.
Your photos are already organized in Immich albums. Immich Book turns those curated collections into professional-quality photo books you can print or share as PDFs.
Try it with demo assets on the hosted setup: ch1bo.github.io/immich-book
[!TIP] The demo server access needs to be renewed every couple of hours. Should you get encouner errors, try reloading the page.
You will need:
album.read - To browse and list albumsasset.read - To read asset metadata (descriptions, dates, etc.)asset.view - To access photo thumbnails and imagesalbum.readasset.readasset.view[!WARNING] Security Notice: When using the hosted instance, your API key may be captured by whoever controls that domain. Only proceed if you trust the hosting provider! Anyone who controls the hosting can potentially access all your photos through your API key. For maximum security, consider self-hosting.
You may use the deployment built from this repository and published to Github Pages: ch1bo.github.io/immich-book
To use the hosted version, you need to allow CORS requests from the hosted domain. Add this to your Immich server's nginx configuration (inside the server block or location /api block):
# Allow CORS for the official hosted instance
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' 'https://ch1bo.github.io' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS' always;
add_header 'Access-Control-Allow-Headers' 'x-api-key, Content-Type, Accept' always;
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
add_header 'Access-Control-Allow-Origin' 'https://ch1bo.github.io' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS' always;
add_header 'Access-Control-Allow-Headers' 'x-api-key, Content-Type, Accept' always;
Important:
Access-Control-Allow-Origin: * (wildcard) - it's a security risksudo nginx -s reloadSelf-hosting on the same domain as your Immich server is the most secure option and doesn't require CORS configuration.
First, build the application:
git clone https://github.com/ch1bo/immich-book.git
cd immich-book
npm install
npm run build
Deploy to a subdirectory of your Immich domain (e.g., https://photos.example.com/book/).
Configure nginx (or your reverse proxy):
location /book/ {
alias /path/to/immich-book/dist/;
try_files $uri $uri/ /book/index.html;
}
Reload nginx, for example using sudo nginx -s reload
Deploy to a subdomain (e.g., https://book.photos.example.com/).
Configure nginx (or your reverse proxy):
server {
server_name book.photos.example.com;
root /path/to/immich-book/dist;
try_files $uri $uri/ /index.html;
# Add SSL configuration as needed
}
Reload nginx, for example using sudo nginx -s reload
Docker support is planned for easier deployment.
Connect to Immich
immich-bookhttps://immich.example.com)Select an Album
Configure Page Layout
Customize Individual Photos
Generate PDF
Clone and install:
git clone https://github.com/ch1bo/immich-book.git
cd immich-book
npm install
Create a .env file to avoid CORS issues:
# .env
VITE_IMMICH_PROXY_TARGET=https://your-immich-server.com
Start the development server:
npm start
The app will be available at http://localhost:5173
Other commands:
npm run build # Build for production (output in dist/)
npm run type-check # Run TypeScript type checking
Contributions are welcome! Please feel free to submit issues and pull requests.
[!NOTE] This is still a proof of concept with plenty of AI generated code and no tests.
This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0).
This means you are free to use, modify, and distribute this software, provided that:
See the LICENSE file for the full terms.
Commercial licensing is available if you wish to use this software in a commercial product or service without the open source requirements of AGPL-3.0, contact us [email protected]
Copyright © 2025 Sebastian Nagel
54 followers · starred Jul 2026
Create photo books from immich albums
See the codeCreate 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.
Your photos are already organized in Immich albums. Immich Book turns those curated collections into professional-quality photo books you can print or share as PDFs.
Try it with demo assets on the hosted setup: ch1bo.github.io/immich-book
[!TIP] The demo server access needs to be renewed every couple of hours. Should you get encouner errors, try reloading the page.
You will need:
album.read - To browse and list albumsasset.read - To read asset metadata (descriptions, dates, etc.)asset.view - To access photo thumbnails and imagesalbum.readasset.readasset.view[!WARNING] Security Notice: When using the hosted instance, your API key may be captured by whoever controls that domain. Only proceed if you trust the hosting provider! Anyone who controls the hosting can potentially access all your photos through your API key. For maximum security, consider self-hosting.
You may use the deployment built from this repository and published to Github Pages: ch1bo.github.io/immich-book
To use the hosted version, you need to allow CORS requests from the hosted domain. Add this to your Immich server's nginx configuration (inside the server block or location /api block):
# Allow CORS for the official hosted instance
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' 'https://ch1bo.github.io' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS' always;
add_header 'Access-Control-Allow-Headers' 'x-api-key, Content-Type, Accept' always;
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
add_header 'Access-Control-Allow-Origin' 'https://ch1bo.github.io' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS' always;
add_header 'Access-Control-Allow-Headers' 'x-api-key, Content-Type, Accept' always;
Important:
Access-Control-Allow-Origin: * (wildcard) - it's a security risksudo nginx -s reloadSelf-hosting on the same domain as your Immich server is the most secure option and doesn't require CORS configuration.
First, build the application:
git clone https://github.com/ch1bo/immich-book.git
cd immich-book
npm install
npm run build
Deploy to a subdirectory of your Immich domain (e.g., https://photos.example.com/book/).
Configure nginx (or your reverse proxy):
location /book/ {
alias /path/to/immich-book/dist/;
try_files $uri $uri/ /book/index.html;
}
Reload nginx, for example using sudo nginx -s reload
Deploy to a subdomain (e.g., https://book.photos.example.com/).
Configure nginx (or your reverse proxy):
server {
server_name book.photos.example.com;
root /path/to/immich-book/dist;
try_files $uri $uri/ /index.html;
# Add SSL configuration as needed
}
Reload nginx, for example using sudo nginx -s reload
Docker support is planned for easier deployment.
Connect to Immich
immich-bookhttps://immich.example.com)Select an Album
Configure Page Layout
Customize Individual Photos
Generate PDF
Clone and install:
git clone https://github.com/ch1bo/immich-book.git
cd immich-book
npm install
Create a .env file to avoid CORS issues:
# .env
VITE_IMMICH_PROXY_TARGET=https://your-immich-server.com
Start the development server:
npm start
The app will be available at http://localhost:5173
Other commands:
npm run build # Build for production (output in dist/)
npm run type-check # Run TypeScript type checking
Contributions are welcome! Please feel free to submit issues and pull requests.
[!NOTE] This is still a proof of concept with plenty of AI generated code and no tests.
This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0).
This means you are free to use, modify, and distribute this software, provided that:
See the LICENSE file for the full terms.
Commercial licensing is available if you wish to use this software in a commercial product or service without the open source requirements of AGPL-3.0, contact us [email protected]
Copyright © 2025 Sebastian Nagel
54 followers · starred Jul 2026