Files
picpeak/README.md
T
Paul Nothaft 8a4c1a7c0a chore(release): promote beta → main as v3.42.1
Stable release promoting the entire `beta` channel to `main`. Brings
~300 commits of features, fixes, and infrastructure improvements that
have been baked on the beta channel since v2.6.5.

## Major themes since v2.6.5

* Multi-administrator support with RBAC (super admin / admin / editor)
* Async upload pipeline (background worker pool for sharp/ffmpeg/EXIF/
  watermark/webhooks; bytes-on-wire returns 202)
* Self-hosted webfonts (filesystem-driven scanner; replaces Google Fonts
  CDN; GDPR-compliant)
* 8-token CI palette + force color mode (full theming across admin and
  public site, with WCAG-safe contrast helpers)
* Native multi-arch Docker images (Apple Silicon + ARM64 Linux native)
* Native S3 storage backend (S3 + S3-compatible providers)
* Comprehensive video support (MP4/WebM/MOV upload, stream, play)
* Outbound webhooks for event/photo lifecycle (HMAC-signed)
* Gallery layout overhaul (decoupled header style, banner option,
  theme-aware skeletons, lazy-loaded folder tree picker)
* Multilingual email templates (EN/DE/NL/PT/RU translations table)
* Bulk operations (delete with password gate, archive)
* Photo dimensions backfill (true masonry layout)
* Customer client access (review area before guest share)
* Image security (devtools detection, watermarking, right-click,
  secure thumbnails)

## Notable bug fixes from beta

* `/auth/session` symmetry — three rounds of fixes (#350, #355, #363,
  #398) for the admin-login redirect-loop family
* Email template renderer: handle {{#if}} conditionals, fix CSS leak in
  plain-text fallback, gate publish-from-draft password placeholder,
  gate external_url in public response
* Caller/template variable drift across gallery_created,
  expiration_warning, archive_complete, gallery_expired
* Full-URL gallery_link in all email types (was path-only in 3 sites)
* ffmpeg/ffprobe via apk for Alpine compatibility (was glibc-bundled)
* Admin events search and counters not bounded to first 100 (#346)

## Conflict resolution notes

* `README.md` — kept main's leaner v2.6.5 rewrite (#281); added a
  Contributors section adapted from PR #393.
* `DEPLOYMENT_GUIDE.md` — beta version (more recent, includes External
  Media docs already backported to main).
* `CHANGELOG.md` — new 3.42.1 entry leads, beta's 3.x history follows,
  main's 2.x entries appended below a divider so the historical chain
  is preserved.
* `package.json` (backend + frontend) — beta's structure with version
  bumped from `3.42.1-beta.0` → `3.42.1`.
* `package-lock.json` (backend + frontend) — regenerated via
  `npm install --package-lock-only`.
* `.release-please-manifest.json` — bumped from `2.6.5` → `3.42.1` so
  the next release-please run on main starts from the correct base.

## Pre-flight checks

* Frontend `tsc --noEmit` — clean
* Frontend `vite build` — clean (~3.5s, 2.6 MB main chunk; existing
  warning about chunking, not new)
* Backend `npm test` — pre-existing failures in 6 integration suites
  (DB-fixture-dependent, not regressions)
* Frontend `vitest` — pre-existing failures in
  ThemeCustomizerEnhanced.test.tsx (missing QueryClientProvider after
  PR #390 added useQuery; not a regression of this merge)

The pre-existing test failures are tracked as separate follow-ups and
do not block this release promotion.
2026-05-07 12:47:45 +02:00

6.1 KiB

PicPeak

PicPeak Logo

Self-hosted photo sharing for event photographers.

License: MIT Docker Node.js React

Live Demo · Deployment Guide · Homepage


PicPeak lets you create password-protected, time-limited photo galleries for your clients — hosted on your own server. No subscriptions, no storage limits, no third-party access to your photos.

PicPeak Gallery Preview

Demo

Try it out at demo.picpeak.app.

Admin panel: demo.picpeak.app/admin — login with demo@picpeak.app / Demo2026!

The demo resets periodically.

Features

Gallery Management — Create galleries, upload photos via drag & drop, set passwords and expiration dates. Galleries auto-archive when they expire. Events start as drafts so you can upload and prepare before notifying the client.

Client Experience — Responsive galleries that look great on any device. Guests can browse, download individual photos or everything at once. Optional guest uploads and feedback (likes, comments, ratings).

Themes & Branding — 11 built-in theme presets, custom CSS templates, configurable colors/fonts/layouts. White-label your admin panel and login page with your own logo and company name.

Email Notifications — Automated gallery creation, expiration warning, and archive emails. Multilingual templates (EN, DE, NL, PT, RU) editable from the admin UI.

Photo Protection — Watermarking, right-click prevention, canvas rendering, DevTools detection. Configurable per gallery.

External Media — Reference photos from a mounted folder instead of uploading. PicPeak reads originals in place and generates thumbnails on demand.

Multi-Language — Full UI translations for English, German, Dutch, Portuguese, and Russian. Email templates support all languages independently.

Analytics — Built-in view/download tracking plus optional Umami integration for privacy-focused analytics.

Video Support — Upload and stream MP4, WebM, MOV alongside photos. FFmpeg bundled via npm.

Multiple Admins — Role-based access control with super admin, admin, and editor roles.

Quick Start

git clone https://github.com/the-luap/picpeak.git
cd picpeak
cp .env.example .env
# Edit .env — set at least JWT_SECRET and passwords
docker compose up -d

Open http://localhost:3000 and log in with the credentials from your .env.

Permissions: Set PUID and PGID in .env to match your host user (id -u / id -g) so Docker volumes are writable.

See the Deployment Guide for reverse proxy setup, SSL, external media, and production configuration.

Screenshots

Admin Dashboard Admin Dashboard
Event Management Event Management
Analytics Analytics

Comparison

PicPeak PicDrop Scrapbook.de
Self-hosted Yes No No
Monthly cost $0 $29-199 19-99 EUR
Storage Unlimited 50-500 GB 100-1000 GB
Custom branding Full Limited Limited
Open source Yes No No
API Yes Paid No

Tech Stack

  • Backend: Node.js, Express, PostgreSQL (or SQLite)
  • Frontend: React, TypeScript, Tailwind CSS
  • Infrastructure: Docker, Nginx, Redis
  • Processing: Sharp (images), FFmpeg (video)

Release Channels

Stable (stable / latest) — Production-ready. Use this for real deployments.

Beta (beta) — Early access to new features. May have rough edges.

# Set in .env
PICPEAK_CHANNEL=stable  # or beta

# Update
docker compose -f docker-compose.production.yml pull
docker compose -f docker-compose.production.yml up -d

The admin dashboard notifies you when updates are available.

Contributing

We welcome contributions — bug fixes, features, translations, documentation. See CONTRIBUTING.md for setup instructions.

Documentation

Contributors

Thanks to the people whose code, reports, and feedback have shaped PicPeak:

  • @Luca-Timo — native Apple Silicon multi-arch images, external-URL toggle for legal CMS pages, lazy-loaded folder tree picker, admin-email picker, self-hosted webfont system, gallery header/banner decoupling, and several typed-API refactors.
  • @Rekoo-PS — sharp-eyed bug reporter and product feedback. Filed the issues that drove the login-loop fix, gallery-loading skeleton work, mobile-lightbox overhaul, admin-events search-counter fix, photo-count column, and bulk-delete workflow. Also a BuyMeACoffee supporter.

If you've contributed and aren't listed here, please open a PR.

License

MIT — use it for personal or commercial projects.


Homepage · Live Demo · Docs · Issues