Project · Released v0.2.1

telescopeyoke

Makes an ordinary Sky-Watcher SynScan telescope smarter, by measuring the things that normally have to be set up perfectly by hand.

  • Python
  • astropy
  • ASTAP plate solving
  • INDI
  • Arduino
  • MCP

Source on GitHubDownload 0.2.1Home page

107′ → 6′ → 1′
M27 centred in three corrections on the first night, from about ten degrees out
3.3° → 0.1°
polar alignment over six rounds, 13 October 2026
641
automated tests, on Python 3.11 to 3.14, Ubuntu and Windows

On 3 October 2026 I put a laptop outside beside a new motorised mount and told Claude it was hooked up to a telescope. telescopeyoke is what came out of that night and the two weeks since.

The problem

The kit most people start with, a Sky-Watcher telescope on a SynScan GoTo mount, assumes it has been set up perfectly: the home position exact, the polar axis on the pole, the focus spot on. I couldn’t do any of that on the first night, and I’m doing it in a back garden with a house in the way.

So telescopeyoke is built around one idea: measure the imperfections of modest equipment instead of pretending they are not there. Each one is measured, and then corrected or planned around. It runs on a laptop left beside the telescope, and I watch from indoors.

What it does

  • Centres every GoTo by plate solving. It photographs the sky, works out where the telescope really ended up, corrects, and repeats until the target is in the middle.
  • Measures the polar alignment from three plate solves, and says which bolt to turn and roughly how far, with a drawing of it.
  • Focuses by ear. A click for every frame and a tone that rises as the stars sharpen, so my eyes stay on the focuser. Or the £30 motor focuser does it by itself.
  • Ranks targets for my actual sky: altitude, the Moon, light pollution, and the skyline, measured from a phone panorama.
  • Plans the night with a GO, MARGINAL or NO-GO verdict from cloud, rain, wind, dew and seeing.
  • Captures and stacks, keeping every raw frame, so a better method next month can remake last night’s picture.
  • Notices when the mount says it moved and didn’t.
A Move plan dialog for Go to M1: height 24 degrees, hour angle plus 5.2 hours, west side of the mount, three limit checks passed and a warning that the tube will swing over the pole
Plan the move. Before the mount moves, the plan: where it ends up, the limits it checked, and a warning that the tube will swing over the pole.
The Targets screen with M1 selected: its kind, height, score, best time and window, and a frame showing a field of 1.00 by 0.67 degrees at 0.66 arcseconds per pixel
Targets. Every target with its score for tonight, and the camera's real field of view drawn against the object's size.
The Focus screen showing HFR 2.35 pixels, IMPROVING, best tonight 2.85 from 40 stars, and a falling line of readings
Focus. Focusing: the star size falling as focus improves, read out in words as well as numbers.
The Imaging screen with the newest frame and a stack of 17 accepted frames side by side, readings for FWHM, roundness, stars, drift and rotation all marked good, and 7 frames rejected for cloud
Imaging. An imaging run: the newest frame beside the stack so far, every frame's quality, and seven frames rejected for cloud.

All 4 are the built-in demo, on the simulated rig; the video above opens on its Tonight screen.

How it’s built

Python, about 34,500 lines of it, with 641 automated tests that run on every push, on Python 3.11 to 3.14, on Ubuntu and on Windows. Plate solving is ASTAP. The camera goes through INDI on Linux and Altair’s SDK on Windows. The motor focuser is an Arduino Nano driving a small stepper motor, and its firmware is in the repository.

Three decisions worth explaining:

  • A pretend rig, not mocked-up screens. A complete simulated mount, camera, sky, focuser and cloud is built in, and the real centring, focusing and stacking code runs on it. Every screenshot on this page comes from that demo.
  • Claude drives it. The repository has an agent interface: a ty command that answers in JSON, and a read-only MCP server. Claude runs the telescope from night to night. It does the sums and I do the looking.
  • Trust nothing that hasn’t been seen. On 6 October the motors stopped without a sound while the handset went on reporting every move as made, and a survey stared at one tree for half an hour. Now a GoTo, a polar measurement or a survey whose pictures don’t change stops with “the mount is not moving”.

Evidence

A real run from the first night. The home position had been set by eye and was about ten degrees out:

$ ./mount.py goto M27 --solve
M27 Dumbbell Nebula: altitude 57°, hour angle +0.36 h (west: the tube will swing over the pole)
  off by -107.0' in hour angle, +94.4' in Dec
  off by -6.2' in hour angle, -11.4' in Dec
  off by +1.0' in hour angle, -1.8' in Dec
  centred
./mount.py goto M27 --solve, 3 October 2026. A real run, copied from telescopeyoke's README.

And the Dumbbell Nebula from that night: 48 two-second exposures, with the mount polar aligned by eye.

The Dumbbell Nebula, M27, a grey-green glow among stars
M27 from the first night, stacked by telescopeyoke.

What’s proven, and what isn’t

“Under real stars” means my EQ3 Pro, 150P and a borrowed Hypercam 183C, at night. Everything is also run on the simulated rig and in the tests. The full record, night by night, is docs/validation.md in the repository.

What has been proven under real stars
FeatureUnder real starsDetail
GoTo centred by plate solvingProvenTo about an arcminute, from 10° out
Polar alignment from three plate solvesProven3.3° to 0.1° over six rounds; how well it repeats is not yet known
Focusing: measuring the starsProvenThe reading fell from 11 to about 2 as focus was reached
Motor focuserProvenFocused the 150P to HFR 2.47 on 15 October 2026
Imaging and stackingPartlyReal runs of 48 and 207 frames; the newest fixes not yet rerun
Drift model and Dec correctionPartlyOnly an earlier, cruder version has run under real stars
Finding Polaris by dayPartlySearched three times on the real mount; Polaris not found yet
Discovery: novae and other new objectsPartlyRun on real M31 stacks with planted fakes; no find of our own yet
Focusing by ear: click, tone and levelsNot yetRun only on made-up stars
Driving a mount on WindowsNot yetCamera frames taken indoors; no mount driven yet

Follow it

Every night it has been out is in the astrophotography diary. You can try it without a telescope: the 0.2.1 release opens on the pretend rig.