Skip to content
Photojournalism static site generator, inspired by Jack000/Expose
Python JavaScript CSS
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

A static site generator for photo diaries, inspired by Expose.


📷 Boundary Waters 🌅 2015 Trip ⛺️ With Friends 🚣

Click here! I made this photo diary with


I like what Expose does. But encoding photos and videos takes a long time, and Expose doesn't support:

  • Caching
  • Multiprocessing
  • Skipping rendering altogether and generating HTML
  • Dry runs

So I rebuilt the parts of Expose I liked and added features I needed.

I probably won't release this as a Python package. Packaging isn't fun, and this is a fun little script, so clone it and have fun with it!


This script requires Python 3 and the following dependencies:

  • pyprind
  • docopt
  • jinja2

Install them with the following:

pip3 install pyprind docopt jinja2

Then clone or download this repo into a directory of your choice. Either:

  • symlink somewhere into your $PATH, or
  • create an alias pointing to in your .bashrc/.zsrhc

process photos and videos into a static site photojournal

Usage: [--verbose --dry-run --site-only] [--dry-run] --create-template --help --version --paths

    -h, --help             Show this screen
    --version              Show version
    --paths                Show script and working directories
    -v, --verbose          Enable verbose log messages
    -d, --dry-run          Log all actions but don't execute them
    -s, --site-only        Skip rendering and just build HTML
    -c, --create-template  Create a blank metadata.yml for source files


If you built a theme for, share it with me and I'll add it to this repository!

Bug reports, fixes, or features? Feel free to open an issue or pull request any time. You can also email me at

Thanks to

  • tlvince: great code cleanup and feature implementations 🌻


Copyright (c) 2015 Matthew Lewis. Licensed under the MIT License.

To Do


  • Move JS deps into the app instead of running off cdnjs
  • Configurable, non-hard-coded config
  • Alternate source/output dirs


  • Screenshots
  • More in-depth usage
  • YAML format docs
  • Template
  • Styling by slide
  • Examples
  • Weaknesses
  • How it works
You can’t perform that action at this time.