Beta update channel actually works now — v1.23-beta.5
2026-04-29
Fixed
The "Beta updates" preference advertised on the beta page was never actually wired up — every beta build was checking the stable appcast and reporting "you're up to date" by comparing the beta build number against 1.22 (build 168). Beta builds now route Sparkle's feed at the beta channel, so Check for Updates finally tells beta users about new betas.
Added
Settings → Interface → Software Updates section with a "Receive beta releases" toggle. Beta builds default the toggle on; stable builds default it off. Available in non-App-Store builds only.
File path style picker for exports — absolute path, relative to the longest folder shared by all exported frames, or filename only. Default is configurable in Settings → Export with a per-export override in the export sheet. Relative mode collapses a single-folder session to bare filenames automatically.
Changed
Plain text (.txt) export is now a space-padded human-readable report rather than a bare list of file paths. Same columns as CSV/TSV, but every cell is padded so the file lines up cleanly in any text editor — numeric columns right-aligned, text columns left-aligned. Use CSV or TSV for machine-parseable output.
Fixed
CSV/TSV exports left FWHM, eccentricity, SNR, stars, and score blank when a metric was disabled or the user had switched out of compute-everything mode after the first batch. The exporter now falls back to the cached metric values that are preserved for the lifetime of the session.
Improved
Simple-mode exports (and any session where no frame has any metrics data) now omit the fwhm, eccentricity, snr, stars, and score columns entirely instead of emitting empty cells.
FITS header column picker (Settings → Export and the export sheet) dims keys not present in any currently loaded file, so it's clear before exporting which keys will produce data. Selected-but-absent keys are dropped from the output, and the .txt report lists them in a # Skipped columns with no data: … footer so the omission is auditable when re-reading the file later.
FITS header column picker is now available for plain text exports too.
FITS header export columns and CSV decimal fix — v1.23-beta.3
2026-04-28
Added
Configurable FITS header columns in CSV/TSV exports — choose which header keys appear as columns in Settings → Export, or override per-export from the redesigned export sheet.
Tab-separated (.tsv) export format alongside CSV.
Optional inclusion of rejected frames. Plain text adds # REJECTED suffix; CSV/TSV add a status column.
Quality score column in CSV/TSV exports.
Fixed
CSV exports could emit integer FWHM and eccentricity on systems with comma-decimal locales (Dutch, German, French). Numbers now use a fixed POSIX locale.
Improved
Export sheet pre-populates from Settings → Export defaults; per-export edits show an "applies to this export only" notice.
QuickLook for all FITS, accessibility, 133 tests — v1.23-beta.2
2026-04-12
Added
QuickLook preview and thumbnail support for floating-point FITS files (BITPIX -32 and -64).
QuickLook preview and thumbnail support for 3-channel RGB colour FITS files (NAXIS3=3).
Asinh stretch for float FITS previews — compresses bright cores while revealing faint nebulosity.
Large-file subsampling for QuickLook previews of 1+ GB stacked integrations.
Undo-reject and reject now advance cursor to the next visible entry.
VoiceOver: inspector toggle, chart buttons, filter strip, and inspector panel are now fully accessible.
Improved
Settings tabs migrated from deprecated .tabItem() to the Tab API.
Filter group header uses cached statistics instead of recomputing on every render.
Menu commands extracted into dedicated file.
Sparkle auto-update — v1.22
2026-04-08
Added Automatic update checking via the Sparkle framework — checks once every 24 hours in the background.
Added "Check for Updates..." menu item in the FITS Blaster menu for manual update checks.
Added Updates are downloaded, installed, and relaunched automatically — no manual DMG drag required.
Improved FAQ updated: internet connection answer now mentions the lightweight update check.
Image viewer controls — v1.21
2026-04-08
Added Zoom slider (0.25×–4×) with live readout; trackpad pinch-to-zoom also supported.
Added Brightness and stretch sliders for real-time display adjustment without re-rendering.
Added "Defaults" button to reset all three sliders in one click.
Added Yellow viewport-indicator box on the sidebar thumbnail shows which part of the image is currently visible when zoomed in.
Improved Scrollbars appear automatically when the image overflows the viewport.
Improved Scroll position is preserved when navigating between frames at the same zoom level.
Improved Zooming via the slider keeps the viewport centre fixed rather than jumping to the top-left.
Improved Zoom level persists across app launches; brightness and stretch reset when opening a new folder.
QuickLook support and Bayer screen-door fix — v1.20
2026-04-08
Added
QuickLook preview: press Space on any FITS file in Finder to get a rendered preview without opening FITS Blaster. The preview uses the same percentile-clip + square-root stretch as the app.
QuickLook thumbnails: Finder icon view now shows rendered FITS images as file icons, in colour for Bayer (e.g. Seestar, Dwarf) files.
Fixed
Screen-door grid pattern in colour (debayer) mode for raw Bayer FITS files. The bayerDebayerAndStretch Metal kernel now applies the same 2×2 Bayer cell alignment as the greyscale path, guaranteeing every output pixel spans at least one complete Bayer cell. Confirmed fixed with images from the Seestar S30, Seestar S30 Pro, Seestar S50, and Dwarf 3.
Improved
Release builds now produce a universal binary (arm64 + x86_64), so the same DMG runs natively on both Apple Silicon and Intel Macs.
Per-folder streaming colour rendering — v1.19.6
2026-04-05
Improved
Colour rendering now starts per-folder as soon as all entries in a folder are sampled, both during initial load and when switching from grey to colour mode. Previously the entire set had to finish sampling before any rendering began.
The Colour progress bar is visible for the entire duration of rendering and no longer flickers in and out between folders.
All progress bars (Loaded, Metrics, Sampling, Colour) now stay on screen until the full batch completes, rather than disappearing individually as each pipeline finishes.
Progress bar count text no longer clips with 4-digit image counts (1000+ images).
CI updated to Xcode 26 — v1.19.5
2026-04-04
Improved
Release builds now use Xcode 26.3. The @concurrent pipeline annotations introduced in v1.19.2 are now fully effective, ensuring all image loading, stretching, and metrics computation always runs on the cooperative thread pool.
Concurrency revert — v1.19.4
2026-04-04
Fixed
Reverted @concurrent pipeline annotations. The attribute causes a ~2× slowdown when compiled with Xcode 16 and is not yet safe to use in CI builds. Restores the throughput of v1.19.1.
Concurrency performance hotfix — v1.19.3
2026-04-04
Fixed
Restored full pipeline throughput in the release binary. The SE-0461 concurrency setting added in 1.19.2 was silently ignored by the Xcode 16 compiler, causing metrics computation to serialise on the main thread and producing a ~2× slowdown.
Concurrency performance fix — v1.19.2
2026-04-04
Fixed
Restored full parallel pipeline throughput when building with Xcode 26 (Swift 6.2). A Swift 6.2 concurrency change (SE-0461) was causing the image-loading pipeline to run serially on the main thread, producing a ~3× slowdown. All pipeline async functions are now marked @concurrent to guarantee thread-pool execution.
Progress bar and colour rendering fixes — v1.19.1
2026-04-04
Improved
Progress bars are now shown below the main image again, next to the elapsed-time indicator.
The selected image now switches to colour immediately when colour rendering begins, rather than waiting for its turn in the batch queue.
Release builds are arm64-only, restoring native Apple Silicon performance.
Batch progress bars — v1.19.0
2026-04-04
Added
Batch progress bars (Loaded, Metrics, Sampling, Colour) appear in the toolbar during image loading, showing live progress for each pipeline phase. Each bar disappears automatically when complete.
Fixed
In Simple mode with a multi-folder session, folder sections now appear in the sidebar (previously only Geek mode showed folder groupings).
Keyboard navigation follows sidebar order — v1.18.1
2026-04-03
Fixed
Keyboard navigation (↑/↓/Home/End/Shift+↑/Shift+↓) now steps through entries in the same order they appear in the thumbnail strip. In sessions with multiple filter types (Ha, OIII, SII), pressing ↓ advances within the current filter-group section before moving to the next.
In multi-folder mode, keyboard navigation skips entries inside collapsed folder sections so the cursor can no longer land on a hidden thumbnail.
F key — toggle flag/unflag on the current entry or orange range selection (configurable in Settings → Keyboard).
D key — deflag all: clears the entire flagged set in one keystroke (configurable).
(De)flag toolbar button — toggles the flag state of the current entry or orange range, always visible next to the Cancel button.
(De)flag and Deflag All added to the Select menu, separated from range-selection commands by a divider.
Session chart brightness sliders in Settings → Display: independently control the opacity of rejected dots and non-flagged dots when a flagged set is active.
Tooltips on all toolbar buttons, session chart metric buttons, and sidebar sort button; tooltip delay reduced from ~1.5 s to 0.5 s.
Getting Started guide page on the website — full workflow walkthrough, interface overview, key hints, and tips.
Keyboard Shortcuts reference page on the website — all default bindings in one place.
Top-level navigation bar on all website pages, replacing scattered footer links.
Improved
Mode toggle button now shows Simple or Geek (the current mode) instead of a blank label, matching the Colour/Grey button convention.
Session chart brightness contrast: rejected dots now render at 15 % opacity and non-flagged dots at 50 %, making the three-level hierarchy (rejected → non-flagged → flagged/cursor) clearly readable.
Key-binding conflict detection in Settings now correctly separates plain keys from ⌘-modifier keys, preventing false conflicts (e.g. plain D vs ⌘D).
Removed
File → Open File(s)… menu item removed due to sandbox limitations.
⌘A/⌘D/⌘I operate on range selection — v1.17.1
2026-04-01
Fixed
⌘A, ⌘D, and ⌘I now operate on the orange range selection (consistent with ⇧+click and ⇧+arrow) rather than the flag set.
Improved
FAQ: ⌘A / ⌘D / ⌘I documented in the Flagged view entry and the keyboard shortcuts entry.
Selection redesign, SO filter group — v1.17.0
2026-04-01
Added
SO (SII+OIII) dual-narrowband filter group with emerald colour — recognises Askar C2 and similar filters.
Improved
Selection model fully redesigned: cursor (blue, always one frame) and range selection (orange, built with ⇧+click or ⇧+arrow) are now independent with no side effects between views.
⇧+click and ⇧+arrow build an orange range in any view; ⌘+click adds/removes the range to/from the Flagged view.
Reject acts on the orange range if active, otherwise on the cursor. In the Flagged view, rejected frames stay orange for immediate undo.
Session chart cursor dot is now white for instant position recognition; rejected frames always shown at 30% opacity.
Sidebar thumbnails show a checkmark badge on flagged frames and an orange border on range-selected frames.
FAQ: updated session chart and Flagged view entries to reflect the new model; added full filter-group colour table with swatches.
Ask Support link, FAQ improvements — v1.16.3
2026-03-31
Added
Help menu: new Ask Support item opens the GitHub bug report form directly.
Improved
FAQ: added "What do the colours and brightness levels in the session chart mean?" explaining filter-group dot colours, dashed median lines, and the spotlight brightness hierarchy.
FAQ: corrected "What is the session chart?" — dot colour represents the filter group, not the quality badge.
Session chart now dims non-selected frames when a multi-selection is active, creating a three-level brightness hierarchy: rejected (darkest) → non-selected → selected (full brightness). Works for both sidebar selections and chart drag-selections.
Auto-Flag sheet: SNR threshold is now enabled by default.
Fixed
Auto-Flag sheet: all threshold labels corrected from "Reject if …" to "Select if …".
Cmd+Click in the Flagged view with a multi-selection active (e.g. after Cmd+A) now removes the entire selection at once.
Bug fixes — v1.16.1
2026-03-31
Fixed
Website feature list said "drag-to-reject" and "Auto-reject" — corrected to "drag-to-select" and "Auto-select".
Folder count badge in the thumbnail sidebar showed the total file count regardless of the active view; it now reflects only entries visible in the current view (All / Flagged / Rejected).
Metric buttons above the session chart (Score, FWHM, Ecc, SNR, Stars) did not visually indicate which metric was active; the selected button is now filled (prominent).
Cmd+Click in the Flagged view was toggling multi-selection instead of removing the entry from the selection; it now always unflags the clicked entry.
Shift-click multi-select did not work at first open until the user clicked the first thumbnail; the shift-click anchor is now seeded when the first image is auto-selected on load.
Include REJECTED, Select All Rejected & more — v1.16.0
2026-03-29
Added
Include REJECTED folder — checkbox in the Open Folder dialog loads FITS files inside any REJECTED/ subfolder and marks them as rejected automatically. A permanent toggle is in Settings → Files & Folders.
Cmd+R — Select All Rejected — selects all rejected frames in one keystroke. Configurable in Settings → Keyboard.
Sort by Rejected — new option in the thumbnail sort picker; rejected entries sort to the bottom (ascending) or top (descending).
Ko-fi link added to the About FITS Blaster panel.
"How Scores Work" page added to the website, explaining background estimation, star detection, shape measurement, the composite score formula, and badge-colour logic.
Fixed
Reset now always switches back to "All frames" mode.
Cmd+click in "Flagged" mode with an active multi-selection now toggles the clicked entry instead of unflagging everything.
Shift+click range selection now works from the very first open.
Session chart now enlarges dots for all multi-selected thumbnails.
Undo reject correctly moves files back to their pre-rejection folder when loaded via "Include REJECTED".
Cmd+A (Select All) and other command-key shortcuts now work reliably across all keyboard layouts.
Bug fixes & polish — v1.15.1
2026-03-27
Fixed
Opening a folder no longer causes a spinning beach ball when files are stored on iCloud Drive or a slow mount. The BITPIX pre-flight check now runs on a background thread instead of the main thread.
Improved
Help menu "FITS Blaster Help" now opens the online FAQ directly.
FAQ updated: corrected references to Auto-Flag, removed outdated subscription mentions.
Switch to donationware — v1.15
2026-03-25
Removed
Subscription, paywall, and 50-frame free-tier limit — FITS Blaster is now free with no restrictions. If you find it useful, buy me a coffee.
Fixed
Sandbox permission error when rejecting files: folder access is now re-established automatically when the stored bookmark is missing or stale, with a clear error message if access cannot be recovered.
Flagged view & selection overhaul — v1.14
2026-03-25
Added
Flagged view — a sidebar filter showing only flagged frames. Add frames via ⌘+click, ⇧+click, chart drag-select, or Auto-Flag; remove them with ⌘+click inside the view.
Flag-then-inspect workflow — chart drag-select and Auto-Flag now add frames to the Flagged view for inspection before rejection, rather than rejecting immediately.
Select menu — top-level menu with Select All, Deselect All, and Invert Selection (defaults: ⌘A / ⌘D / ⌘I), all configurable in Settings.
Shift+↑/↓ extend selection — grows the multi-selection one step at a time.
Drag tooltip — while drag-selecting in the session chart, a floating label shows the metric value of the frame under the cursor.
Fixed
Arrow-key navigation now stops at the boundary of the visible set rather than crossing into hidden frames.
Improved
Session chart has breathing room before the first dot, making drag-select from frame 1 easier.
Pipeline fix + toolbar buttons — v1.12.5
2026-03-24
Fixed
Geek-mode load time regression (100 s → 62 s on M1 Air, 592 images): GPU star-detection moved back to Phase B, keeping Phase A as I/O + GPU stretch only.
Phase B semaphore raised from 2 to 6 on M1 Air, restoring throughput to match v1.12.3.
Added
Colour/Grey toggle button and Cancel button added to the toolbar.
Phase A/B pipeline decoupling — v1.12.4
2026-03-24
Improved
Loading pipeline decouples I/O from metrics: Phase A (FITS I/O + GPU stretch) displays each image immediately; Phase B (Moffat fitting) runs concurrently in detached tasks.
Phase A concurrency raised to max(8, cpuCount) — keeps the SSD pipeline fuller since slots are no longer held by CPU-bound metrics work.
Peak memory reduced: the ~100 MB Metal buffer per image is released after crop extraction rather than being held for the full Phase A+B duration.
GPU downscale + parallel Moffat fitting — v1.12.3
2026-03-24
Improved
Metal stretch kernels now downsample directly to display size in a single GPU pass using a box filter — Grey+Simple load time: 53 s → 28 s; Colour+Simple: 168 s → 82 s.
Moffat star fitting now uses a 4-wide inner task group, reducing Geek-mode Phase B time.
Added
Cancel button in the info bar to abort an in-progress load.
GPU Bayer debayering — colour FITS images can now be displayed in colour using a Metal compute shader with per-channel percentile stretch. Toggle in Settings → Image Display.
Per-folder colour normalisation — images load as greyscale first, then re-render in colour with consistent per-subfolder stretch after the batch completes.
Resizable session chart — drag handle replaces the fixed split; chart height is remembered across launches.
Dynamic y-axis — chart y-axis starts near the data minimum rather than at zero.