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.
6.1 KiB
PicPeak
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.
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
PUIDandPGIDin.envto 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
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
- Deployment Guide — Installation, configuration, reverse proxy, external media
- Admin API (OpenAPI) — Machine-readable API spec
- Admin API Quickstart — Authentication and testing guide
- Security Policy
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.




