The full tour
Everything it does, and why it exists
The table comes first: a big fast surface for moving photos around. Everything else is a tool sitting on top of it, and each one was added because a real shoot needed it that evening.
The table itself
This is the product. Moving a picture over a pile of hundreds of others must never stutter. Everything else on this page is optional.
Drawn by the graphics card
Every photo on the table is rendered by the GPU: 500+ full-resolution imports pan and zoom smoothly at any distance, from the contact-sheet overview to a single frame. Each photo draws from a right-sized preview, swapped as you zoom, and tiny photos stay crisp instead of shimmering.
Zoom anchored to the cursor
Mouse-wheel zoom glides instead of stepping; trackpad pinch is direct. Zoom out for the contact sheet, dive to a single frame, and photos stream in as the view widens.
Quiet chrome
The resize handles appear only when your pointer is over the selection (T pins them), keeper glows are a soft halo that stays on while you move, and during a camera flight the selection outline steps out of the way. The photos are the interface.
Tables that fly
Press Z and the camera glides over to your selection and dives in; press Z again and it pulls back out to the whole table. Click anything in the sidebar and it flies there. ⇧1 fits the table, ⇧2 the selection, ⌘0 snaps to 100%.
Import that meets your files where they are
Drop a folder
Drag an export folder from Finder and its pictures land in a tidy grid, in natural filename order, so shot-9 comes before shot-10 and the sheet reads in shooting sequence. Subfolders stay untouched on purpose.
HEIC, straight off the iPhone
iPhone photos convert on the way in using macOS's own engine, no exporting to JPEG first. Orientation metadata is honoured, so portraits land upright.
Video clips too
.mov and .mp4 files import as poster frames with a play badge: draggable, croppable, sortable like any photo. The clip itself plays in the full-screen view, and exports hand you the original file.
Paste works
⌘V an image from anywhere and it lands at your cursor. Same photo imported twice? The vault stores it once.
Sorting, at thinking speed
Full screen, three keys, no timer. Keepers and outs are just labels on the mess: nothing is deleted, everything is undoable.
space
Opens the lightbox on the selected photo, or double-click it. ← → walk the shoot in reading order.
1 · 2 · 3
Out, keeper, back to undecided. 1 and 2 advance automatically. The same keys work on the table: marquee five near-duplicates, press 1, done.
Z
True pixels from the original file. Judge focus, not previews; drag to pan the frame.
C
Compares 2 to 4 selected frames side by side (four go 2×2), with keep and out under each.
I
The file's own info: camera, lens, focal length, aperture, shutter, ISO, date, size, GPS, straight from the original.
The sidebar
Reorganises itself live into Keepers · Unsorted · Rejected. Click a group's count to select them all; ⌘-click adds photos one by one, ⇧-click takes a run. Toolbar chips select all keepers, all outs, or wipe the marks.
Gather here
Right-click an empty spot and the scattered keepers fly into a tidy pile there, still selected, ready to drag.
The marks themselves
Keepers wear a soft glow, outs dim to a whisper. Marks survive quitting, and every one of them is a single undo.
Carousel frames, when you want a post
An extra on top of the table. Frames are rectangles in Instagram's ratios that sit over the photos: they own nothing and clip nothing. You slide photos underneath until the crop reads right, then export what they show.
Create the whole strip
Press F, pick a ratio (4:5, 3:4, 9:16, 1:1, 5:4, 4:3, 16:9) and a slide count, and the strip appears abutting and selected, at true 1080px export dimensions.
Decks move together
Grab any slide's border and the whole carousel moves; resize a corner and every slide scales in step. Slides reorder by drag in the sidebar, taking their photos with them.
Magnet snapping
Frames snap flush to frames, photos to frame and photo edges, moving and resizing, with a guide at the matched edge. S toggles it when you need freedom.
Fill or fit in one click
Right-click a photo overlapping a slide: Fill frame covers it exactly with an auto-crop, Fit in frame letter-boxes it. Works on a whole selection at once.
Slide backgrounds from the photos
Each slide can carry a background colour: typed as hex, or picked from ten swatches sampled from the photos actually sitting in that frame.
Badges and labels
Every slide shows its position; click the badge to rename it, renumber it, move it between carousels, or add the next slide.
Enough photo editing, and no more
This is a planning surface, not a darkroom, but framing decisions live here.
Non-destructive crop
Right-click → Crop: the full image ghosts behind a bright window with a rule-of-thirds grid. Drag edges to reframe (they snap to nearby frames and photos) or drag inside to slide the photo behind the window. Pixels never move on the table; Uncrop restores everything.
Rotate in place
The crop view turns the photo in 90° steps. The crop turns with it, and exports render the rotation from the original.
Photo frames
A solid border in any colour, drawn inside the photo's bounds so layout and snapping stay exact. The colour picker offers the photo's own dominant tones, sampled from the visible crop, not the parts you removed.
Find the source
Right-click → Find in Finder reveals the original file in the vault. Export a selection and you get those originals back, byte for byte.
Collage maths, done for you
Exact gaps
Select photos, type a pixel gap, and pack them into a row (⇥) or column (⤓): every gap identical, heights untouched. Zero packs them edge to edge.
Spread evenly
With three or more selected, Even pins the end photos and equalises every gap between. The "stop looking accidental" button.
Gather anywhere
Right-click a spot and the selection gathers into a compact pile centred exactly there, sizes preserved, no overlaps, one undo.
Group resize
Any mixed selection gets resize handles; corner-drag scales the whole arrangement as one object, aspect held for photos.
Notes that behave like stickers
Instant text
N drops a note and you are typing immediately. Six colours, bold, italic, centred by default; the colour controls appear only while a note is selected.
Text scales with the note
Drag a corner and the type grows live with the box: headline-sized for section markers, small for caption drafts. Presets from 56 to 256px when you want exact.
They export too
Notes inside a slide render into the exported PNG, centred. Usable for text slides, not just margin scribbles.
Exports for every audience
Slides
Each frame as a 1080px PNG (or 2× for 2160), named carousel-1.png onward in deck order, drawn from the untouched originals.
Carousel as one image
The whole strip stitched wide, for seeing the swipe at a glance. ⇧⌘C puts the current slide straight on the clipboard.
Whole table
A moodboard PNG or JPEG of everything, frames as thin outlines.
Picked photos
Your keepers copied out as byte-identical originals with their real filenames; videos come out as the actual clips.
No silent overwrites
An existing filename prompts: overwrite, skip, or keep both, auto-numbered.
A vault you can trust, and read
Tables are plain JSON in ~/Documents. Photos are content-addressed copies. Nothing phones home.
Autosave, atomically
Every change hits disk within a second, written to a temp file and renamed, so a crash can never leave a half-written table. Closing flushes first, and refuses to quit if a save fails.
Undo everything
Moves, crops, marks, deletions, whole gather operations: each one is a single ⌘Z step, coalesced sensibly.
Archive finished tables
One click releases a table's full-res originals but keeps it browsable from previews forever, with typically 90% of the space back. Archived tables live in their own menu, out of the way.
Trash with a way back
Deleted tables go to an in-vault trash. The Storage view lists them with a Restore button, shows exactly what everything weighs, and empties the trash only when you say so.
Space accounting
Storage breaks the vault into originals, previews, tables and trash, with proportional bars, and Clean Unused Assets reclaims photos no table references.
Many tables, one switcher
⌘K opens a fuzzy-search switcher with live thumbnails; tables reorder by drag in the sidebar.
Demo mode
Press D and the table becomes a show: the interface disappears and the camera hops from photo to photo on its own, lifting off as it travels, higher the farther it goes, and diving back down onto the next one. A motion trail and a breath of lens warp follow the speed.
Curated or everything
Select two or more photos first and the show cycles through only those; otherwise every photo that is not an out. Outs never appear. Nothing on the table is touched.
Directed live
← → set the pace from half speed to 6×. ↑ ↓ frame tighter or looser. Slides are flat by default; M lifts them into hops that rise with the distance. Hold Space to pull back to the whole table for as long as you like; release and it carries on.
Leave it running
The next photo is never one of the nearest, so every move actually crosses the table. Any other key or a click ends the show and brings the interface straight back.
The whole keyboard map
Grouped the way you actually work. Press ? in the app for the same sheet.
Demo
Navigate
Sorting
Create & edit
Arrange
Tables & files
Watch it get built
Occasional notes on what changed, what broke, and what a tool looks like when it is written for exactly one person's workflow.
No spam, unsubscribe whenever.