M31 / Belfast

To do

  1. Capture more frames (pending: Belfast weather)
  2. Procure an EQ mount, so the sky stops rotating
  3. Refine the pipeline (again)
  4. Run some Seestar LP filter sessions for hydrogen-alpha pop

Learning how to capture M31 from rainy, Bortle 6 Belfast

I pointed a Seestar S30 Pro at the Andromeda Galaxy from Belfast, where the sky is Bortle 6 and most nights it rains. Below is the best picture I had on each date since first light, then what each change did on its own.

After: Latest: three nights
Before: First light
Before (left)
First light
479 fr · 80 min
17.0″ · SNR 19.4
After (right)
Latest: three nights
1,841 fr · 5 h 07 min
11.9″ · SNR 23.4

Timeline

Each step is the best picture I had on that date, made with that date's frames and code. Before is the previous step, and frames and minutes are running totals. Steps that came out worse stay in, with a note on what went wrong. Drag the line, or tab to it and use the arrow keys.

· processing

Step 01: My first pipeline

regenerated from the 8 Sep code (commit 0aaa0ac)

running total 427 frames · 71 min

After: First pipeline, 8 Sep
Before: First light: Seestar live stack
Before (left)
First light: Seestar live stack
total 479 fr · 80 min
17.0″ · SNR 19.4
After (right)
First pipeline, 8 Sep
total 427 fr · 71 min
14.4″ · SNR 11.1
What changed
I copied the 7/8 Sep subs off the scope and ran my own first pipeline on them: frame QA, Siril drizzle stacking weighted towards the sharpest frames, and GraXpert's AI background removal.
What it did
Stars shrank from 17.0″ to 14.4″, but SNR at my eight test points in the disc fell from 19.41 to 11.07. Culling and sharpness weighting threw signal away, and the AI background model took part of the halo with it.

aligned on 301 stars, median residual 0.21 px

· processing

Step 02: After the review

regenerated from the 9 Sep code (commit 9f622a1)

running total 467 frames · 78 min

After: After the review, 9 Sep
Before: First pipeline, 8 Sep
Before (left)
First pipeline, 8 Sep
total 427 fr · 71 min
14.4″ · SNR 11.1
After (right)
After the review, 9 Sep
total 467 fr · 78 min
15.5″ · SNR 16.5
What changed
The next day I had the pipeline reviewed against this night's data and acted on what it measured: no trend-based frame culling, weighting by star count instead of sharpness, a plain plane fit for the background, and star removal with Dark Star, including a fix for the dark ring it left around the core.
What it did
With 467 frames instead of 427, SNR went from 11.07 to 16.48 (+49 %) and stars grew from 14.4″ to 15.5″. The stack is bit for bit what today's pipeline makes from this night.

aligned on 301 stars, median residual 0.21 px

· processing + new night

Step 03: A second night, under a full moon

saved run history, 16 Oct (commit 63e7708 + uncommitted changes)

running total 995 frames · 2 h 46 min

After: Two nights, 16 Oct
Before: After the review, 9 Sep
Before (left)
After the review, 9 Sep
total 467 fr · 78 min
15.5″ · SNR 16.5
After (right)
Two nights, 16 Oct
total 995 fr · 2 h 46 min
13.3″ · SNR 19.0
What changed
I added 529 frames from 25/26 Sep, shot under a 99 % moon while the rest were still on the scope, and stacked both nights frame by frame with noise weighting.
What it did
SNR rose from 16.48 to 18.96 and stars tightened from 15.5″ to 13.3″, from 166 minutes stacked.

aligned on 338 stars, median residual 0.20 px

· processing + new night

Step 04: Three nights

today's pipeline, 17 Oct (commit 6d0dcc5)

running total 1,841 frames · 5 h 07 min

After: Three nights, 17 Oct
Before: Two nights, 16 Oct
Before (left)
Two nights, 16 Oct
total 995 fr · 2 h 46 min
13.3″ · SNR 19.0
After (right)
Three nights, 17 Oct
total 1,841 fr · 5 h 07 min
11.9″ · SNR 23.4
What changed
I added 16/17 Oct and the rest of 25/26 Sep, then reprocessed all three nights with today's pipeline, which also changed the colour calibration.
What it did
1841 frames and 307 minutes took SNR from 18.96 to 23.37 and stars from 13.3″ to 11.9″.

aligned on 338 stars, median residual 0.13 px

What each change did

I reprocessed these today so each comparison isolates one change. Before is on the left and after is on the right, aligned on the same stars.

Stage 00: Measure, don't guess

2026-09-07

After: 7/8 Sep, today's pipeline
Before: First pipeline, 8 Sep
Before (left)
First pipeline, 8 Sep
427 fr · 71 min
14.4″ · SNR 11.1
After (right)
7/8 Sep, today's pipeline
467 fr · 78 min
15.5″ · SNR 16.5
What changed
Reprocessed today: the 7/8 Sep frames through my first pipeline and through today's, which keeps almost every frame, weights them by star count and fits the background with a flat plane instead of an AI model.
What it did
On the same night SNR went from 11.07 to 16.48 (+49 %), and stars grew from 14.4″ to 15.5″.

aligned on 292 stars, median residual 0.21 px

Stage 01: The full moon night

2026-09-07, 2026-09-25 · nights 2026-09-07 + 2026-09-25

