Self-hosted · Open Format · Docker-ready

Not a timeline.
A diary.

— where your memories stay yours.

A personal photo journal for any NAS with Docker — Synology, TrueNAS, unRAID, Raspberry Pi or Linux server. Photos, videos, text, maps, GPS tours, audio — arranged your way. No cloud, no algorithms, no lock-in.

▶ Live Demo testen Features entdecken ↓
Falls der Auto-Login nicht greift:   Benutzer mpd-demo  ·  Passwort mpd-demo
mpd.bgg-home.de — My Photo Diary
My Photo Diarywhere your memories stay yours.
📁 48 Alben 📷 8.135 Fotos 🎬 18 Videos 📊 Stats 🗺️ Tours
MPD SEARCH Erinnerungen suchen …
+ Album
T
admin
personal
1981 – Supetar
14 Fotos
shared
2005 – das Jahr
92 Fotos
shared
2007 – Mallorca
185 Fotos
shared
2008 – das Jahr
121 Fotos
shared
2018 – das Jahr
259 Fotos

What it does

Built for storytelling,
not for algorithms.

A complete diary platform with over thirty integrated features — editor, lightbox, statistics, search, memories, GPS tours, AI writing assistance, and more. All on your own NAS.

Group A · Core & Storytelling

The diary,
your structure.

Narrative structure

Intersperse text blocks between photos in any order. Author-defined sequence — never algorithmic. Four text styles: default, description, quote, private/hidden.

Justified grid

Justified grid layout that flows naturally. No forced squares, no cropping. Every photo at its natural ratio in perfect rows.

8 element types

Photos, videos, text, separators, interactive maps, GPX tours, audio and documents — all composable within one album. Not just a photo gallery.

Drag & drop, undo/redo

Rearrange any element in-place with drag & drop. 50-step undo/redo history. Debounced auto-save every 2 seconds. Every save creates a timestamped album backup (10 retained).

Roles & multi-space

Admin, editor, viewer, demo roles. Shared space for the family, personal space per user with private albums. Argon2-hashed passwords, rate-limiting, restart-robust SQLite sessions.

Open format — PDX

Photo Diary Exchange v1.3: plain JSON, human-readable, future-proof. Validated server-side, restorable from automatic backups. No vendor lock-in, ever.

Self-hosted, any device

Runs in a single Docker container — on Synology, TrueNAS, unRAID, QNAP, Raspberry Pi or any Linux server. Access through any browser, tablet, or the Android APK. No cloud, no account, no Play Store.

Group B · Photo Tools

Built-in darkroom —
non-destructive, reversible.

Lightbox viewer

Full-screen viewer with double-tap zoom, pan, slideshow mode, keyboard navigation (←→ Esc Z I D). Touch gestures on tablet. BlurHash placeholders while loading.

Non-destructive editor

Rotate, flip, crop, straighten with auto-crop, brightness, contrast, saturation. Every edit creates a 5-level rolling backup (.bak … .bak4) — reset with one click, any time.

EXIF

EXIF editor

Fix missing or wrong dates. Correct GPS coordinates after the fact. Date input validates against DateTimeOriginal. Optional simultaneous ISO filename rename based on the new date.

IMG_2847.JPG2018-07-14_15-42-08

ISO filename rename

Rename chaotic IMG_1234.JPG to sortable YYYY-MM-DD_HH-MM-SS.jpg — from EXIF date or manual input. Dry-run preview first. album.json is automatically updated.

Maps & OSM

GPS is read from EXIF and shown on an interactive OpenStreetMap. Insert whole map elements with multiple pins and geodesic great-circle lines between locations.

Video & audio

Play MP4, MOV, MKV, WebM with HTTP range streaming. Thumbnails via Pillow — falls back to FFmpeg first-frame extraction. Audio: MP3, M4A, FLAC, OGG as album elements.

WebP thumbnail pipeline

Three on-demand thumbnail sizes (100 / 400 / 1024px) in WebP, cached outside the photo tree. BlurHash 4×3 component placeholders keep scrolling smooth on slow connections.

Unassigned file tracker

See every photo, audio or document file that lives in the album folder but isn't yet referenced in album.json — then assign or delete, cleanly.

Group C · Modules

A platform,
not a single app.

MPD Search

Full-text search across albums, text blocks and metadata. Umlaut-normalized (ä→ae, ö→oe, ü→ue, ß→ss), prefix-matching, keyword-highlighted, context preview with surrounding photos. Ctrl+K anywhere.

MPD Stats Pro

Eight interactive Chart.js dashboards: photos per year / month / weekday / hour, seasons, ~60 recognised devices, GPS heatmap, storage timeline. Two-tier cache, incremental background scan, persistent geo-cache.

