A self-hosted, browser-based photo slideshow — a dfolio-style display that runs as a tiny website on your computer. Any device with a web browser (an old iPad, a Kindle Fire, a spare phone, a smart-TV browser) opens a URL and shows a fullscreen slideshow with a clock, live weather, and each photo's date and location pulled from its metadata.
Because it's just a web page, every screen loads the same server but can use its own display tab — its own look and its own photo order — so your screens never all show the same picture at once. Point it at a local folder (like your synced Dropbox photos) and it turns any cheap tablet into a smart photo frame.
- Fullscreen slideshow that auto-fits whatever screen opens it — no app to install on the tablet, just a browser.
- Multiple independent displays. Define as many "tabs" as you have screens. Each has its own photo folder, weather location, overlays, transition, and shuffle order. Give each a different order offset so two screens side by side show different photos.
- Rich overlays: a clock (12h/24h), a live weather forecast, and each photo's date + place name read from its EXIF metadata (GPS is reverse-geocoded and cached).
- Nice transitions: crossfade, Ken Burns pan/zoom, slide, or instant cut — with per-tab duration and contain/cover fit.
- Points at any local folder (e.g. your Dropbox photos). Drop new photos in and they appear automatically on the next re-scan.
- Password-protected admin, open display URLs. Only the settings page needs a login; the tablets just load their display URL. Edits in admin push to the displays automatically — no manual refresh.
- Node.js 18+ (download the LTS).
- A folder of photos on the computer that runs this — typically a synced Dropbox (or iCloud/local) folder.
- A web browser on whatever screen you want to display on.
- Weather uses the free Open-Meteo service — no account, no API key. Just set a location in the admin page (or leave it off).
- Photo location labels use a free reverse-geocoding lookup and only fire once per GPS coordinate, then cache. Photos without GPS simply show the date (or nothing).
- A dedicated tablet (an old iPad or an Amazon Fire tablet) plus a kiosk browser makes a great always-on frame — see INSTALL.md.
Everything runs on your own machine and network. The only outbound calls are the free weather lookup and the one-time place-name lookup per location. Your photos are only served to devices on your own Wi-Fi.
Mac: download this project (green Code button → Download ZIP), unzip it, and double-click start-mac.command (first time: right-click → Open → Open). It installs dependencies on first run and starts the server.
Windows: unzip, double-click install-windows.bat once, then start-windows.bat.
Any OS (Node installed):
npm install
npm startThen open http://localhost:5084/admin on the same computer. First time, you'll create an admin login, then set your photo folder and (optionally) a weather location. Open a display at http://localhost:5084/display/default — or on a tablet, swap localhost for the computer's local IP.
Full step-by-step for Windows/macOS/Linux, tablets, and keeping screens awake is in INSTALL.md.
You configure everything from the admin page — no file editing required. Under the hood, settings are saved to a local config.json (your photo folder path and weather location) and your login to .auth.json (username + a hashed password). Both are created automatically and are kept out of version control by .gitignore. A config.example.json is included as a reference.
To change the port (default 5084):
PORT=9000 npm startThis app is meant to run on your own trusted network:
- The admin page is password-protected; the password is stored hashed (scrypt with a per-user salt) in
.auth.json, never in plain text. The display URLs are intentionally open so tablets don't need a login — don't expose the server directly to the public internet. Use a VPN or reverse proxy for remote access. - Photos are served only to devices that can reach the server on your LAN.
- The included
.gitignorekeeps.auth.json,config.json, and the geocode cache out of the repo, so publishing or sharing your copy never leaks your login, folder path, or location. - Forgot the admin password? Delete
.auth.jsonand restart — the admin page will ask you to create a new login. Your tabs and settings are untouched.
Runs anywhere Node.js 18+ runs — macOS, Windows, and Linux. The double-click .command/.bat launchers are convenience wrappers; npm install && npm start works everywhere. Display devices just need a browser.
Released under the MIT License — free to use, modify, and share. See LICENSE.
I build and share these tools for free in my spare time. If Photo Display turned a spare tablet into a frame you enjoy, you can buy me a coffee — genuinely appreciated, and it helps me keep making things like this. Enjoy! 🙌