After: 25/26 Sep alone
Before: 7/8 Sep, today's pipeline
Before (left)
7/8 Sep, today's pipeline
467 fr · 78 min
15.5″ · SNR 16.5
After (right)
25/26 Sep alone
998 fr · 2 h 46 min
10.6″ · SNR 13.4
What changed
Reprocessed today with the same pipeline: the dark 7/8 Sep night against all of 25/26 Sep, under a 99 % moon.
What it did
Moonlight raised the frame background to 1882 ADU from 1326, so 166 minutes gave SNR 13.41 where 78 dark minutes gave 16.48. Stars came out at 10.6″ against 15.5″.

aligned on 292 stars, median residual 0.17 px

Stage 02: A ring around the core

2026-09-25

After: 25/26 Sep alone
Before: 25/26 Sep, old core protection
Before (left)
25/26 Sep, old core protection
998 fr · 2 h 46 min
10.6″ · SNR 13.4
After (right)
25/26 Sep alone
998 fr · 2 h 46 min
10.6″ · SNR 13.4
What changed
Reprocessed today on all of 25/26 Sep: star removal with the old core protection, a fixed brightness threshold, against the new one, set relative to the nucleus.
What it did
The old threshold left a dark ring 2.2′ from the nucleus, where the brightness dipped 16.0 %. With the new one no dip is deeper than 1.6 %.

aligned on 328 stars, median residual 0.11 px

Stage 03: Stacking nights

2026-09-07, 2026-09-25, 2026-10-16 · nights 2026-09-07 + 2026-09-25 + 2026-10-16

After: Three nights, 17 Oct
Before: 7/8 Sep, today's pipeline
Before (left)
7/8 Sep, today's pipeline
467 fr · 78 min
15.5″ · SNR 16.5
After (right)
Three nights, 17 Oct
1,841 fr · 5 h 07 min
11.9″ · SNR 23.4
What changed
Reprocessed today: my best single night by SNR, 7/8 Sep, against all three nights stacked frame by frame with noise weighting.
What it did
1841 frames over 307 minutes lifted SNR from 16.48 to 23.37 (+42 %). Minutes alone would predict +99 %, but the moonlit frames are noisier.

aligned on 292 stars, median residual 0.17 px

Stage 04: Fixing the lavender

2026-09-07, 2026-09-25 · nights 2026-09-07 + 2026-09-25

After: Two nights, current colour
Before: Two nights, NOMAD colour
Before (left)
Two nights, NOMAD colour
995 fr · 2 h 46 min
13.3″ · SNR 19.0
After (right)
Two nights, current colour
995 fr · 2 h 46 min
13.3″ · SNR 18.9
What changed
Reprocessed today on the two-night stack: Siril's photometric calibration against the NOMAD catalogue, as I first ran it, against local Gaia with a correction to the spectrophotometric balance.
What it did
The disc's blue-to-green ratio went from 1.368 to 0.988 and red-to-green from 1.079 to 1.202, which takes out the lavender cast.

aligned on 337 stars, median residual 0.12 px

The nights

Most nights here are cloudy. These are the clear ones, with Belfast's weather for the hours I was imaging and what the frames recorded.

  1. 2026-09-07 23:21–01:14 UTC 7/8 Sep 2026

    frames
    467 × 10 s
    FWHM
    16.2″
    moon
    12 %
    gusts
    28 mph
    cloud
    4 %
    dropped
    22 %
    QA out
    12

    Evan and Dad watched a movie but kept coming out to check the stacked image off the scope on the Seestar app.

    23:21–01:14 UTC · 479 × 10 s · moon 12 % below horizon · cloud 4 % · gusts 28 mph · 22 % dropped

  2. 2026-09-25 21:35–03:43 UTC 25/26 Sep 2026

    frames
    999 × 10 s
    FWHM
    11.7″
    moon
    99 %
    gusts
    29 mph
    cloud
    14 %
    dropped
    34 %
    QA out
    250

    Session with Quinny and Erin.

    21:35–03:43 UTC · 1249 × 10 s · moon 99 % up to 34° · cloud 14 % · gusts 29 mph · 34 % dropped

  3. 2026-10-16 19:45–21:22 UTC 16/17 Oct 2026

    frames
    376 × 10 s
    FWHM
    10.3″
    moon
    33 %
    gusts
    15 mph
    cloud
    3 %
    dropped
    27 %
    QA out
    8

    Evan and Dad watched half of Fall. 6/10.

    19:45–21:22 UTC · 384 × 10 s · moon 33 % below horizon · cloud 3 % · gusts 15 mph · 27 % dropped

Signal against time

With nothing else changed, signal-to-noise grows with the square root of time, which is the faint curve. Points under it lost something along the way. Points over it gained more from processing than the extra minutes alone would give.

SNR against total integration minutes, one point per step, with a square-root-of-time expectation curve 0 10 20 0100200300 total minutes SNR √t 01 First pipeline, 8 Sep: 11.1 SNR at 71 min 01 02 After the review, 9 Sep: 16.5 SNR at 78 min 02 03 Two nights, 16 Oct: 19.0 SNR at 166 min 03 04 Three nights, 17 Oct: 23.4 SNR at 307 min 04
Filled points are at or above the √t line through step 01; hollow ones fall more than 5 % short of it.
SNR by step
StepMinutesSNR√t expectation
01 First pipeline, 8 Sep7111.111.1
02 After the review, 9 Sep7816.511.6
03 Two nights, 16 Oct16619.016.9
04 Three nights, 17 Oct30723.423.0