Seestar FITS Files: How to Process Them on a Computer

How to move stacked FITS and subs off a Seestar S30 or S50 to a Mac or PC, what is in the files, and how to get more out of them than the live stack shows.

The ZWO Seestar S50 does what it promises: point it at a target from your phone, wait, and get a picture. For a lot of people that is the whole hobby, and there is nothing wrong with stopping there.

The Seestar can also save something better than the JPEG it shows you. If you turn on Save every frame in the settings, it writes each 10-second sub-exposure to disk as a FITS file. Those files hold measurably more than the live stack, and the gap is larger than most people expect.

This post covers what is in them and what to do with them.

What the live stack gives up

The Seestar’s on-device stacking runs in real time on a small ARM processor that is also driving the mount. That limits it in three ways.

It cannot reject frames after the fact. The live stack integrates as it goes. If a cloud drifts through at minute 40 of a 90-minute session, those frames are already in the average. A desktop program can look at all 540 frames first, grade them, and throw out the bad ones before combining anything.

Its rejection is limited. Satellite trails, aircraft and cosmic rays need statistical outlier rejection across the full stack, which means having the full stack. Real-time integration can only do so much.

It stretches once, early. The live view is display-referred: the histogram has already been squeezed to look right on a phone, and once that happens the faint end is compressed for good. The FITS subs are linear, so the full dynamic range from sky background to nebula core is still intact and separable.

In practice, a proper stack of the subs usually shows fainter outer nebulosity, cleaner star color and a noticeably lower noise floor than the live JPEG from the same data. It is the same photograph, taken further.

How to move files from a Seestar S30 or S50 to a computer

There are two kinds of file worth copying, and most people want the first before they know the second exists.

The stacked file is the one the Seestar made for you: a single Stacked_*.fit per target, already integrated on the device. Copy this if you have just finished a session and want to work on the result.

The subs are the individual 10-second exposures, Light_*.fit, one file each. They only exist if Save every frame was switched on in the app before you started imaging. It is off by default and cannot be applied afterwards. These are the files worth having, for the reasons above.

They sit in two folders side by side, one for the target and one for its subs:

MyWorks/
  M 42/
    Stacked_60_M 42_10.0s_IRCUT_20260304-213512.fit   <- the device's own stack
  M 42_sub/
    Light_M 42_10.0s_IRCUT_20260304-213512.fit        <- one per sub-exposure
    Light_M 42_10.0s_IRCUT_20260304-213522.fit
    ...

The filename tells you the target, exposure, filter and timestamp.

Connect the Seestar to the computer with a USB-C cable, enable the storage option in the Seestar app, then open the device as a drive and copy the target folder across. Firmware updates have moved that setting around between versions, so look in the storage or connection section rather than for a specific menu name.

Use this route for subs. A 90-minute session at 10 seconds is around 540 files and roughly 10 GB, and a cable moves that in minutes where Wi-Fi will not.

Over Wi-Fi, through the app

The Seestar app can send images from the device to your phone, and from there to a computer by AirDrop, a cloud folder or a cable. That is fine for one stacked file and a quick way to look at a result.

It is the wrong tool for 540 subs. Phone storage, transfer speed and the app’s own export limits all get in the way, and you will wait a long time for something a cable does while you make tea.

Once it is on the computer

Preview, Photos and Windows Photo Viewer will not open a .fit or .fits file, which is where most people stop. You need astronomy software, and the stacked file and the folder of subs need different treatment:

  • The stacked file is already integrated, so there is nothing left to stack. It needs stretching and finishing. In Akastroid, open it with Select an image and it is read, stretched and color-calibrated as a single frame.
  • The folder of subs is the one worth having. Point Akastroid at the _sub folder itself, not at MyWorks or the target folder above it, and it grades every frame, rejects the ones spoiled by cloud and satellites, aligns and integrates the rest, then finishes the result. That is the part the device could not do.

Keep the device’s Stacked_*.fit either way as a comparison. Do not put it into a stack of subs. It is already an average of many frames, and averaging it alongside individual ones weights it wrongly.

What is in the headers, and what is missing

Seestar files have one quirk worth knowing about.

The headers carry the useful basics: EXPTIME, GAIN, INSTRUME naming the Seestar, the filter, the date, and RA and DEC, because the device plate-solved to find the target. The pointing information is valuable, since it is what makes photometric color calibration and annotation possible later.

What they do not reliably carry is focal length and pixel size. Plate solving needs a pixel scale, and a pixel scale needs both of those numbers.

Fortunately a Seestar is a sealed instrument with one optic and one sensor, neither of which you can change, so the model name is the specification:

Seestar S50Seestar S30
Focal length250 mm150 mm
Aperture50 mm30 mm
Pixel size2.9 µm2.9 µm
SensorSony IMX462Sony IMX662
Pixel scale≈ 2.39 ″/px≈ 3.99 ″/px

