Changelog
Every release, newest first. Updates within your purchased major version are included. New features are documented in the user manual.
-
v1.15.1
Oct 6, 2026Fixed
Startup now waits briefly for a due online license check before showing an offline reminder, so a successful validation does not leave a stale warning on screen (B-441).
Live updates now use a dedicated scoring-compatibility revision: sessions from 1.14.1 and 1.15.0 can add new photos without a rescan, while unknown or mixed historical scores remain safely blocked (B-442).
Species tags now export correctly as plain keywords for keyword-free photos and older sessions while preserving existing keywords. Failed metadata reads show a warning rather than silently omitting keywords (B-445).
Copy-exported originals, including folded JPEG pairs, now remain known when checking an existing folder. Reopening or checking such a folder no longer treats those originals as new photos or prompts for an unnecessary rescan (B-443).
-
v1.15.0
Oct 6, 2026Added
Export status on Recent Sessions (B-435). Session cards now show the current number of exported photos, so partially or fully exported folders are recognizable without relying on their names. Restoring every exported photo removes the badge.
Archive keeper package (B-437). Full Export now offers a one-action, copy-only package for full-resolution keepers and XMP sidecars. Choose an archive root, review the dated shoot destination, then export without reconstructing the safe settings.
Lightroom-ready archive packages (B-440). Archive keeper packages keep camera filenames, adding a collision suffix only when needed to prevent an overwrite, and always include a Lightroom-readable XMP sidecar without changing your regular export preferences.
Fixed
Copy export now distinguishes byte-different photos that share a camera filename, while still skipping an exact re-export (B-436).
Live ingest now pauses when a session's stored scoring version differs from this BurstPick version, offering an explicit full rescan instead of mixing newly-scored frames with older session-wide scores (B-406).
Quick-export now follows the Pick/Reject marks on selected collapsed bursts, exporting their covers instead of every hidden frame (B-254).
-
v1.14.1
Sep 22, 2026Fixed
- The offline-license reminder now shows the time left (B-424). After seven days without a license check, the banner counts down the remaining days before the 30-day offline limit instead of warning without a deadline.
- Noise estimates now recognize the compact camera-model names written by the OM-1 Mark II and Canon EOS R5 Mark II, so those bodies use their intended sensor profiles instead of the generic fallback (B-429).
- Burst order now stays stable when photos share an identical capture timestamp (B-432).
- The User Manual now correctly explains that Settings and in-folder burst controls set the same global saved gap: the current folder re-groups immediately, full rescans use it, and hand-edited locked bursts remain unchanged (B-433).
-
v1.14.0
Sep 15, 2026Added
- Per-photo ranked species suggestions (B-414). When correcting a frame from its right-click menu or the Inspector, BurstPick now offers five cache-backed whole-vocabulary suggestions for that exact photo. They are separate from the folder candidate list, never apply themselves, and you still confirm the name and scope.
Fixed
Cancel now stays cancelled (B-427). Cancelling a scan pauses automatic folder updates until you explicitly Resume, check for changes, or start a new scan. Completed fresh-scan photos remain usable, and cancelling a rescan restores the prior saved session instead of leaving an empty or partial grid.
Faster first and consecutive folder scans on Windows through earlier model preparation and a 30-second reuse window. Idle sessions are released, while active scans, rescoring, and diagnostic generation retain the models they use.
-
v1.13.0
Sep 7, 2026Added
Set a species for a whole burst (B-414). Right-click a burst cover and choose Set species for this burst…, then pick a species once to tag every frame. One Undo restores all previous species decisions, and corrections survive reopening. The picker retains its folder candidate list and vocabulary search; per-frame ranked suggestions are deferred.
Exact multi-frame selection in the inspect filmstrip (B-410).
Ctrl/Cmd-click toggles individual frames,Shift-click selects a stable range, andCtrl/Cmd+Aselects the current inspect scope even beyond the virtualized strip. Batch flags, score overrides, quick export, re-score, and Trash now share that exact selection; Trash confirms the real count and its latest Undo restores only the accepted batch. Selected, active-preview, and representative markers remain independently visible.
Fixed
An activated license now keeps working for 30 days without an internet connection instead of 14 (B-416), so a long trip in the field no longer locks you out of the app you paid for. A reminder banner still appears after 7 days offline, and connecting to the internet at any point resets the clock.
Standalone JPEGs no longer receive the "Scored on RAW (no JPEG)" badge when camera-JPEG scoring is selected (B-409). Rescoring also clears this incorrect metadata from previously scored JPEGs. Scores are unchanged.
-
v1.12.0
Sep 2, 2026Added
BurstPick now recognizes people as a subject (B-390). Until now the detector found the person in the frame and then threw that box away, because it only accepted animals. Four of the six criteria — Focus, Exposure, Composition and Context — need a subject to measure against, so on a photo of people they all quietly fell back to whole-frame or fixed values. They now get a real subject to work with. The subject row reads "Person" where it used to read nothing useful. A rescan is needed for existing folders to pick this up.
Eye detection on people is not here yet, and it is the next piece of this work. BurstPick finds eyes on birds and animals using models trained for them, and it has no equivalent for human faces. So on a photo of people, Eye Visibility falls back to judging where the camera focused and which part of the frame is sharpest. That is honest about what it measures, but it is coarse: it cannot tell an open eye from a closed one. Picking the model that fixes this is in progress. Until it lands, treat Eye Visibility as the least informative of the six criteria on photos of people.
One known rough edge, worth knowing before it surprises you. A person in an unusual pose — crouching, or down on all fours — can read to the detector as an animal. Those frames show "Mammal" in the Inspector's subject row and can score higher than they deserve. Measured across a dance shoot, it affected about 2% of frames, and one two-frame burst reached the top of the folder that way. Photos of wildlife are not affected. If a frame looks over-ranked for what it is, check its subject row — that is the tell.
Changed
Shift+←/Shift+→now stops on every tile in the grid, including a lone photo sitting between two bursts (B-387). Previously the shortcut skipped straight over any photo that wasn't part of a multi-frame burst, so a single frame between two bursts was unreachable by keyboard — you had to scroll and click it directly. It's now a full-fledged stop, in Burst Review or the grid alike. Compare is the one exception: it still only steps between real (two-or-more-frame) bursts, since a lone photo has nothing to compare it against. This also fixes a related gap the same shortcut had for an exported single photo left behind after a rescan — it was silently unreachable by keyboard even though it still showed up in the grid.
Fixed
The "Scored on RAW (no JPEG)" badge no longer appears on every photo in a folder that has no camera JPEGs at all (B-407). The badge exists to warn that one frame's score was built from a different source than its neighbors, so it is only meaningful where the folder actually mixes the two. If you had ever switched scoring to the camera JPEG — a single click on the prompt that appears in a RAW+JPEG folder — that preference stayed on for every folder afterward, and opening a RAW-only folder amber-badged all of it while telling you nothing. The badge now appears only where a JPEG-scored frame really does sit alongside a RAW-scored one, in the grid, the Lightbox and Compare alike. No scores change.
Every burst now gets a winner (B-388). On folders of people, 44% of bursts scored every single frame the same number, so there was nothing to pick from — measured across two unrelated shoots and 1,073 frames. Two things caused it together: a criterion that sat at a fixed value on any non-animal subject, and a score range too narrow to survive being rounded to a whole number. Both are fixed, and the second one helps wildlife folders too — the largest wildlife folder measured had the same problem on frames where no animal was found. Bursts that used to be a wall of identical numbers now separate. Note this is about being able to choose at all; it is not a claim that the picks are better.
People frames are no longer marked down for a face detector we do not ship (B-390). BurstPick discounts a photo when it boxes a subject but cannot confirm the head, which is sensible for an animal turned away from the camera. It was also firing on every photo of a person, where the only reason there is no eye is that the eye model only knows animals. The photo was not worse; our coverage was. People frames no longer pay that discount, so a folder of people no longer reads as uniformly low.
A misidentified animal no longer hijacks a photo of people (B-389). The detector occasionally sees a "dog" or a "horse" in stage lighting or a background, at low confidence, somewhere the subject isn't. That guess used to win the frame and then win the whole burst — in every single burst it split, 46 for 46. Detection confidence is now taken into account when choosing which subject in a frame to measure, so a confident person beats a doubtful animal. This also helps wildlife: a barely-there detection no longer outranks the one the detector is sure about, and a detection too faint for the main pass can no longer confirm a subject's head and skip the discount that goes with an unconfirmed one. Which animal it thinks it saw plays no part, only how sure it is, so a dog at a dog show or a horse at a rodeo is still scored as the subject it is.
The updater could offer a beta tester a downgrade back to stable (B-392). The update-available check compared versions with plain string equality, so a tester running ahead of the published stable release (e.g. on a
1.12.0-beta.1targeted build) was told the older stable was "available" — the app quietly proposed replacing their newer build with an old one. The check now understands version ordering, including prerelease tags, so it only ever offers something genuinely newer.The Cull view & scoring source setting could become invisible, with no way back (B-408). This is a single global setting: click "Switch to Camera JPEG" on the prompt in one RAW+JPEG folder, and every folder you open after scores and displays from the camera JPEG instead of the RAW preview, not just that one. The only control for it used to disappear from Settings the moment you opened a folder with no RAW+JPEG pairs, so once you were in Camera JPEG mode, a folder without pairs gave you no way to even see that, let alone switch back. The dropdown now always shows in Settings, in every folder, so you can always tell which mode you're in and change it. Switching modes in a folder with no pairs still saves the choice for your next folder, it just skips rescanning the one you're in, since there's nothing there for it to change.
-
v1.11.1
Sep 2, 2026Added
BurstPick now knows 835 species, up from 694 (B-337). The old list was measured against what people actually photograph and came up short: it held only about half the birds a birder is likely to shoot. The new one closes those gaps and reaches past birds and mammals, so reptiles, amphibians, and insects are nameable too. Nothing changes in how you use it and no rescan is needed. The picker simply has more to offer, and the new Suggested shortlist draws from the same larger list.
The Species picker now opens with a shortlist of its own (B-336). It ranks every species it knows against the photos already scored in the folder and offers the top ten in a "Suggested" block above the search box, so you no longer have to guess a spelling before the picker can help. Suggestions are guesses and nothing is applied for you: a suggestion becomes a tag only when you click it, exactly like a search result. Measured on real sessions, ten rows contain 83% of the species a folder actually holds. It costs nothing extra to produce, because it reuses the image fingerprints scoring already saved. The shortlist also spreads across animal groups, so a folder you shot a lot of one subject in still leaves room to suggest the others: without that, one subject's close relatives filled every row and a second animal you actually photographed never appeared.
Fixed
A settings change made in the last moment before you closed the window was silently lost (B-375). Settings are written a fraction of a second after you change them, so several quick edits become one save — but nothing flushed that pending write when the app quit, so closing the window right after a change dropped it. Typing was the worst case, because the delay restarts on every keystroke: a keyword root typed and then immediately closed on never reached disk at all. Your picks and flags were never affected — session data already flushed on quit; settings now ride the same path, and so will any future setting that saves this way.
The crash-reporting restart notice was a guess, and it was wrong in exactly the case where crash reporting has no endpoint configured (B-313). Turning on "Share anonymous crash reports" showed a "restart to cover native crashes" notice purely from which way you flipped the toggle, not from what the app actually did. That guess was wrong in two cases: turning consent back on after switching it off earlier in the same session (nothing to restart for — it is already covered), and a build with no crash-reporting endpoint configured, where nothing can ever be sent and no restart changes that. The notice now reflects what the app actually decided, and a build with no endpoint configured says so plainly instead of asking for a restart that would not help.
-
v1.11.0
Aug 29, 2026Added
Species tags can now be written into your catalog as keywords (B-288). A species name that only lives in the Inspector is not much use — the reason to want one is to have it in Lightroom. Settings → Export → Lightroom / XMP → Species Keywords turns it on. It is off by default and completely separate from score keywords, so you can have species names without score bands, or the other way around.
Species tags are written under their own top-level keyword,
Speciesby default, which you can change to match a convention you already use. Two options sit under it:- Group species by type — nests the name under the group BurstPick files
it in, so you get
Species | Birds | Seabirds | Herring Gullinstead of a flat list of every species side by side. - Also write the plain species name — adds a bare
Herring Gullalongside, which merges into the species tree your catalog already has and is the only shape catalogs that ignore hierarchical keywords will show. BurstPick cannot tell a plain name apart from one you typed yourself, so it will never remove or change one later — including if you turn the option back off.
A photo BurstPick left untagged deliberately gets no species keyword — the tagging gate declined to guess, and a keyword would undo that. It still shows in the Inspector, labeled for what it is.
Sessions where you shot only one species are fully supported (B-334). A day on one den, a puffin colony, one raptor at one perch — naming a single species still produces keywords. BurstPick checks every photo against its whole species list, not just the names you picked, and stays quiet on any frame that something else explains better. That check does not depend on how many species you named.
Corrections win. If you set or cleared a species by hand, that is what reaches your catalog — and a photo you cleared writes no species keyword.
- Group species by type — nests the name under the group BurstPick files
it in, so you get
You can now fix a species tag BurstPick got wrong, on one photo or on forty at once (B-305). Right-click any photo (or a selection) in the grid and choose Set species… to pick the right name — from the list you gave this folder, or by searching the whole species vocabulary — or Clear species to take the name off entirely. The same control sits on the Species row in the Inspector for a single frame.
A name you set by hand stays set. Adding or removing a species from the folder's list re-runs the tagging pass over every photo, and your corrections are left alone — as is a photo you deliberately cleared. The Inspector says so under a name you typed, so months later you can still tell which names came from you and which came from BurstPick. If you change your mind, Use the suggested species hands the frame back to the tagging pass.
You can now choose which photos get a star rating in the XMP sidecar (B-244). BurstPick used to write a star rating onto every photo it sidecarred: 5 stars for a pick, the reject flag for a reject, and 0-5 stars derived from the score for every frame you never marked. If you apply your own ratings later in Lightroom, that meant your whole take arrived pre-rated. Settings → Export → Lightroom / XMP → Star ratings now offers three choices:
- Every photo — what BurstPick has always done.
- Picks and rejects only — the new default. Your picks still get 5 stars, but a frame you never marked gets no rating at all, so BurstPick never invents a decision in the vocabulary you use to make real ones.
- No star ratings — a pick hands Lightroom a green label and nothing else.
Two things are true whichever you pick: color labels are never affected, and a reject always keeps its reject flag (
xmp:Rating="-1"), which Lightroom and darktable read separately from stars.If you are already using BurstPick, nothing changes under you. Your next launch asks the question once, and until you answer it BurstPick keeps writing exactly what it wrote before.
A live "What gets written" preview for the rating and label BurstPick puts in a sidecar (B-302). Settings → Export → Lightroom / XMP now shows the actual
xmp:Ratingandxmp:Labellines for a Pick, a Reject, and an unflagged photo, updating instantly as you change the star-rating setting — including watchingxmp:Ratingdisappear entirely under "No star ratings." It replaces a sentence that B-244 made wrong for two of its three values."Write XMP to Source" can now write a sidecar for a photo you have not marked yet (B-329). Previously this button — and the matching menu command — only ever reached photos you had flagged Pick or Reject, so B-244's Every photo star-rating setting had nothing to act on there: it and Picks and rejects only wrote identical bytes. Settings → Export → Lightroom / XMP → Write sidecars for now offers:
- Flagged photos only — the default, and exactly what BurstPick has always done.
- Every photo — every photo in the session gets a sidecar, unmarked frames included, so the star-rating setting above finally has something to show on this path.
Switching to Every photo on a large folder can mean thousands of new files next to your originals, so BurstPick now shows you the count and asks before writing, rather than only reporting it afterward.
Species tagging: tell BurstPick which animals you photographed on a shoot, and it puts a name on each keeper (B-263). Open a folder you have already scored, click Species in the grid toolbar, and search for the species you shot. Every photo is then narrowed to one name from your list, and the name appears in the Inspector. It reuses the image analysis scoring already did, so it adds no extra processing pass and no upload — like everything else in BurstPick, it runs entirely on your machine.
It will leave photos blank on purpose. If no species on your list is a clear match for a frame, BurstPick says nothing rather than guessing, so expect a fair number of untagged photos. That is the feature working, not failing: a confident wrong name is far more expensive to a wildlife photographer than a blank one. Naming only the species you actually shot is what makes the tags trustworthy, so a shorter, accurate list beats a long speculative one — and closely related species (several sparrows, or several gulls) are the hardest case, where more frames will stay blank.
The species picker can now be browsed, not just searched, and it warns you when your list is the case it is worst at (B-304). Open the Species panel without typing anything and it now shows every group in the vocabulary (Raptors, Seabirds, Ungulates, and so on) with a count, so you can check whether a species is covered before guessing a spelling. Click a group to see and add from its members directly. Separately, once 2 or more species on your list are close relatives (say, several sparrows), the panel now tells you so — that is exactly the case BurstPick is worst at telling apart, and it explains why more of those frames will stay untagged. Adding species from unrelated groups, on the other hand, does not cost you anything — list everything you might have seen.
Species names now show right on the grid thumbnail, not just in the Inspector (B-309). A tagged photo gets a small name chip in the corner of its thumbnail, so you can tell what's in a burst without opening the detail panel for each frame. A photo where BurstPick looked and couldn't find a clear match on your list shows a muted "Not sure" chip instead of nothing — a blank corner used to be indistinguishable from tagging never having run at all.
Fixed
- A sidecar written before v1.10.3 could never lose its old namespace
address once you had edited it in Lightroom or darktable (B-326).
BurstPick already repairs a stale
burstpick.appreference left over from before that version, in place, the next time it touches a sidecar it still owns. But once B-301 (also above) started protecting an edited sidecar from being touched at all, that repair stopped running on exactly those files — the fix that kept your Lightroom edits safe also froze the old address in place forever. The repair now also runs on an edited sidecar: it rewrites only that one line and leaves your develop settings and ratings untouched, same as it always has for a sidecar nothing else has edited. - The User Manual claimed BurstPick does not identify species — the exact opposite of what this release headlines (B-339). The line was true when written and had gone stale as species tagging (B-263), species keywords (B-288), burst-aware tagging (B-333), and the 694-species vocabulary (B-335) all shipped without a manual update. Added a full Species tagging section (Help → User Manual) covering the picker, the abstain policy, correcting a tag, burst propagation, and writing tags into your catalog as keywords — and updated Understanding the score, Score keywords, Exporting (the new Write sidecars for scope, B-329), and Settings reference to match.
- A sidecar you had since edited in Lightroom (or another XMP tool) could
be silently replaced with a blank BurstPick template, wiping your star
ratings and develop settings (B-301). With "Overwrite existing .xmp
files" turned on, BurstPick used to treat any sidecar carrying its own
data as still exclusively its own to regenerate — even after you had
imported it, culled, developed, and applied your own ratings in Lightroom.
BurstPick now recognizes a
crs:develop block, aphotoshop:attribute, or similar marks left by another application as proof the file has moved on, and leaves it alone from then on, the same way it already leaves a darktable sidecar alone. A sidecar BurstPick wrote that nothing else has touched is unaffected and still refreshes normally. - Species search now matches common and colloquial names, not just the vocabulary's official one (B-303). Typing "buffalo" in a Yellowstone folder now finds American Bison; "canada jay" finds what the list calls Gray Jay; "oldsquaw" finds Long-tailed Duck. Previously the search only matched the exact display name, so the first thing many users typed returned nothing they recognized — or, worse, the wrong animal entirely (Cape Buffalo instead of American Bison).
- "Elk" and a few other names now show their scientific name in the picker (B-303). "Elk" reads as a European moose to a European user; it now shows as "Elk (Cervus canadensis)". The same treatment applies to the American/European Marten and Badger pairs.
- Selecting "Red Squirrel" could silently fail to tag anything, if you'd also added the near-duplicate "Eurasian Red Squirrel" entry (B-303). The two named the same animal and matched CLIP's understanding of a photo almost identically, so picking both made the confidence score split between them and neither ever cleared the tagging threshold. Merged into one "Red Squirrel" entry (still searchable as "Eurasian Red Squirrel"), plus a build-time check that stops a similar collision from shipping again.
- Added European Wildcat, Mouflon, and Muntjac to the species list (B-303). Closes the last confirmed gaps in European coverage.
- A photo BurstPick declined to tag showed nothing at all in the Inspector, reading as a broken feature rather than a deliberate call (B-300). Species tagging leaves a photo blank on purpose when nothing on your list is a clear match, but the Inspector's species row simply vanished on those photos instead of saying so. It now always shows a species row once tagging has run: a match shows the name, an abstention shows "Not sure." The species picker also now states the policy up front — "BurstPick only labels a photo when the match is clear" — so a blank photo reads as the gate doing its job, not a miss. The one-species-on-your-list explanation is now visible text instead of a hover-only tooltip, and the confidence percentage next to a tag has been removed — it's a closed-set score over your own list, not a probability of being correct, and showing it invited exactly the misreading this fix corrects.
- One failed read of the species vocabulary could disable Species search for the rest of the session, requiring a restart (B-328). A single hiccup reading the bundled species list — for any reason — used to be remembered as "not available" for as long as the app stayed open, and the picker would fall back to a message claiming the vocabulary was never installed, even though it was. BurstPick now only treats a species list as permanently unavailable when it is actually confirmed missing; anything else is retried automatically the next time you open the Species picker, with an honest "couldn't load it just now, try reopening this panel" message instead of one that sends you hunting for a broken install.
- Added Domestic Horse and Domestic Donkey to the species list (B-335). "Feral Horse" was the only horse option in the picker, so a photo of a domestic horse had no correct name to pick — and with single-species sessions now writable (B-334), that wrong name could land in your catalog. Both new entries also search by the plain word you'd actually type ("horse", "donkey", or "burro").
-
v1.10.5
Aug 28, 2026Fixed
A "missing photo" mark that healed itself (the file reappeared) now actually gets saved as healed, instead of only being fixed in memory every launch (B-150). The app already showed the photo as normal every time you opened the folder — nothing looked wrong on screen. But the session file on disk kept saying the photo was still missing, forever, because closing and reopening never wrote the correction back. Anything that reads that file directly (an exported diagnostics bundle, for example) would report a photo as missing that the app itself considered fine.
Renderer-side failures — a failed full-resolution decode, the focus- peaking GPU falling back to the CPU kernel, an undo/restore/pairing action that didn't reach the app, and anything that crashes without ever hitting a try/catch — now reach the activity log too (B-166). Previously the only signal that made it to disk from this half of the app was a full screen crash; everything else was visible only in a live developer console. A diagnostics export from an affected session now carries this detail as well, throttled so a run of repeated failures (e.g. during fast zooming) can't crowd out everything else in the log.
Failures in seven diagnosable places — session load/save/delete, decode/ thumbnail jobs, license activation, sidecar and file-move partial failures, and CLIP-cache/auto-save-session errors — now reach the activity log instead of only a developer console no one sees in a packaged build (B-164). These are exactly the failure classes behind the reports we've actually received (a grayed-out library, lost picks, a license that won't activate, a sidecar or move that only partly succeeds); a diagnostics export from an affected session now carries the detail needed to tell what happened.
"Clear all cache" now actually clears all cache (B-178). The per-folder Storage tab "Clear" already deleted a folder's CLIP scoring cache along with its thumbnails; "Clear all cache" deleted the thumbnails but silently left every folder's CLIP cache behind, so it was less thorough than the button it's supposed to be the global version of. The Storage tab's cache total now includes those bytes too, so the number you read there matches what "Clear all cache" removes, and the button explains what clearing it costs: the next rescore of an affected folder will be slower while its CLIP data rebuilds.
Diagnostics now record exactly which model files a build ran, and a bird-model mismatch reaches the log (B-165). Some builds re-download the scoring models at release time, so the files a customer actually runs aren't always the ones a developer's machine has. The activity log now records the models folder in use and a SHA-256 for each model file at startup, and a bird-eye model that doesn't match the one its confidence tuning was fit to now shows up in the log instead of only in a developer console no one sees.
The crash-reporting setting's "restart required" note now matches what actually happens in each direction (B-297). The Settings hint under "Share anonymous crash reports" said "Restart required to take effect" no matter which way you flipped it. Since B-291, that was only narrowly true for turning it on (a window already open when you switch it on needs a restart before its native crashes are covered; main-process crashes and every JS error are covered right away either way) and flatly wrong for turning it off, which has taken effect immediately since B-291. The hint now says the accurate thing for each direction instead of one string for both.
A bug report that fails to send is no longer reported as sent (B-293). The Report a Bug form waited for the report to leave your machine before telling you it had been sent, but the check it used could only catch a send that stalled — a send that failed outright, on a refused connection or a dropped network, came back looking like a success, so the form said "sent" when nothing had arrived. It now confirms the actual answer from Sentry before saying so, and shows the "could not reach Sentry" message with the support@burstpick.com fallback otherwise. This applies whether or not you have crash reporting switched on.
Turning crash reporting on now takes effect immediately, instead of silently waiting for the next restart (B-291). "Share anonymous crash reports" was read once, at launch, and nothing re-read it, so switching it on mid-session did absolutely nothing for the rest of that session — with no restart prompt and no sign that anything was pending. Switching it on now arms reporting straight away: main-process crashes and errors are covered from that moment. One caveat is genuinely unavoidable — a window that was already open when you switched it on cannot be covered by the native crash reporter until you restart, which is why the Settings hint still mentions a restart. Switching it off now also takes effect immediately: crash uploads stop and every event is dropped before it leaves your machine.
Sending a bug report no longer requires crash reporting to be switched on (B-290). The Report a Bug form refused to send unless the Sentry client had been armed at launch, and the refusal told you to turn on "Share anonymous crash reports" — advice that did nothing, since that switch only takes effect on the next start, and that was often not the real cause anyway. A report you wrote and pressed Send on is not passive telemetry, so it is no longer gated on consent to passive telemetry: with crash reporting off, the report is sent through a one-shot client that exists for that single message and never arms global crash capture, so declining crash reporting still means no crash data leaves your machine. When a report genuinely cannot be sent, the message now names the real reason instead of blaming the setting, and always offers support@burstpick.com plus "Export logs to a file" as a fallback.
Frames with no detected subject all showed the same score, in no particular order (B-144). When the animal detector found nothing, the composite was clamped with a hard
Math.minagainst the no-subject ceiling. Because undetected-subject frames reliably score well above that ceiling before the clamp, virtually every one of them collapsed onto the identical number: a folder of them rendered as a wall of 30s, and since the grid sort has no tiebreak, their order across bursts fell back to whatever order they happened to be loaded in. The ceiling is now a rank-preserving compression into the same 0–30 band (0–50 when CLIP rescues the frame) instead of a clamp, so two no-subject frames that differed before the demotion still differ after it, and they sort sensibly. No-subject frames stay below every subject-present frame exactly as before. Scores shown on undetected-subject frames will move down relative to previous versions; frames that already scored below the ceiling are unaffected.Photos with the exact same score could sort in an arbitrary, unstable order across the whole library (B-286). The library's cross-burst sort (
getPhotosSorted) compared scores directly with no tiebreak, so an exact tie silently fell back to insertion order instead of a deliberate rule. Every other "best-first" ordering in the app (burst representative election, the Lightbox candidate strip, the burst filmstrip, the grid's score-mode frame order) already broke ties the same way — eye visibility, then filename — so this is now routed through that same shared comparator instead of its own ad hoc one.View menu "Re-detect Bursts" bypassed the toolbar's undo/calibration path, and could strand Burst Review on a burst that no longer existed (B-275). The native menu item called
window.burstpick.redetectBurstsand thenupdateBurstGroupingdirectly — a second, unmaintained code path for the same action the toolbar's Sort & group popover presets and Adjust… modal already ran throughcommitRedetect. That divergence meant a menu-triggered re-detect pushed no undo entry (Ctrl+Z had nothing to revert) and skipped the low-pick-confidence recompute the toolbar path always applies. The menu case now callscommitRedetectlike every other entry point. Separately, since a re-detect can mint a fresh id for the burst currently open in Burst Review, nothing previously reconciled that against ui-store — if it fired while Burst Review was open,getBurstPhotosreturned no frames and the user saw "This burst has no frames" even though the frames were alive under the new id. Burst Review now exits back to the grid automatically the instant its burst id is retired by any grouping mutation.macOS: the app could vanish mid-session with no dialog while live updates were on (B-146). The live folder watch opened one native watch handle per file in the session folder (504 of them in the crash we captured). On macOS a per-file watch runs through a kqueue path that calls
abort()outright if re-arming ever fails, which is what happens when the volume the photos live on is ejected or force-unmounted while the watch is armed. Nothing reached the app's own drive-loss handling: the process was already gone. The watch is now a single recursive watch on the session folder, which macOS handles through a different, safe mechanism, and 504 handles collapse to one. Live updates are unchanged from the outside: files added, deleted, or renamed in the watched folder still trigger the same check. Files copied in slowly are still held back until the copy finishes before they are read, on every path that looks for changes now, including "Check for changes" and the on-focus check.
Added
A "Don't demote undetected subjects" starter recipe in Tune Scoring. Turning the no-subject penalty off entirely already worked, but only via the raw segmented control; there was no named recipe for it. Useful for habitat, macro, and small-in-frame work where the detector legitimately misses the subject on most frames.
The bug-report form now nudges a mis-typed reply address (B-281).
.cois a real top-level domain (Colombia), so an address typed asgmail.cosails past every ordinary validator, the browser's owntype="email"check included. Two BurstPick buyers have typed exactly that at checkout; each time the license key was issued correctly and mailed somewhere it could never be read, and nothing noticed until the customer wrote in days later. In the app the stakes are smaller but the failure is identical: a bug report with a bad reply address gets a reply that bounces, and the reporter concludes they were ignored. The form now offers a correction when the domain is a near-miss for a common consumer mail provider. It is a suggestion and never a rejection, and it never blocks a submission, because telling a genuine.coaddress that it is wrong costs far more than missing one that is.A "Verbose logging" toggle in Settings, plus a matching
BURSTPICK_LOG_LEVELenvironment variable (B-167). Previously the only way to get more detail into the log file for a bug repro was to ship a build with the level hardcoded higher. Turn it on in Settings (Advanced tab, beside the new Export Logs button) and restart BurstPick; the launch banner at the top of the log now states the effective level, so a bundle from a verbose session is never mistaken for a quiet one that simply had nothing to say.
Changed
- The bug-report modal now uses the brand's cyan accent instead of blue (B-282).
The "Export logs to a file" link and the Send Report button were the last
blue-*holdouts in the renderer; both now use the standardprimary-*tokens, and the Send Report button picks up the brand's rounded corner and medium-weight label to match every other primary button in the app.
-
v1.10.4
Aug 26, 2026Fixed
A missing burst cover stayed the collapsed cover instead of handing off to a live sibling (B-274). If the burst's representative frame vanished from disk (drive hiccup, live-watch, an external move)
markMissingset themissingflag but never re-elected a new cover, so the collapsed burst kept showing the greyed placeholder while a perfectly visible sibling stayed hidden behind the chevron.markMissingnow recomputes the representative for every affected burst after the missing flags land. Also fixed a related latent bug in the shared recompute: it only cleared the staleisRepresentativeflag on non-missing photos, so a missing former cover could keepisRepresentative: trueforever and render alongside the newly elected one; it now clears the flag on every burst member. If every photo in a burst goes missing, the burst keeps its old (now-missing) representativeId — any cover is equally absent in that case, so this is left unhandled by design.Quick-export's Move-mode toast could report XMP news while saying nothing about the export itself. The summary line built the export outcome ("Moved N picks") as a fallback shown only when nothing else qualified — so a quick-export pass that moved nothing new but backfilled a sidecar produced a toast reading only "1 XMP backfilled", silently dropping the one thing the toast exists to report. The export outcome is now always its own part of the message (e.g. "0 new picks, 1 XMP backfilled → Picks/"), so it can never be crowded out by sidecar news. Copy mode had the same flaw and got the same fix.
"Reveal in Explorer" (and Open / Open With / Copy Path) always pointed at the original file, even for an exported photo. Right-clicking a photo you'd already exported had no way to jump to the renamed, re-scored, or resized copy that export actually produced — every file action in that menu reads the original source path by design, and still does. There is now a separate "Reveal export" entry, shown only when the photo has a recorded export and that file is still on disk; it disappears again if you move or delete the exported copy, so it's never left pointing at nothing.
Re-exporting to the same folder silently duplicated every frame. Export handed its destination path straight to the collision resolver, whose job is to append " (N)" until it finds a free name — but the
NNN_score prefix on export filenames means a re-export after a score change doesn't even produce the same name, so the collision resolver never saw a clash and quietly wrote a second full copy of every photo. Export now recognizes a photo it already exported to that folder (matched by source filename, score prefix ignored — the same rule Quick Export already used) and skips it instead of duplicating it; the toast now reports how many were skipped as "already there" so the skip is never silent. Collision handling itself is unchanged for the genuine case of two different photos landing on the same computed name.Shift+Arrow burst navigation could jump in a different order than the grid showed, and could land on a burst's old cover after you re-elected a new one. With bursts sorted by score and frames sorted by capture time, Shift+Arrow was building its destination list from a flat capture-time re-sort instead of the burst-grouped, score-ranked order the grid actually renders — so the keyboard walked a different sequence than your eyes saw. Separately, pressing R to re-elect a burst's cover updated the photo grid immediately but left Shift+Arrow targeting the frame that used to be the cover, because the manual pin never updated the burst's own cover record. Both are fixed: burst navigation now derives from the same order the grid renders, and re-electing a cover updates its target immediately.
Leaving Burst Review could strand your selection on a frame the grid no longer shows, in three different directions. "Collapse all" (and "Expand all") never checked whether the photo you were looking at was about to be hidden behind its burst's cover — the selection stayed pointed at the now-invisible frame. Pressing Esc from Burst Review, when Burst Review had been entered from the Lightbox (not the grid), had the same gap: the frame was left un-navigable one Esc early, and a second Esc into the grid could land you nowhere valid. And the toolbar's "Grid" / X button had the opposite problem — it always snapped you back to the burst's cover photo, even when the frame you were reviewing was already a visible card in an expanded grid. All three now share one rule: re-land on the cover only when your frame would otherwise be hidden; leave it exactly where it was when it's still on screen.
"Collapse all" / "Expand all" stayed clickable in the Picked, Rejected, Exported, and Missing views, where they can't do anything. Burst collapse only ever applies in the Active view, so clicking either button in a status-filtered view changed nothing on screen. They're now dimmed and disabled outside the Active view, with a tooltip explaining why.
Exporting with Copy mode from the Export dialog could record a fabricated destination path — one that pointed at no file on disk whenever the export used the score prefix, a resize (which rewrites the extension to
.jpg), or landed on a name already taken at the destination. "Reveal in Explorer," Write XMP for exported photos, and orphan-export detection all trusted that recorded path. The main process now reports the real per-file path it wrote for each copy, and the app records exactly that.Multi-selecting exported frames and choosing "Restore to workflow" or "Write XMP sidecar" from the right-click menu only acted on the frame you clicked, silently ignoring the rest of the selection. Both actions now route through the same batch-target resolver every other grid action uses, restoring or writing sidecars for every selected frame, and the menu labels now state the real count ("Restore 5 photos to workflow"). Restoring a multi-frame selection now runs the burst re-detect once for the whole batch instead of once per photo.
A collapsed burst's score badge could be covered by the expand pill's own label. The pill's width only reserved space for its own edges, not the score badge sitting at the opposite corner, so on a narrow card its text ("Burst N · count · body …") could run right underneath the score. The pill now reserves the badge's footprint too, so the score stays readable.
The "Exported" badge could cover a burst's expand label or its best-frame star. All three shared the same top-left corner and Exported always painted last. It now steps down to a free spot whenever the pill or the star is showing.
A wide expanded-burst header ("Burst N · M frames · span") could overflow into the body chip, the divider, or the Compare button at narrow window widths. The header text now truncates with an ellipsis instead.
The Exported grid still showed a "Burst N · M frames" pill and expand chevron on an exported photo that had been its burst's representative, with the count and pick/reject flags read off frames that were never exported — and expanding pulled those unexported frames into the view. An exported photo is now just a photo there, with its best-frame star showing instead. The Missing view had the identical always-on defect and is fixed the same way; Picked/Rejected's narrower edge case (a burst's lone surviving picked or rejected frame, when it's the representative) is fixed too, without touching their intentional side-by-side grouping when more than one frame from the same burst is picked or rejected.
A zoomed-in view parked off the animal now stays put as you arrow through a burst. Smart Zoom follows the subject by tracking the point under the loupe relative to the animal itself, which is right when you are inspecting the animal — and wrong when you have deliberately panned onto something else. Parking on the ground, the water, or a flower and stepping through the burst used to drag your view along with the animal's own movement, jumping the framing every frame. When the point you are looking at is clearly off the subject, Smart Zoom now holds your framing exactly where you put it instead of guessing where it moved to. Inspecting the animal is unchanged, including the recovery that pulls the view back when the subject moves out from under it.
A zoomed-in view that has drifted off the animal now gets pulled back to it instead of riding along with it. Smart Zoom has two ways of following a subject, and only one of them checked whether the point you are looking at is actually on the animal. The other would answer confidently for a point out in the grass, which both carried your framing along with the animal and suppressed the automatic recovery that exists to bring a stranded view back. Both now decline the same points, so recovery can do its job. Inspecting the animal itself is unchanged.
-
v1.10.3
Aug 15, 2026Added
Shift+Fturns 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 ofF.Shift+Fnow 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.
-
v1.10.1
Aug 13, 2026Fixed
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.
-
v1.10.0
Aug 11, 2026Changed
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
Fand 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.
-
v1.9.3
Aug 10, 2026Added
- 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.logrecording 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 asystem.jsonalongside 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.logor a diagnostics export stopped at the first space it found, so a folder likeZ:\1. Photography\2026\2026_7_26_NJ Rabbit and Cardinalwas 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.
-
v1.9.2
Aug 9, 2026Fixed
- 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.
-
v1.9.1
Aug 8, 2026Added
Shift+Left/Shift+Rightnow 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
Fon 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.
-
v1.9.0
Aug 7, 2026Added
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, andBurstPick|Burst|Bestfor 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-100into 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 forDSC_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 whatMalways 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 theMshortcut 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
zcould 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 firstzon any frame lands on a true 100%, and both panes land on the same one.Pressing
zthe 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 andz.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.
-
v1.8.5
Aug 4, 2026Fixed
- 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.
-
v1.8.4
Aug 4, 2026Fixed
- 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.
-
v1.8.3
Aug 2, 2026Fixed
- 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.
-
v1.8.2
Jul 28, 2026Fixed
- 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.
-
v1.8.1
Jul 25, 2026Fixed
- 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.
-
v1.8.0
Jul 24, 2026Changed
- 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+Rwill move your original photos intoPicks/Rejectsor copy them there. It reflects your Settings → Export default live.Shift+Ctrl+S/Ctrl+Rstill inverts the mode for a single action. - "Write XMP to Source" is easier to find. Writing your ratings as
.xmpsidecar 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.
- Always-visible quick-export mode indicator. The toolbar now shows a small
MOVE/COPY pill so you always know at a glance whether