Changelog

Every release, newest first. BurstPick is a perpetual license — every update below is free for existing owners.

  1. v1.10.3

    Aug 15, 2026

    Added

    • Shift+F turns focus peaking off directly, and remembers what to turn back on. Focus peaking cycles through four modes (off → contrast edges → fine details → both), so turning it off from the far end used to take three presses of F. Shift+F now jumps straight to off from any mode, and pressing it again restores exactly the mode you left — in both the Lightbox and Compare.
    • New setting: reset focus peaking when you return to the grid. Off by default, so peaking keeps behaving exactly as it does today — on for the rest of the session, off again only at the next launch. Turn it on in Settings → Viewing and closing the Lightbox, Compare, or burst review back to the grid now turns peaking off too, so it never carries into a burst you didn't mean to dim.

    Changed

    • Smart Zoom is back to off by default, and existing installs are switched back too. 1.10.0 turned Smart Zoom on by default and, once, force-switched it on for every existing install. Since then, a look at how often its eye-tracking recovery absolutely re-centers the view — on real burst photography, not a synthetic test — found it firing on a large share of zoom-locked advances, and that a fix in the works removes only the small, nuisance-sized shifts while leaving the large, disorienting ones. Rather than hold the default on for a fix that isn't there yet, we're switching it back off, and switching your install back off too if you never touched the toggle yourself. This undoes 1.10.0's force-switch rather than adding a second one on top of it, so if you had deliberately turned Smart Zoom on after 1.10.0, this update turns it back off as well — we have no way to tell that choice apart from the one we made for you in 1.10.0. Either way, the Smart Zoom pill next to Lock zoom (Lightbox) and Sync pan/zoom (Compare) is right there to turn it back on, and once you do, it stays on across relaunches. Fresh installs are unaffected — they start off already.

    Fixed

    • Sidecars written by earlier versions get an outdated internal identifier corrected, in place. BurstPick's XMP sidecars carried a namespace identifier pointing at a web address we don't own. New sidecars use the correct one, and the next time BurstPick writes to a folder it repairs that single line in older sidecars it wrote itself, reporting how many it fixed. Your ratings, flags, and keywords are left byte for byte as they were, and sidecars written by other apps are never touched. It happens once per file, so the count drops to zero on the next run.
    • Smart Zoom now keeps the view where you put it, and only steps in when it has actually lost the subject. Two things were quietly overriding your framing on every advance. First, when the point under your loupe sat anywhere near a detected eye, Smart Zoom stopped following the picture and jumped straight to that eye instead — and how near counted as "near" grew with the size of the animal, so on a frame-filling subject you could not compose a head at all without being pulled onto the eye. Aim at the nose, arrow forward a couple of frames, and the nose was gone. It now follows the actual detail under your loupe; deliberately double-clicking an eye still snaps to it, in the Lightbox and across Compare. Second, on a frame where the eye detector's confidence happened to dip below its threshold, Smart Zoom re-centered on the middle of the animal's body whether or not it had lost anything — so a single frame in an otherwise steady burst could throw the view a couple of hundred pixels onto the bird's chest and back again on the next frame, even on a tripod with a motionless subject. It now re-centers only when the tracking has genuinely failed: it lost the point, or the point is no longer on the animal. Recovering the view on a bird in flight, where the eye really does disappear, is unchanged.
    • No more black edges when a locked zoom crosses between landscape and portrait frames. With Lock zoom on, the view carried your pan straight across the navigation and only ever checked it against the frame you were leaving — so arrowing from a horizontal frame to a vertical one could leave the image pushed halfway out of the viewport, with black filling the gap until you next dragged. The pan is now re-checked against the incoming frame the moment it loads. This one is reachable with Smart Zoom switched off, so it also affects anyone using Lock zoom on its own.
    • Arrowing quickly through a burst no longer sends a locked zoom off toward the middle of the frame. When a second arrow press landed before the next photo had finished loading, Smart Zoom had no way to tell where your loupe actually was and fell back to assuming the center of the frame — which could pull the view off the detail you were inspecting and, worse, made it treat deliberately off-subject framing as if you had been following the subject all along. It now simply holds your framing for that step and picks tracking back up on the next one. Slow, frame-by-frame walking is unchanged.
    • RAW decode failures now show up in Export Diagnostics. When a file's sensor data can't be unpacked at all (for example Nikon "High Efficiency" NEFs, which use a codec our decoder doesn't support), the viewer's zoom ceiling was silently the embedded preview and nothing on disk explained why — the error only ever went to the console, which nobody ships us. It now lands in main.log, so a diagnostics bundle from an affected session can actually confirm the cause instead of showing zero decode activity.
  2. v1.10.1

    Aug 13, 2026

    Fixed

    • Smart Zoom no longer yanks the view onto the bird when you had deliberately zoomed in on something else. If you locked the zoom, panned to the part of the frame you actually wanted to inspect — the second animal, a wingtip, a detail off to one side — and then arrowed to the next frame, the view could jump clear across the picture and land on whatever BurstPick had picked as the subject, sometimes far enough that the edge of the photo came into view and you got a black band down one side. It was maddeningly inconsistent, because it depended on how confidently the eye was detected in the frame you were moving to: some frames held your position perfectly and the next one threw it away. Smart Zoom now recognizes framing you chose by hand and leaves it alone, and when it does move the view it can no longer push past the edge of the photo. Nothing changes about what it is there for: when you are following the subject and it drifts out from under the loupe, Smart Zoom still pulls it back.

    • Smart Zoom no longer throws away your framing on the first frames after opening a folder. The fix above covers the version of Smart Zoom that compares the two frames pixel by pixel, which needs BurstPick to have built a preview of the photo you are moving to. Before that preview exists — during the scan, and on the first frames of a folder you have just opened — Smart Zoom falls back to a simpler method, and that one had the same flaw: pan somewhere by hand, press the arrow key, and the next frame's subject was planted dead center, wherever you had been looking. The simpler method now does what it was always meant to do, which is nudge your view by however far the subject moved between the two frames and otherwise leave it exactly where you put it.

    • Opening a folder no longer lands on a blank black screen. If you were reviewing a photo in the single-image or burst view, went back to the folder picker, and then opened a different folder, the app could come up with the toolbar showing but the whole photo area empty — the images were loaded and simply were not drawn. Clicking Grid brought them back. The single-image view was still holding on to the photo you had been looking at in the previous folder, which no longer exists in the new one, so neither the grid nor the photo view was drawn. Opening a folder now always returns you to the grid with a clean slate, and the photo area can no longer be left showing nothing.

    • Deleting photos now reclaims their cached images automatically. Every deleted frame used to leave up to seven cached versions of itself on disk — thumbnail, preview, and the sharper tiers built for zooming — and the only way to get that space back was to open Settings → Storage and click Clean up. If you cull for real and at volume, that pile grew forever. The cached images are now removed as part of the delete, and the same goes for confirming the removal of photos whose files have vanished from disk. Undo is unaffected: during the undo window nothing is touched, so restoring a delete is still instant and needs no re-decode.

    • Clean up no longer deletes the thumbnails of photos you moved to Picks or Rejects. Moving a photo gives it a new location, and BurstPick tracked it under a new identity while its cached images kept the old one — so Settings → Storage counted those images as leftovers from photos that no longer exist, and Clean up deleted files that photos still on screen were displaying. The affected frames went blank in the grid and stayed blank until the next scan. Storage now recognizes any cached image a live photo is pointing at, so the count is honest and Clean up only removes what is genuinely unused. Clearing one folder's cache also reclaims those images now, which it previously missed.

    • Network paths (UNC, \\server\share\...) are now redacted in logs and diagnostics bundles. A folder stored on a NAS previously rode through completely unsanitized — server name, share name and full folder tree, all in the clear — while a drive-letter path on the same machine was correctly redacted. The parent tree (and the server/share) is now hashed the same way a local path is; only the file or folder name itself is kept.

    • Write XMP to Source now says why a photo was skipped. If you already imported into Lightroom or darktable with auto-write-XMP on, every file already carries a sidecar written by that app — and BurstPick has always left those alone rather than overwrite someone else's edit history. Until now the toast just said "(N skipped)" with no explanation, which read as a bug. It now adds a line naming the reason: "N photo(s) already had a sidecar from another app (Lightroom or darktable); BurstPick left it/them untouched." The Overwrite existing .xmp files setting also gained a helper line clarifying it only applies to sidecars BurstPick itself wrote.

  3. v1.10.0

    Aug 11, 2026

    Changed

    • Smart Zoom now switches itself on for existing installs too, once. The change above turned Smart Zoom on by default, but a default only applies to a setting you have never had a value for — and BurstPick had been quietly recording "Smart Zoom: off" in your settings file every time you changed any setting at all. So on this update, and only this once, BurstPick clears that stale value and turns Smart Zoom on. If you prefer the old fixed-spot zoom, switch it off with the Smart Zoom pill and it will stay off from then on. Fresh installs are unaffected — they already had it on.

    • Smart Zoom is now on by default, and it finally has a button. When you are locked at 100% and step through a burst, BurstPick now tracks the subject's eye from frame to frame and keeps it under the loupe, instead of holding a fixed spot and letting the bird drift out of the crop — in the Lightbox with L, and across tiles in Compare with pan/zoom synced. This is not a new feature: it shipped some time ago, but the only way to switch it on was an unlabeled caret tucked beside the zoom controls, with no entry in Settings and no shortcut, so almost nobody ever found it and almost nobody was getting it. It is now a plainly labeled Smart Zoom pill sitting next to Lock zoom and Sync pan/zoom on both surfaces, lit when it is active — and that same pill is the off-switch if you would rather zoom held a fixed spot. Your choice is remembered between launches. Mouse-wheel zoom is unchanged and still follows your cursor. The toggle was previously labeled Eye relative.

    • Focus peaking marks now appear on every Compare tile at the same moment. Previously the tiles lit up one after another — roughly a second apart on a high-resolution camera — because a single background worker measures every frame in turn. It still does (running them at once would double the memory a 45-megapixel analysis needs), but the results are now held and shown together, which is what side-by-side comparison actually needs. Peaking also no longer runs for the view you are not looking at: switching between the Lightbox and Compare used to leave the hidden one quietly measuring frames ahead of the ones on screen.

    • Focus peaking now starts off every time you launch BurstPick. It used to be remembered, so if you left it on the app came back up with your photos dimmed under a layer of colored peaks, with nothing on screen explaining why the images looked like that. Peaking is unchanged within a session: turn it on with F and it stays on across every frame, every burst, and both the Lightbox and Compare until you turn it off — so a long cull is never judged half with peaking and half without. Only the launch state changed. Your peaking opacity and the Dim photo behind focus peaks setting are still remembered, since those are how peaking looks rather than whether it is on.

    Fixed

    • Scores on a single-criterion preset now match the criterion you chose — and those scores will look different from what you saw before. If you set the importance sliders so that only Focus matters, a frame whose focus measured 92 used to display 98, and almost everything sharp piled up on 96–98. The display curve that did this was fitted for the normal case, where the score is an average of six criteria and averaging pulls everything toward the middle; it spreads that squashed middle back out. When one criterion carries all the weight there is no averaging and nothing to spread, so the curve now fades out as you concentrate the sliders, reaching a straight pass-through at a single criterion: focus 92 now reads 92. The ranking within every burst is unchanged — the same frame is still picked — but the numbers on skewed presets move, so a threshold you had memorized ("anything over 95") will need re-learning. Balanced presets, including Default, Sharpness Priority, and the cross-burst keeper rank, are completely unaffected; their numbers are identical to before.

    • Focus peaking no longer says "preparing full resolution…" forever when the image loaded but the peaks could not be computed. The last remaining route to a badge that never resolved: the full-resolution file was read and decoded correctly, but the peaking pass itself came back empty, and nothing reported that. The badge now settles with its own plain explanation — and, importantly, a photo that genuinely has nothing to mark (a frame of empty sky) is still treated as a normal, successful result rather than an error.

    • Scan time expectations are set earlier and shown more clearly, including while you're already browsing the grid. A large folder now gets a heads-up as soon as its size is known — before scanning ("a large folder of RAW files can take a while") and during it ("5,127 photos found so far — a folder this size will take a while") — rather than leaving you to guess. The time-remaining estimate that already existed is now its own bold line instead of buried as the third clause of a small gray status line, on the main progress screen and on the background-scan toast. A new toolbar chip also carries the same status once you've dropped into a folder's grid while its scoring is still finishing behind you — previously nothing on screen mentioned an in-progress scan once you'd started browsing. The countdown itself is also steadier now: it used to repaint every tick (jumping between 30-50 seconds, and occasionally leaping past a minute) even though the underlying average was correct — it now rounds to a coarseness that matches what the estimate actually knows and only moves once a change is real, instead of flickering on every sample.

  4. v1.9.3

    Aug 10, 2026

    Added

    • Renaming or moving a folder is no longer a dead end — point BurstPick at where it went and everything comes back. Previously, if you renamed the folder a session was scanned from, the app correctly refused to destroy anything, but it also offered no way forward: the grid kept painting from cached thumbnails while 100% zoom, focus peaking, export, Move and rescan each failed on their own, and the only fix was renaming the folder back exactly as it was. There is now a Locate folder… action on the notice, plus a permanent File → Relocate Folder…, that opens a folder picker and re-points the session in place: every pick, flag, score, burst and cached thumbnail is kept, and nothing is re-scanned. If the folder you choose does not look like the session's folder, BurstPick says so and makes you confirm before anything is rewritten — and canceling out changes nothing at all.
    • A support bundle can now be tied to the exact run it came from. Every launch now writes a single banner line to main.log recording the app version, channel, OS, resolved feature flags, and whether crash reporting actually armed — so a bundle from a non-scan issue (a peaking, Compare, export, or licensing report) is no longer a near-empty log with no way to identify the build. Crash logs now also record the app version and channel, and a shared run ID threads through the launch banner, crash logs, and any Sentry event from the same run, so the three can be matched up. Export Logs now also includes a system.json alongside the log files, matching what Export Diagnostics has always included.

    Fixed

    • Focus peaking no longer sits on "preparing full resolution…" forever when the original photo can't be read. Peaking measures the full-resolution image, so when one isn't cached yet it asks for a fresh one. If that request came back empty — most often because the folder had been renamed or moved, or the drive was no longer there — nothing was reported and nothing tried again: the badge stayed on "preparing" for the rest of the session. It now stops within a moment and says which thing went wrong — that the original photo file could not be read, or, when the original was fine but no full-resolution image could be prepared, that instead. Frames that already have a full-resolution image cached keep peaking normally, and a request that was merely dropped because the app was busy is retried once rather than being reported as a failure.
    • The "could not read the photo folder" message now names the folder, says a rename or move is the likely cause, offers the fix, and stays on screen until you dismiss it. It used to appear for eight seconds with no folder name and no action, which was not long enough to read — and the two places that report this exact situation had drifted into saying two different things about it. Both now say the same thing.
    • Sanitized diagnostic logs no longer leak the rest of your folder path when the folder name has a space in it. The path scrubber that hashes folder names before they reach main.log or a diagnostics export stopped at the first space it found, so a folder like Z:\1. Photography\2026\2026_7_26_NJ Rabbit and Cardinal was only partly redacted — everything after that first space rode through in the clear. Since almost every real photo folder name has a space in it, this was the common case, not an edge case. Folder paths are now fully redacted regardless of spacing.
  5. v1.9.2

    Aug 9, 2026

    Fixed

    • A folder BurstPick momentarily could not read no longer turns your whole shoot gray. When the app re-checked a folder for changes and the read of the folder itself failed — a card reader hiccup, a permission change, another program holding the folder open — the empty result was taken at face value: every photo in the session was marked as missing, which grayed out the entire grid and was written to the saved session, so it survived a restart. Nothing in the app could undo it, and "Reset filters" correctly reported that no filters were on. A failed folder read is now recognized as a failure rather than as an empty folder, and a check that would mark every photo in a session missing at once is refused outright — the app says it could not read the folder and changes nothing. Sessions already grayed out this way recover on the next successful check. Genuinely deleting files still marks exactly those files, and a folder you really did empty still works.
    • Opening a folder BurstPick can't reach now says so, instead of quietly showing you a session made of cached thumbnails. If a folder had been renamed, moved, or was on a drive that wasn't there, opening it looked completely normal: a full grid, no message, no rescan — because every photo was painted from the thumbnail cache. The first hint that anything was wrong came much later, as individual full-size photos failed to load one at a time. BurstPick knew all along; nothing was reporting it. Opening such a folder now tells you the folder could not be read and that it may have been renamed or moved, with a "Try again" button for once you've put it back. Your session is still loaded exactly as it was — no photo is marked missing, nothing is removed, and every pick and flag is untouched.
    • Reopening a session with files gone from the folder no longer says they were "removed." They never were. A photo whose file is gone is marked as missing and kept — same place in its burst, picks and flags intact, and you can restore it or remove it yourself from the grid. The old message said the photos "were stale or missing and removed," which was untrue in every part and arrived at exactly the moment those frames turned gray, so it read as though BurstPick had deleted your work. It now says how many photos are no longer on disk and that they were kept. Files you merely edited outside BurstPick are no longer counted in that message at all — nothing happens to them, so there was nothing to report.
    • Focus peaking no longer dims a frame it can't actually show marks on. On a folder scanned by an older build, the full-resolution image peaking measures could be a session-recorded path whose file was no longer there. The frame dimmed the instant that path was found, then quietly failed to load and never recovered — a permanently dark, markless photo. Peaking now waits for the image to actually load before dimming, and automatically retries once in the background if the file turns out to be unreadable. If that retry also fails, it shows a calm "couldn't read the full-resolution file" badge and stops — rather than either spinning "Preparing rendering" forever, or (on a drive that keeps returning bad reads) retrying endlessly and re-extracting the full-resolution image over and over. Compare's pending badge also now hides correctly for a photo marked missing, matching the Lightbox.
    • A damaged cached image no longer leaves a photo re-rendering forever. If one of the cached full-resolution files BurstPick keeps on disk was still there but damaged — the usual cause is a drive or card that dropped part of a write — the viewer got stuck in a cycle: it would notice the file wouldn't open, throw it away, rebuild it, get the same damaged file back, and start over. The resolution label under the photo flickered between "preview" and "preview (generating…)" indefinitely and the app re-decoded the photo every few seconds for as long as it stayed open. BurstPick now recognizes an empty cached file as missing rather than usable, so it genuinely rebuilds it; and if a rebuilt file still can't be opened, it stops after one retry and simply shows the preview. A cached file you delete yourself is still rebuilt immediately, exactly as before.
  6. v1.9.1

    Aug 8, 2026

    Added

    • Shift+Left / Shift+Right now moves between bursts inside Compare. The shortcut already stepped burst-to-burst in the grid, the lightbox, and Burst Review, but Compare ignored the Shift and just changed frame — so working through a shoot meant backing out of Compare and re-entering it on every burst. Compare now re-opens on the next burst the way it would have on its own: the survey wall for a big burst, the judging view for a small one, with fresh frames rather than anything carried over from the burst you left. It follows the grid's current burst order and stops at the first and last burst instead of wrapping around. The plain arrow keys still do what they always did on each view.

    Fixed

    • Focus peaking no longer waits forever on a RAW you have already opened once. Peaking measures one full-resolution version of the frame, and for some RAW files that version was never created — the app already had a good-enough copy for display, so it never made the one peaking needs. Pressing F on those frames dimmed the photo and then did nothing, permanently, which read as the photo breaking rather than as a wait. Peaking now asks for the full-resolution image itself when it needs one, on both the Lightbox and Compare. While it is preparing, the frame stays at full brightness and a "Focus peaking — preparing the full-resolution image…" badge explains the wait; the background dimming starts only once there are actual peaks to make legible.
  7. v1.9.0

    Aug 7, 2026

    Added

    • Send the scores to Lightroom as keywords. Stars were the only score Lightroom could see, they crushed six criteria into five buckets, and they collided with your own star workflow. Settings then Export then Score Keywords now writes each score into its own keyword — for example BurstPick|Focus|95-100, BurstPick|Flag|Pick, and BurstPick|Burst|Best for the frame that won its burst — which Lightroom shows in the Metadata panel, the Library Filter, and smart collections. It is off by default; when you turn it on you choose which criteria get tagged and what the top-level keyword is called, so it can nest into a convention you already run. Scores are written as bands, not exact numbers, so your keyword list stays a handful of rows instead of hundreds — and the bands are finer where culling decisions actually happen (95-100, 90-94, 85-89) and coarser down where nothing gets kept (40-59, 0-39). Keywords already on your files are carried through, and re-scoring replaces BurstPick's old bands rather than stacking a second contradictory set on top. Lightroom only reads a sidecar at import or via Metadata then Read Metadata from File, and it includes keywords in exported JPEGs unless you untick "Include on Export" on the BurstPick keywords.

    • Score keywords now work in apps that do not read hierarchical keywords. Lightroom Classic nests BurstPick|Focus|95-100 into a tree; the Lightroom desktop app and most non-Adobe catalogs ignore hierarchical keywords entirely and would have shown you nothing. Settings then Export then Score Keywords now has a Keyword style choice: hierarchical, flat, or both (the default). Flat writes the same facts as ordinary keywords — BurstPick-Focus-95-100, BurstPick-Flag-Pick, BurstPick-Burst-Best — each one naming its criterion, so Focus at 90-94 and the overall score at 90-94 stay two separate keywords you can filter on independently. Every flat keyword starts with your top-level keyword, so they sort together and BurstPick can clean up its own old ones when you re-score.

    • XMP sidecars can now use darktable's filename. darktable and digiKam look for a sidecar named after the whole file — DSC_1234.NEF.xmp — while Lightroom looks for DSC_1234.xmp. BurstPick wrote only the Lightroom name, so a darktable user's ratings and labels landed in a file darktable would not reliably pick up, and for RAW files older darktable versions ignored it outright. Settings then Export then Lightroom / XMP now has a Sidecar filename choice: Adobe / Lightroom, darktable / digiKam, or Both (the default, one file of each with identical contents). Whichever you pick, BurstPick reads, moves and trashes both names, so changing the setting never strands sidecars you already have. BurstPick also never overwrites a sidecar it did not write: if you already imported a folder into darktable, the sidecar holding your edit history is left exactly as it is. Note that once a photo is in darktable's library, darktable's own database takes precedence — this makes culling before import work cleanly, and picking up changes after import still depends on darktable's "look for updated XMP files on startup" preference.

    • Zoom past 100% to compare fine detail. The scroll wheel now goes up to 400%, so you can put two frames side by side and judge which catch light is crisper. The wheel still pauses at 100% on the way past — keep scrolling and it carries on a moment later — so 100% stays easy to land on. Above 100% the zoom readout marks that you are looking at magnified pixels rather than new detail, and clicking it returns you to 100%. Pressing z (or double-clicking) from above 100% snaps back to 100% before collapsing to Fit.

    • Compare's Judge view now has a "Promote" button. Swapping a frame into the Champion (leftmost) slot used to be reachable only by pressing M — the one control in Judge that had no on-screen equivalent, unlike Crown keeper (K), which already had a button. Promote does exactly what M always did (a view-only swap, same "leftmost = Champion" invariant) and still fires no toast and no ★ Best badge — that stays Crown's job, and is the deliberate difference between the two. The button sits next to Crown keeper, disables itself when the focused frame is already the Champion, and its tooltip names the M shortcut for anyone who prefers the keyboard.

    Changed

    • Focus peaking is sharper, and it now waits for the full-size image before it appears. Peaking used to be measured on a reduced copy of your photo, roughly 2 megapixels no matter how large the file, so the marks were coarser than what your camera actually captured and looked blocky when you zoomed in. On machines with a capable graphics card, peaking is now measured on the full-size image, which is what makes the marks read as fine strokes along fur, feathers and grass rather than as a lattice of blocks. Machines without one keep the previous behavior, unchanged. The visible tradeoff is timing: peaking no longer appears the instant a photo opens, because the full-size image has to load first. In exchange it appears once and then stays put. It used to be recalculated several times as sharper versions of the photo loaded in the background, so the marks you saw the moment a frame opened were not measuring the same pixels as the marks a second later. Help then About BurstPick then Export Diagnostics reports which of the two paths your machine is using.

    • Scoring is faster on Windows and Linux machines without GPU acceleration. The AI models were each allowed to claim every processor core on your machine at once. With four of them running side by side — plus image decoding — they spent more time competing with each other than working, and the effect showed up even in stages that use no AI at all. Each model now takes a small share of cores instead of all of them. Scores are unchanged; only the timing is. Macs already worked this way.

    Fixed

    • Focus can tell your sharp frames apart against a smooth background. A bird against clear sky, or a dog on a field thrown fully out of focus at 200mm, used to get the same Focus score whether it was tack sharp or visibly soft — a large share of such frames landed on exactly the same number. Focus grades the subject against its background, and when the background held no detail to measure, that comparison ran away and took over the score instead of supporting it. The subject-versus-background reading is now evidence added on top of the sharpness BurstPick actually measured, rather than a replacement for it, and a featureless background can no longer manufacture a high score on its own. Two frames of the same scene can no longer come out identical, and within a burst the sharper frame now ranks above the softer one. Frames shot against sky, water, or heavy bokeh will read lower than they did before — that is the correction, not a downgrade, and rejects moved down further than keepers did. Frames with a textured background are unaffected.

    • "Why this score?" no longer names a species BurstPick cannot tell. The detection readout printed a specific animal — foxes came out as "bear (#21)", coyotes as "dog" — which was never a judgment BurstPick makes. Its subject detector separates birds from mammals, and that one distinction is all the scoring uses; every mammal from a cat to a giraffe is handled identically, so the specific name was a label carried along from the detector's training set and nothing more. It now reads Bird or Mammal, which is what the app actually determines. Your scores are unchanged — nothing downstream ever read the species name, only whether the subject was a bird.

    • Sony A7R VI: the 100% zoom reference is confirmed correct — nothing changed for you. An internal check had been reporting that BurstPick's stored sensor size for that body was wrong, which, if true, would have made 100% zoom read lower than it should on every A7R VI frame. Re-measured against the camera's own RAW files: the stored size is right, and always was. The false alarm was in the check itself, which compared a portrait frame's width against a landscape measurement. The check now compares like with like, and it fails outright rather than printing a warning nobody reads, so a genuinely wrong camera entry cannot reach a release the way this false one sat unexamined.

    • 100% now means 100% on a frame you have not zoomed into yet. Arrowing to a new frame and pressing z could leave a pane barely magnified — or, in a side-by-side comparison, not move it at all — because the app was measuring "100%" against whichever preview happened to have loaded rather than against your camera's actual sensor. It only learned the real sensor size after a full-resolution decode, and on bodies that embed a full-size JPEG (every modern Canon, most Nikon) that decode is never needed, so it never learned it. The sensor size is now read from the camera model up front, so the first z on any frame lands on a true 100%, and both panes land on the same one.

    • Pressing z the instant you arrow to a new frame no longer jumps to a random magnification. If the new frame had not finished loading, z (and double-click) fell back to a fixed 3× jump — and in a side-by-side comparison it took every pane there with it, so nothing was at 100% and nothing matched. The zoom now waits the fraction of a second for the frame, then lands on a true 100%, so culling at speed does not require pausing between the arrow key and z.

    • Scans no longer slow down when you switch away from BurstPick and back. Returning to the window during a scan started a second pass over the same folder, running alongside the scan that was already going — often announcing itself with a "Resuming scan" bar. The two competed for the same processing, so a scan you had alt-tabbed away from came back slower than one you had sat and watched. BurstPick now waits until a scan has finished before it checks the folder for new or missing files. Checking on focus is unchanged when no scan is running, so a card dumping files into the folder is still picked up as soon as you come back to the window.

    • Right-click actions on a multi-selection now act on the whole selection. Selecting several collapsed bursts, right-clicking and choosing "Flag all as Pick" flagged exactly one of them — the rest were never touched, which looked like the grid had failed to redraw. Pressing P afterward then un-picked the one burst that had been flagged. Every burst action (flag, clear, expand / collapse, select all frames, move to Trash) now runs over every selected burst, and P / X / U / 1-5 do too.

    • Picking a selection of bursts marks each burst's cover, not every frame inside it. Selecting a dozen bursts and pressing P is a decision about a dozen photos — the best frame of each — not about the hundred-odd frames behind them. Flags and manual scores land on the covers you can see and selected, so pressing U (or clicking the cover's Kept button) takes it all back without opening a single burst. Moving bursts to the Trash, exporting them or re-scoring them still covers every frame, because there you do mean the whole burst. Menu items and buttons name what they are about to touch — "Flag 12 covers as Pick" against "Move 12 bursts to Trash…" — so the difference is visible before you click.

    • P still toggles on one burst. With a single burst selected, pressing P picks its cover and pressing P again un-picks it, as it always has. With two or more selected, P sets them all to Pick rather than flipping each one, since a mixed selection has nothing coherent to flip.

    • Added the flag actions that were missing. A selection of whole bursts had no visible way to flag it — only Merge and Split — so the selection toolbar now carries Pick, Reject and Clear flag. The right-click menu on an individual photo had no flag entry at all; it does now, and its Re-score entry works on a multi-selection instead of just the photo under the cursor.

    • "Select all frames in burst" now opens the burst first. On a collapsed burst it selected frames that were still hidden, so the selection immediately shrank back to the cover and the follow-up action quietly did almost nothing.

    • Focus peaking rebuilt: it now traces edges and fine detail instead of spraying dots, and it goes quiet on a soft frame. Three separate problems, all fixed. First, peaking always highlighted the sharpest ~1% of pixels in that image, so an out-of-focus frame lit up just as brightly as a tack-sharp one and a genuinely detailed frame could never show more than that same ~1%. Selection is now driven by an absolute contrast floor calibrated against real RAW frames, with a density ceiling above it, so the amount of peaking tracks how much real detail is actually there. Second, Contrast edges lit up the whole soft gradient band around an edge rather than the edge itself; it is now thinned to the ridge line, which is what makes marks read as connected traces along fur, feathers and grass. Third, Fine details was a simple high-pass filter, and camera grain is exactly what a high-pass filter finds, so it painted noise across empty sky on high-ISO frames. It now looks for detail at the scale real detail lives at, and discards marks that stand alone, so empty sky and smooth backgrounds stay clean while the subject is traced. Separately, at the default fit-to-window view the overlay was being scaled down with nearest-neighbor sampling, which broke thin marks into scattered dots; that is fixed too. Marks stay crisp when you zoom well in.

    • Focus peaking marks are now drawn rather than sprayed. Separate from which pixels get highlighted: every highlight used to be painted at the same full brightness and one pixel wide, so a mark that only just qualified shouted as loudly as the sharpest edge in the frame, and each mark read as a speck rather than a line. A highlight's brightness now tracks how strong the underlying detail actually is, and each one is drawn with a bright core and a softer edge. Nothing new is highlighted and nothing is dropped — the same pixels are chosen as before — but the display reads as strokes following fur, feathers and grass instead of a uniform bright mat, which is much closer to what FastRawViewer shows on the same frame.

    • Focus peaking's Contrast edges filter highlights less, so what it does highlight reads clearly. On a busy, high-contrast frame it was marking so much of the picture that the marks ran together into a bright mat instead of following individual fur, feathers and grass. The ceiling on how much of a frame Contrast edges may highlight is now less than half what it was, and because that is a density ceiling rather than a brightness threshold, it only takes effect on frames that were already dense — low-contrast frames and soft frames are highlighted exactly as before, so a soft frame still visibly quiets down next to a sharp one. The marks it drops are the weakest ones, which in practice are busy background texture rather than the subject. This also clears up high-ISO frames, where featureless areas were picking up scattered marks from sensor grain. Fine details is unchanged.

    • Focus peaking marks no longer look like staircases at moderate zoom. Between roughly 50% and 100% zoom, peaking marks were drawn with hard, blocky, stair-stepped edges — a diagonal trace along a whisker came out as a flight of little rectangles. That was a display setting, not the peaking itself: the overlay was being sampled without smoothing at any zoom above fit-to-window, including zoom levels where it is barely being enlarged and there is nothing to gain from it. Smoothing now stays on until the overlay is genuinely enlarged past 2x, at which point sharp sampling is the better choice and takes over as before. Nothing about which pixels are highlighted changed, and the fit-to-window view is unaffected.

  8. v1.8.5

    Aug 4, 2026

    Fixed

    • Linux: fixed the crash that closed BurstPick the moment you opened a folder. On Ubuntu 24.04, Linux Mint 22, and other distributions with an older system GLib, the image-processing library BurstPick bundles was calling into the system's copy of a shared library instead of its own. The two copies disagree, so the very first batch of thumbnails brought the whole app down with no error message. BurstPick's bundled copy is now kept strictly to itself, so there is only one in play. Windows and macOS were never affected.
    • Composition and Context tooltip descriptions corrected. The Score Breakdown tooltip described Composition as including "two aesthetic ML models (NIMA + CLIP)," but those models were removed as degenerate back in v1.6.0 — Composition has been pixel geometry only (subject placement, background simplicity, subject-to-background sharpness separation) ever since. It now names those three. Context was described as "Background quality, habitat, environmental story," but Context never measures the background — that's a Composition sub-term. Context measures how much of the frame the subject fills, adjusted for scene type. It now reads "How much of the frame the subject fills, adjusted for scene type (portrait, habitat, flight, action, group)." No scoring change, copy only.
  9. v1.8.4

    Aug 4, 2026

    Fixed

    • Fixed a crash that closed BurstPick mid-scan with no warning. On Mac and Linux, BurstPick could read a cached preview at the same moment it was rewriting that same file, which the operating system treats as a fatal fault and kills the app instantly — no error message, no crash dialog, the window simply disappeared. Cached images are now written to a temporary file and swapped into place, and are read into memory rather than mapped from disk. Either change alone prevents the crash; both are in.
    • Crash reports from Mac and Linux now actually reach us. "Share anonymous crash reports" had no effect on those platforms: BurstPick wrote its settings to one location and looked for your choice in another, so the setting always read as off no matter what you picked. If you turned it on and nothing seemed to happen, that is why. Crash logs also now land in the folder that Export Diagnostics collects, so the "Report a Bug" bundle finally includes them. The setting takes effect the next time you start BurstPick, and now says so.
    • Linux scoring now runs on the processor by default. On Linux, BurstPick would try to use an NVIDIA GPU for AI scoring. That path was never verified to work and is the one piece of scoring that behaves differently on Linux than on Windows or Mac, so it is now off by default and scoring runs on the CPU — the configuration Linux builds have actually been tested in. Scoring may be slower on Linux machines with an NVIDIA card; scores themselves are unchanged. Windows and Mac are unaffected, as they use different graphics acceleration that has not changed.
    • Focus tooltip description corrected. The Score Breakdown tooltip described Focus as "Overall image sharpness and detail clarity," which is inaccurate: Focus measures how sharp the subject is against the background, not the whole frame. It now reads "How sharp the subject is, judged against the background, not the whole frame." No scoring change, copy only.
  10. v1.8.3

    Aug 2, 2026

    Fixed

    • Intel Macs now get an Intel download. Releases shipped a single macOS installer built for Apple Silicon, so Intel Macs that downloaded it saw "this application is not supported on this Mac." Each release now includes a separate installer per Mac processor, and burstpick.com offers both. If you hit this, download again — no reinstall or license reactivation is needed.
    • AI scoring works on Intel Macs. The Intel build shipped an AI runtime with no Intel-Mac support, so the scoring models could not load there at all. BurstPick now bundles a runtime that supports both Mac processors. Apple Silicon Macs, Windows, and Linux are unaffected — scores do not change.
    • Panning no longer slides the photo into the black surround. When a photo doesn't exactly match the shape of the pane it sits in, there are black bars down the sides or along the top and bottom. Panning while zoomed in could drag the photo past its own edge into that black area — barely noticeable with two frames side by side, obvious with three or four. Panning now stops flush with the edge of the photo. This affects the Lightbox as well as Judge. One visible consequence with Eye relative: when the bird's eye sits very close to the edge of the frame, it now settles slightly off-center rather than dead center, because centering it would mean showing black.
    • Pressing Z no longer leaves one frame stuck at Fit. In Judge with "Sync pan/zoom" on, pressing Z shortly after changing a frame — arrowing to a new frame, promoting a champion, or opening a different burst — could leave the other frame sitting at Fit while the one you were looking at jumped to 100%. Panning then did nothing to it, because a frame at Fit has nowhere to pan. The zoom request is now held by that frame until its photo finishes loading, instead of being lost the moment you started dragging.
    • Synced panning no longer drops another frame back to Fit. In Judge with "Sync pan/zoom" on, dragging one frame at 100% could occasionally snap a different frame all the way back to Fit — most often once you had added a third or fourth frame to the set. Each drag is now tagged with an ID that is unique across the whole Judge grid, so a frame can no longer mistake one frame's drag for another's and re-use the wrong starting position.
    • Synced frames now stop panning together at the edge of the photo. With "Sync pan/zoom" on, panning toward an edge used to break the frames apart: the frame you were dragging would stop when it hit the edge of the photo, but the others kept sliding on to their own edges, leaving you looking at different parts of each bird until you toggled the zoom off and back on. A drag now shares how far the frame you grabbed actually moved, so every frame stops with it. If one of the other frames runs out of room first it will still stop early — use Re-sync to bring them back together.
  11. v1.8.2

    Jul 28, 2026

    Fixed

    • More accurate eye detection on birds. Released builds were running an older version of the bird eye-detection model than the one BurstPick's scoring was tuned against. The mismatch made the app overconfident that it had found a bird's eye, which could let a frame through on a poorly detected eye and could mute the penalty applied when the bird's head can't be confirmed. Released builds now use the same model the scoring was calibrated on, so bird eye scores match what the app was tuned to produce. Scores on bird bursts may shift slightly after you update — that is the correction taking effect. Mammal scoring is unaffected.
  12. v1.8.1

    Jul 25, 2026

    Fixed

    • The grid now keeps your place when you return from the viewer. Opening a photo in Filmstrip, Lightbox, or Compare and then coming back used to shift the whole grid downward, so the burst you were just looking at ended up at the bottom of the screen instead of where you left it. Returning now lands you right back where you were — and still follows you to a new frame if you arrowed to one further down while inspecting.
  13. v1.8.0

    Jul 24, 2026

    Changed

    • Always-visible quick-export mode indicator. The toolbar now shows a small MOVE/COPY pill so you always know at a glance whether Ctrl+S/Ctrl+R will move your original photos into Picks/Rejects or copy them there. It reflects your Settings → Export default live. Shift+Ctrl+S/Ctrl+R still inverts the mode for a single action.
    • "Write XMP to Source" is easier to find. Writing your ratings as .xmp sidecar files beside your original photos — no move, no copy — now has its own toolbar button (works even if you've only rejected photos, not just picked), and its label/tooltip in the Export panel, File menu, and right-click menu now spell out that nothing gets moved or copied. No change to what the action does — only where you find it.
    • Cleaner, faster Triage survey tiles. The Compare survey wall's tiles now show a single band-colored sharpness dot (green/amber/red for the weaker of focus and eye) in place of the old "F##/E##" focus/eye numbers, so the composite quality score reads clearly at a glance while you skim a large burst. Hover a dot to see the exact focus and eye sub-scores.
    • Compare now opens on two frames by default. Comparing a burst starts with the Champion and its best contender side by side, instead of filling the view with up to four. Add more with the + Add frame button (or the + key) up to four; large bursts still open the survey wall first. Pre-selecting frames before you open Compare still brings exactly those.
    • An interrupted scan resumes visibly. If you reopen a folder whose scan was interrupted, BurstPick now shows a Resuming scan progress bar and merges the frames into your grid automatically as they finish — instead of leaving them behind a quiet + N new badge for you to add by hand. A few files dropped during a live shoot still stage quietly, as before.
  14. v1.7.3

    Jul 14, 2026

    Changed

    • Clarified "Eye relative" zoom scope. The Zoom options helper text now spells out that "Eye relative" keeps the detected eye framed as you step through burst frames and jump to 100% (double-click / Z) — and explicitly notes that mouse-wheel zoom always follows your cursor instead. No behavior changed; this is a copy clarification only.

    Fixed

    • "Eye relative" double-click now lands on the same eye in every Compare frame. In the multi-frame Judge view, double-clicking a detected eye could zoom to a slightly different point on some frames even when every frame had a clear eye. A double-click on a confident eye now maps straight to the matching eye in each frame, so the whole set locks onto the same eye together.
    • Steadier Compare promote and swap. Promoting a frame to Champion (or scrubbing contenders) now keeps zoom framing, the "was champion" cue, and the crown confirmation in sync across the panes.
  15. v1.7.2

    Jul 14, 2026

    Changed

    • Compare: promoting a frame now brings it to the champion slot. In the Judge view, pressing M slides the highlighted frame into the gold champion (leftmost) position and the previous champion takes its place — so your current pick is always on the left, matching the classic side-by-side feel. Crowning with K now confirms with a toast and marks the kept frame with a gold ★ Best badge, and the frame you just demoted briefly highlights so it's easy to see where it went.
  16. v1.7.1

    Jul 13, 2026

    Fixed

    • Compare Judge mode now keeps zoom when arrowing between frames. Pressing ◄/► to scrub the active tile onto a different burst frame used to snap that tile back to Fit; it now stays at whatever zoom you had (e.g. 100%), matching the Lightbox and the classic 2-up Compare.
    • Lightbox "Eye relative" now centers the detected eye on keyboard z zoom. With Lock zoom and Eye relative both on, pressing z in the single-image view zooms to 100% centered on the bird's eye instead of the frame center (which previously left the eye off-screen). Arrowing between frames keeps the eye framed. A cursor double-click still zooms toward where you click.
  17. v1.7.0

    Jul 12, 2026

    Added

    • "Always recover" for exported files found in Picks/Rejects. When BurstPick finds exported files in your Picks/Rejects folders that the current session isn't tracking, the recovery prompt now offers Always recover alongside Recover. Choosing it recovers them now and quietly recovers any it finds on future scans, so you're not asked again. Toggle it back on under Settings → Export ("Automatically recover unaccounted exported files without asking").

    • Compare: an always-present Survey ⇄ Judge toggle. A labeled segmented control in the Compare bar now lets you switch between the whole-burst Survey wall and the ≤4-frame Judge view in either direction, no matter how you entered — including a burst that opened straight into Judge (≤4 frames, or a multi-frame selection), which previously had no way to reach Survey at all. Switching density never disturbs your Champion or Contenders.

    • Compare Judge: an N-way scorecard. Press D (or click Scorecard) in the Champion + Contenders view to see all 2–4 frames' criteria side by side — Focus, Eye, Exposure, Noise, Composition, and Context, plus the pinned Composite. The Champion's column is gold, and only the criteria that actually differ between the frames light up, so it's easy to see at a glance what separates them.

    • Adjust scoring: switch presets right from the panel. The Adjust-scoring panel now has a preset picker in its header, mirroring Settings → Scoring — choose a built-in or one of your custom presets and it takes effect immediately, reloading the sliders and re-ranking your grid live without a trip to Settings. "Default" returns to the standard weights.

    Fixed

    • Compare: "Sync pan/zoom" now keeps the frames locked together on the mouse wheel. Zooming one frame with the wheel while pan/zoom was synced left the other frame(s) lagging and lurching — one would jump ahead while the other sat still, then catch up in a rush — and zooming back out past the limit stranded the others until you over-scrolled. They now zoom together, tick for tick, in both directions, in the two-up and the multi-frame (Champion + Contenders) views, whether or not "Eye relative" is on. Double-click to 100% and drag-to-pan are unchanged.

    • The "recover exported files" prompt now reliably appears after a fresh scan. Previously it only surfaced when reopening a folder, not after a cold scan.

    • Closing the app mid-scan no longer makes the folder reopen empty. If you closed BurstPick (or it quit) while a rescan was in progress — after burst grouping finished but before any photo had a score yet — the folder's saved session could be overwritten with zero photos, even though the photos had already been scored in a previous session. Reopening the folder now always shows your existing photos in that situation.

  18. v1.6.1

    Jul 9, 2026

    Added

    • Scroll through a burst with the mouse wheel over the filmstrip. Hover the filmstrip and scroll the wheel to step frame by frame — wheel down for the next frame, wheel up for the previous — mirroring the main viewer's scroll-to-zoom. Hold Shift while scrolling to pan the strip sideways instead of changing frames. Works in both the grid and the lightbox.
  19. v1.6.0

    Jul 9, 2026

    Added

    • Compare (multi-up survey + triage, Champion & Contenders) and Smart Zoom v2 point tracking are now on by default. Both shipped dark behind build flags in v1.5.0 for a targeted beta and have since been smoke-verified — no action needed to use them. Opening Compare on a burst of more than four frames now lands you on the triage survey wall by default; Smart Zoom v2's zero-model point tracker now runs by default when "Eye relative" zoom is on.
    • Compare: survey a large burst on a triage wall, then promote frames into the comparison. Opening Compare on a big burst (more than four frames) now lands you on a fast survey wall of the whole burst — each frame shows its quality score and a focus/eye sharpness cue, so you can spot the keepers at a glance without zooming. Click to promote the frames worth judging (up to four), press "Judge these" to hand them to the side-by-side comparison, and "Back to triage" to keep surveying — your picks stay intact. The AI's top four are pre-promoted so the comparison is never empty and you can see and override its choices. Ships behind the Compare feature flag (dark until the v1.6 Compare + Smart Zoom general-availability release).
    • Grid: a visible "Survey"/"Compare" button on each expanded burst's header. Previously the only way into Compare from the grid was the C shortcut or a right-click "Compare in burst" — easy to miss. Every expanded burst's header now shows a button reading "Survey N" (for a burst of more than four frames, which opens the triage wall above) or "Compare" (for anything smaller, which opens the classic side-by-side). It calls the same Compare entry point as the shortcut and context-menu item — nothing about how Compare opens has changed, just how you get there. Ships behind the same Compare feature flag as the triage wall above (dark until the v1.6 general-availability release).
    • Triage polish: a proper size control, and a breadcrumb back to the survey wall. The triage wall's tile-size control is now the same square-size indicator used for grid cards and filmstrip thumbs (small/medium/large, one click each) instead of two buttons labeled "[" and "]" — the keyboard shortcut is unchanged. And when you funnel promoted frames into the side-by-side comparison with "Judge these," a Triage crumb now appears in the breadcrumb trail so you can jump straight back to the survey wall without hunting for the "Back to triage" button. Ships behind the Compare feature flag (dark until the v1.6 Compare + Smart Zoom general-availability release).

    Changed

    • Steadier "Eye relative" zoom on hard-to-detect frames. With zoom locked and "Eye relative" turned on, flipping through a burst now holds the subject steadily on frames where the eye is hard to detect (fast wingbeats, turned heads) instead of drifting as the detector's eye estimate wanders. Frames with a clearly detected eye are unchanged.

    Fixed

    • Your license no longer reads as expired after a relaunch on some Macs. On a Mac whose network name changes between sessions (a common macOS behavior over Wi-Fi/DHCP), an activated license could be misread as expired on the next launch, forcing re-activation — while the same key stayed activated on Windows. The local integrity check that guards your license file no longer depends on the machine's changeable network name; existing activated licenses self-heal on the next launch without re-entering your key. Copying a license file to a different computer still correctly fails to activate. Export Diagnostics (Help → About → Export Diagnostics) now includes the network-name details so we can confirm the fix on affected machines.
    • Composition scoring is now fair across subjects — a clean dog, elk, or bear frame is no longer penalized for not looking like a "beautiful nature photo." Composition previously blended in a learned aesthetic signal that mostly tracked the subject's domain rather than the quality of the individual frame, quietly inflating birds and deflating mammals (and crushing non-wildlife subjects like dogs by ~20 points) regardless of how well each frame was actually composed. Composition is now purely subject-agnostic frame geometry — placement, background simplicity, and subject/background separation. Within-burst picks are unaffected (the removed term was measured to add no ranking value). Note: photos scored before this release keep their old composition until you rescan the folder.
    • Importing a scoring preset can no longer make every photo score 100. A custom-preset file that was missing one of the six criterion weights used to slip through import and quietly corrupt scoring — every photo showed 100 and the burst pick became an arbitrary tie. Import now fills in any missing weight from the defaults, and scoring has a built-in fail-safe so a bad weight can never again push a score to a false 100.
    • Compare now honors a deliberate multi-frame selection. Ctrl-selecting two or more frames of a burst in the grid and pressing C used to be silently ignored — Compare opened on the whole-burst survey instead of just the frames you picked. Selecting frames and pressing C now opens Compare on exactly those frames.
    • Compare's best frame now agrees with the rest of the app on a tie. On a burst where two frames tied on quality score, Compare could crown a different frame as champion than the one shown as the burst's "best" elsewhere (the grid, filmstrip, Lightbox candidate strip). Compare now uses the same tie-break rule as everywhere else, so the champion always matches.
    • The picked "best" frame in a burst now always leads the ranked list. When two or more frames in a burst tied on quality score, the app could pick one frame as the burst's representative while showing a different frame first in the Lightbox candidate strip, the burst filmstrip, or the grid's score order — the tie-break rule used to elect the representative didn't match the rule used to order those lists. All four now share one rule (score, then eye visibility, then filename), so the badge and the top of every ranked list always agree.
  20. v1.5.1

    Jul 6, 2026

    Fixed

    • Crash reporting now catches launch-time native-module failures. Crash reporting is armed by a tiny entry step that runs before the app's image libraries load, so a launch that fails at that very first step (the crash class behind a prior asar-integrity crash and a Mac out-of-memory crash) now produces a report instead of failing silently with no diagnostic trail. Behavior for everyone with crash reporting off is unchanged.
  21. v1.5.0

    Jul 6, 2026

    Added

    • Richer diagnostics for support reports. Every scan now records a one-line per-stage performance summary (decode, detection, keypoints, CLIP, saliency, and each scorer — median/p95/p99, photo count, and whether the GPU was used) in the app log, so an Export Diagnostics bundle finally answers "why was scoring slow on this machine" without any special setup. The per-photo "Export Scoring Diagnostics" bundle's metadata.json now also includes the detection record (bounding box, eye keypoints, facing), the per-criterion score components, and the scoring-pipeline metadata the app already saves — previously these were missing from the export.
    • Smart Zoom v2 — point tracking (behind the SMART_ZOOM_V2 flag). When you lock the zoom and arrow through a burst, the loupe now follows whatever point sits under it — a wingtip, a flank, an antler tip — not just the eye, keeping that spot centered as the animal shifts between frames. A zero-model tracker (body geometry cross-checked against a pixel match on the 800px previews) re-anchors the pan, and holds today's fixed-coordinate framing whenever it isn't confident, so a big pose change never jumps you to the wrong place. Off by default (dark until a later general-availability change); enable with SMART_ZOOM_V2=1. Requires the "Eye relative" zoom preference on; flag off, the zoom lock behaves exactly as before.
    • Compare: Champion + Contenders (behind the COMPARE_MULTI beta flag). Compare a growable set of up to four frames with one sticky gold champion — the eye-anchored synced zoom holds every tile on the same eye as the animal moves. Build the set from the always-visible filmstrip (click a thumb to add it, click an in-set thumb to remove it), scrub the focused frame through the burst with the arrow keys, press M to promote a frame to champion, and K to crown the champion as the keeper (Pick + burst representative). Adding, removing, and scrubbing are view-only, so frames keep their flags. Flag off, Compare is unchanged. Ships off by default in a targeted beta build.
    • Compare: Re-sync button (behind the COMPARE_MULTI beta flag). After you nudge one tile's zoom or position out of tandem, the new Re-sync control in the Compare toolbar re-aligns every tile onto the champion — re-applying the same alignment a double-click would under your current zoom mode (matched zoom and position, each tile's own eye, or a tracked subject point, depending on the "Eye relative" setting) — so you can quickly re-sync the set and keep comparing. Available while pan/zoom is synced. Flag off, Compare is unchanged.
    • Compare: eye close-up chip (behind the COMPARE_MULTI beta flag). Each Compare tile now carries a small always-visible corner overlay with a tight close-up framed on the frame's detected eye plus its eye-visibility and focus scores — so a blink, a soft eye, or a missing catchlight is obvious across the whole set at a glance, no zooming required, and the tile image keeps its full height. The close-up reuses the frame the tile already shows and the eye it already found (no extra loading or detection); when the eye can't be located it frames the head instead, and if there's nothing to frame it shows a small "no eye" placeholder rather than a misleading body crop. On a small, far bird the eye is only a few pixels in the preview, so its close-up will look soft — that's the preview's pixel budget. Dark until the Compare beta flag is on.
    • Filter by keyword. The Filters popover gains a Keywords facet listing the IPTC/XMP keywords embedded in your photos (the tags Lightroom or Photo Mechanic write), each with a photo count. Check one or more keywords to show only photos carrying any of them — the filter combines with the score, ISO, focal length, body, and search filters, and Reset Filters clears it. Keywords are read during scanning, so folders scanned with an earlier version need a rescan to pick them up.

    Changed

    • One place to adjust scoring. The "Adjust scoring" panel is now the only editor, with two sections: What matters most — the six criterion weights as relative-importance sliders that balance automatically (no more Total / Normalize bookkeeping) and preview live on the grid — and Situations, the six scoring preference controls. Saving now asks for a preset name instead of silently creating "(tuned)" copies: keep a preset's own name to update it, or enter a new one to save a copy. Manage presets is now just that — rename, duplicate, delete, import, export — and its Edit button opens the Adjust scoring panel. Settings → Scoring slims down to the preset dropdown, "Adjust scoring…", "Calibrate from my picks…" (the guided way to fill What matters most), and Reset.

    Fixed

    • Manual burst merges and splits now survive a full folder rescan even when you have changed the burst gap from its default — previously a rescan could silently revert them.
  22. v1.4.0

    Jul 3, 2026

    Changed

    • Simpler scoring adjustments. The "Tune scoring" panel (now "Adjust scoring") drops from ten controls to six, with plain-language settings and a single rule — dragging any control to the right is always stricter (except high-ISO tolerance, which is measured in real stops). Closed-eye handling is now one Lenient-to-Strict slider, hidden or turned-away heads is one Off/Gentle/Standard/Strict setting, and rule-of-thirds placement reads as a plain 0–100%. Recipe chips now highlight when selected and show their one-line explanation right below the row, and the "no subject" and rescan notices are shorter and clearer. Keep and Discard are now "Save & use" and "Cancel", and a confirmation appears after you save.
    • "Facing away" is no longer a manual setting. BurstPick handles it automatically: mammals photographed facing fully away are still demoted (a turned-away mammal has no visible eye), while birds are no longer docked for facing away — that detection was unreliable and caused good, sharp-eyed bird frames to be pushed down. If you had tuned "Facing away" or "Side profile" values in a custom preset, those knobs are gone and BurstPick now uses the built-in behavior (birds neutral, mammals demoted); presets you saved or imported keep working, with the old setting safely ignored.

    Added

    • Pause and resume live folder watching. Click the "Live" chip in the toolbar to pause automatic updates — new files dropped into the folder are ignored until you resume. Click "Paused" to resume, and BurstPick picks up anything added while it was paused. "Check for changes" still works while paused, the paused state looks distinct from the drive-disconnected one, and your choice is remembered across restarts. Reconnecting a drive never overrides an explicit pause.

    Improved

    • More accurate bird eye scoring. Better eye localization on small or distant perched birds, and birds whose eye can't be verified are no longer penalized twice for the same fact — so sharp, well-composed bird frames stop being pushed down for a detail the model simply couldn't confirm. When the eye can't be verified, the inspector now says so plainly instead of mislabeling the source.
    • Truer exposure and focus scoring. Exposure now judges backlit subjects correctly — a dark bird against bright water or sky reads as backlit rather than overexposed — and focus scoring is steadier within a burst, so near-identical frames no longer swing apart on a metric technicality.
    • Faster scoring on busy frames. Frames with several animals score quicker: the pose model now runs only on the subject BurstPick actually scores.

    Fixed

    • Dismissed removable-drive warning now stays dismissed. After ticking "Don't show this again" on the removable/network-drive startup warning, the choice is no longer forgotten the next time you change a setting.
    • Pinning a representative no longer corrupts saved scores. Pinning or unpinning a burst's best frame (R) while a custom preset or Technical-only mode was active could overwrite the saved scores for those frames; it now writes only the pin.
    • Quick-export XMP carries your latest flag. With auto-flag and XMP sidecars on, Ctrl+S / Ctrl+R on an unmarked frame wrote a sidecar that still said "unmarked"; it now reflects the pick or reject just applied, so Lightroom sees your decision.
    • Switching folders mid-scan keeps them separate. If you opened a new folder while the previous one was still scoring, late-arriving photos from the old folder could land in the new session; they're now discarded.
    • Shortcuts stay put behind dialogs. Pick/reject, arrows, score overrides, and Delete no longer act on the photos behind the What's New window, Settings, About, a right-click menu, or the Compare view.
    • No dropped edits or trash on quit. Quitting through an update prompt — or closing the window — now flushes pending flags, score edits, and trash moves that some quit paths previously skipped.
    • Steadier scanning and updates. Canceling a scan and immediately reopening no longer breaks scanning or starts a duplicate, and an unresponsive network no longer hangs the update check for the rest of the session.
    • Leaner saves with many rejects. A large internal buffer was being written into session saves for rejected frames, which could bloat saves or, with enough rejects, make them fail; it's now released before the save.
  23. v1.3.0

    Jul 1, 2026

    Added

    • What's New in the app. A "What's New" entry under Help opens an in-app view of the release notes, and BurstPick shows it automatically the first time you launch a new version.
    • The window remembers where you left it. BurstPick reopens at the size, position, and monitor you last used, and safely re-centers if that monitor is no longer connected.

    Changed

    • One window per copy of BurstPick. Launching BurstPick while it's already running now brings the existing window to the front instead of opening a second copy — which also prevents two copies from colliding over the same data folder.

    Fixed

    • Portable-ZIP launch crash on Windows. Fixed the "An invalid access to the memory location occurred" error some no-installer (ZIP) users hit, by turning off embedded asar integrity validation (already in the build; shipping now).
    • Bird-eye guidance updated. BurstPick now scores bird eyes with a dedicated model, so the in-app notes that said bird eyes were estimated from contrast (with a model "on the way") have been corrected.
    • "Unable to move the cache" errors and leftover background processes. Fixed a problem where a second copy of BurstPick sharing the same data folder could leave orphaned background processes and cache-access errors behind.
    • Reliable shutdown. BurstPick now always closes fully, instead of occasionally leaving a process running after the window has closed.