Skip to content

Repository files navigation

🖼️ Photo Display

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.

Screenshot of a Photo Display slideshow with clock, weather, and photo location overlays

License: MIT Node No API key needed Buy Me a Coffee


✨ What it does

  • 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.

🧩 What you need (required vs. optional)

🔴 Required — the core app needs these

  • 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.

🟢 Optional — nice to have

  • 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.


🚀 Quick start

Mac: download this project (green Code button → Download ZIP), unzip it, and double-click start-mac.command (first time: right-click → OpenOpen). 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 start

Then 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.


⚙️ Configuration

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 start

🔒 Security & privacy notes

This 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 .gitignore keeps .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.json and restart — the admin page will ask you to create a new login. Your tabs and settings are untouched.

🖥️ Platform support

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.


📄 License

Released under the MIT License — free to use, modify, and share. See LICENSE.


☕ Support

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! 🙌

About

Stream a photo slideshow to a website from a photos folder to display your slideshow anywhere that has a web browser

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Sponsor this project

Packages

Contributors

Languages