PhotoBlad

PhotoBlad on Windows

A package for Windows that runs PhotoBlad as part of your account (or as Windows Services), with a system-tray icon. No developer tools, no Docker.

Shared privately for now. The Windows package is built and handed to the people the owner chooses through the private download page on GitHub. The step-by-step guide inside the download, README.md, is the exact one for the version you have; this page explains what the package is and how to run it.

The package holds PhotoBlad’s two programs, the Server (the web page and everything you see) and the Indexer (which reads your folders and keeps the backups), the System Tray app (tray\PhotoBlad.exe), and the photoblad.cmd / photoblad.ps1 commands that install and look after them. Nothing else needs to be installed first: no .NET runtime, no developer tools, no Docker.

By default, PhotoBlad runs as part of your Windows account via Task Scheduler (ONLOGON), so it needs no Administrator prompt and can read your user folders and mapped drives directly. You can also pass --service during install to run PhotoBlad as two native Windows Services (PhotoBladIndexer and PhotoBladServer) that start at boot before anyone signs in. Its web page is at http://localhost:5180 on that PC.

What you need

  • The download for your PC’s processor. Open Settings → System → About:
    • “64-bit operating system, x64-based processor” (Intel or AMD): the file ending windows-x64.zip, for Windows 10 (22H2) or Windows 11.
    • “64-bit operating system, ARM-based processor” (Snapdragon X): the file ending windows-arm64.zip, for Windows 11.
  • About 300 MB for the program, and room for the photos and videos people back up.
  • The PC switched on and awake whenever someone wants to use PhotoBlad.

Install it

Download the .zip and the .sha256 file beside it into your Downloads folder, check its SHA-256 hash in PowerShell, extract it, and run photoblad.cmd install:

Get-FileHash ~\Downloads\photoblad-server-<version>-windows-x64.zip -Algorithm SHA256
Expand-Archive -Path ~\Downloads\photoblad-server-<version>-windows-x64.zip -DestinationPath ~\Downloads -Force
~\Downloads\photoblad-server-<version>-windows-x64\photoblad.cmd install

What install does:

  1. Checks package.txt, every file’s SHA-256 against files.sha256, and Windows Authenticode signatures when present.
  2. Copies PhotoBlad into %LOCALAPPDATA%\PhotoBlad\<version> and points the NTFS junction %LOCALAPPDATA%\PhotoBlad\current at it.
  3. Restricts %LOCALAPPDATA%\PhotoBlad\data with icacls so only your Windows account, SYSTEM, and Administrators can read the database and keys.
  4. Registers PhotoBlad-Indexer, PhotoBlad-Server, and PhotoBlad-Tray to start automatically when you sign in (or registers PhotoBladIndexer and PhotoBladServer as Windows Services when --service is passed in an Administrator terminal).
  5. Starts the Indexer and the Server, verifies their /health endpoints, opens the system-tray icon, and prints the one-time setup code.

Open http://localhost:5180, enter the setup code, and choose your name, a username, and a password of at least 12 characters: you are the owner.

Videos need FFmpeg: choose Install FFmpeg for me during setup, or later in Settings → Updates → Add-ons. PhotoBlad downloads the pinned Windows build, checks its SHA-256 against the signed feed, and keeps ffmpeg.exe and ffprobe.exe in its data folder.

Installing as Windows Services (starts at boot before login)

If your PC is a headless home server that restarts without anyone signing in interactively, open PowerShell as Administrator and run:

~\Downloads\photoblad-server-<version>-windows-x64\photoblad.cmd install --service

The photoblad.cmd command

From then on, the command is %LOCALAPPDATA%\PhotoBlad\photoblad.cmd:

Command What it does
status Whether PhotoBlad runs, its address, and where its data, backups, and logs are
status --json The same as one JSON object, read by the system-tray icon
update [<file.zip>] Unpacks, checks, and installs a new PhotoBlad .zip download (from ~\Downloads by default), then restarts PhotoBlad
rollback Switches current back to the previous installed version and restarts
open Opens PhotoBlad in your default browser
address add <https address> Lets phones and other computers open PhotoBlad at that address (Tailscale or Caddy) and restarts PhotoBlad
address remove <address> Removes a public address
address list Lists the public addresses PhotoBlad answers at
address local <http://ip:port>, address local off From the next release: lets phones on your Wi-Fi reach PhotoBlad at this PC’s own address on the home network, such as http://192.168.1.50:5180, once they have checked it is this server. It needs an https address first
restore <copy> [--root <folder>] From the next release: puts a copy of the database back in one step, as moving to another computer does
tray on, tray off, tray open Turns starting the system-tray icon at login on or off, or opens it now
stop, start, restart Stops, starts, or restarts the PhotoBlad Server and Indexer
doctor Checks the installation and prints PASS or FAIL for each component
logs Shows where the logs are and prints the last lines of each log file
uninstall Removes the background tasks or Windows Services and the system-tray startup task; your photos and PhotoBlad’s data stay untouched

Phones and other computers: Tailscale or Caddy

As installed, PhotoBlad answers only on this PC at http://localhost:5180. Phones, the PhotoBlad app (which connects only to HTTPS addresses), and other computers reach it through Tailscale or Caddy:

  • Tailscale: Install Tailscale on the PC from https://tailscale.com/download, turn on MagicDNS and HTTPS certificates in your tailnet’s admin console, run tailscale serve --bg 5180 in PowerShell, and add https://<pc-name>.<tailnet>.ts.net in Settings → Public address (or run %LOCALAPPDATA%\PhotoBlad\photoblad.cmd address add https://<pc-name>.<tailnet>.ts.net).
  • Caddy: Point your domain’s A record at your home IP, forward TCP ports 80 and 443 (and UDP 443) on your router to this PC’s static LAN IP, run Caddy as a reverse proxy to 127.0.0.1:5180, and add https://photos.example.com in Settings → Public address (or with photoblad.cmd address add https://photos.example.com). See Self-hosting for router and split-horizon DNS tips.
  • At home, straight over the Wi-Fi (from the next release): Settings → Public address’s On your home network card (or photoblad.cmd address local http://<this PC's address>:5180) lets a phone whose owner turned on Prefer local network on Wi-Fi use this PC’s address on your home network, after checking that the server answering is this one. It needs one of the https addresses above first.

Updating and going back

When a new version is published, Settings → Updates offers Update to PhotoBlad <version> and restart (plus Install from a file… if you downloaded the .zip in your browser). Clicking it downloads or checks the .zip, verifies its SHA-256 against the signed feed, unpacks it, runs photoblad.ps1 install --verify-only, and launches a detached background updater that stops PhotoBlad, points current at the new version, and starts both services again. If the new version fails to pass its /health check, the updater automatically rolls current back to the version you had and restarts it.

To switch back manually to the previous version at any time:

%LOCALAPPDATA%\PhotoBlad\photoblad.cmd rollback

Updating from 0.15.1 or earlier. Up to 0.15.1 the services kept their data in the default folders of the Windows account they ran as, whatever settings.conf said. From the next release they use the folders settings.conf names, and the update first looks where your data really is: it keeps using the folders PhotoBlad has been using and says so, moving, copying and deleting nothing. If it finds a database in both places, it stops and changes nothing, and names each, so you choose with --data (or --storage). The guide inside the download says exactly what to do.

Moving to another computer

From the next release, moving PhotoBlad to another PC (or from a Mac) is restoring a copy of its database here, with the drives your photos are on brought along. Move PhotoBlad to another computer… on Settings → Storage lays out the move for your server. In short: make a fresh copy on the old computer (Settings → Health → Copy now), stop PhotoBlad there and keep it stopped, plug the drives in here (a storage folder on the old computer’s own disk is copied whole, hidden folders included), install PhotoBlad without creating the owner account, and run:

%LOCALAPPDATA%\PhotoBlad\photoblad.cmd restore "E:\PhotoBlad\.photoblad\database-copies\photoblad-<time>.zip" --root E:\PhotoBlad

--root names each storage location whose folder isn’t where it was (a Mac’s /Volumes/Drive/PhotoBlad may be E:\PhotoBlad here). Everyone’s accounts, albums, edits and connections come back, and connected PhotoBlads stay paired. Give this PC the old computer’s name in Tailscale, or point your domain at it, so passkeys and phones keep working; if the name changes, Health says what to do. Self-hosting has every step.