Die Fotos bleiben bei Ihnen
EventSlide läuft auf einem einzigen Rechner: einem Laptop, einem Mini-PC, einem Raspberry Pi unter dem Beamer. Nichts verlässt ihn.
EventSlide ist freie Software: Sie können es auf Ihrem eigenen Rechner betreiben, und Ihre Fotos verlassen ihn nie. Diese Seite richtet sich an alle, die sich mit einem Server auskennen. Wenn das nicht auf Sie zutrifft: Der gehostete Zugang existiert, und Sie müssen nichts installieren.
Befehle ansehen Quellcode auf GitHub
Die meisten Foto-Tools für Feiern verlangen eines von beidem: dass Ihre Gäste eine App installieren oder dass Sie Hunderte Familienfotos einer Firma anvertrauen, die Sie nicht kennen. EventSlide verlangt keines von beidem.
EventSlide läuft auf einem einzigen Rechner: einem Laptop, einem Mini-PC, einem Raspberry Pi unter dem Beamer. Nichts verlässt ihn.
Sie bestimmen, wie lange das Album aufbewahrt wird, Sie sichern es, wann Sie wollen, und löschen es, wann Sie wollen. Nichts davon hängt von mir ab.
Der Code ist öffentlich: Sie können prüfen, was die Software tut, sie ändern und weitergeben. Das veröffentlichte Image wird bei jeder Version signiert und geprüft.
Auf einem Rechner im Saal werden Uploads in eine Warteschlange gestellt, und die Fotowand läuft weiter, wenn das Netz ausfällt. Einen Abend von acht Stunden kann sie allein durchhalten.
Einen Laptop, einen Mini-PC oder einen Raspberry Pi. Das Image gibt es für linux/amd64 und linux/arm64.
Mit docker compose. Bei Ihnen wird nichts kompiliert: Das veröffentlichte Image wird einfach heruntergeladen.
Es ist die Adresse, die der QR-Code enthält (PUBLIC_URL). Niemals localhost: Ein QR-Code, der auf localhost zeigt, ist der häufigste Grund, warum eine Installation noch am Abend der Feier scheitert. Scannen Sie Ihren eigenen QR-Code mit dem Handy, bevor die Gäste eintreffen.
EventSlide spricht einfaches http und verschlüsselt nicht selbst. Davor muss etwas stehen: Caddy, nginx oder Traefik, was Sie ohnehin nutzen. Mit Caddy ist es eine einzige Konfigurationszeile.
Die Befehle unten nutzen es, um zwei zufällige geheime Schlüssel zu erzeugen. Mit Docker verlangt sonst nichts danach.
Dieser Fall ist heute nicht abgedeckt. Ein Rechner in einem lokalen Netz, ohne DNS und ohne Zertifikat, kann kein https ausliefern, dem das Handy eines Gasts vertraut, und EventSlide läuft im Produktivbetrieb nicht über einfaches http. Die heutige Antwort: ein echter Domainname, der auf den Rechner zeigt (das funktioniert über das WLAN des Orts, solange die Handys einen Weg dorthin haben), oder ein Proxy mit --network host und einem Zertifikat, das Sie schon besitzen. Für eine komplett offline laufende Fotowand melden Sie sich im Issue-Tracker des Repositorys.
Das Image ist unter ghcr.io/irony42/eventslide veröffentlicht, für linux/amd64 und linux/arm64. Es wird bei jeder Version signiert und geprüft. Die Befehle unten stammen aus der README des Repositorys (Version 3.6.0), einschließlich ihrer englischen Kommentare. Im Zweifel gilt das Repository.
git clone https://github.com/Irony42/EventSlide.git
cd EventSlide
# Two secrets, and the address your guests' phones will reach.
node -e "console.log('SESSION_SECRET='+require('crypto').randomBytes(48).toString('base64url'))" >> .env
node -e "console.log('GUEST_TOKEN_SECRET='+require('crypto').randomBytes(48).toString('base64url'))" >> .env
echo "PUBLIC_URL=https://photos.example.com" >> .env
# Your own account, created on the first boot, with a generated password.
echo "BOOTSTRAP_OWNER_EMAIL=you@example.com" >> .env
node -e "console.log('BOOTSTRAP_OWNER_PASSWORD='+require('crypto').randomBytes(18).toString('base64url'))" >> .env
docker compose up # the first time, and read what it says
docker compose up -d # once it has booted cleanlyDie node-Befehle erzeugen zwei zufällige geheime Schlüssel (SESSION_SECRET, GUEST_TOKEN_SECRET), danach tragen Sie die Adresse ein, die die Handys erreichen werden (PUBLIC_URL). Die beiden BOOTSTRAP_OWNER-Zeilen legen Ihr Konto beim ersten Start an: Es gibt weder einen Standard-Administrator noch eine Einrichtungsseite. Auch das Passwort wird erzeugt, denn das Passwort aus einer Anleitung ist das, was alle zuerst probieren würden.
Das erste up lädt das veröffentlichte Image in der Version herunter, die Sie ausgecheckt haben. Bei einer fehlenden oder fehlerhaften Variablen zeigt der Server alle Probleme auf einmal an und beendet sich. Im Hintergrund startet der Container von selbst neu, und die Liste scrollt aus dem Bild. Läuft alles sauber an, ist -d der richtige Weg, es laufen zu lassen.
Das Login-Cookie ist als Secure markiert: Ein Browser sendet es über einfaches http nie zurück. EventSlide weigert sich daher, ohne https zu starten, statt Ihnen ein Anmeldeformular zu geben, das Sie nie anmeldet. compose.yaml bindet den Port an 127.0.0.1, damit der Proxy ihn erreicht, und setzt dazu passend TRUST_PROXY_HOPS=1. Ist Ihr Proxy ein Container im selben Docker-Netz, entfernen Sie den Block ports: und lassen ihn auf eventslide:4300 zeigen.
photos.example.com {
reverse_proxy 127.0.0.1:4300
}In einer Datei Caddyfile neben der Compose-Datei. Caddy und Traefik reichen von selbst weiter, was der Server braucht. Fügen Sie bei nginx proxy_set_header X-Forwarded-Proto $scheme; und proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; hinzu. Ohne die erste Zeile wird das Login-Cookie nie gesendet; ohne die zweite teilen sich alle Ihre Gäste dieselbe Adresse für die Ratenbegrenzung.
Sobald der Proxy steht, öffnen Sie PUBLIC_URL/login mit der E-Mail-Adresse und dem erzeugten Passwort (grep BOOTSTRAP_OWNER .env zeigt es an). Bei der ersten Anmeldung werden Sie gebeten, ein eigenes zu wählen: mindestens 12 Zeichen und kein gängiges Passwort. Löschen Sie danach beide BOOTSTRAP_OWNER-Zeilen oder behalten Sie beide: Eine allein wird abgelehnt.
Aus dem ausgecheckten Repository, statt das Image herunterzuladen:
docker compose -f compose.yaml -f compose.build.yaml up --buildSie brauchen Node 24 oder neuer und dann die npm-Befehle aus dem Abschnitt „Install“ der README. Hinter Ihrem https-Proxy ist TRUST_PROXY_HOPS=1 unerlässlich: Ohne es akzeptiert das Anmeldeformular Ihr Passwort, und Sie bleiben trotzdem abgemeldet.
Die Datei docs/IMAGE-SOURCES.md sagt, was das Image enthält, wo der Quellcode jedes Teils liegt und wie man die Signatur prüft. Auf Ihrem Rechner wird nichts kompiliert: Was Sie ausführen, ist das veröffentlichte Image, das signierte.
Machen Sie eine vor der Feier und eine am Morgen danach. Der Server läuft während der Sicherung weiter. Der Schritt, den alle auslassen, ist der wichtigste: das Archiv vom Rechner wegbringen. Die Befehle unten stammen aus docs/OPERATING.md des Repositorys (Version 3.6.0).
# 1. Take it. It prints the name, e.g. /data/backups/eventslide-2026-09-12T08-00-00Z
docker compose exec eventslide node dist/ops/scripts/backup.js
# 2. Take it off the volume, check the copy, and only then delete it there. Until it is
# off the machine it is on the same disk as the photographs, and the command says so.
A=eventslide-2026-09-12T08-00-00Z
docker compose cp "eventslide:/data/backups/$A" . &&
docker compose run --rm -v "$PWD/$A:/restore:ro" eventslide \
node dist/ops/scripts/backup.js --verify /restore &&
docker compose exec eventslide rm -r "/data/backups/$A"Das Archiv ist ein Ordner: ein konsistenter Schnappschuss der Datenbank, alle Fotos und ein Verzeichnis der Dateien mit ihren Prüfsummen. Der Befehl liest alles, was er gerade geschrieben hat, noch einmal ein, bevor er „OK“ sagt.
Eine Kopie auf derselben Festplatte wie das Album übersteht den Ausfall dieser Festplatte nicht. Von einer Sicherung spricht man, sobald eine Kopie auf einem anderen Rechner liegt oder auf einer Platte, die Sie abziehen können.
Stoppen Sie den Server immer vor dem Wiederherstellen: Der Befehl restore ersetzt die Datenbankdatei, und bei laufendem Server ergibt das eine Fotowand, die weder den alten noch den neuen Abend ausliefert. Er prüft das gesamte Archiv, bevor er etwas anrührt, und weigert sich, eine Installation ohne --force zu überschreiben.
Die geheimen Schlüssel sind nicht im Archiv. Wer Fotos mit neuen Schlüsseln wiederherstellt, meldet alle Gastgeber ab.
Fotobücher (PDF) und Videoschnitte sind nicht in der Sicherung: Sie werden auf Anfrage von der Seite der Veranstaltung aus neu erstellt. Die Einzelheiten und was die Prüfungen erfassen oder nicht, stehen in docs/SECURITY.md, Abschnitt 11. Die schrittweise Wiederherstellung steht in docs/OPERATING.md, Abschnitt „Backups“.
Betreiben Sie eine veröffentlichte Version, nicht die Spitze des Hauptzweigs (auf der Sie nach git clone landen). Machen Sie vorher eine Sicherung: Die Migrationen, die eine neue Version beim Start anwendet, gehen nur vorwärts, und die Sicherung ist der einzige Rückweg.
git fetch --tags && git checkout vX.Y.Z
docker compose pull
docker compose up -dErsetzen Sie vX.Y.Z durch die gewünschte Version. Was eine Hauptversion kaputt machen kann, wie ein Bruch angekündigt wird und wie man zurückgeht, steht in docs/UPGRADING.md.
Hier die Zusammenfassung in einfachen Worten. Es ist keine Rechtsberatung: Maßgeblich ist der Lizenztext.
Wenn Sie EventSlide verändern und andere Personen Ihre Version über das Netz nutzen, müssen Sie ihnen den Quellcode Ihrer Version anbieten, unter derselben Lizenz. Eine unveränderte Kopie zu betreiben, bringt nichts Zusätzliches mit sich.
Jeder Bildschirm für Gäste und Gastgeber trägt einen Link „Quellcode (AGPL-3.0)“. Sie können die Adresse ändern, auf die er zeigt (SOURCE_CODE_URL), etwa bei einer veränderten Version. Keine Einstellung blendet ihn aus.
Version 3.0.0 ist die erste unter AGPL-3.0, „nur“ diese Fassung: ohne die Klausel „oder jede spätere Version“. Version 2.1.0 ist die letzte unter GPL-3.0, und alles, was davor veröffentlicht wurde, bleibt für immer unter GPL-3.0.
Was die Lizenz von jemandem verlangt, der die Software betreibt, verändert oder weiterentwickelt: docs/LICENSING-FAQ.md.
Alles liegt auf github.com/Irony42/EventSlide. Hier können Sie anfangen. Die Dokumente sind auf Englisch.
Der Code, die veröffentlichten Versionen und der Issue-Tracker.
Was EventSlide tut, Installation, Sicherungen, Updates.
Das Bedrohungsmodell, zugeschnitten auf die Menschen, die wirklich im Saal sind.
Was die Lizenz von jemandem verlangt, der die Software betreibt, verändert oder weiterentwickelt.
Was eine Hauptversion kaputt machen kann und wie man zurückgeht.
Woraus das Image besteht und wie man seine Signatur prüft.
Sie möchten helfen? Sehen Sie sich CONTRIBUTING.md an oder lesen Sie wie Sie das Projekt unterstützen können.
Fragen Sie einen Zugang zur gehosteten Instanz auf app.eventslide.fr an: kostenlos, nur auf Einladung. Sie müssen nichts installieren.