Turn a folder of photos into organized, client-ready delivery packages.
PhotoPackager automates the repetitive work between a finished shoot and a clean delivery. It can preserve originals, create optimized or compressed copies, apply an EXIF policy, and produce downloadable ZIP packages through a desktop workflow, command line, web interface, or MCP tools.
Project status: Public beta. The core packaging workflow is functional, but the interfaces and configuration may still change.
- Organizes a shoot into predictable delivery folders.
- Creates JPG and WebP variants at configurable quality levels.
- Preserves, selectively removes, or strips EXIF metadata.
- Builds ZIP packages for client delivery.
- Supports dry runs before writing output.
- Offers CLI, FastAPI, Celery/Redis, React, and MCP entry points over the same packaging engine.
PhotoPackager does not replace a DAM, gallery host, backup system, or delivery contract. It prepares files; you remain responsible for retaining originals and confirming the package before delivery.
Docker is the simplest way to run the complete web workflow:
git clone https://github.com/DropShock-Digital/PhotoPackager.git
cd PhotoPackager
docker compose up --buildOpen http://localhost:5601. The Compose stack runs the web/API service, Redis, and the background worker.
python3.12 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
pip install -r requirements.txt -r requirements-dev.txt
python -m pytest -vcd frontend
npm ci
npm run devpython photo_packager_cli.py --helpPhoto files may contain faces, locations, camera identifiers, and client information.
- Run PhotoPackager locally when practical.
- Generated packages and temporary uploads are intentionally excluded from Git.
- Review EXIF settings and inspect every package before sharing it.
- Keep originals outside PhotoPackager's output directory and in your normal backup system.
- Do not expose the included web/API service directly to the public internet. It does not provide production-ready authentication, authorization, retention controls, or hardened multi-tenant isolation.
If you deploy it for a team, put it in isolated infrastructure and add authentication, access controls, encrypted transport, storage lifecycle rules, monitoring, and backups.
| Path | Purpose |
|---|---|
photo_packager.py |
Core packaging workflow |
photo_packager_cli.py |
Command-line interface |
main.py |
FastAPI web/API entry point |
worker.py |
Celery background worker |
mcp_tools.py |
MCP-facing tools |
frontend/ |
React web interface |
tests/ |
Automated test suite |
See CONTRIBUTING.md. Please report security concerns through the process in SECURITY.md, not in a public issue.
PhotoPackager is available under the MIT License.
Built by DropShock Digital and Steven Seagondollar.
