Queue many planetary videos and let SASpro process them one after another with the same alignment and stacking settings — ideal for an all-nighter of Jupiter or Saturn clips where you'd rather script the processing than babysit it. The engine is identical to the per-file Planetary Stacker; this dialog adds file-list management, per-batch settings inheritance, progress reporting across files, and automatic output document creation.
Click Add Files… and multi-select from the file browser. Only video containers are accepted:
.ser — SER planetary videos..avi, .mp4, .mov, .mkv — other video containers.Image sequences and single-frame files are skipped with a log entry naming each one (batch mode processes whole clips, not static images). The last-used folder is remembered via QSettings so the next Add Files… starts there.
If the Viewer currently has a video open, that file is pre-added to the list when you open the Batch dialog — so a common pattern is: open the first video in the Viewer, dial in your ROI, surface anchor, Keep%, and tracking mode, then open Batch, add the other files for the same target, and run.
Remove Selected removes the highlighted entries; Clear All empties the list.
Batch inherits all the setup from the Viewer at the moment you opened this dialog:
AUTO.These settings are displayed read-only in the Settings panel for sanity-check. If you need to change them, close the Batch dialog, adjust them in the Viewer, and reopen the Batch dialog.
Click Choose Folder… and pick where stacked results should land. Each file in the list produces one .tif file in this folder, named <input-stem>_stack.tif. For example:
jupiter_2026_11_21_2130ut.ser → jupiter_2026_11_21_2130ut_stack.tifmars_run_01.avi → mars_run_01_stack.tifExisting files with the same name will be overwritten without prompting — the batch assumes you want fresh output.
The only per-batch Stacker setting that's exposed in the Batch dialog is Drizzle. Options: Off (1×), 1.5×, 2×. (3× and 4× drizzle are available in the Planetary Stacker's own dialog but not here — those scales are expensive enough that it's worth checking per-file results before committing a whole batch to them.) Pixfrac, kernel, sigma, planet axial rotation, field rotation, flats, and all analyze/AP settings use the Stacker defaults for every file in the batch.
If you need per-file control over these, run those files through the Planetary Stacker individually.
If Tracking is set to Surface and no surface anchor was defined in the Viewer, SASpro opens an Anchor Picker dialog on frame 0 of the first file when you click Run Batch. The picker shows the reference frame full-size with zoom (+ / - / Fit / 1:1 buttons, Ctrl+Wheel), and you Shift+drag a patch to define the anchor. The chosen anchor applies to every file in the batch — which is why you want files with consistent framing.
If you cancel the picker, the batch doesn't start. If you pick a tiny anchor (less than 16×16), the OK button stays disabled.
Click ▶ Run Batch to start processing. SASpro locks the file-list and settings controls (so you can't modify them mid-run), shows two progress bars (per-file and overall), and lights up each file in turn:
| Status | Colour | Icon | Meaning |
|---|---|---|---|
| Pending | Grey | ⏳ (hourglass) | Queued, not yet processed. |
| Running | Blue | 🔄 (reload arrows) | Currently being analyzed and stacked. |
| Done | Green | ✅ (check) | Finished successfully; output TIFF saved and opened as a SASpro document. |
| Failed | Red | ❌ (cross) | Something went wrong; see the Log for the error. |
Below the list, the phase label shows the current pipeline phase (Quality, SSD Refine, Stack, Drizzle) with a percentage, and the overall label shows N / Total files done. The log window at the bottom records every file-start, file-done and file-failed event with the output path or error message.
Click Cancel during a batch run to stop after the current file finishes. The already-done files keep their output TIFFs; files that were still pending stay pending (grey) and are not processed. The dialog becomes editable again, so you can tweak and re-run just the remaining files if you want.
Cancel is a cooperative signal: SASpro checks it between the Analyze and Stack phases of each file, so a cancel during Analyze will still let that file's Analyze finish before stopping. There's no mid-phase abort — this avoids leaving partial state behind.
When each file completes, two things happen:
<output-folder>/<input-stem>_stack.tif as a 32-bit floating-point TIFF.<input-stem>_stack, opened in a sub-window, ready for stretch and post-processing.By the end of a 20-file batch you'll have 20 TIFFs on disk and 20 open sub-windows in SASpro. On completion, a message box tells you how many succeeded and how many failed, plus the output path.
The batch orchestration architecture.
Each run spawns a single _BatchWorker QThread that iterates over the file list sequentially. Each file goes through:
analyze_ser on that file's SERStackConfig → produces an AnalyzeResult.stack_ser with that result → produces the stacked float32 array.save_image (with a tifffile.imwrite fallback if that import fails).file_done(index, path, array) back to the GUI thread.Only the worker thread does Analyze/Stack work; the GUI thread stays responsive for progress updates, cancel clicks, and the mandatory step of pushing each result as a new SASpro document (which must happen on the GUI thread for Qt safety).
SASpro's document system is Qt-based, and creating a new QWidget sub-window from a background thread is undefined behaviour in Qt. The worker therefore does not create documents directly — it emits file_done(index, path, array) and the GUI-thread slot _on_file_done calls _push_as_new_doc safely on the main thread. This signal-slot pattern is why the result array is marshalled through the signal payload rather than being written to disk and immediately re-read.
Before running, SASpro builds one SERStackConfig per file by copying the base keyword set (inherited from the Viewer) and setting the per-file source. Each file's config carries its own copy, so modifying one in-flight (which doesn't happen, but conceptually) wouldn't bleed into others. Drizzle scale is set per batch from the dropdown and applied uniformly to all configs.
The _AnchorPickerDialog is a self-contained modal dialog that loads the first file's frame 0 (via open_planetary_source with a 2-frame cache), displays it as a mono preview with 1–99.5 percentile stretch, and lets you Shift+drag a rectangle on it. The result is stored in ROI-space coordinates (so if the Viewer's ROI is active, the anchor stays sensible when the Stacker crops to the ROI). On OK the anchor becomes the batch's surface anchor for every file; on Cancel the batch doesn't start.
save_image helper with tifffile as a fallback. The Planetary Stacker Viewer, which feeds this batch processor its base settings, is also documented separately.