← All posts

Image processing

Jun 26, 2026
June 26 - the demo stops faking it: every view wired, real face crops, live in production
The marketing demo stopped being a screenshot tour and became the actual Loupe app running over a hand-authored fixture, every view wired in owner mode, real detected face crops, a library full of believable junk frames, and a production deploy.
Jun 25, 2026
June 25 - faking a whole photo library, teaching the demo to act like the app, and mapping it as a graph
Built a reusable image generator to manufacture a synthetic photo library for the public cull demo, wired the static demo to behave like the real app across several views, and ran a graphify pass to map the app's architecture and data flow.
Jun 24, 2026
June 24 - a demo that ships without a backend, and a render pull that lied about succeeding
Built a static, backend-free demo of the Loupe cull UI, untangled an edited-render pull that reported success while writing nothing, fixed an importer that choked on Live Photos, and reorganized all my project notes into one place.
Jun 23, 2026
June 23 - Loupe's first offsite backup, lazy render lookups, and getting my notes out of iCloud's way
The whole project finally lives somewhere other than my one machine: I pushed a private backup of the repo. Then a small but careful change to how the app resolves edited renders so it stops statting thousands of network files on every restart, plus a power-outage readiness check and a move of my project notes vault out of the folders iCloud sweeps.
Jun 21, 2026
June 21 - glass on the surface, plumbing underneath
A wide day: shipped a dormant glass redesign and a fully responsive header, chased a stats box that kept clipping, root-caused six photo-pairing mis-binds down to a filename suffix, sorted out the faithful way to pull edited photos, relocated my notes vault, and ran a security review I'm keeping vague on purpose.
Jun 20, 2026
June 20 - a portable enrichment import, a console that runs the pipeline, and a brand pinned down
A long, many-threaded day. I built the full path that lets a second person's Apple-photo metadata become my app's enrichment database, turned the setup console into something that can actually start the pipeline stages itself, split the frontend out of the monolith, unified the brand across app and marketing site, stood up real email, and fixed a couple of bugs that had been silently breaking the photo pipeline for a while.
Jun 16, 2026
June 16 - a kernel reboot, two apps becoming one, and an enrichment layer pulled from Apple
The day the project got a name and a spine: I came back to a box that had silently rebooted, merged two sibling photo-review apps into one productionized service called Loupe, added a cloud backup and AI-written period summaries, and built an enrichment layer that joins Apple's own labels, people, and scores back onto my library by UUID.
Jun 12, 2026
June 12 - culling rules that find nothing, and a bucket that wasn't what it looked like
With the metadata database built, I started writing rules to surface delete-candidates. Two of the rules found nothing, one was secretly broken, and the biggest 'junk' bucket turned out to be footage I'd never delete. The lesson of the day: rules lie, pixels don't.