Keep the frames that matter.
Reject the ones that don't.

An astrophotography image catalog manager, with optional N.I.N.A. and Target Scheduler integration. Catalog your FITS files in place, browse and grade frames by target, session, and filter, and let it flag clouds, obstructions, tracking loss, and bad pointing — then preview stacks and export the keepers.

PSF Guard desktop grid showing real Flaming Star H-alpha frames
The cleaned grading grid with real Flaming Star H-alpha frames: stable controls, arrow-key review, and batch selection.
Like Lightroom Classic, but for astrophotography data. PSF Guard catalogs files in place instead of moving them into a managed library. It reads FITS metadata and stores its image map, plans, and grades in a catalog based on the Target Scheduler database structure. Target Scheduler integration is optional.

More from us: seiza.fyi — live plate solving in your browser, plus desktop apps for FITS browsing.

Star count and HFR miss ruined frames. Measured on a real session: a tree line occluding the field left star counts within normal variation, and HFR stayed flat until the frame was more than 60% blocked. A thin cloud veil dimmed every star by 37% — and the frame was still Accepted by conventional grading. PSF Guard screens with signals that are local, photometric, and temporal — classical statistics calibrated on real sessions.

Your astrophotography image catalog

🗃️

Organize every frame

Build a catalog from FITS folders or open an existing Target Scheduler database. Browse by target, session, filter, date, and grade while the source files stay in place.

🖼️

Fast visual grader

One grader UI, in the desktop app or any browser: auto-stretched previews, zoom and pan, side-by-side comparison with synchronized zoom, batch operations, keyboard-driven workflow, and full undo/redo.

☁️

Automatic quality screening

Spatial metrics, cross-frame photometry, and fresh plate solutions catch occlusion, clouds, thin veils, errant light, off-target frames, and tracking loss — with evidence explaining every verdict.

🌌

Sky context & plate solving

See expected catalog objects from known coordinates, solve image pixels on demand with Seiza, and overlay labels, object outlines, an RA/Dec grid, and the measured target offset.

🔬

Live stack previews

Integrate a target's graded frames per channel with Seiza registration, combine them into LRGB or SHO/HOO/Foraxx color previews with background extraction and opt-in deconvolution, and download the linear FITS — before committing hours to a full run.

🔁

Optional scheduler link

Open a Target Scheduler database or sync a separate telescope copy. Reviewed grades keep its acquired-image counts accurate, so it can replace rejected frames.

📥

Catalog & plan

Build a catalog from plain FITS folders, derive projects, coordinates, shared exposure templates, and plans from headers, then add quality data in the background.

🗂️

Safe reject archival

Move rejected frames and their sidecars out of the directory tree your stacking software scans. Idempotent, recorded, and fully reversible — restore never overwrites.

🔭

Two-machine workflows

Sync projects, captured images, and grades between the telescope's database and your grading machine — pull to refresh, grade locally, push grades back.

Star detection & PSF analysis

A port of N.I.N.A.'s detector plus a HocusFocus-inspired detector, with Gaussian/Moffat PSF fitting, annotated star maps, and residual visualizations.

Know where every frame landed

Header coordinates provide immediate catalog context. When the frame has no embedded WCS, choose Solve field or press O: PSF Guard tries a fast hinted solve, falls back to the blind index when installed, caches the result, and turns on the shared Seiza overlay.

A Seiza-solved Cocoon Nebula frame with coordinate grid, catalog labels, object outlines, and target offset
A pixel-derived hinted solve: catalog labels and outlines, RA/Dec grid, solved scale, and a target only 32 arcseconds from center.

Set up catalogs and plate solving →

Screening that sees what global metrics can't

Every flagged frame can be rendered as an annotated diagnostic: the analysis grid is overlaid on the image, colored by the signal that fired, with the verdict and metrics in the caption. The diagnostic shows which rule fired and why.

Annotated diagnostic showing occlusion arriving: red cells trace a tree line
Occlusion arriving — red cells trace the tree line exactly. Transparency of the surviving field: 1.01, which is why global metrics miss it.
Annotated diagnostic of a thin cloud veil detected photometrically
Thin veil — nothing is locally wrong, but matched-star photometry reads transparency 0.63 (~0.5 mag). Conventional grading accepted this frame.
Advancing occluder frontier: blue cells darker than history, yellow lit fringe
An advancing occluder: blue cells read darker than their own history (blocked skyglow), yellow marks the lit fringe.
Static corner glow detected against the frame's own gradient model
Static corner glow, present from the session's first frame — invisible to temporal baselines, caught against the frame's own gradient model.

How screening works →

Preview the stack before you commit to it

Live-stack the accepted frames of a target right inside the grader — your current grades and sequence checks select the inputs. Combine cached channel stacks into LRGB or narrowband color with Seiza background extraction, editable processing, and opt-in deconvolution; then export the non-rejected lights into a WBPP-ready folder, zip download, or instant local hardlinks.

Real Gulf of Mexico (NGC 7000) Foraxx SHO preview built from PSF Guard channel stacks
A real Gulf of Mexico (NGC 7000) Foraxx SHO quick-look built from six accepted narrowband acquisitions — recombine palettes without re-integrating.

Stack previews → Export for stacking →

A quick tour

Install it your way

Desktop app, Docker container, standalone binary, or Fedora RPM — one tool, wherever your images live.

🖥️ Desktop app

Native installers for Windows (.msi / NSIS setup with CLI on PATH), macOS (.dmg, Apple Silicon), and Linux (.deb / AppImage).

Download the latest release →

🐳 Docker

For NAS boxes and home servers. The catalog mount must be writable so grades and plans can be saved.

docker run -d -p 3000:3000 \
  -v /path/to/catalog.sqlite:/data/database.sqlite \
  -v /path/to/images:/images:ro \
  ghcr.io/theatrus/psf-guard:latest

⌨️ Standalone CLI

Single binary for scripting and servers. Screen a night in one command:

psf-guard screen-fits ./LIGHT --annotate ./diag
psf-guard server catalog.sqlite ./images

Downloads & platform notes →

📦 Fedora RPM

Prebuilt packages for Fedora 43/44 with a psf-guard.service systemd unit for running the grader as a daemon.

sudo dnf install ./psf-guard-*.x86_64.rpm
Opening an existing Target Scheduler database? Back it up before the first write. PSF Guard can save grades into it, and sync can copy state between database files. Preview import and sync changes before applying them.

More projects from theatr.us