πΈ A digital disposable camera for events. Guests scan a QR code β no app to install β snap a limited roll, and the whole gallery reappears when the event ends. Free for small events, open-source, and self-hostable.
π Hosted version: snapdini.com Β· π How to use it: docs/GUIDE.md
No build step. Pulls the prebuilt images and runs them with Postgres + nginx.
mkdir snapdini && cd snapdini
curl -O https://raw.githubusercontent.com/paytah232/snapdini/main/app/docker-compose.yml
mkdir nginx && curl -o nginx/default.conf https://raw.githubusercontent.com/paytah232/snapdini/main/app/nginx/default.conf
curl -o .env https://raw.githubusercontent.com/paytah232/snapdini/main/app/.env.example
# the upgrade helper β it checks the traps that `pull && up -d` alone will not
curl -o upgrade.sh https://raw.githubusercontent.com/paytah232/snapdini/main/app/scripts/upgrade.sh && chmod +x upgrade.sh
# edit .env β at minimum set BASE_URL (your public https URL) + POSTGRES_PASSWORD
docker compose pull
docker compose up -dSnapdini is now on HTTP_PORT (default 8080) β put your own TLS / reverse proxy in front.
- Fully free, no limits, when self-hosted. Billing, email, the admin panel and analytics stay
off until you add their keys (
STRIPE_*,MAILGUN_*,ADMIN_*,GTAG_ID/MSUET_IDin.envβ all optional; no tag id β zero third-party tracking)..env.exampledocuments every setting. - Upgrades: run
./upgrade.sh [version], or see UPGRADING.md. DB migrations apply on boot, butpull && up -dalone is not always enough β a release can add settings that must go in both.envanddocker-compose.yml(compose passes env explicitly, so a variable missing from it is silently ignored), and it never updates yourdocker-compose.ymlornginx/default.conf.
Guests can upload a selfie and pull out just the photos they appear in. It is off in the hosted service and shipped off by default, because face templates are biometric data and the compliance picture varies by jurisdiction β but if you run your own instance for your own events, it is a genuinely good feature and it is fully built.
Point MACHINE_LEARNING_URL at an Immich machine-learning
container. It talks over plain HTTP with image bytes in the request, so the ML container needs no
access to your photo storage β no shared volume, no bind mount. It can live on the same box or a
different one.
machine-learning: # add to your docker-compose.yml
image: ghcr.io/immich-app/immich-machine-learning:release
volumes: [ model-cache:/cache ] # models only β never your photos
restart: unless-stoppedMACHINE_LEARNING_URL=http://machine-learning:3003With it unset the feature does not exist: no host toggle, no guest control, no privacy-policy section, and the endpoints return 503. With it set, it is still off per event until a host turns it on, and then off per guest until that guest ticks an unticked consent box. A guest's selfie is deleted in the same request that creates their template; every other face in a photo is compared and discarded in memory. "Stop and delete" removes the template and every match it produced, and keeps working even if you later switch the ML container off.
Think carefully before turning this on for anyone other than yourself. Face templates are biometric data in most jurisdictions. Two things in particular need an answer you are comfortable with: you necessarily process the faces of guests who never consented in order to find the one who did, and events often include minors. Take your own advice on it β this project cannot give you legal advice for your country.
- Pin a version with
IMAGE_TAGin.env(e.g.IMAGE_TAG=1.0.2; defaultlatest). Point at your own registry withIMAGE_PREFIX.
Express + TypeScript + Postgres (Drizzle ORM) for the API, SvelteKit for the web app, behind nginx β all in Docker. Building from source, developing, or publishing your own images? See the development & maintainer guide.
Snapdini is free and self-hostable. If it's useful to you and you'd like to support the work, you can buy me a coffee β β much appreciated, never required.
Released under the GNU AGPL-3.0. You're free to self-host, modify and redistribute it; if you run a modified version as a network service, you must make your source available under the same licence. Β© 2026 paytah232.