Recognizing Seestar S50 in the INSTRUME card supplies both missing numbers, and the scale follows. Akastroid does this automatically. It fills in only fields the header left empty and never overrides what the file recorded, because the instrument knows its own configuration better than a lookup table does.

The 2.39 ″/px figure also tells you something about your data. At that scale, in typical seeing, the Seestar is slightly undersampled and stars land on very few pixels. That affects what you can recover later.

The debayering trap

Seestar FITS files are raw Bayer data: a color filter mosaic, not a color image. The pattern is GRBG.

This goes wrong in two ways. Debayer with the wrong pattern and the colors come out swapped, usually with a strong magenta or green cast that no white balance fixes. Debayer twice, once in an intermediate tool and again in your stacker, and you get a soft, checkerboarded mess.

The stacked file the Seestar produces is already debayered. The subs are not. A tool that treats them the same way will get one of them wrong.

Stacking short subs

Ten seconds is short, and that shapes the approach.

Expect a lot of frames. 500-1,000 is normal for a decent session. That is helpful, because it makes aggressive outlier rejection safe.

Use rejection that suits the data. With a deep stack you can afford sigma clipping, which assumes every frame samples the same distribution and rejects values far from the mean. That assumption breaks when transparency changed during the session through high cloud, the target sinking toward the horizon, or dew forming. The frames then really do differ, the spread is real rather than noise, and sigma clipping starts discarding frames at the ends of the range, which are often your clearest.

Linear-fit clipping handles that case. It sorts each pixel’s values across the stack and fits a line through them, so a smooth drift is expected and costs nothing, while a satellite trail still stands out as one value far off the line. Akastroid measures the spread of per-frame sky levels and picks between the two automatically, switching above about 8% drift.

Do not expect much from drizzle. Drizzle recovers sub-pixel detail from dithered frames. The Seestar’s alt-azimuth mount produces field rotation, which gives some sub-pixel variety, but it is not deliberate dithering. Check whether your set has the sub-pixel spread before enabling it. Reconstructing on a finer grid from undithered frames just gives you a larger, softer file.

Field rotation is the real constraint

The Seestar is an alt-azimuth mount without a field derotator, so the field rotates over the session. Frames taken 40 minutes apart can be rotated relative to each other by tens of degrees.

Your stacker has to handle rotation as well as translation. Translation-only alignment fails on Seestar data, and the failure looks like poor focus rather than an obvious error: everything comes out slightly smeared and it is hard to say why.

Rotation also means the corners of the final stack are covered by fewer frames than the center, and the overlap shrinks as rotation builds up. Expect to crop, and expect the outer edge to be noisier than the middle. That is geometry, not a fault in your processing.

The 10-second limit

The Seestar caps exposures at 10 seconds because it is unguided, and longer subs would trail.

The cost is read noise. Every exposure adds a fixed noise penalty from reading the sensor, so a stack of 540 ten-second frames carries 540 helpings of it, where the same 90 minutes in 18 five-minute subs would carry 18. That is why a tracked, guided setup pulls ahead on faint targets even with the same total integration.

In practice the Seestar does very well on bright and medium-brightness targets: Orion, the Lagoon, the Andromeda core, most of the Messier list. Very faint extended nebulosity is where the read-noise floor shows, and no amount of processing creates signal that never rose above it.

Knowing this is more useful than any processing tip, because it tells you which targets will repay another two hours and which will not.

Before you open the folder

Three things in a Seestar folder caught out a real session, so check them first.

  • Use Akastroid 1.3.13 or later. Earlier versions stopped with “No frames to stack.” when one folder held frames taken with the light pollution filter (LP in the file name) and without it (IRCUT), and stacked only the mosaic frames when both kinds were in the folder. Check for updates, in the Help menu, installs the current version.
  • Mosaic frames are another part of the sky. Files named Light_mosaic_... come from the Seestar’s mosaic mode and do not overlap the ordinary Light_... frames of the same target. Akastroid stacks the larger set and says how many frames it left out. Put the mosaic frames in a folder of their own to process them.
  • A big session takes a while. About 1,000 frames took 29 minutes on an Apple silicon Mac with drizzle on. Drizzle does little for Seestar subs, so switch it off before the run and it finishes much sooner.

Steps

  1. Turn on Save every frame before the session, not after.
  2. Copy the whole target folder. Keep the device’s Stacked_*.fit aside for comparison.
  3. Let the stacker read the FITS headers instead of setting the pattern by hand. It is GRBG, and it should not be debayered twice.
  4. Use a rejection method that matches whether your transparency held steady.
  5. Crop the edges thinned by rotation.
  6. Compare against the device’s own stack. If yours is not clearly better in the faint regions, something in your workflow is undoing the advantage.

People tend to skip that last step, but it is the only way to know whether the extra effort was worth it.

Also in Deutsch · Español · Français · Italiano · 日本語 · Nederlands · Português (Brasil) · 繁體中文

Try it on your own data

Akastroid runs its processing on your own frames and logs each step it took.

Download Akastroid