A desktop application for astrophotographers to catalog, organize, and analyze imaging sessions.
NightCrate ingests raw imaging data directories and associated log files — from N.I.N.A., ASIAIR, and PHD2 — automatically extracting metadata and building a searchable, organized library of all your imaging work.
- Catalog sub frames from FITS headers: filter, exposure, gain, temperature, camera, telescope, coordinates, timestamp
- Ingest session logs from N.I.N.A. and ASIAIR: autofocus events, plate solve results, meridian flips, filter changes
- Ingest PHD2 guiding logs and associate guiding quality with individual sub frames by timestamp
- Analyze guiding — RA/Dec error graphs with dither points, RMS stats for selected time ranges, preview the sub corresponding to any point on the guiding timeline
- Track integration time per target, per filter, across sessions and nights
- Manage calibration frames — match darks/flats/bias to sessions by camera, gain, temperature, and exposure
- Multi-night project support — same target imaged across many nights is one project, not many
- File management — catalog in place by reference (no files moved by default), with optional copy/reorganize
- Backend: Python 3.14 + FastAPI + SQLite (via aiosqlite, raw SQL) + Pydantic
- Frontend: React + TypeScript + Vite + MUI + Zustand + TanStack Query
- Key libs: astropy, Pillow, lz4, zstandard, defusedxml, D3.js
Early development. See PLAN.md for the current version plan.
NightCrate is a single-user, local-first application. The backend binds
to 127.0.0.1:8000 only — it is not reachable from the network. It trusts
the local user completely: any process running as you can read anything
NightCrate can read (FITS files, the active database, etc.). There is no
authentication.
This posture is intentional for a desktop-class astrophotography tool. Do not expose the backend to the network or to untrusted local accounts without adding authentication and path allowlists. The file-browser endpoints accept arbitrary filesystem paths, which is the correct behaviour for a local file browser but would be a severe information-disclosure vulnerability in any shared-access deployment.
NightCrate is licensed under the MIT License.
NightCrate is built with the following open-source libraries. We are grateful to their authors and contributors.
| Library | License | Copyright |
|---|---|---|
| NumPy | BSD 3-Clause | Copyright (c) 2005-2025, NumPy Developers |
| SciPy | BSD 3-Clause | Copyright (c) 2001-2025, SciPy Developers |
| Astropy | BSD 3-Clause | Copyright (c) 2011-2025, Astropy Developers |
| Pillow | HPND (PIL License) | Copyright (c) 1997-2011 by Secret Labs AB; Copyright (c) 1995-2011 by Fredrik Lundh; Copyright (c) 2010-2025 by Jeffrey A. Clark and contributors |
| FastAPI | MIT | Copyright (c) 2018 Sebastián Ramírez |
| Uvicorn | BSD 3-Clause | Copyright (c) 2017-present, Encode OSS Ltd |
| Pydantic | MIT | Copyright (c) 2017-2025, Samuel Colvin and Pydantic Contributors |
| httpx | BSD 3-Clause | Copyright (c) 2019, Encode OSS Ltd |
| aiosqlite | MIT | Copyright (c) Amethyst Reese |
| yoyo-migrations | Apache 2.0 | Copyright (c) Oliver Mayfield-Sherborne |
| aiofiles | Apache 2.0 | Copyright (c) Tin Tvrtković |
| platformdirs | MIT | Copyright (c) platformdirs contributors |
| lz4 | BSD 3-Clause | Copyright (c) 2012-2023, Jonathan Underwood |
| zstandard | BSD 3-Clause | Copyright (c) 2016-present, Gregory Szorc |
| defusedxml | PSF-2.0 | Copyright (c) 2013-2023, Christian Heimes |
| tifffile | BSD 3-Clause | Copyright (c) 2008-2026, Christoph Gohlke |
| imagecodecs | BSD 3-Clause | Copyright (c) 2008-2026, Christoph Gohlke |
| bottleneck | BSD 2-Clause | Copyright (c) 2010-2019, Keith Goodman |
| sep | LGPL-3.0 | Copyright (c) 2014, Kyle Barbary |
| py7zr | LGPL-2.1+ | Copyright (c) 2019-2025, Hiroshi Miura |
| mlx | MIT | Copyright (c) 2023-2026, Apple Inc. |
| timezonefinder | MIT | Copyright (c) 2016-2026, Jannik Michelfeit |
| astropy-healpix | BSD 3-Clause | Copyright (c) Astropy Developers |
| Library | License | Copyright |
|---|---|---|
| React | MIT | Copyright (c) Meta Platforms, Inc. and affiliates |
| MUI (Material UI + X Community) | MIT | Copyright (c) MUI |
| D3.js | ISC | Copyright (c) 2010-2025, Michael Bostock |
| Zustand | MIT | Copyright (c) 2019 Paul Henschel |
| TanStack Query | MIT | Copyright (c) 2021-present Tanner Linsley |
| React Router | MIT | Copyright (c) React Training LLC 2015-2019; Copyright (c) Remix Software Inc. 2020-2021; Copyright (c) Shopify Inc. 2022-2023 |
| dnd kit (@dnd-kit/core, @dnd-kit/sortable, @dnd-kit/utilities) | MIT | Copyright (c) 2021, Claudéric Demers |
| KaTeX | MIT | Copyright (c) 2013-2020 Khan Academy and other contributors |
| react-katex | MIT | Copyright (c) 2018 Matej Bránsky |
| react-markdown | MIT | Copyright (c) Espen Hovlandsdal |
| remark-gfm | MIT | Copyright (c) Titus Wormer |
| Vite | MIT | Copyright (c) 2019-present, VoidZero Inc. and Vite contributors |
| Geist Font | SIL OFL 1.1 | Copyright (c) 2023 Vercel |
| Dataset | License | Attribution |
|---|---|---|
| OpenNGC | CC-BY-SA-4.0 | Verga, Mattia. OpenNGC — Database of NGC and IC objects. Fetched at runtime from GitHub into the user's app-data folder (APP_DIR/catalogs/openngc/); no catalog data is bundled with the repo. OpenNGC aggregates data from NED, SIMBAD, HyperLEDA, and other public astronomical databases. |