Files
immich-folio/.env.local.example
Ralksta ad8b09700b release: v0.19.0
Release v0.19.0. See the `## [0.19.0] — 2026-09-29` section of
[CHANGELOG.md](https://github.com/ralksta/immich-folio/blob/dev/CHANGELOG.md)
for the full list.

Highlights: client proofing links (#683), custom content pages (#738),
asset picker search (#740), concurrent-edit detection (#742), env-locked
settings (#739), an accessibility baseline (#741), three security fixes
with advisories (#737, #755, #759), and a pre-release quality pass
(#780–#797).

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: ralksta <ralksta@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Co-authored-by: Ralf <rohlenbo79@gmail.com>
Co-authored-by: Paul Thies <110185070+ImScheinox@users.noreply.github.com>
Co-authored-by: lancetm714 <108419425+lancetm714@users.noreply.github.com>
Co-authored-by: Lance Martin <lancetaylor95@gmail.com>
2026-09-29 22:50:30 +02:00

113 lines
6.1 KiB
Plaintext

# ── Immich Server Connection (required) ──────────────────────────
# Parsed once at startup by lib/env.ts. An unparsable URL is reported and
# treated as unset, which lands you on the setup screen rather than a crash.
# Base URL of your Immich instance (must be a valid URL)
IMMICH_API_URL=http://your-immich-server:2283
# Immich API key (from Admin → API Keys)
IMMICH_API_KEY=your-api-key-here
# ── Optional Settings ────────────────────────────────────────────
# All have sensible defaults; an unparsable value falls back to the default.
# Site title shown in the header (string, default: "Gallery")
SITE_TITLE=My Photography
# Subtitle displayed below the title (string, default: "")
SITE_SUBTITLE=A visual journal
# Cache TTL in seconds (integer >= 0, default: 300 = 5 minutes)
CACHE_TTL=300
# How long (in seconds) an expired cache entry may still be served while the
# Immich server is unreachable. Keeps the public gallery online across an
# Immich restart instead of showing an error page. Set to 0 to disable.
# Default: 86400 (24 hours)
STALE_MAX_AGE=86400
# Cache-buster for image and video URLs (any string, default: empty = off).
# Images are served with a one-year immutable cache, so browsers never
# revalidate them. If you regenerate thumbnails in Immich, or rotate/edit a
# photo, the asset ID stays the same and visitors keep seeing the old version.
# Bump this value (e.g. 1 → 2) to change every image URL at once and force a
# refetch. Leave it unset in normal operation.
# IMAGE_CACHE_VERSION=1
# Client proofing links: POST a JSON notification here when a client submits
# a selection (Discord, Slack, Gotify, n8n, ...). See
# docs/gallery-config.md#client-proofing-links.
# PROOFING_WEBHOOK_URL=https://discord.com/api/webhooks/...
# CDN mode: serve photos and videos through a pull CDN (default: off).
# Point a CDN (Cloudflare, Bunny, CloudFront, ...) at this server as its origin,
# cache /api/image/* and /api/video/* including the query string, and put its
# URL here. Pages, EXIF, the map and downloads keep coming from this server.
# Ignored while a site password is set, so the password keeps covering photos.
# Also set TRUSTED_PROXY_HOPS to count the CDN, see docs/deployment.md#cdn-mode.
# CDN_URL=https://cdn.example.com
# How long to wait for a response from Immich, in milliseconds
# (integer, minimum 1000, default: 15000 = 15 seconds).
# Bounds the wait for a *response* only — downloading a large photo or a long
# video is not capped by this. Raise it if metadata search on very large albums
# times out; lower it to fail faster when Immich is unreachable.
# IMMICH_TIMEOUT_MS=15000
# Rate limit for image proxy (integer >= 1, requests per minute per IP, default: 120)
# RATE_LIMIT_RPM=120
# Number of reverse proxies in front of the app (nginx/Traefik/Caddy = 1,
# Cloudflare in front of nginx = 2). Required for correct rate limiting behind
# a proxy — without it the client IP is read from a spoofable header.
# The app must be reachable ONLY through the proxy (bind to 127.0.0.1).
# TRUSTED_PROXY_HOPS=1
# Secret for signing auth cookies and encrypting asset tokens. REQUIRED in
# production: without it the server refuses to start. In development a random
# one is generated per process, so every restart invalidates all existing image
# URLs and logins — set it there too unless you enjoy that.
# Generate one with: openssl rand -hex 32
AUTH_SECRET=change-me-to-a-long-random-string
# Webhook secret for cache invalidation (optional, string).
# Set this to a long random string and configure Immich to send webhooks to
# POST /api/webhook with an x-immich-signature header (HMAC-SHA256 of the body).
# If not set, the webhook endpoint returns 501 and is effectively disabled.
# WEBHOOK_SECRET=your-long-random-webhook-secret
# ── Admin Panel ──────────────────────────────────────────────────
# Set a password to enable the visual admin panel at /admin.
# Leave unset or empty to disable the admin UI entirely.
# ADMIN_PASSWORD=your-secure-admin-password
# ── Development over the LAN (next dev only) ──────────────────────
# `next dev` refuses its own assets to any hostname but localhost, so the
# page never hydrates when opened as http://192.168.1.20:3000. List the
# hostnames or IPs you open it from, comma-separated. No effect in production.
# ALLOWED_DEV_ORIGINS=192.168.1.20,myhost.local
# ── Site URL ─────────────────────────────────────────────────────
# Used for sitemap.xml, the feed and structured data when `url:` is not
# set in settings.yaml. The settings file takes precedence, so the admin
# panel's field always does what it appears to do.
# SITE_URL=https://folio.example
# ── Update notice ────────────────────────────────────────────────
# The admin dashboard compares the running version against the latest
# GitHub release and shows the result in the status list. One request a
# day, cached, and it fails quietly when there is no network.
# Set to false to switch it off — the dashboard then only names the
# version it is running.
# UPDATE_CHECK=false
# ── Site password (optional) ─────────────────────────────────────
# Puts the WHOLE public site behind one password. Overrides
# `sitePassword` in settings.yaml, so it can be rotated without
# touching the file. /admin keeps its own password.
# SITE_PASSWORD=your-site-password
# ── Album configuration ──────────────────────────────────────────
# Albums, subpages, hero image, and passwords are defined in content/gallery.yaml
# See content/gallery.yaml.example for the full reference.