# Shellery Simple SSG to create dynamic gallery one-pagers in your shell! Shell+Gallery [Issue Tracker and Requests](https://git.uphillsecurity.com/cf7/shellery/issues) - Status: Beta - Instance/ Demo: [schief-117.com](https://schief-117.com/) --- ## 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`](https://exiftool.org/) - `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 ```bash 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: ```bash 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: ```bash 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 `` 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 | ```bash 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: ```bash ./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 - [Github Mirror](https://github.com/CaffeineFueled1/shellery) --- ## Security For security concerns or reports, please contact via `hello a t uphillsecurity d o t com` [gpg](https://uphillsecurity.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