selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

PicImpact logo

Self-host PicImpact

v3.3.8

Self-deployed photo portfolio with maps and EXIF

ReleaseOpen SourceMIT
docker run -d --name picimpact -p 3000:3000 -e DATABASE_URL="postgresql://[用户名]:[密码]@[地址和端口]/[数据库]" -e DIRECT_URL="postgresql://[用户名]:[密码]@[地址和端口]/[数据库]" -e BETTER_AUTH_SECRET="自己运行npx auth secret或一串随机的字符串都行" besscroft/picimpact:latest
Updatedlast month
LanguageTypescript
Setup difficultyModerate
MobileResponsive
ThemeDark mode
Stars
1 315
Port
3000 (Web app (Next.js server))
Requires
PostgreSQL
Docker
besscroft/picimpact

What is PicImpact?

PicImpact is an open-source photography portfolio site photographers run on their own hardware, built with Next.js and Hono.js. Photos are shown in a masonry gallery with Apple Live Photo support, and a WebGL viewer gives smooth zoom and pan over large files with tiling and LOD loading. Images expose EXIF data, can be placed on a map from their coordinates, organised by tags, and served through an RSS feed. Uploads run in batches and automatically get a 0.3x compressed preview, while an admin area covers statistics, image and album maintenance, settings and storage. Images live in S3-compatible object storage, Cloudflare R2 or an AList-style Open List backend, and PostgreSQL is used for app data with Prisma migrations running automatically. Deploy with the besscroft/picimpact Docker image, on Vercel, on Node.js, or on Kubernetes; passkey login needs an HTTPS environment.

Should you self-host PicImpact?

PicImpact scores 57/100 on selfhost.directory (how scoring works) and ranks #14 of 41 in Photo Management. It has 1 315 GitHub stars.

It shipped 9 stable releases in the past year. The latest, v3.3.8, came out on 23 September 2026.

Setup is moderate: expect some configuration beyond a single command. An official Docker image is available. It is MIT-licensed and written mostly in Typescript.

Its closest alternative on selfhost.directory is Ente (81/100, 29 693 stars). It scores higher overall, so compare the two before you pick. See PicImpact vs Ente side by side.

Features

  • Admin Dashboard
  • Automatic database migration
  • Batch upload with compressed previews
  • EXIF metadata display
  • Live Photos Support
  • Map view of geotagged photos
  • Masonry photo gallery
  • Passkey / passwordless login
  • RSS Feed
  • S3-compatible storage backends
  • Tag Filtering
  • Two-factor authentication
  • WebGL image viewer

PicImpact README

How to install PicImpact

Install PicImpact with Docker

PostgreSQL
Environment variables
DATABASE_URL, DIRECT_URL, BETTER_AUTH_SECRET
docker run -d --name picimpact \
  -p 3000:3000 \
  -e DATABASE_URL="postgresql://[用户名]:[密码]@[地址和端口]/[数据库]" \
  -e DIRECT_URL="postgresql://[用户名]:[密码]@[地址和端口]/[数据库]" \
  -e BETTER_AUTH_SECRET="自己运行npx auth secret或一串随机的字符串都行" \
  besscroft/picimpact:latest

Containerd and k8s work too. With Docker Compose, remove the double quotes around env values if the database cannot be reached.

How to configure PicImpact

  • BETTER_AUTH_PASSKEY_RP_IDPasskey relying party identifier (WebAuthn), usually your domain, e.g. example.com

    Passkey relying party identifier (WebAuthn), usually your domain, e.g. example.com

  • BETTER_AUTH_PASSKEY_RP_NAMEPasskey relying party name shown to users, e.g. PicImpact

    Passkey relying party name shown to users, e.g. PicImpact

  • BETTER_AUTH_SECRETBETTER_AUTH_SECRET npx auth secret

    BETTER_AUTH_SECRET npx auth secret

  • BETTER_AUTH_URLhttp://localhost:3000Base URL of your app

    Base URL of your app

  • DATABASE_URLpostgres://postgres:postgres@localhost:5432/postgres数据库 url

    数据库 url

  • DIRECT_URLpostgres://postgres:postgres@localhost:5432/postgres用于 prisma migrate 的数据库 url,如果使用非 serverless 数据库,与 DATABASE_URL 保持一致即可。

    用于 prisma migrate 的数据库 url,如果使用非 serverless 数据库,与 DATABASE_URL 保持一致即可。

  • NODEJS_HELPERS0禁用 Vercel node.js 帮助程序

    禁用 Vercel node.js 帮助程序

  • PREPROCESS_TICKER_ENABLED── 多 replica 部署(可选,详见 docs/multi-replica.md)── 后台预处理 ticker 开关。不设置时默认仅在生产环境(NODE_ENV=production)开启。 多 replica 部署建议所有实例设为 false,改用单个外部 cron 调用 POST /api/v1/preprocess-tasks/tick 驱动队列,避免每个实例各跑一个 ticker。

    ── 多 replica 部署(可选,详见 docs/multi-replica.md)── 后台预处理 ticker 开关。不设置时默认仅在生产环境(NODE_ENV=production)开启。 多 replica 部署建议所有实例设为 false,改用单个外部 cron 调用 POST /api/v1/preprocess-tasks/tick 驱动队列,避免每个实例各跑一个 ticker。

  • PREPROCESS_TICK_SECRET给 /api/v1/preprocess-tasks/tick 加共享密钥(可选)。设置后,调用方需在 x-preprocess-tick-secret 请求头携带该值,否则返回 401;不设置则该端点开放。

    给 /api/v1/preprocess-tasks/tick 加共享密钥(可选)。设置后,调用方需在 x-preprocess-tick-secret 请求头携带该值,否则返回 401;不设置则该端点开放。

PicImpact releases & version history

More in Photo Galleries

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…