A stability, resilience, and developer-experience release built on top of the Gambel's Quail pipeline. Nelson's Sparrow adds a new fast wildlife detector (MegaDetector v1000-cedar), resilient ONNX execution that recovers from GPU/driver failures, OS-shutdown detection that finally silences phantom crash dialogs, major expansion of camera/RAW format support, and the largest test-suite expansion in the project's history (~350 tests). Several latent performance and accuracy bugs are also fixed, including a duplicated SpeciesNet batch pass that was silently reducing Gambel's Quail speedup.
Major Changes
- Resilient ONNX execution recovers from GPU and driver failures across all six ML models.
- Detects DirectML (Windows) and CoreML (macOS) inference failures and transparently falls back to CPU, preserving partial results.
- A new "Re-attempt analysis on errored images" action re-queues just the failed files without touching successful work.
- New GPU-resilience settings in the Analyze Folders dialog let you tune fallback behavior.
- Major RAW-format expansion — adds first-class decode and EXIF-timestamp extraction for 11 additional camera formats, plus an embedded-preview fallback for compression schemes LibRaw can't yet decompress.
- Newly supported: Nikon NRW (Coolpix, Z), Hasselblad 3FR/FFF, Phase One IIQ, Leaf MOS, Leica RWL, Epson ERF, Kodak DCR/KDC, Mamiya MEF, Minolta MRW.
- Now extracts EXIF timestamps: Fujifilm RAF and Sigma X3F (they previously decoded but were timestamp-blind).
- Nikon Z8 / Z9 / Zf / Z6III "High Efficiency" (HE/HE*/NRAW) NEFs — where LibRaw can't decompress the proprietary TicoRAW codec — now load via the full-resolution embedded JPEG preview. Detection and classification accuracy are unaffected at Kestrel's ML input resolution; only sensor-level highlight recovery is disabled, and the Live analysis dialog displays a "⚠ preview fallback" notice for affected files.
- New "Fast" wildlife detector — MegaDetector v1000-cedar replaces the older
mdv6-mit-yolov9family. The Accurate option (mdv5a) is retained after edge-case testing in Gambel's Quail confirmed it was the better default for thorough analysis. - Real-crash vs. OS-shutdown detection — PC reboots, logoffs, and power loss no longer trigger the alarming "did not shut down cleanly" dialog.
- Platform-specific listeners on Windows, macOS, and Linux distinguish OS-driven exits from real crashes.
- Crash reports now carry an
exit_reasonfield so genuine crashes are no longer drowned out by shutdown noise.
- Full command-line parity with the in-app Advanced Analysis Settings dialog — every analysis knob is now exposed on
analyzer/cli.pyfor power users and scripted workflows. - New quality normalization curve (v3) rebalances star ratings: the lower tail moves up and the upper tail compresses slightly. Older
.kestrel/folders are flagged and re-rated against the new curve on next visit. - Massive test-suite expansion — ~350 tests reorganized under unit / integration / compat / UI / security directories, with backward-compat tests for every legacy database schema and a real-binary UI probe in CI.
- Build attestation for official builds — a signed build bundle is now used for in-app updater authentication, replacing the legacy fallback for official releases.
Minor Changes
- Removed a duplicate SpeciesNet batch-classifier block that was running the ONNX classifier twice per image and erasing roughly half of the Gambel's Quail batch-processing speedup.
- Culling-preview RAW decode no longer runs
postprocess()twice on non-zero exposure correction (saves ~1–2 seconds per 45MP RAW per slider movement). - Build attestation now keeps trying candidate paths instead of giving up on the first malformed bundle.
- The clean-exit handler no longer clobbers an already-set OS-shutdown / crash exit reason on the way out.
- The max-bird-crops cap is now applied before SAM-HQ runs, so segmentation work is skipped for discarded detections.
- SAM-HQ now runs in batched mode with updated weights; SpeciesNet classifier is also batched.
- Model label files now decode with explicit BOM-tolerant UTF-8, fixing mojibake on Spanish, Japanese, and Chinese Windows installs.
- Per-image analysis errors now emit a full Python traceback to the runtime log so future crash reports identify the offending library and call site.
- Species-detection UI improvements with taxonomy mapping (cleaner labels, better tag suggestions).
- Dropped unused PyQt6 dependency (~100 MB off the dev install); bumped rawpy, pyinstaller, pywebview, requests, pillow, and numpy.
Feedback? Please visit projectkestrel.org/contact or use the in-app feedback feature!