GPS tours (album) Pro

Embed a GPX track as an album element. Leaflet maps with geodesic lines. Parses distance, duration, average & peak heart rate from the GPX description — imports from Huawei Health and Komoot.

GPS trails (global) Pro

A standalone gallery of every GPX track on the NAS, sortable by sport type (cycle, hike, run, walk). Browse all your outdoor history on one Leaflet map, independent of albums.

DiaryMemories

"Today, years ago" — daily ntfy push notification with Polaroid-style memories grouped by year. Android WebView APK, token-based auth, reverse geocoding shows the city under every photo.

Write-Companion Pro

Optional AI writing assistant powered by Anthropic Claude Haiku. Offers three stylistic variations of text you wrote — never invents facts, places or feelings. Photos and GPS never leave your NAS.

5 themes + a11y

Dark, Light, Sepia, Nordic, Sunset — all via one CSS data-theme switch, persisted in localStorage. DE/EN UI language. Keyboard-first operation throughout the app.

Why we built this

"Every platform organizes your memories for you. My Photo Diary lets you do it yourself."

A diary is something you build by hand. You pick the order, you write the words. The album is a journal, not a feed.

Your photos and GPS data stay on your hardware. No face recognition, no tracking, no cloud. Open PDX format — no vendor lock-in.

The Write-Companion is optional — one button in the text editor, text only, never photos or GPS.

Honest scope

What it is
and isn't.

My Photo Diary is

  • A personal photo diary with narrative text
  • Self-hosted on any NAS or Docker host (Synology, TrueNAS, unRAID, Pi, Linux)
  • Author-defined order — you control the story
  • Open PDX v1.3 format — plain JSON, always readable
  • Eight composable element types, not just photos
  • A built-in non-destructive photo editor with 5-level backup
  • Full-text search, statistics, GPS tours, memories
  • Multi-user: shared space + private personal spaces
  • Accessible from browser, tablet, and Android APK
  • Optional AI writing help — opt-in, text-only, one button

My Photo Diary is not

  • A photo backup or sync tool
  • A timeline or algorithmic feed
  • Using face recognition or automatic image tagging
  • Sending your photos or GPS data anywhere
  • Locking your memories into a proprietary format
Pro

DiaryMemories —
Today, years ago.

Every morning your NAS checks which photos were taken on this exact day in previous years. A push notification arrives on your phone. You tap — and your memories appear.

Grouped by year in warm Polaroid style. Up to 5 random photos per year — different every time. Location shown below each photo via OpenStreetMap.

  • Daily push at 07:30 via ntfy (self-hosted, no Google)
  • Polaroid cards grouped by "X years ago"
  • Reverse geocoding — city shown under each photo
  • Android WebView app — no Play Store, no account
  • 100% self-hosted, no external services
📱 07:30 — Push notification
Heute vor 14 Jahren — 2 Erinnerungen 📷
1. April 2012 · Winterbach
DiaryMemories — Vor 14 Jahren
Optional · Opt-in

Write-Companion —
for the blank page.

Not everyone finds it easy to turn a handful of photos into a written memory. Some readers have writing blocks, dyslexia, or simply stare at an empty text block without knowing where to start. Refusing modern AI out of stubbornness would leave those readers behind.

The Write-Companion is a single button inside the text editor. You type a rough draft — it offers three polished variations that keep your voice, your facts, your tone. Grammar, flow, rhythm. Nothing more.

  • Powered by Anthropic Claude Haiku — small, fast, private
  • Only the text you wrote is sent — never photos, metadata or GPS
  • Only triggered when you press the button — no background calls
  • Only active when you set your own API key — fully opt-in
  • System prompt forbids inventing details, places, names or feelings
Privacy boundary: Photos and GPS data stay on your NAS. The companion is a text-only assistant, not a platform feature. Delete your API key and the whole module disappears.
Your draft
Wir waren dann mal am Strand und haben eis gegessen das Wetter war super.
3 suggestions
Am Strand gab es Eis — und das Wetter spielte perfekt mit.
Wir waren am Strand, haben Eis gegessen, das Wetter war herrlich.
Strand, Eis, Sonne — einer dieser Tage, die sich von selbst erzählen.

Where we are

Roadmap

Active development. Here's what's done and what's coming.

Web viewer + editor

Justified grid, lightbox, EXIF, GPS, drag & drop, text blocks, separators, audio, documents.

Multi-user auth

Own user database with Argon2 passwords and restart-robust SQLite sessions. Roles: admin, editor, viewer, demo. Per-user personal spaces. Login rate-limiting.

