shellery/README.md

3.7 KiB

Shellery

Simple SSG to create dynamic gallery one-pagers in your shell! Shell+Gallery

Issue Tracker and Requests


Features

Available:

  • Simple use, single dependency (exiftool)
  • Removes EXIF/GPS metadata from published images by default
  • Configurable title and optional footer via environment variables
  • no Javascript
  • Lightbox of image with anchor
  • Order of images via filename
  • Container available
  • Simple to modify (Pictures and Templates)

Ideas:

  • check file formats
  • conf file for options
  • anonymize file names
  • sections via file names

Not planned:


Requirements

  • bash and GNU coreutils
  • exiftool - apt install libimage-exiftool-perl (Debian/Ubuntu) or brew install exiftool (macOS)

Docker/Podman users need nothing on the host, exiftool is baked into the image.

Building with --keep-exif / STRIP_EXIF=0 does not require exiftool.


Usage

Docker / Podman

mkdir -p images output

podman run -v $(pwd)/images:/app/images -v $(pwd)/output:/app/output git.uphillsecurity.com/cf7/shellery:latest

Local

  • Clone
  • Put images into ./images/
  • ./build.sh
  • Check ./output/

Modify files accordingly.

Docker Build

Build and run:

docker build -t localhost/shellery .
docker run -v $(pwd)/images:/app/images -v $(pwd)/output:/app/output localhost/shellery

The generated gallery will be in ./output/index.html

Configuration

All options can be set in a .env file, as environment variables, or as flags. .env.example lists every option with its default, so an unedited copy changes nothing:

cp .env.example .env

.env is gitignored. Precedence is flags > environment > .env > defaults, so a -e value passed to the container still wins over the file. Point ENV_FILE at another path to use a different file.

Variable Flag Default Effect
GALLERY_TITLE --title=TEXT Gallery Page <title> and the <h1> header
SHOW_FOOTER --no-footer 1 Set to 0 to hide the "Powered by shellery" footer
STRIP_EXIF --keep-exif 1 Set to 0 to publish image metadata as-is
ENV_FILE - .env Path to the config file to load
GALLERY_TITLE="Holiday 2026" SHOW_FOOTER=0 ./build.sh
# or
./build.sh --title="Holiday 2026" --no-footer

# container, via -e
podman run -e GALLERY_TITLE="Holiday 2026" -e SHOW_FOOTER=0 \
  -v $(pwd)/images:/app/images -v $(pwd)/output:/app/output \
  git.uphillsecurity.com/cf7/shellery:latest

# container, via a mounted .env
podman run -v $(pwd)/.env:/app/.env:ro \
  -v $(pwd)/images:/app/images -v $(pwd)/output:/app/output \
  git.uphillsecurity.com/cf7/shellery:latest

Metadata removal

EXIF, GPS, IPTC and XMP metadata is stripped from every image by default. Only the copies in ./output/ are processed, your originals in ./images/ are never modified.

To publish images with their metadata intact:

./build.sh --keep-exif
# or
STRIP_EXIF=0 ./build.sh

# container
podman run -e STRIP_EXIF=0 -v $(pwd)/images:/app/images -v $(pwd)/output:/app/output git.uphillsecurity.com/cf7/shellery:latest

Notes


Security

For security concerns or reports, please contact via hello a t uphillsecurity d o t com gpg.


License

Apache License

Version 2.0, January 2004

http://www.apache.org/licenses/

  • Commercial use
  • Modification
  • Distribution
  • Patent use
  • Private use
  • Limitations
  • Trademark use
  • Liability
  • Warranty