PhotoTriage GitHub

Cull a shoot with two arrow keys.

One photo fills the screen. Right arrow keeps it. Left arrow discards it. Your keepers go to a new folder. Nothing is deleted, and nothing leaves your machine.

Get it on GitHub

Free and open source. Runs from a terminal. Mac, Windows, Linux.

A sample roll 208 / 480 reviewed

195 discarded

IMG_0412.JPG

13 kept

Sample photos by Bernard Gagnon, CC0, from Wikimedia Commons.

A shoot doesn’t end when you stop shooting.

It ends weeks later, when you sit down with the folder. A file manager makes you open a photo, drag it somewhere, and remember what you already decided. Ten minutes in you’re not culling, you’re doing inventory.

Open
A preview window, sized wrong, one photo behind.
Drag
A “best” folder you don’t trust, because you lost count halfway.
Resume
You stopped at photo 200 last week. Or was it 180?
480 files in the folder. None of them decided.

One photo. One question: keep it?

The photo gets the screen

No part of the interface covers the image. Press F and the bars go away too.

Check sharpness before you decide

Space shows the photo at 1:1, one image pixel per screen pixel. Space again fits it back.

The keys do the work

Right keeps, left discards, U takes back the last decision. The next photo is already loaded.

Stop when you want

Every decision is saved the moment you make it. Close the window and come back next week. The review is where you left it.

Folder in, folder out.

  1. ~/Pictures/2024, 480 files

    Point at a folder

    Type the path or browse the disk. You see the photo count before you open it.

  2. ← one photo →

    Decide

    One key per photo. The counters keep score.

  3. 2024_keep, 31 files

    Collect the keepers

    Choose copy or move, then press Run. A new folder, 2024_keep, appears next to the original. RAW files follow the photo that shares their name.

The pass in 32 seconds, with music. The interface is drawn for the video.

480 undecided files in. 31 photos worth showing out.

The other 449 aren’t deleted, compressed or shuffled. They’re still whole, still where you left them, in case tomorrow you change your mind.

The figures are the sample roll at the top of this page.

What PhotoTriage never does.

It never deletes
The app has no delete action.
It never touches a discarded photo
Not moved, not tagged, not renamed. A discard is a decision, not an edit.
It never overwrites
A taken name becomes IMG_0412_1.JPG.
It never goes online
The server is bound to 127.0.0.1 and no option changes that.
state.json, written as you go. Nothing to save by hand.
File Verdict Where it is now
IMG_0410.JPG discarded untouched
IMG_0412.JPG kept 2024_keep
IMG_0412.CR2 its RAW 2024_keep
IMG_0413.JPG discarded untouched
IMG_0414.JPG kept 2024_keep
CLIP_07.MOV not a photo untouched

Know the limits before you install.

It is a first pass

One photo at a time is fast for a clear yes or no. It does not put near-identical frames side by side.

It shows JPEG, PNG, WebP, GIF, BMP and TIFF

No HEIC. A RAW file is not displayed. It travels with the JPEG of the same name, so a RAW-only folder has nothing to review.

Undo goes back one step at a time

To change an older decision, undo your way back to it.

Zoom resets on every photo

No ratings, no edits

Keep or discard is the whole vocabulary.