What’s New
A plain-language record of what's added, changed, and fixed in Cullstack. Newest changes are at the top. Dates are year-month-day.
2026.0.13 (2026-09-05)
Fixed
- The culling filmstrip shows thumbnails for cloud and server photos. The strip along the bottom stayed blank on a remote folder, even for photos the grid had just drawn.
- Culling works on a cloud or server folder. Choosing Culling Mode on a Dropbox, OneDrive, WebDAV or SFTP folder said "no photos found" no matter how many were in it. It only ever considered files that had already been downloaded. This was the last thing standing between you and culling straight off a remote drive, which the rest of this release is about.
- Large files copy to a WebDAV server again. Anything over about twenty megabytes failed with "Broken pipe" partway through. Cullstack was waiting to be asked for its password on every single request, and on a big upload the server answered that question while the file was still being sent, then hung up. It now sends the password up front, over an encrypted connection, which also makes every other WebDAV action take half as many requests as before.
- New Folder works on a server opened in the second grid. With a remote drive open in the right-hand grid, creating a folder made it on your own disk instead of on the server, with no warning that it had gone somewhere else. Cullstack was still assuming the second grid could only ever show local folders, which stopped being true when remote drives became available in both.
- The folder highlight in the sidebar no longer jumps around. With two grids open, each one kept pulling the sidebar's highlight onto its own folder, so clicking a folder in the sidebar could be undone a moment later by the other grid. It was most obvious with one grid on a local folder and the other on a cloud folder, where the highlight flickered between the two. The sidebar now follows whichever grid you are actually working in, and stops re-selecting a folder it is already showing.
- The sidebar stops re-scanning your whole home folder after every file operation. Moving or deleting a file made Cullstack recheck, for that folder and every folder above it up to the top of the drive, whether it still held any photos, so a change three levels down sent it back over the lot. Each recheck redrew the sidebar, and each redraw started the scans again. It now stops as soon as it reaches a folder whose answer has not changed, which is nearly always the first one.
Changed
- Grid thumbnails for OneDrive files come from OneDrive itself. One small request per photo instead of a download, with nothing to decode on your machine, and unlike Dropbox, OneDrive renders RAW files too, so a folder of CR2 or DNG files fills in as quickly as a folder of JPEGs.
- A file copied from a server is never handed over half-finished. Cullstack kept downloaded files in a cache and treated any file that had started arriving as one that had finished. If you exported or zipped a photo while it was still coming down, you could get a truncated copy with nothing to say so. Downloads now land under a temporary name and are only put in place once complete.
- A photo's preview is fetched once, not twice. The grid and the preview pane were asking for the same picture at the same moment and each fetching it separately. On a remote drive that was double the network for no gain.
- RAW photos on OneDrive no longer download in full just to be looked at. The last of the connected drives to get this. Canon CR2, Nikon, Sony, Pentax and Adobe DNG files take the short route; Fujifilm, Olympus, Panasonic and Canon CR3 still download in full, as before. Copying, moving, exporting and Open With always use the complete file.
- RAW photos on a WebDAV server no longer download in full just to be looked at. Same change again, now for WebDAV. Not every WebDAV server can send part of a file. Where one cannot, Cullstack gets the whole file as before and the picture is the same, so nothing breaks either way.
- RAW photos on an SFTP server no longer download in full just to be looked at. The same change made for Dropbox now covers SFTP, which is if anything better suited to it: reading part of a file is something the protocol has always been able to do, so there is no server behaviour to negotiate. Canon CR2, Nikon, Sony, Pentax and Adobe DNG files take the short route; Fujifilm, Olympus, Panasonic and Canon CR3 still download in full, as before. Copying, moving, exporting and Open With always use the complete file.
- RAW photos on Dropbox no longer download in full just to be looked at. Browsing a Dropbox folder of RAW files used to pull down every file entire before it could be shown: a 111 MB DNG was downloaded whole to reach the preview picture inside it. Cullstack now asks Dropbox for just the parts of the file that hold the preview, a few hundred KB in a handful of requests, and shows that in the grid, the preview pane, the culling view and the fullscreen viewer. Copying, moving, exporting, zipping and Open With still use the complete file, always. Canon CR2, Nikon, Sony, Pentax and Adobe DNG files take the short route; Fujifilm, Olympus, Panasonic and Canon CR3 files still download in full for now, as does any RAW on WebDAV, SFTP or OneDrive.
- Grid thumbnails for JPEG, PNG, TIFF, GIF, WebP and BMP files on Dropbox come from Dropbox itself. One small request per photo instead of a full download, and nothing to decode on your machine. Video thumbnails are unchanged.
- RAW photos open faster. Cullstack used to read an entire RAW file just to reach the preview picture tucked inside it. For a 111 MB file that meant reading all 111 MB to get at 104 KB. It now goes straight to the preview and reads only that, which on the files tested cut the work by a factor of 690 and saved roughly 100 ms per photo. The difference is small on a fast internal drive and very noticeable on a memory card, a USB drive or a network share. Canon, Nikon, Sony and Adobe RAW files all take the quick route; Fujifilm, Olympus, Panasonic and Canon CR3 files are unchanged for now.
2026.0.12 (2026-09-04)
Added
- A diagnostic log you can turn on without the command line. Settings, Display now has "Write a diagnostic log", with a Show log button that reveals the file in Finder. Turn it on, restart Cullstack, reproduce whatever went wrong, then use Save report to put everything into a single zip wherever you like, ready to attach to an email. Nothing is transmitted anywhere: the log is written on your own machine and stays there unless you choose to send it. The report holds the log plus your Cullstack version and the basics of your machine, and nothing else. Leave the log off the rest of the time, as it slows things down a little.
2026.0.11 (2026-09-04)
Fixed
- Renaming or deleting a tag from the Tools menu left the sidebar showing the old one. Managing tags from the sidebar's own button updated the list, but doing exactly the same thing from Tools, Manage Tags did not, so the sidebar disagreed with reality until something else refreshed it. Every way of opening that dialog now updates the sidebar when it closes.
- Four languages were only half translated. Japanese, Korean, Traditional Chinese and Polish had Cullstack's own text translated, but the buttons in standard system dialogs stayed in English, and Polish showed file sizes with a point instead of a comma. All twelve languages now set the system language properly, so dialog buttons and number formatting match the rest of the app.
- Copy To and Move To did not offer your cards or external drives. The list of places to copy into showed your home folder and the top of the disk, but not mounted drives, so a card was only reachable by digging down through Volumes. Cards and external drives are now listed alongside everything else, the same ones the sidebar shows.
Added
- Drives show how full they are. Your main drive and every card or external drive in the sidebar now has a small bar showing how much of it is used, turning amber past 90% and red past 97%, with the exact free space on hover. It is there for the moment before you copy a shoot somewhere, which is when a nearly full drive matters. Only removable drives get the eject button beside it, since your main drive cannot be ejected.
- Cullstack now checks there is room before copying. Copying or moving files to a drive without enough space used to start, run for a while and then fail partway, leaving half the files transferred. It now works out the size first and tells you if the destination looks too small, showing what the transfer needs and what is free, and lets you go ahead anyway if you know better. Moving files within the same drive is unaffected, since nothing is copied.
2026.0.10 (2026-09-02)
Fixed
- Rating a photo could wipe out edits made in Lightroom or Camera Raw. When a photo already had an .xmp file beside it, Cullstack rewrote that file from scratch, so anything another program had stored there (develop settings, crops, white balance) was thrown away the moment you rated or tagged the photo. If Cullstack had nothing of its own to store, it deleted the file outright, even one it had never written. It now changes only its own entries and leaves everything else exactly as it found it, removes the file only when nothing but its own data was in it, and leaves a file it cannot read alone rather than replacing it.
- Your Home folder vanished from the sidebar when you unplugged a drive. Browsing a USB drive or memory card moved the sidebar's home branch onto that drive, so Home was no longer listed, and pulling the drive out left the sidebar anchored to a folder that no longer existed. Home now stays where it is. The drive is still there to browse under Drives, where it was all along, and opening a folder on it still reveals that folder in the sidebar.
Added
- Eject a card or drive from the sidebar (macOS). Mounted drives now have an eject button on their row. Cullstack lets go of the drive first, moving any grid that is showing it back to your home folder and stopping the folder watcher, then ejects. That matters because Cullstack is often the reason an eject fails from the Finder: it is the app reading the card, and the Finder cannot make it stop. If the drive still refuses, the message from macOS is shown as-is, since it usually names what is holding it.
- Pinch the grid to resize thumbnails. The size slider in the toolbar was the only way to change how big thumbnails are. On a trackpad you can now pinch the grid itself, which is the gesture most people try first. The slider follows along and the size is remembered, so the two agree however you change it.
- Blank the screen instantly. Press Q and Cullstack covers itself at once; press it again, or Escape, to carry on exactly where you were. Every Cullstack window is covered, not just the one in front, and it works while culling and in the photo viewer as well as in the grid. Any video stops and is silenced, and while the screen is covered nothing you type reaches your photos. Nothing is closed or unloaded, so coming back is immediate: your place in the cull, your selection and any edit in progress are all still there. A video is the one exception: it is stopped rather than hidden, so it takes a click to start again, but it remembers where it had got to and carries on from there. Also under View. It is meant for the moment someone walks past a screen full of a client's private work, or for showing one client's gallery without another's being visible.
- Photos now open filling the screen. Double-clicking a photo used to open a small window, which on a large display showed the photo at a fraction of the size available. It now opens a window filling the screen, which appears and closes instantly; move or resize it and it reopens exactly like that, which suits working beside something else or on a second display. If that was on a display you no longer have, it comes back on a screen you can see. Settings, Display, "Open photos" offers Full screen instead, edge to edge with nothing else on screen, at the cost of macOS animating it open and closed each time. Escape closes the viewer either way.
2026.0.9 (2026-08-29)
Added
- Duplicate a folder from the sidebar. Right-click a folder in the sidebar and pick Duplicate folder to make a copy of it, contents and all, beside the original. Repeated copies number themselves the way the Finder does. Folders on a network or cloud drive are copied on the server rather than pulled down and pushed back, except on SFTP, where a folder copy is not available and the entry is greyed out.
- Delete and Backspace now delete the selected photos. Both keys work, in the grid and in fullscreen, and both ask before deleting just as the right-click menu does. Deleting in fullscreen moves on to the next photo. Neither key deletes anything while you are typing in a search box or renaming a file.
Fixed
- Refresh now reloads the sidebar as well as the grid, and works everywhere. The refresh button re-read the photos but not the folder list beside them, so new subfolders stayed hidden, most noticeably on network and cloud drives, where nothing watches for changes and this button is the only way to ask the server again. Refresh also did nothing useful in a photo library, and on a connected phone it carried you off the device back to a local folder. It now reloads whatever the current pane is showing, wherever that is, and re-reads the matching folder in the sidebar.
- Folders created by other programs did not appear in the sidebar. A folder made by something else while Cullstack was running (a download finishing, a card-import tool, another file manager) only showed up if a grid happened to be sitting in its parent folder at that moment. Collapsing and reopening the folder in the sidebar did not help, because a folder that had been opened once kept the contents it read the first time. The sidebar now checks the folder again when you expand it, and checks the folders you have open whenever you come back to Cullstack from another program.
- The preview kept showing the last photo after you moved on. Selecting another photo left the previous one on screen until the new one finished loading, and opening a different folder carried it across into a folder it did not belong to, on a network or cloud drive, or in the second grid, it could stay up indefinitely. The preview now clears the moment you move, so what you see is always the thing you have selected.
- Dragging several folders from the sidebar moved only one of them. You could select three folders in the sidebar, but the drag carried just the one under the cursor, and the other two stayed where they were with nothing to say so. A drag starting on a selected folder now takes the whole selection. If one of the folders is inside another one you picked, it is left out of the drag, since moving the outer folder takes it along anyway.
- The Back entry wandered off the top of the grid when you changed the sort. The way out of a folder was being sorted along with the folders themselves, so sorting by name Z-A pushed it into the middle of the list and sorting by date or size put it wherever the folder's own timestamp landed. It now stays first whatever you sort by, in either direction.
- Deleting a photo in fullscreen asked twice and then left fullscreen. You were asked to confirm, asked again, and once the photo was gone the fullscreen view closed instead of moving to the next photo. Deleting now asks once and steps to the next photo, staying fullscreen until you leave it or run out of photos. Cancelling leaves the photo where it was, which it previously did not: answering no to the second question still removed the photo from the fullscreen sequence, even though the file itself was untouched.
- Find similar photos matched a cropped photo only from one side. Starting from the crop found the original, but starting from the original did not find the crop, so whether the pair turned up depended on which of the two you happened to right-click. The check that recognises a scene through a crop was asking a slightly different question depending on which photo it started from. It now asks both, and reports the better answer either way.
- Find similar photos ignored anything not yet in the AI index. A photo the index had not reached was skipped entirely, even though two of the three ways Cullstack recognises a photo do not use the index at all and would have found it on its framing alone. iPhone HEIC photos were the common case, since the index passed them over before this release. Photos with no index entry are now compared the ways that do not need one, so they turn up on their own merits.
- Find similar photos missed copies where the clothes had changed. Two pictures of the same moment, one re-dressed, were not being matched. The check that recognises the same scene through an edit was only being tried on photos the AI already judged similar, and changing what someone is wearing is exactly the kind of edit that makes the AI judge them different. Cullstack now also shortlists photos by how closely their framing matches, so a copy that has been re-dressed, retouched or otherwise worked on gets examined instead of being set aside first. On the pair that showed this up it is now the single match in a folder of 221 photos.
2026.0.8 (2026-08-26)
Added
- Find similar photos is now in the Tools menu as well. It sat only on the right-click menu, so it was invisible unless you happened to right-click a photo. Select a photo and pick it from Tools, AI, alongside Find this person. With nothing selected it asks you to pick a photo from disk, so you can use an original stored somewhere else to find what it turned into in this folder.
- Find similar photos now recognises cropped and expanded versions. A photo that had been re-cropped, expanded onto a wider canvas or upscaled, and edited at the same time, was not being matched to its original, because comparing two pictures as a whole treats a different crop as a different photo. Cullstack now also looks for the parts of the scene that line up, so an original and its expanded, retouched version are recognised as the same shot.
- Find similar photos now catches recoloured and retouched versions. Two copies of the same shot where only the subject changed (hair recoloured, an object removed) were being missed, because the AI comparison judges the whole picture and a big change to the subject reads as a different photo. A second check now recognises when the framing and composition are identical, so those turn up whatever the slider is set to.
- Find similar photos now says how close it got. When nothing clears the current strictness it reports the closest score it found and points at the slider, instead of saying nothing and leaving you unsure whether the feature worked. A re-cropped or re-framed copy often sits just under the default.
- Find this person is now on the right-click menu too. It used to live only under Tools, AI, where it asked you to pick a reference photo from a file dialog. Right-click the person instead and it uses that photo directly.
- Find similar photos. Right-click any photo and Cullstack finds others that look like it, anywhere in the folder you are viewing. It compares the whole picture rather than faces, so it finds the same scene again after the subject has been edited, and it works just as well on a car, a room or a landscape. A Loose to Strict slider narrows or widens the match as you drag, and the results are simply selected, so you can act on them or ignore them. Needs the photos to have been indexed first (Tools, AI, Build CLIP index).
- Copy Path and Copy Filename in the right-click menu. Right-click a photo (or a whole selection) and you can put its full path, or just its name, on the clipboard as text, one per line. The path is for pasting into a terminal, a Go to Folder box or a support email; the filename is for a caption, an edit request or a job sheet. Works on network and cloud drives and on a connected phone, where you get the path on that drive. Photos and Google Photos items copy their names only, because what those libraries have is an internal ID rather than a path, and pasting one would send you looking for a file that isn't there.
Changed
- Opening a folder now starts you at the top of it. The grid used to keep whatever scroll position the previous folder was left at, so a folder you had never opened could appear part-way down, with photos above the ones you could see. Going back UP is the exception: the folder you just came out of is scrolled into view and selected, so you can carry on from where you were instead of hunting for it. Refreshing the folder you are already in, whether from a file landing in it or a delete or a rename, still leaves your scroll position exactly where it was.
Fixed
- Some thumbnails had black bars across the top and bottom. Many cameras store the same small preview shape whatever the shape of the photo, Nikon writes a 4:3 preview on a 3:2 body, and pad the difference with black. Cullstack was showing that padding, so those photos sat in the grid letterboxed and looking darker than they are. The bars are now removed. Where a preview disagrees with its photo for some other reason, such as a stale one left behind by an earlier crop, Cullstack reads the photo itself rather than show you something that is not quite it.
- The AI features ignored HEIC and RAW photos. Building the search index, detecting faces, people or closed eyes, flagging blurry or explicit shots, finding a person and finding similar photos all quietly skipped anything the standard Java image reader could not open, which on an iPhone library is most of it. They now use the same decoder as the rest of Cullstack, which reads HEIC and RAW. If you have already built the index, run it again to pick up the photos that were passed over.
- Failures no longer happen silently. When something went wrong in the background, Cullstack often did nothing visible at all: the button you pressed simply had no effect, with the reason written only to a log you would have to go looking for. Unexpected problems now raise a message saying what happened, with the technical details behind a Show Details button and a Copy button, so a report can be sent instead of guessed at.
- AI passes could not be stopped once started. Building the search index or running a detector over a few thousand photos gave you a line of text in the status bar and no way out short of quitting Cullstack. Those passes now use the same progress window as copying and moving, with a Cancel button, and stopping keeps whatever it found rather than throwing the work away.
- Some photos showed a green and magenta haze instead of a thumbnail. The small preview a photo carries inside it can be saved without the tag that says how its colours are stored. Other photo programs assume the usual answer, but the image reader Cullstack was using guessed the other way, so the preview came out looking solarised while the photo itself was perfectly fine. Photos edited in CyberLink PhotoDirector are the common case. Cullstack now checks the preview against the photo itself before trusting it, because the file's own header cannot tell the two cases apart: a phone photo that is perfectly fine and an edited file that is not can be identical in everything a program can read, and only the picture reveals which is which. Thumbnails are rebuilt once on first use after this update, so the wrong ones do not linger in the cache.
- Opening a folder deep in the list left the sidebar highlight off screen. Clicking a folder near the bottom of the grid moved you into it, but the blue highlight showing where you are sat below the visible part of the sidebar, so the tree appeared to have nothing selected until you scrolled down to find it. The sidebar now brings the current folder into view, centred so you can see the folders either side of it, and still leaves your scroll position alone when the folder is already visible.
- Copying or moving a folder to a network or cloud drive counted the folder, not the photos in it. The progress window said "1 item" and sat at zero until the whole thing finished, however many photos were inside. It now counts the contents, and the count climbs as each file lands. Folders coming *from* a network drive still show as one item, because working out the real total would mean listing the whole tree over the wire first, which takes longer than the copy itself.
2026.0.7 (2026-08-22)
Changed
- New setting: narrow to results after an AI search. Settings → AI. Off by default, so an AI pass highlights what it found and leaves the rest of the folder in view. Turn it on and Find this person, closed-eye detection, blur flagging and the rest will hide everything they did not match, which is quicker if you would rather trust the pass and get straight to its results.
- Find this person no longer hides the rest of the folder. It used to switch on Isolate automatically, so only its matches stayed visible. Face matching is a guess, and hiding everything else hid the photos it got wrong: one of the person that scored slightly too low simply vanished, and a miss you cannot see is a miss you cannot fix. Matches are now highlighted with the folder still in view, and the Isolate button sits ready with the match count if you do want to narrow.
- Search now does one thing at a time. The box used to be labelled "name / folder / prompt" and tried to be all three at once, so the same typing behaved differently depending on whether AI was switched on, whether the model was downloaded, and whether the folder had been indexed, with nothing on screen to tell you which. There is now a Name / AI switch in front of it. Name searches filenames, folders, comments and prompt details. AI finds photos from a description you write. When AI search is picked and some photos have not been indexed yet, it says so and offers to build the index, instead of quietly finding nothing. Folders also stay visible while you search by description, rather than disappearing because their names do not match what you typed.
Fixed
- Downloading a different AI search model threw away your other AI results. Choosing a new CLIP model in Settings also discarded every face, eye, person and explicit-content verdict Cullstack had worked out, so those photos had to be analysed again for no reason. Separately, *Clear cache* was leaving exactly those results behind while claiming to have removed everything. Both now do what they say.
- Building the AI search index did nothing. Choosing *Build CLIP index* appeared to do nothing at all: no progress, no message, no error. Every AI batch action that needed to know which pane you were working in hit the same fault and stopped before it started.
- Moving a file up to a parent folder collapsed the folder you were in. The subfolder you were working in snapped shut and the highlight jumped to a different folder in the sidebar, so you lost your place after every move. The sidebar now only rebuilds when folders are actually added or removed, and it puts the highlight back where it was when a rebuild is unavoidable.
2026.0.6 (2026-08-20)
Changed
- Downloads and installed size are much smaller. Cullstack was shipping support files for operating systems it wasn't running on, including a 290 MB Windows debugging file that nothing ever reads. Removing them cuts roughly half the download on every platform.
Fixed
- New folders didn't appear in the sidebar. Creating a folder outside Cullstack, in Finder, by unzipping something, or from a camera import, updated the file grid but not the folder tree on the left, which kept showing the old list until the app was restarted. Deleting a folder had the same problem in reverse. Applies to the folder you're currently viewing in either pane.
- Shift-dragging could move photos you meant to copy. Shift both extends a selection and asked for a move, so Shift-clicking to select a range and then dragging without letting go of Shift quietly moved the files instead of copying them. Move is now ⌘-drag only; a plain drag still copies.
- Moving files off a network or cloud drive now asks first. A move copies the files and then deletes the originals from the server, and SFTP and WebDAV have no Trash to recover them from. Deleting already warned about this; moving did not. Rearranging files within the same drive is unaffected, since nothing is deleted there.
- Dragging a collapsed stack moved only its top photo. Copying or moving a stacked group by dragging it out of the thumbnail grid or the list acted on the one photo you could see, leaving the rest of the stack behind, while the same operation from the right-click menu correctly took the whole stack. Dragging now takes the whole stack too.
- A drag could reorder photos from an earlier drag. With a folder sorted manually, dragging photos to rearrange them and then dragging something from the sidebar onto the same grid could silently re-run the earlier rearrangement instead of the drop you asked for.
- Searching by filename found nothing when AI was switched on. The search box handed the whole query to semantic search, which can only match photos it has already indexed, so until you had run *Build CLIP index* every file was filtered out and typing a name emptied the grid. Videos were never matched at all. Filenames, folder names, comments and prompt details are now always searched, with semantic matches added on top rather than replacing them, and a file whose name matches sorts to the front.
- Every folder on a network or cloud drive showed an expand arrow, even the empty ones. The arrow was drawn without asking the server, so it was a guess, and the guess was only corrected once you clicked it. Cullstack now checks in the background, one folder at a time, and takes the arrow away when there is nothing inside. The answer is kept, so expanding a folder it has already checked opens straight away.
- The window froze while opening folders on a network or cloud drive. Jumping to a folder several levels deep made Cullstack ask the server for each folder along the way, one after another, and it did that on the thread that draws the window, so on a slow SFTP or WebDAV connection the whole app sat unresponsive until every step had answered. Those lookups now happen in the background and the sidebar catches up as they arrive.
- A pale bar flashed across a folder in the sidebar. Clicking a folder, and especially opening a network drive while its subfolders were still being scanned, could flash a light highlight bar for a single frame on a folder the pointer was nowhere near. The sidebar also repainted itself once for every subfolder found to hold no photos, so a folder with many empty subfolders repainted over and over for several seconds after it opened; those repaints are now grouped into one.
- Folders from a network or cloud drive opened in the wrong pane. Clicking an SFTP, WebDAV, Dropbox or OneDrive folder in the sidebar always opened it in the left pane, even when you were working in the right one. Local folders already followed the pane you were in; now the remote ones do too.
- A phone browsed in the right pane showed the wrong photos. With a phone open in the right pane, changing the sort or turning on *Include Subfolders* quietly switched the pane to a folder on your computer instead of staying on the device. The left pane never had this problem.
- Opening a video from the right pane used the left pane's photos. The arrow keys in the fullscreen viewer then walked the wrong folder.
- Dragging onto a row in list view could copy when it should have moved. Every other place you can drop honoured the key you held when you started dragging; list rows read the key at the moment you let go, so the same drag could copy in one place and move in another.
- Pressing Enter on the Photos or Google Photos library did nothing. Double-clicking them worked, so only the keyboard was affected.
- Disconnecting a network or cloud drive rebuilt the sidebar twice. A visible pause if you had several drives connected.
Changed
- Large internal reorganisation with no change to how Cullstack behaves. The main window's code was split into separate pieces: the sidebar, the filter bar, file operations, settings, the photo info window and others. This is groundwork for future features rather than something you will see. Culling speed was measured before and after each step and is unchanged.
2026.0.5 (2026-08-15)
Added
- Four new languages: 日本語, 한국어, 繁體中文 and Polski. Cullstack now ships in twelve languages. Traditional Chinese uses Taiwanese wording rather than a straight character swap, and Taiwan, Hong Kong and Macau systems now get it automatically instead of Simplified.
- Badge photos matching phrases you write (experimental). Turn on *Settings → AI → Badge photos matching my own phrases* and give it a few comma-separated phrases, such as
kissing, laughing, dancing. While culling, the closest few frames in the folder carry a teal badge for the phrase they matched. They are only text, so a landscape or motorsport photographer replaces them with their own and it works the same. - It uses the search index you have already built, so it costs almost nothing: a whole folder ranks against three phrases in about a tenth of a second, and photos you have not indexed for search are skipped. It ranks within the folder rather than deciding yes or no, because a similarity score that means "yes" for one phrase means "no" for another. Treat a badge as worth a look, not as a fact.
- AI findings now show while you cull. The chips you already see on grid cells, closed eyes, faces, people, explicit content, AI-generated, now appear in the culling view's top bar for the photo on screen. On a burst of near-identical group shots, that's the difference between guessing which frame to keep and knowing.
- They only ever show what has already been analysed. Culling never starts a scan, so it stays exactly as fast as before, and a photo you haven't run the AI over simply shows nothing. As in the grid, a chip appears only for a positive finding, and your corrections win over the model's answer.
- Press E while culling to overrule the closed-eye detector. If it called a squint a blink, or missed one you can plainly see, E flips the answer on the photo in front of you and saves it. Press E again to clear your correction and hand the answer back to the AI. It works on photos you have never run the AI over, it does not advance to the next photo, and Cmd+Z undoes it like any other mark.
- Tag without opening a dialog. ⌘1–9 (Ctrl+1–9 on Windows and Linux) applies or removes one of your first nine tags. It works the same in the grid, in the preview pane, and while culling. In the grid it works across the whole selection: if every selected photo already has the tag it is removed, otherwise it is added to all of them. The tags dialog (T) now prints each shortcut beside its tag, so you can see which number is which. It does not advance to the next photo, and Cmd+Z undoes it.
- A photo's tags are now shown in the culling top bar, in each tag's colour, so you can see at a glance what is already tagged instead of having to remember.
- Tags are the durable record: they filter in the filter bar and are written to XMP sidecars as keywords, so they carry into Lightroom and Bridge.
- Press A while culling to hide or show the AI badges. For a distraction-free final pass. It only affects what's on screen, so detection stays on and your filters and results are untouched, and the choice is remembered next time you cull.
- T now opens the tags dialog while culling. The culling hints bar has listed
T tagsfor a long time and the key did nothing. It works now, tagging the photo you are looking at, without leaving fullscreen. - True RAW decode when you zoom in, automatically where it helps. Zoom past fit on a RAW and Cullstack decodes the actual sensor data instead of enlarging the preview your camera embedded, but only when that preview is too small to be worth showing.
- Older cameras embed a thumbnail: one body in our test set ships a 160x120 preview for a 3088x2310 sensor, so zooming in used to show mush. Those now decode automatically. Modern cameras embed a full-resolution preview, so there is nothing to gain and zooming stays instant. Across our test cameras three of seven decode and four keep the preview, with no setting touched.
- *Settings → Display → Full RAW decode when zoomed in* still forces a sensor decode on every RAW, for anyone who prefers neutral sensor rendering over the camera's own picture style. Culling, thumbnails and the grid never reach this code at all. Cameras newer than the built-in decoder keep using the preview, with no error and no waiting.
Fixed
- Semantic search works again on the larger CLIP model. If you chose the ViT-L/14 variant, searching found nothing at all unless you happened to index a folder first in the same session, so a fully indexed library behaved as though it were empty. Cullstack was assuming the smaller model's embedding size until it had loaded the image encoder, which made every text search and every stored vector unreadable. It now reads the size from whichever model loads first.
- Zoom in Compare now works like the preview pane. It zooms on the point under your pointer instead of the middle of the panel, so the detail you are checking stays where you put it rather than sliding off as you zoom in. A trackpad two-finger drag pans instead of zooming wildly, and pinch works properly. With panels linked, the same point is held in every panel.
2026.0.4 (2026-08-05)
Added
- AI Plug-Ins tells you when a model has a newer version. Models Cullstack downloaded for you now show an Update button when a better version is available. Face detection has one waiting: the new build is the same detector but about 12% faster. Models you installed yourself are never flagged, so if you deliberately swapped in a different model you won't be nudged back off it.
- Person detection installs with a button, and detects more people. It used to need a model under a licence we couldn't recommend to anyone running a photography business, so it was the one feature left as a manual install with a warning. It now uses YOLOX, which is Apache 2.0 and free for commercial use. On a fourteen-person group shot the old model found twelve people and the new one found all fourteen. If you already installed the old model by hand it keeps working and stays where it is.
- A much better AI-image detector, and it installs with a button. The recommended model is now Community Forensics, trained on 2.7 million images from 4,803 different generators, so it recognises images from tools that didn't exist when the old model was trained. It's also a quarter of the size.
- Every AI model now installs with a button. Face detection, "Find this person", closed-eye detection, NSFW flagging, AI-image detection, semantic search and the face-landmark models all install from AI Plug-Ins in one click, person detection included. Several had no ready-to-use download anywhere, so turning those features on used to mean installing Python and converting a model by hand.
- New "AI Plug-Ins" tab in Settings, and face models you can download. Every AI model install now lives in one tab, separate from the settings that control how the features behave. Semantic search and the two face models (face detection, "Find this person", stack-by-face, about 39 MB) install with a button; you're shown the publisher and licence first, and the download comes from that publisher rather than from us, so each model stays under its own terms. Every model is listed with a dot showing whether it's installed, including the ones that can't be downloaded automatically, with the reason given: their publisher releases a
.tfliteor PyTorch file, or the licence rules it out. For those, Get it opens the publisher's page, and you can then drag the downloaded file straight onto its row and Cullstack renames it correctly for you. There's also a button to open the models folder, and the list rechecks itself whenever you return to the tab.
Fixed
- Swapping an AI model now takes effect straight away. Installing or removing a model in AI Plug-Ins while the app was running changed the file but not what the app was using, so the swap looked like it had failed until the next restart. Removing a model had the same problem in reverse: the feature carried on working after the row said it was gone.
2026.0.3 (2026-08-05)
Fixed
- The AI-image detection threshold now has a slider. Cullstack was already reading this setting, but there was no way to change it short of editing preferences by hand. It sits high (85) on purpose, since wrongly flagging a real photograph matters far more than an AI image slipping past.
- NSFW flagging now works with the models it says it supports. Three assumptions in the classifier were wrong for common models: it always fed images channels-first, always scaled pixels to 0-1, and always used 224x224. A model wanting 384x384 failed outright and, because failures are treated as "safe", flagged nothing at all while appearing to work. Cullstack now works out what each model expects when it loads it. NSFW detection is also downloadable from AI Plug-Ins now.
- Dialogs no longer open full-screen-sized when Cullstack is full screen. Settings, the duplicate finder, Compare, and every other dialog now open at their normal size over a full-screen window, the same as they do in a normal window.
- Selecting a range with a sort active now selects exactly what you see. With the folder sorted (for example by date), shift-clicking from one photo to another could select a different set of files than the ones between them on screen, and a copy or move of that selection then carried files you never chose. This affected shift-click, shift-arrow keys, and right-click menus in the thumbnail grid, names view, and list view alike.
- Moving a folder no longer deletes files you chose to skip. When a folder move hit a name conflict and you picked "Skip", the skipped file was still deleted from the source along with the rest of the folder, permanently on SFTP and WebDAV, which have no trash. If anything is skipped or cancelled now, the source folder is left in place.
- Every transfer to or from a network or cloud drive is checked. Copies and moves alike confirm the file arrived at its full size, so a dropped connection, a full disk, or a storage quota can't leave a truncated file behind. On a move nothing is deleted unless the check passes; on a copy you get told rather than finding out months later that a backup was incomplete.
- Copy vs move is now decided the same way at every drop target. Dropping into the list view could move files when the same drag anywhere else would copy them. All five drop targets now honour the modifier held when the drag started, and all of them switch a cross-volume move to a copy for safety, as the grid already did.
2026.0.2 (2026-08-04)
Added
- Saved Filters now works like Tags and Favorites. The section collapses, scrolls instead of growing without limit, sorts by name either way, and takes drag-to-reorder. The new + opens *Manage Saved Filters*, where you can edit or delete them, laid out like Manage Tags. Each row carries the filter's name, search text, colour, rating, flag and tag, all editable in place, so you can change what a filter looks for without rebuilding it. Each row also has a button that re-captures whatever the filter bar is set to right now, so matching your current view takes one click. Filters take the same colour swatches as tags, and the colour shows on the row in the sidebar. Hovering a filter in the sidebar shows the same summary.
- Drag to reorder Favorites and Tags, and sort them. Drag any favourite or tag to move it, and use the new ⇅ button on each section header to switch between Name (A–Z) and manual order, plus Most used for tags, which puts the handful you actually reach for at the top. Dragging while sorted by name switches that list to manual order and keeps the arrangement you just made. Tags reorder within their parent, so the hierarchy stays intact. Both lists offer Name (A–Z) and Name (Z–A).
- Tags now work across all your folders and drives. A new Tags section in the sidebar lists every tag with how many files carry it. Click one and Cullstack gathers those files from wherever they live (different folders, different drives, any connected network or cloud drive) and shows them together. Nothing is moved or copied; your files stay exactly where they are. Tag a few shots in one shoot, a few in another, then open the tag to see them side by side. If some tagged files are on a drive that isn't connected right now, or have been moved or deleted since you tagged them, Cullstack says so rather than quietly leaving them out. The section is collapsed by default and folds away with a click, and it never grows past its own height no matter how many tags you accumulate, the folder tree keeps its room. Favourites works the same way now, so neither list can crowd out the tree.
Changed
- Tag hierarchy is visible in the sidebar. You could always give a tag a parent in Manage Tags, but the sidebar listed everything flat, so the structure you built only showed up in Lightroom. Child tags are now indented under their parent. Deleting a parent promotes its children rather than stranding them.
- Right-click a tag in the sidebar to delete it, the same way you remove a favourite. It asks first and tells you how many files carry the tag, your files aren't touched, only the tag is taken off them.
- Adding a folder to Favorites works from either pane. The + button read only the left pane's folder, so pressing it while working in the right pane did nothing at all. It now uses whichever pane you're in, and says which folder it added. (To remove one, right-click it in the list.)
- Manage Tags is easier to read. Tag colours are now a small set of clear swatches instead of hex codes and a full colour wheel, and the row no longer squeezes its own labels, the "Save" button and the delete button were being cut down to "…" and a blank square. Save and Add are now a green check, and delete is a red ✕.
- Duplicates: biggest space savings first. Duplicate groups are now ordered by how much room deleting the extra copies would actually free, so two large duplicated videos rank above five tiny copies of an icon. Previously the longest group came first, which often buried the real win.
- Duplicates: right-click a file to check it. Every file in a result now has a right-click menu with Open and Reveal in Finder / Show in Folder, so you can see where a copy actually lives, or view it full size, before deciding which one to keep.
- Duplicate finder now pre-selects the copies for you. When a folder holds the same photo more than once,
photo.jpgalongsidephoto (1).jpgorphoto copy.jpg, Cullstack now ticks the copies and leaves the original untouched as soon as the results open, instead of making you check them one by one. It only does this when the answer is unambiguous: every copy in the same folder, and one clear original. It understands the copy names every platform uses: macOSphoto copy, Windowsphoto - Copy (2), Linuxphoto (another copy)and olderCopy of photo, including copies of copies, and translated ones likeCopie deorKopie von. Duplicates spread across folders, or where no name is clearly the original, are left unticked for you to decide. There's also a new Original (by name) entry in the "Check all but…" menu to re-apply it. Nothing is deleted without you pressing Delete and confirming, and deletes still go to the trash.
Fixed
- Picking a colour now applies straight away for both saved filters and tags, instead of being discarded unless you also clicked the row's save button.
- Favorites and Tags rows no longer render as odd pill shapes in the AtlantaFX themes (Nord, Dracula, Cupertino and the rest). They now look like the rows in the folder tree, in both light and dark.
- Right-click menus now follow the interface text size. Menus were stuck at the default size no matter where you set the Display slider, which was most noticeable at the larger settings. This affected every menu in the app, not just the new ones.
- A deleted tag no longer comes back. Deleting a tag removed it from the database but left it written in each photo's
.xmpsidecar, so the next time you opened that folder the tag was read back in and recreated, in a default colour, not the one you chose. Sidecars are now updated too, in the background so a tag used on thousands of photos doesn't stall the app. - No more Java warnings in the console on launch. Cullstack now declares the native access JavaFX needs, so starting it no longer prints "restricted method" warnings. Future Java versions will refuse the access outright rather than warn, so this also keeps the app working on them.
2026.0.1 (2026-07-31)
Fixed
- Switching theme takes effect straight away. Changing between dark and light mode only fully repainted after quitting and reopening Cullstack. Until then parts of the window kept the old colours (the sidebar, the area behind the grid, the tab strip above it, and the status bar could all be left behind, sometimes leaving grey text on a white panel). Everything now repaints immediately, in every theme.
- Sidebar folder rows look right in every theme. In the Cupertino, Primer, Nord and Dracula themes the folder tree drew a misshapen highlight, an oddly-clipped pill with slivers down the right edge of each row, and a near-white row on dark backgrounds. Hover and selection now draw cleanly in all themes. (Modern/classic was already correct.)
- Photos that are secretly a different format now open on Windows and Linux. Some exporters (Google Photos with Samsung Galaxy shots, for example) save a plain JPEG but still name it
.heic. Those showed up as blank thumbnails on Windows and Linux (they already worked on the Mac). Cullstack now goes by what the file actually contains rather than trusting its name, so they open everywhere. Full-size images are handed through untouched, with no quality loss from re-encoding. - HEIC photos now open on Windows and Linux. HEIC (the format iPhones save in) previously displayed only on the Mac; on Windows and Linux those photos wouldn't load at all. Cullstack now bundles its own HEIC decoder on those platforms, including the tiled files modern iPhones produce, so your iPhone photos work everywhere. The Mac keeps its existing (faster) built-in decoder, unchanged.
- Background tabs look like tabs again. With any of the Primer, Nord or Dracula themes, or Cupertino, which is the default, the tabs you weren't currently on lost their rounded chip and sat as bare text next to the active blue one. They're now shaded to match whichever theme you're using, so the whole tab strip reads as a set.
2026.0 (2026-07-27)
Added
- Control thumbnails on network drives. A new Settings → Display → Network-drive thumbnails option lets you choose Photos & videos, Photos only (the default), or Off (icons only) for WebDAV, SFTP, Dropbox, and OneDrive. By default Cullstack no longer downloads whole remote videos just to make a thumbnail, so browsing a network folder over a slow connection stays responsive. Local drives and phones are unaffected.
- Press Esc to stop a slow load. If a large photo or a network thumbnail is taking too long, Esc now clears the spinner and hands the app back to you immediately.
- See rotation progress at a glance. Rotating a video or photo now appears in the Activities (⇅) menu with a live progress bar, and, for video, the percentage and estimated time remaining, while the toolbar icon flashes blue to show something's working. A longer video rotation (which re-encodes the file and can take a few minutes) no longer looks like nothing is happening. In full-screen video, the control bar stays visible with the countdown until the rotation finishes.
- Subtitles and captions for video. Cullstack now shows subtitles from an external
.srtor.vttfile placed next to the video (auto-detected, or load one manually), with a CC menu to choose a track or turn captions off. Great for watching with captions or for accessibility. - Full-screen video controls. In full-screen video, move the mouse to reveal the control bar (it auto-hides after 10 seconds of no movement, and the cursor hides with it). Because macOS hides the window buttons in full-screen, the bar includes Close and Exit Full-Screen buttons.
- Work with multiple folders at once. Cmd/Shift-click several folders, in the grid *or* the sidebar folder tree, then copy, move, or delete them all together. (Previously a right-click acted on only the folder you clicked, even with several selected.)
- Choose how videos play. Settings → Playback → *Video acceleration* lets you pick Software (most compatible), Hardware acceleration (GPU decode), or Metal (a zero-copy GPU path on macOS, the smoothest). The choice applies to the next video you open; no restart needed.
- Convert to HEIC or WebP. The *Convert* action (and its Settings default) now offers HEIC and WebP alongside JPG and PNG, both far smaller than JPEG at the same quality. HEIC keeps your camera info, date, and GPS; the quality slider applies to both.
- Open AVIF photos. AVIF images now display everywhere in Cullstack, grid, preview, full-screen, and culling.
- Thumbnail strip while culling. The full-screen cull view now shows a horizontal strip of thumbnails along the bottom with the current photo centred, so you can see what's coming and click any nearby shot to jump to it. The strip matches your grid's thumbnail size (adjust it with the grid's size slider).
- Browse every photo and video full-screen. In the full-screen viewer, use the Left / Right arrow keys to move through all your photos *and* videos. Hold Shift with the arrows to jump forward or back inside a video; you can set the jump length (in seconds) in Settings.
- Search by file or folder name. The top search box now matches folder names and paths too, with an option to search subfolders. Matching photos show the folder path they came from.
- Date filter. Narrow your view by a quick preset (today, last 7/30 days, this month, this year), a custom date range, or one specific day, all based on when the photo was taken.
- Find this person, adjustable sensitivity. A slider in Settings lets you loosen or tighten how closely a face must match.
- Fix File Dates (Tools menu). Restores photo dates that an operating system or upload may have wiped, first from the photo's own metadata, then from common filename patterns (including Facebook downloads and screenshots), and finally from Cullstack's own record of when it first saw the file.
- Convert to JPG or PNG. Choose your default in Settings. PNG stays perfectly lossless; JPG has a quality slider (60–100%, default 92%) so you decide the trade-off between size and fidelity. Camera info, dates, and GPS are carried into the JPG.
- Back up or transfer your work. *Export collection* saves your ratings, flags, colour labels, tags, and comments; *Import collection* restores them on another install or after a reinstall. Imports won't overwrite newer edits.
- Experimental Metal video playback (Settings, off by default). A faster GPU video path for advanced users, clearly marked experimental.
- Per-pane tabs. Each pane has a tab strip, the folder name on each tab, the active one highlighted, a + to open another, and an ✕ to close. Great for jumping between shoots, selects, and client folders without losing your place. Works with local *and* remote drives (WebDAV/SFTP/Dropbox/OneDrive). Open a folder in a new tab by right-clicking it (grid or folder tree), Option-clicking, or middle-clicking; ⌘T opens a tab, ⌘W closes one. Your local tabs reopen next launch.
- Adjustable interface font size. Settings → Display → *Interface font size* scales the entire app, main window and every dialog, from one slider. Ideal for high-DPI / 4K displays; main and secondary text scale together.
- Reopens exactly where you left off. Cullstack now restores your full session on launch, split view, every tab in each pane (local *and* remote drives), the active tab and pane. Local folders appear instantly; a remote drive shows a "Connecting…" placeholder and opens once reconnected, falling back to your home folder if the network is unavailable.
Changed
- Cull mode now matches Lightroom. If you're coming from Lightroom, the keyboard just works:
- Auto Advance, applying *any* mark (a star rating, a Pick/Reject flag, or a colour label) moves to the next photo. Tap Caps Lock to toggle it (the » chip in the top bar shows the state, green is on), and hold Shift while marking to stay put and stack several marks on one photo (e.g. Shift+P, Shift+3, 6).
- Flags, P picks, X rejects, U clears (a mark always *sets*, matching Lightroom, rather than toggling).
- Colour labels now use Lightroom's keys everywhere, grid, image viewer, and culling: 6 red, 7 yellow, 8 green, 9 blue, with Cullstack's extra colours (orange, purple, pink) on Option+6/7/8. The Keyboard Shortcuts reference (F1) is updated to match and now lists the culling-mode keys (Auto Advance, stack).
- Marks on the filmstrip, each thumbnail shows its Pick/Reject as a green/red border, stars (bottom-left) and colour dot (bottom-right), so you can see your keeper/reject pattern across the whole strip at a glance. The current photo keeps its blue outline.
- The filename/position readout is now centred above the photo instead of tucked in the corner.
- Video playback now defaults to the best mode for your system. New installs use Metal on macOS (the smoothest, zero-copy GPU path) and hardware GPU decode on Windows/Linux, instead of the most-compatible software decode. You can still pick any mode yourself in Settings → Playback, and your choice is remembered.
- New folders auto-number instead of failing. Creating a folder whose name already exists now makes
New Folder (1),New Folder (2), …, the same numbering as duplicate files, rather than showing an error. Works in the grid and the folder tree, on local and remote drives. - WebP, TIFF, and PSD photos load much faster. Cullstack now decodes them with the native macOS image engine instead of a slower built-in decoder, up to ~7× faster on large WebP, everywhere: grid, preview, full-screen, and culling.
- Culling focuses on photos. Videos are skipped in the rapid cull sequence (a single frame can't tell you if a video is good), they still play in the grid, preview, and full-screen viewer as before.
- Copying and moving photos now keeps their original date. Moving a photo to a USB drive and back no longer changes its creation date.
- Consistent copy naming. Duplicates and keep-both copies are now numbered sequentially,
photo (1).jpg,photo (2).jpg,photo (3).jpg, everywhere (local, remote drives, Duplicate, convert, and export), instead of the old_copy_copychaining. - Strip private data is now lossless. Removing EXIF/XMP/IPTC metadata no longer re-compresses the image, the photo is pixel-for-pixel identical, just without the hidden data. (HEIC and RAW files can't be stripped this way and now say so clearly.)
- Right-click menu reorganised into clearer groups (open, clipboard, rename, metadata, compare, archive, convert, delete).
- Show hidden files now updates the folder tree immediately, no restart.
Fixed
- Fully translated interface. The text still appearing in English is now translated in every supported language: the filter-bar labels and their options (ratings, flags, colours, sort order), a range of dialog labels, titles and buttons, and various status messages.
- The Keyboard Shortcuts window resizes cleanly. Dragging it taller now expands the shortcut list to fill the window instead of leaving an empty gap below the content.
- Full-screen stays full-screen when you move between photos and videos. Stepping from a full-screen photo to a video (or back) with the arrow keys used to drop out of full-screen to a smaller window. The full-screen photo and video viewers are now a single window, so moving through a mixed folder of photos and videos stays full-screen the whole way.
- Closing a full-screen video no longer leaves a frozen frame on screen. Pressing Esc (or Close) while a video was full-screen could strand a frozen picture on the desktop that only quitting the app would clear, the viewer now exits full-screen and dismisses the video window cleanly on every close.
- Phone import no longer re-copies duplicates it already has. When you import from the same iPhone or Android phone again, Cullstack now catches photos it already imported even if the phone reports them with a changed path or date between connections (which iPhones in particular do), it compares the actual file contents, so you no longer end up with duplicate copies. (Choosing "Re-import everything" still re-downloads on purpose.)
- Switching between videos is smoother. Moving from one video to the next no longer briefly freezes the interface, the work to open the next clip now happens in the background, so playback and the cursor stay responsive through the transition.
- Culling huge photo folders no longer runs out of memory. Very large images (such as 8k WebP) could exhaust memory and crash near the end of a folder; the cull view now decodes with bounded memory and stays stable.
- The cull screen no longer blacks out when you race through photos. Holding the arrow key or scrolling quickly now keeps images on screen, each frame shows an instant thumbnail that sharpens when you pause, instead of going black, and it always lands on the right photo when you stop.
- Very high-resolution photos load noticeably faster. Large images (6k+) now decode by sub-sampling during decompression instead of decoding at full resolution and shrinking, cutting a second or two off the wait in the preview, full-screen, and culling views.
- Large photos show a loading spinner while they decode (in both the preview pane and the full-screen viewer), so opening a very high-resolution image no longer looks like a freeze. Small photos load instantly with no spinner.
- Crash when switching between videos quickly has been resolved on both the standard and hardware-accelerated playback paths.
- Rapidly stepping through videos in full-screen no longer risks a crash.
- Copy/paste to a remote drive now refreshes the destination pane immediately, even when it isn't the active pane.
- The preview shows a remote file's real name (e.g.
photo (1).webp) instead of its internal temp-download name. - Closing pane 2's last tab now correctly un-checks the Split toggle, so a single click brings the split back.
- Deleting a folder in the tree now returns you to its parent folder, instead of jumping to an unrelated neighbouring folder.
- ---
- *Earlier development history is recorded in the project's commit log.*