There’s a boring step in the middle of this pipeline, and it’s the step that used to kill the whole thing.

Photos land on the NAS from two phones. Before I can sort them, someone has to copy the new ones onto the working folder — the cutting board — while skipping everything already handled. That’s dull, repetitive, and easy to forget. For two years, “I’ll copy them over later” was where the process died.

So I gave that job to the picker’s own background loop — it wakes once an hour, does the copy, and goes back to sleep. It never forgets.

What the Hourly Check Does

Every hour, quietly, it:

  • Looks at both phone-backup folders for files newer than the day I started (June 20th, 2026).
  • Copies any new file onto the working folder.
  • Skips anything already on the working folder (same file, already copied).
  • Skips anything the record (R) says has already been handled or transferred.
  • Notes which phone each file came from.

The result: I never have to remember to “fetch the new photos.” When I sit down to sort, whatever arrived since yesterday is already waiting on the cutting board, and nothing I’ve already dealt with is cluttering it up.

The “Check Now” Button

An hour is fine for the everyday flow, but sometimes I take a photo and want it in the archive now — to show my mother something from this afternoon before she goes to bed.

So next to the automatic hourly run, there’s a “check now” button. Same job, on demand. Press it, and it pulls in anything new this second instead of waiting for the top of the hour.

This pairing — automatic by default, manual when you’re impatient — turned out to be the right shape for almost every background task I build. The machine handles the routine; the button handles the exceptions.

There’s nothing fancy underneath, and I want to be plain about that. It isn’t a system cron job or a scheduled task. It’s just a background thread inside the picker’s own web server: run the copy, sleep an hour, repeat. As long as the picker is running, the check runs. That’s it — and for a home tool, “as long as the app is up” is a simple enough promise to reason about.

Why Automating the Boring Middle Matters

It’s tempting to automate the impressive parts and leave the dull parts to “just do it later.” I had it backwards.

The impressive parts — picking good photos, watching the videos — are the parts I enjoy, so I was always going to do them. The dull middle step — copying and de-duplicating files — was the part I dreaded, so it was always the part that stalled the pipeline. Automating the step I hated is what made the parts I love actually happen.

A friction log entry, basically: the bottleneck wasn’t the hard work; it was the boring work. Once the boring work ran itself every hour, the archive stopped being a someday project and became a daily habit.

Keeping It Honest

A few things I’m still watching, because I’d rather admit them than pretend:

  • The hourly gap is real. Without the “check now” button, a new photo can wait up to an hour. That’s fine for a growth archive; it wouldn’t be for something urgent.
  • It trusts the record. The whole skip logic leans on R being correct. If R ever got out of sync with the actual files, the check could re-copy or miss something. So far it’s held, but it’s the part I’d test first if something looked off.
  • It only copies; it never deletes from the backup. By design. The check reads the backups and writes to the cutting board. The backups stay untouched — the rule from the keystone post.

With new files arriving on the cutting board on their own, the only thing left is the fun part: opening a gallery and choosing which moments are worth keeping. That’s the next post.