SharpAstro

Open source · .NET 10 · Windows, Linux, macOS

Software that runs the whole night.

SharpAstro is a set of open-source .NET libraries and applications for astrophotography: controlling the mount and camera, running an unattended imaging session, and stacking what comes back. It can drive several telescopes on one mount from a single session.

23 libraries & applications Native AOT binaries AGPL-3.0 & MIT

What it does

A night, end to end

Every screenshot below is the real application. The session tabs were captured against simulated hardware, so anyone can reproduce the run, and the viewer is showing a real stack.

Automation

Point it at the sky and go to bed

It cools the camera, finds focus, calibrates the guider, slews and centres on a plate solve, dithers, handles the meridian flip, refocuses when the stars start to bloat, shoots flats at dawn, and parks. It drives one mount and every optical train on it.

Refocusing is triggered by a trend over the last 30 frames rather than one bad exposure, so a gust of wind or passing haze won't start a focus run. Focuser backlash is worked out from every successful autofocus, so you never have to measure it separately.

The Live Session tab during an imaging run, showing the current frame, the session phase, and per-frame guiding statistics.
Live Session: a run in progress, showing the latest frame with the guiding trace beside it.

Planning

Decide what is worth shooting

The scheduler ranks tonight's targets by altitude, the moon, and whatever blocks your own horizon, then gives each one the part of the night when it's highest.

Targets that fit in one field of view are framed together automatically. Pin the Lagoon with a wide enough sensor and the Trifid comes along for free. Comet positions and brightness are calculated locally from JPL orbital elements, so they're always current instead of coming from a list that has gone stale.

The Planner tab showing tonight's candidate targets, with altitude curves for two pinned objects plotted against the twilight bands and an hourly cloud forecast.
Planner: two pinned targets scheduled across tonight's dark hours, with the hourly forecast above.

Finding

Know where you are pointing

A GPU-rendered sky atlas of the full Tycho-2 catalogue, with constellation figures and boundaries, deep-sky overlays, live planet and comet positions, and a reticle showing where the mount is pointing right now.

The plate solver uses the same catalogue and needs nothing else installed, so you can solve a frame and sync the mount out of the box. ASTAP and astrometry.net work too, if you prefer them.

The Sky Map tab showing the Milky Way through Sagittarius and Scorpius with constellation figures, boundaries, the ecliptic, the zenith marker and the mount's own reticle.
Sky Map: the full Tycho-2 catalogue on the GPU, with the pinned target circled and the mount's reticle showing where it's pointing.

Guiding

Keep the stars round for eight hours

The built-in guider calibrates itself, guides on the star you pick, and dithers between sub-exposures. If you already trust PHD2, use that instead.

Calibration runs half an hour east of the meridian on purpose. That keeps a German equatorial mount on one side of the pier the whole time, so the declination direction it learns matches the side it will image on. Calibrating west of the meridian is how a mount ends up running away in Dec.

The Guider tab showing the guide star with its right ascension and declination vectors, a star profile, guide statistics, a scatter plot, and the guiding trace with a dither step.
Guider: 0.28″ total RMS on the simulated mount. The step in the trace is where a dither landed.

Hardware

Talk to the gear you already own

ASCOM on Windows, Alpaca over the network on any platform, the native ZWO, QHYCCD, Player One and ToupTek SDKs (including the Altair, Omegon, OGMA and MallinCam cameras built on ToupTek's), serial mounts such as Meade LX200, SkyWatcher, OnStep and the iOptron SkyGuider Pro, the Gemini FlatPanel Lite and Focuser Pro, and Canon bodies over PTP without installing any Canon software.

Each device is identified by a URI, so switching drivers means editing a profile, not rebuilding anything. A headless Raspberry Pi runs exactly the same code as a Windows desktop.

The Equipment tab showing a profile with a mount, guider, guide camera, weather source, and one optical train with its camera and focuser assigned.
Equipment: one profile, one mount, and an optical train for each telescope on the saddle.

Remote

Watch it from somewhere warm

Run it headless and the session is available over REST and WebSocket. The same hardware is also served over ASCOM Alpaca, so other software can drive it too.

From a desktop you can connect to another machine and follow its run in the same tabs you'd use locally. Switching to another rig only changes the view; your own machine keeps controlling its own hardware.

# what is the rig doing right now?
$ curl -s localhost:1888/api/v1/session/state | jq '.response.phase, .response.activeTargetName'
7   # Observing
"Helix Nebula"

# the same hardware, spoken to as ASCOM Alpaca by anything else on the network
$ curl -s localhost:1888/api/v1/telescope/0/rightascension
{"Value":22.518,"ErrorNumber":0,"ErrorMessage":""}
One headless node, two APIs: its own session API, and the Alpaca device API that other astronomy software already speaks.

Inspecting

Look at what came back

Astro Photo Viewer is the suite's image viewer as a standalone app, available from the Microsoft Store. It opens FITS, SER planetary video, TIFF and Canon CR2/CR3 files, stretches and debayers them on the GPU, measures every star it finds, and overlays a coordinate grid and catalogue labels on a plate-solved frame.

SER files open in playback mode. Switch to the Live view for a rolling lucky-imaging stack that follows the playhead, or to the Auto view to stack the whole capture once and save the result beside the file. Six wavelet sharpening sliders work on either. Stacking runs in the background, so the sliders stay responsive however long a stack takes.

Needs Windows 10 version 2004 or newer, on x64 or ARM64, and updates itself through the Store. Double-clicking a .fits, .fit, .fts, .fz or .ser file opens it in the window that's already showing its folder, instead of starting another copy. On Linux and macOS, the same viewer is a self-contained native download on GitHub Releases.

Astro Photo Viewer showing a colour FITS of the Lagoon and Trifid nebulae: the file list at left, an A/B split down the middle between a pinned stretch and the live one, and metadata, per-channel statistics, white-balance sliders and a cursor read-out at right.
Astro Photo Viewer, as shown on its Store listing: an OIII/HOO stack of the Sagittarius triplet, plate-solved at 5.98″/px with 11,628 stars measured. The A/B split compares a pinned processing state with the live one.

Live demo

The atlas runs in your browser

Nothing to install and no account needed. The planner and sky atlas are compiled to WebAssembly and run straight from a static site.

The same code renders through Vulkan on the desktop and through WebGL in the browser, with the same scheduler, catalogue and projection maths.

The in-browser sky atlas rendering stars, constellation figures and the horizon through WebGL.
The same atlas, drawn through WebGL instead of Vulkan.

The ecosystem

Twenty-three pieces, each usable on its own

The astrophotography stack is built on general-purpose libraries that were written for it. Everything is pure managed code and AOT-friendly, except where it wraps a vendor's native SDK.

General-purpose .NET

Written for the stack above, with no dependency on it. Pure managed, trim- and AOT-friendly, MIT licensed.