mess

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
Dstart: interface hides, camera flies on its own
← →slower / faster (default 4×)
↑ ↓frame looser / tighter
Mflat slides ↔ hops
spacehold to see the whole table
any keystop
Navigate
scroll · pinchpan and zoom
⌘ scrollzoom at cursor
space dragpan
Zfly to selection, again for the table
⇧1 / ⇧2fit table / fit selection
⌘0zoom to 100%
Tpin the resize handles
Sorting
spacelightbox on the selection
← →previous / next photo
1 · 2 · 3out · keeper · undecided
Z1:1 pixels, drag to pan
Ccompare 2 to 4 side by side
Icamera, lens, exposure
escback to the table
Create & edit
Nnew note
Fnew carousel
double clickedit a note, open a photo
⌘B / ⌘Ibold / italic note
deletedelete selection
right clickcrop, frame, fill or fit, z-order
Arrange
arrowsnudge 1px, ⇧ for 10px
Stoggle snapping
[ / ]z-order back / forward
⌥[ / ⌥]send to back / bring to front
⌘Dduplicate
⌘C ⌘X ⌘Vcopy / cut / paste
Tables & files
⌘Ktable switcher
⌘Nnew table
⌘Z / ⇧⌘Zundo / redo
⌘Eexport slides as 1080px PNG
⇧⌘Ccopy a slide as an image
?cheatsheet

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.