PDX Spec v1.3

8 element types: photo, video, text, separator, tour, document, audio, map. Open, stable, human-readable.

Docker deployment

Single container, volume-mounts for photos and cache. Runs on Synology, TrueNAS, unRAID, QNAP, Raspberry Pi, NUC — anywhere Docker runs.

Mobile touch gestures

Swipe navigation, pinch-to-zoom in view mode. Optimized for tablet.

One-click installers

Portainer template, unRAID Community App, Synology SPK, QNAP QPKG — no terminal required, pick your platform.

MPD Search

Full-text search with umlaut normalization, prefix matching, and keyword highlighting.

MPD Stats + Geo Pro

EXIF statistics, device timeline, geo heatmap with Maptiler reverse geocoding.

DiaryMemories Pro

"Today, years ago" — daily push notifications with your memories in Polaroid style.

MPD Trails Pro

Standalone GPX gallery with Leaflet map and sport-type filtering. Separate from album-embedded tours.

Write-Companion Pro

Optional Anthropic Claude Haiku integration for stylistic text variations. Text-only, opt-in, privacy-preserving.

Your device

Not just a browser.
An app.

📱 Android

Scan the QR code or tap the button to download the APK directly from your NAS. No Play Store, no account.

QR Code
⬇ Download APK

🍎 iOS

Open MPD in Safari, then add it to your home screen — it works like a native app.

1. Open in Safari
2. Tap Share (↑)
3. Add to Home Screen

On the road

LAN out of the box —
remote access without the cloud.

MPD works in your home network without any extra setup. For access from the road there are three well-trodden paths — all privacy-preserving, none of them put your photos into someone else's cloud.

Tailscale Recommended

Five-minute setup on NAS and phone. No port forwarding, no domain, no Let’s Encrypt. Your phone behaves as if it were at home — MPD opens over its internal address. Free for up to 100 devices.

Cloudflare Tunnel

Outbound-only connection from your NAS to Cloudflare — no inbound port forwarding needed. Your domain, your subdomain, free tier is generous. HTTPS handled automatically.

Classic reverse proxy

Domain + DynDNS + Let’s Encrypt. Synology DSM and QNAP have this in their UI — one dialog each. Traefik, Caddy or Nginx Proxy Manager on other hosts. The traditional way, still solid.

Whichever path you take: photos, GPS data and metadata never leave your NAS. Tailscale and Cloudflare Tunnel only forward the HTTP traffic of your browser — they don’t see file contents.

Under the hood

Serious engineering,
not a weekend hack.

Everything here is built on mature, open-source foundations — no proprietary SaaS layers, no telemetry, no phone-home. Run it entirely offline if you want.

FastAPI + Uvicorn

Python 3.11, async endpoints, OpenAPI docs built in, sub-second cold start on a modern NAS.

SQLite sessions (WAL)

Session tokens hashed with SHA-256 and stored in SQLite — survive container restart. 30-day max-age.

Argon2 passwords

Modern memory-hard password hashing via argon2-cffi. Login rate-limited (5 fails / 5 min / IP → 60 s lockout).

Security headers

X-Content-Type-Options, X-Frame-Options, Referrer-Policy, Permissions-Policy — all hardened by default.

WebP + BlurHash

On-demand 100/400/1024 px WebP thumbnails, cached off-tree. BlurHash 4×3 placeholders avoid content jumps.

Automatic backups

Every album save writes a timestamped album.json backup (10 retained). Every photo edit keeps 5 rolling .bak files.

Lazy migration

Legacy albums upgrade themselves on first load — capped at 200 photos per request to keep response times snappy.

Two-tier stats cache

Per-album .mpd_stats.json + per-space global. Reverse-geocoded coordinates live in a permanent cache that survives invalidations.

Docker, single container

One image, volume-mounts for photos & cache. Installable on any Docker host — Synology Container Manager, QNAP Container Station, unRAID, Portainer, docker-compose. No DSM API coupling.

Chart.js + Leaflet

Interactive statistics dashboards and GPS maps built on the de-facto open-source standards, not reinvented wheels.

FFmpeg fallback

Video thumbnails are extracted with Pillow first, falling back to FFmpeg for first-frame capture when needed.

Keyboard-first UX

Ctrl+K (search), Ctrl+Z / Ctrl+Shift+Z (undo/redo), ← → Esc Z I D in the lightbox. Built for power users.

— where your memories stay yours.

Stay informed

Be first
to know.

Leave your email and we'll notify you when My Photo Diary launches with one-click installers for your platform.

No spam. One email at launch. That's it.