Templated HTML galleries based on in-photo metadata
Project description
Photoweb
Photoweb creates HTML galleries based on in-photo metadata, using flexible templates. What's different about it?
- It's easy to add new photos; just drop them in the folder and re-run.
- You don't have to track metadata; it comes from the photos themselves, using standard embedded metadata (EXIF, IPTC, XMP).
- Automatic Optimization: It can optimize your images for the web, stripping unnecessary metadata and using perceptual quality search to minimize file size.
- Smart Orientation: Automatically handles photo orientation (fixing rotated images from phones/cameras).
- It includes specialized support for titles and descriptions from Apple Photos.
- It's easy to modify the templates to make your photos look great.
- It supports modern web features like dark mode, keyboard navigation, and responsive side-by-side layouts out of the box.
Installation
Photoweb needs Python.
It's easiest with pipx:
pipx install photoweb
Usage
To generate the HTML for a gallery, call it from the command line:
photoweb .
You can generate multiple galleries at once:
photoweb beach hawaii snow
When you first generate a gallery, you can specify the page title and description, which will be used in the template:
photoweb -p "At the Beach" -d "We went to the beach for a weekend. Fun!" .
The page metadata will be saved in a file (md.json) for use next time you run photoweb.
Optimizing Images
You can optimize your original images in place and strip their metadata, which is recommended if you are going to host the files on a server:
photoweb -o .
By default, this uses a perceptual algorithm to find the best quality setting for each image. This can be slow; to optimize more quickly without perceptual search:
photoweb -o -f .
Optimization will also strip all metadata from the images for privacy and file size reduction.
Creating and Using Templates
By default, the bundled default template will be used. You can edit this, or create new templates, using them with the -t option:
photoweb -t "my template" .
To bootstrap your own template, you can copy the default one:
photoweb --copy-templates ./my-custom-design
Templates are directories with the following files in them:
- md.json - a configuration file
- gallery.html - the overview page
- detail.html - a single photo page
- style.css - visual styling
- photoweb.js - interactive logic (for keyboard navigation and zoom)
Take a look at the default template to get an idea of how to create your own.
Navigation and Shortcuts
When viewing a photo in the generated gallery:
- Left/Right Arrow keys: Previous/Next photo.
- Escape: Return to the gallery index.
- Click/Tap: Toggle between fit-to-screen and full-size view.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file photoweb-0.5.6.tar.gz.
File metadata
- Download URL: photoweb-0.5.6.tar.gz
- Upload date:
- Size: 16.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9db35477fabaaf6b13a76936d033c29f00da96a6a28631a99683a9701b9e9e97
|
|
| MD5 |
84db45afd3cda339aed32e2a5cc0d725
|
|
| BLAKE2b-256 |
ca48559e1a343a72520d5e2c610f3dbf7b87edf16de1d988d421502388755db8
|
Provenance
The following attestation bundles were made for photoweb-0.5.6.tar.gz:
Publisher:
publish.yml on mnot/photoweb
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
photoweb-0.5.6.tar.gz -
Subject digest:
9db35477fabaaf6b13a76936d033c29f00da96a6a28631a99683a9701b9e9e97 - Sigstore transparency entry: 1280746236
- Sigstore integration time:
-
Permalink:
mnot/photoweb@e5dbd2d2d414280aa9e37055855e39555365f300 -
Branch / Tag:
refs/tags/v0.5.6 - Owner: https://github.com/mnot
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e5dbd2d2d414280aa9e37055855e39555365f300 -
Trigger Event:
push
-
Statement type:
File details
Details for the file photoweb-0.5.6-py3-none-any.whl.
File metadata
- Download URL: photoweb-0.5.6-py3-none-any.whl
- Upload date:
- Size: 17.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
250ddad82fe088b342f269e57a665386bdb624d2a921d8010e0d53e4cc3de7a4
|
|
| MD5 |
4314c1e0b5bbe7b182e9db5229ccf89e
|
|
| BLAKE2b-256 |
78826a89dd982c45b64e974ef31b1eae033d66ff48c746ee2810146cd53d9fab
|
Provenance
The following attestation bundles were made for photoweb-0.5.6-py3-none-any.whl:
Publisher:
publish.yml on mnot/photoweb
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
photoweb-0.5.6-py3-none-any.whl -
Subject digest:
250ddad82fe088b342f269e57a665386bdb624d2a921d8010e0d53e4cc3de7a4 - Sigstore transparency entry: 1280746239
- Sigstore integration time:
-
Permalink:
mnot/photoweb@e5dbd2d2d414280aa9e37055855e39555365f300 -
Branch / Tag:
refs/tags/v0.5.6 - Owner: https://github.com/mnot
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e5dbd2d2d414280aa9e37055855e39555365f300 -
Trigger Event:
push
-
Statement type: