Cloud photo services exist for one reason: your devices can't talk to each other directly. PhotoSphere fixes that. Devices pair over Wi-Fi, exchange keys once, and sync at LAN speed for the rest of their lives.
Because your laptop and your phone can't easily find each other across the internet, behind NAT, behind carrier firewalls. Cloud services solved that by being the always-reachable middleman. They charge you $144 a year for the privilege.
Phone → Apple's data center → encrypts it → stores it → indexes it → notifies your laptop → laptop downloads it. Three round-trips. ~600ms minimum latency. $11.88/month forever.
Phone announces itself on Wi-Fi via mDNS. Laptop sees it. They've already paired (one-time, last week). Phone encrypts the photo with their shared key, POSTs it directly to laptop. Done. ~80ms.
Each device announces itself on the LAN via mDNS-SD on _photosphere._tcp.local. They appear in each other's "nearby devices" list.
Tap "pair", scan the QR or type the 6-digit code. Both devices exchange public keys, derive a shared 32-byte AES-256 secret. Done in 5 seconds.
Every 30s, each device asks its peers: "what photos do you have that I don't?" Manifest is content-hashed. Only deltas transfer, encrypted with the shared key.
SHA-256 of every received photo is compared to the manifest. Mismatch is rejected. Photos are atomically moved into the library only after verification passes.
Photo bodies are encrypted with AES-256-GCM (authenticated encryption) using a per-peer shared key. The 12-byte nonce is random per request and travels in an X-Nonce header. The auth tag is appended to the ciphertext. Tampering on the wire breaks the tag — the receiver rejects it.
/sync/* request carries Authorization: Bearer <device_id> matched against the trusted peer table.$ curl -X POST \
http://192.168.1.42:7700/sync/photo \
-H "Authorization: Bearer 4f2c…" \
-H "X-Photo-Uuid: 7a9b…" \
-H "X-Nonce: a1f3b9c2…" \
--data-binary @ciphertext.bin
{"received":2451231,"sha":"e3b0…"}
# 2.4 MB encrypted body
# AES-256-GCM auth tag: PASS
# SHA-256 verified
# stored in inbox
Your phone doesn't have 1 TB of disk. It shouldn't have to mirror your laptop's library.
Mirror everything across two big devices (laptop + desktop). Every photo, every edit, every tag.
Tablet, phone — pull only your favorited photos. The rest stays on the hub. Saves disk, still always-available.
Recent memories on every device. 10-year-old vacations only on the hub. Auto-rolls forward as time passes.
Sync only photos with a specific tag (e.g. "kids", "trips"). Custom rules in YAML for power users.
Designate one machine as always-on. It holds the master library. Phones back up to it. Other devices pull from it.
Pause on metered Wi-Fi. Throttle to 1 MB/s during work. Schedule big syncs at 2 AM.
Native React Native app for iOS and Android. Pair, browse, instant backup. Photos taken on your phone arrive on your laptop within seconds — encrypted, over your home Wi-Fi, never via Apple's or Google's servers.
Mobile companion ships later in 2026. Email me when it's ready →
"Family Trip 2024" lives on every paired device. Mom adds 30 photos on the train (no Wi-Fi). Dad adds 12 on the plane. Sister deletes 5 on the bus. When everyone gets home, all three changes merge automatically. No conflicts, no "which version wins" dialog.
Built on Automerge — the same CRDT library used by Atlassian, Notion, and Apple's Numbers collaboration.
No bandwidth caps. No per-device fees. No "Family Plan" upsell. The Wi-Fi you already pay for, doing what it should have been doing all along.