Release history

Changelog

Nocturne is in active development and moving fast. Here's what's landed, newest first.

44releases
v0.36.0current
Jun 2026first release

v0.36.0

De-green Stars works on the stars you actually have — and StarNet2 shows its progress.

20 September 2026

Added

  • An Amount slider on De-green Stars. The step had nothing to set — it was all or nothing. The slider is the same control as Saturation in a targeted Hue/Saturation layer in Photoshop: 100 neutralises the cast completely, lower values take out part of it, and the preview follows the slider, so what you see is what Apply commits.

Changed

  • Steps that need a star split now share one. Star Reduction, Nebula Saturation, Colour Balance and Narrowband each kept a private copy of the same separation, so opening one after another on the same image paid for the split all over again — 38 seconds on a drizzled frame, for layers already in memory. They now publish to and read from one store.
  • The website's menu collapses on a phone, and there is a download link for Linux that does not go stale with each release.

Fixed

  • De-green Stars did nothing at all unless you had RC-Astro. It asked for StarX by name, so on a machine with StarNet2 installed and working it fell back to a crude star mask and changed almost nothing. It now uses whichever separator you have.
  • De-green Stars did nothing on the stars most Seestar images have. It looked for green between hue 75° and 165°. The colour fringing on a Seestar star is usually teal, nearer 185°, which scored exactly zero — so for many images the step was a no-op you could not see. The band now runs 36°–214°, stopping short of blue so blue stars stay blue. It also keeps off faint background speckle rather than treating it as stars.
  • De-green Stars no longer pushes the background towards red. It desaturated towards Rec.709 luma, which weights green at 0.72 — so a teal pixel's target was dominated by its own green channel, and red had to rise to meet it. It now lands on HSL lightness, which is what Photoshop does, and takes light out rather than adding it.
  • A star split shows its progress. StarNet2 ran with no indication for its whole duration — about 3 seconds on a master, 38 on a drizzled frame, and six times that on Linux. The cause was ours: we had been passing --quiet since the first version, which makes StarNet2 print one newline and nothing else.
  • Re-entering a step after a flip no longer reuses the un-flipped separation. The cache key was shape, mean and standard deviation — all three unchanged by a mirror — so an image and its flip produced identical keys. Stars were reduced where there were none, and nothing about the result looked like a caching problem.

v0.35.0

Star separation without paying for it — and Nocturne runs on Linux.

18 September 2026

Added

  • StarNet2 as a free star-separation engine. Eleven steps and tools depend on splitting an image into starless and stars — Star Reduction, De-green Stars, Nebula Saturation, Narrowband, Starless Levels, Star Colour, Sharpen Nebulosity, Upscale Crop, Auto Enhance, Colour Balance and the starless+stars export. Without RC-Astro, which is paid, every one of them fell back to Nocturne's own separator: measured on a real NGC 7635 master, that leaves 40.3% of star flux behind against StarNet2's 20.9%, and the 1:1 crops are not close — grey blobs where the bright stars were, against a clean frame. Star Reduction at 0.5 now moves a real image 3.3x as much, and looks like star reduction rather than nothing happening. StarNet2 is free, auto-detected where its own installers put it, and never bundled.
  • A Linux build. x86-64, shipped as a tarball built on Ubuntu 24.04, so it needs glibc 2.39 or newer. Unpack it anywhere and run Nocturne/Nocturne — there is nothing to install.
  • A downloads page listing every release for both platforms, a gallery of finished images, and a dedicated Install & set up page covering both platforms and all four external tools.

Changed

  • Narrowband, Colour Balance and Upscale Crop use StarNet2 when RC-Astro is not installed. They were the three places that quietly stayed RC-Astro-or-nothing while everything else had a fallback.
  • Every download is 7.7 MB smaller. A denoise model shipped inside every release up to 0.34.0 that the app had no way to load — it was not selectable, and the bundle excludes the runtime that would have run it.

Fixed

  • StarNet2 installed through its own macOS .pkg or Linux .deb is now found. Those put the binary where a Finder-launched app cannot see it, so the most convenient install was the one auto-detection missed — found from a terminal, invisible in the app.
  • On Linux, Nocturne now looks for GraXpert, ASTAP and RC-Astro where Linux actually puts them, instead of in macOS application folders that cannot exist.

v0.34.0

Nocturne now tells you what leaves your Mac, and asks before counting anything.

17 September 2026

Added

  • A privacy page at nocturne.stehn.com/privacy.html, an FAQ entry answering "does Nocturne phone home?", and an honest account of it in About. Nocturne has always asked GitHub whether a newer version exists, on every launch — ordinary behaviour, but nothing said so and there was no way to decline. Both are fixed: the request is described in About, on the website, and in Settings, where you can switch it off.
  • Nocturne asks once, on first run, whether it may count your use of it. Saying yes sends {"event": "daily", "version", "id"} once a day and nothing else — the id is a random number for that installation which changes every month, no IP address is stored, and nothing about you, your machine or your images is ever sent. Saying no sends nothing and is never asked again. Either answer can be changed in Settings at any time. It exists for one reason: downloads say nothing about whether anyone actually uses the app, and that decides whether things like a proper support system are worth building.

Changed

  • Visual stretch… now sits above Apply Stretch. It was the only step in the app with a control below its commit button, which read as "press this after applying" — the picker only moves the slider, and Apply still commits.
  • A stack no longer fills the Dock with a Nocturne icon per worker. Registration runs in eight processes and macOS gave each one its own tile, so a single stack produced eleven icons.
  • Those same workers no longer build the entire interface before doing their work — 69 MB and about half a second each, 550 MB across a stack, held by processes with no window. On a 16 GB laptop that is fewer workers and a slower stack.

Fixed

  • Opening Settings and pressing OK no longer discards settings the dialog does not show. Your Share plate preset and saved plate looks, the recent-projects list, the help-expanded preference and annotation density were all reset by a dialog you may have opened only to read a tool path.
  • The picture no longer darkens when you walk into Stretch. Arriving at the step dropped the canvas by 16% — about 11 levels of 255 — before you touched anything, because the display preview and the default stretch had drifted apart.
  • The provenance report no longer states things that are not so. Star Spikes recorded none of its six sliders, the automatic stretch recorded no amount, Levels, Saturation and Starless Levels printed bare numbers with no names, and the footer credited the version that generated the report rather than the one that made the image.
  • The Open dialog now offers .fts files. Nocturne could always read them — the loader and batch processing both accept the extension — but the file picker did not list it, so browsing for your own .fts file simply would not show it.

v0.33.0

Open a TIFF — finish a master stacked in Siril, APP or DeepSkyStacker.

15 September 2026

Added

  • Open Image now takes a TIFF as well as a FITS. A master stacked elsewhere can be finished here, and a picture you already finished can still reach Share, Star Spikes, Upscale and the plate-solve annotations. Nocturne measures whether the file is still unstretched — in which case the whole process applies, exactly as for a FITS — or has already been stretched, in which case it opens at the finishing steps and nothing tries to stretch it again. It says which it decided, and you can correct it in one click if a starless frame or an unusually bright subject fools it.
  • The step list now tells a step you walked past and left alone from one you have not reached yet. At the end of a pass, "which steps did I skip?" is a question the list is uniquely placed to answer, and it could not before.

Changed

  • "Open FITS" is now "Open Image", since it takes three extensions.
  • Typing a title in Share is fast at every size. The preview used to be composed at full resolution for a pane a few hundred pixels wide — at "Full size" that meant an image the size of your master for every pause in typing.

Fixed

  • A TIFF that stores its channels as separate planes — which some stackers write — opened as three pixels of nonsense, and misreported whether it was stretched.
  • Nocturne no longer invents a camera for a file that does not name one. It used to show the S30 Pro's sensor, pixel size, focal length and image scale as though they had been read from the file; image scale in particular feeds plate solving.
  • The Starless Levels histogram has real grab handles, instead of two hairlines the panel told you to drag.

v0.32.0

Choose your stretch by looking at it — brightness and colour, on your own image.

15 September 2026

Added

  • Visual stretch — a new button on the Stretch step opens six real versions of your own image and you click the one you like. It moves the slider; Apply still commits, and you can nudge it first. There is no single right answer: on four of my own targets I wanted 0.10 three times and 0.20–0.30 on the fourth, which is exactly why this is a choice and not a setting.
  • Linked or unlinked, asked before brightness. A linked stretch puts one curve through every channel and keeps the sky's own colour; an unlinked one normalises each channel on its own, which evens the sky out and usually shows more variety in star and dust colour. Both are rendered side by side at matched brightness so only the colour varies. Neither is labelled the correct one, because neither is.
  • A Linked/Unlinked switch on Import, so you can see what is in the data before committing to anything. It changes only how the unstretched image is drawn, and the choice carries forward as the default for the stretch.
  • Draggable handles on the Starless Levels histogram — round grips with arrows, like the before/after divider, instead of two hairlines the panel told you to drag.

Changed

  • The default stretch background comes down from 0.43 to 0.30. Nocturne was leaving the sky about twice as bright as it should: on the same master, 0.5% of the frame sat below 0.10 where a reference tool put 68%. Identical noise is far more visible on a lifted grey sky, and this is the whole reason images looked cleaner elsewhere.
  • Choosing an unlinked stretch skips the Colour step, which would do nothing under it — a per-channel normalisation removes exactly the per-channel correction that step applies. Pick linked again and the step comes back.
  • The zoom pill stays put while you crop. It used to vanish, which left the Trim tool and Upscale Crop with no zoom control at all.
  • Typing a title in Share no longer composes the whole image on every keystroke.

Fixed

  • The visual picker sized itself from its previews rather than from your screen, so on a 1440-tall display the bottom row ran off the edge and Cancel was unreachable.
  • A picture exported before stretching, and the before/after peek, both follow the Import view switch — so the file and the screen cannot disagree.
  • The Stretch help described a Target control that no longer exists.
  • A recipe saved by a different pre-1.0 build is refused with a clear message instead of being silently misread.

v0.31.0

Stacking runs in the background while you work, and the pipeline stops discarding your edits without asking

13 September 2026

Added

  • Stacking can run in the background. The Stack dialog has a second button, 'Stack in background', beside the one it always had; the stack moves to a separate process and the app stays fully usable while it runs. Outstanding jobs appear in a Jobs panel with their progress, and a finished background stack is logged rather than opened — it never swaps the canvas out from under work you have started. One job runs at a time, which is a memory guarantee rather than a scheduling choice: two 300-frame drizzles at once do not fit. Quitting with jobs running warns, cancels them, and genuinely waits for them to stop. Mosaic and Ha/OIII stacks stay in the foreground for now; the background protocol carries a plain stack only.
  • Every pipeline step now says whether its settings have been applied. A step you have adjusted but not committed says so in the panel, and the green Apply button is spent only when there is actually an edit waiting — a colour worn at all times says nothing at the moment it matters. This was the first thing a new user asked about: the preview is pixel-identical to what Apply produces, by design, so nothing on screen distinguished 'looking at it' from 'done'.
  • Reset step, on every stage that commits. It puts the controls back to their defaults and removes that step's commit, and it says what it will discard before it does.
  • De-green Sky is its own step now, immediately after Stretch, instead of a button on the Color panel five steps before its own cause. The green cast it fixes is CREATED by the stretch — a Bayer sensor gives green twice the photosites, so a linked stretch amplifies it about 1.9x — so the panel's own advice ('reach for this only if a cast survives the stretch') is finally something you can act on where you are standing.
  • The zoom pill shows the zoom level as a percentage, always, so 'am I at 100%?' is answerable without counting clicks.
  • R, G and B in the pixel readout are shown in their own colours. They are easy to skim past, and they are the numbers that tell you what the picture is actually made of.
  • The Share preview pans and zooms. Judging a title plate's placement, colour and size at pane scale meant judging a 4096-pixel image at about a quarter size; you can now zoom in on the plate and keep editing its colour while looking at it.
  • Every tool that separates stars says which engine did it — RC-Astro's StarXTerminator or the free detector — in the log, and in the panel where there is one. The two separations differ enough that telling them apart previously took a measurement rather than a glance.

Changed

  • The two green tools are renamed for what they act ON: Remove Green is now De-green Sky, and Remove Green Fringe is now De-green Stars. Projects and recipes saved under the old names still load.
  • De-green Stars is a switch rather than a strength, and it selects green by HUE. The old operator removed green wherever green exceeded the red/blue average, which is true of cyan and yellow-green too: measured on two real drizzled masters, only 4.0% and 5.6% of the green it removed came from pixels whose hue actually reads green, while on one of them 49.5% came from CYAN and on the other 35.5% came from YELLOW. It was spending almost all its effort dragging correctly coloured stars toward magenta or orange, which is also why it appeared to do nothing useful. Now only genuinely green pixels move, and they become grey of the same brightness rather than being deleted, so a star keeps its size. It is a switch because no star is green — blackbody colour runs red, orange, yellow, white, blue, and never passes through it — so there is no such thing as wanting to keep 40% of it. Selecting by hue is also what let the star mask go: there is nothing left to protect by aiming.
  • The sweeping progress bar over the image is reserved for work you asked for that is about to change the image. Walking into a step and finding it separating stars reports in the right panel alone, with its label, elapsed time, progress and Cancel — it is neither requested nor about to change anything, and two indicators doing the same job read as inconsistency.
  • Narrowband and Colour Balance say 'Separating stars' rather than 'Removing stars'. The split keeps both layers, and six other places in the app already said so.
  • The Stretch step loses its Target dropdown, and its default is now derived rather than chosen. The dropdown had four entries, three distinct values and two that were identical; "Auto" set the slider to the value it already had, so it did nothing; and the binding was one-way, so after nudging the slider the box went on reading "Nebula" over a value that was no longer Nebula's. The default is now the slider position whose target background matches the one the display preview already uses — so arriving at Stretch and pressing Apply is byte-identical to what was already on screen. The old default landed 8.9% brighter, moving 94.7% of pixels by more than one 8-bit step.
  • De-green Stars has no setting at all now; Apply performs it. It is one action with nothing to choose, and a checkbox in front of it was a step performed for the app's benefit.
  • The Colour step separates its optional Tint controls behind a rule and an "Optional" heading, and Reset step moves below the tool's own controls behind the same rule on every panel. Reset sat directly under Apply, where it read as part of the tool rather than as the recovery it is; it is now tinted warm to mark it as a different kind of action.

Fixed

  • Apply silently discarded every later step. Six commit paths each computed the same truncation and called it straight away, and only one of them had ever been noticed: applying Levels again after a Curves and a Saturation threw both away with nothing said and no undo. All six now ask, and name what is at risk rather than counting it — '3 steps' does not tell you whether you are about to lose ten minutes of GraXpert.
  • Rotate and Flip discarded ALL processing on one toolbar click, with no confirm and no way back. They ask now, and say why everything goes: re-framing the picture invalidates the processing whenever it was applied.
  • Navigating to a step after Stretch on a still-linear image silently threw away a toolbar commit. The app stretches on your behalf there, and that truncates — run Narrowband on a linear image, click Levels, and the combine was gone without a word.
  • Opening another image, opening or closing a project, and quitting all discarded an unapplied preview in silence. Navigation had asked since this release's step work; nothing else did, because the unsaved-changes guard only knew about committed edits.
  • The truncation confirm defaulted to the DESTRUCTIVE button. Qt returns a message box's buttons in layout order rather than the order they were added, so pressing Return — or the reflex of hitting the highlighted button — irreversibly discarded the named steps.
  • A revisited process step reported the wrong option. Apply Deconvolution at 'strong', navigate away and come back, and the dropdown read 'medium' over an image with 'strong' baked into it.
  • An adjusted crop box was thrown away by Next without asking. A drawn box is uncommitted work like any slider value, but it lives on the canvas rather than in a panel, so nothing was watching it.
  • Combine could lose data, and two dialogs writing the same file could race each other.
  • Every new control was a fresh chance to leave a button clickable during a long operation; four such omissions were found in this release's own review. The step panel's buttons are now disabled as a rule rather than by a list that goes stale.
  • The mosaic explanation vanished when the Stack dialog's help was collapsed, which is exactly when it was needed.
  • A stylesheet comment written in the wrong syntax had been silently discarding every style rule after it, so the zoom readout, the new panel dividers and the Reset step tint were all rendering with Qt's defaults rather than Nocturne's.
  • A slider moved away and put back where you found it still left the step claiming unapplied changes — the Apply button stayed lit, and moving on demanded a choice between Cancel and Discard over a change that no longer existed. Nine steps did this. A step now compares its controls against both what it committed and what they read untouched, so returning to either clears it.

v0.30.0

Long external-tool runs show real progress, and the clipping view stops lying about where it is looking

11 September 2026

Added

  • GraXpert and RC-Astro report how far they have got. Both print progress throughout — GraXpert a percentage roughly every two seconds, RC-Astro a percentage and an ETA — and both were discarded, because the app waited for the process to exit and buffered everything it said. A user reported restarting Nocturne several times during a GraXpert denoise, convinced it had hung; he only discovered the wait was normal by timing the same image in GraXpert itself. One RC-Astro change covers eight places, since every operation reaches the same wrapper: Deconvolution, Noise Reduction, Star Reduction, Saturation, Remove Green Fringe, Narrowband, Colour Balance and Starless Levels. The star split most of all — that is the wait when one of those tools opens.
  • Narrowband and Colour Balance count their star split up in place rather than showing one static line for the whole wait.

Changed

  • The 'this can take a few minutes' warning for GraXpert now appears for the people who most need it. It tested the engine the option NAMED rather than the one that would actually run, and with GraXpert installed and RC-Astro absent no engine choice is offered, so the option says RC-Astro while GraXpert runs. The warning therefore showed for anyone who had both engines and picked GraXpert, and was missing for anyone who had only GraXpert and no way to avoid the wait.
  • Auto Levels is recorded in a recipe as the DECISION rather than the three numbers it produced. Its black point is measured from one image's own noise floor, so replaying the number applied one frame's floor to another frame's data — crushing a darker frame, doing nothing to a brighter one. Each image now derives its own. Touching a slider afterwards makes it an ordinary chosen value, frozen like every other step, and the Auto button stays selected while the values are still the derived ones so you can see which a recipe will store. Auto Enhance records the decision too. Recipes saved before this release are unaffected.

Fixed

  • The clipping view left a band of the picture uncovered, down the right and bottom, so nothing there could ever be marked. It mapped the image onto the screen in equal blocks of a size that does not divide the image, padding the remainder — and on a 4320x5746 frame shown at 602x801 that made 82 rows and 62 columns out of padding alone. It changed with the window size, vanishing when the ratio happened to land near a whole number, and it had been wrong for highlights since they shipped: there the padding is black on a black ground, so it was invisible rather than absent.
  • The clipping view reported the composite rather than the starless layer the two endpoints act on. Stars are screened back untouched, so a star pushing a pixel to white was reported as the user's clipping though nothing they set caused it and nothing they set could fix it: on a real frame, 14% of the marks came from the stars, every one over nebulosity dark enough to look wrong. The same fault hid shadow clipping — 29,036 genuinely crushed pixels concealed, because screening a star back lifts a crushed pixel above zero.
  • A recipe containing Colour Balance destroyed a whole batch. The step was recorded and fully serialised but nothing could replay it, so the dialog reported that every step would run as saved and then every file in the folder failed with a raw internal name as the message. Colour Balance now replays, taking its star split the same way the app does, and the preflight checks each step can actually be built before promising it will run.
  • The clipping readout says what the current endpoints cost, not only what the image arrived carrying — a screen of marks came with no sense of whether it meant half the frame or a hundredth of it.
  • The progress bar no longer labels every operation 'Denoising', and shows a percentage as a percentage rather than as a count out of 100.

v0.29.0

Black and white points can be pulled all the way in without flattening a star core, and Narrowband's oxygen control now says what it does

9 September 2026

Added

  • Starless Levels, a new finishing tool: it separates the stars, sets black and white points on the starless layer alone, and screens the untouched stars back. Pulling the white point in is how a stretched image gets its colour, and it is also how star colour is destroyed — which is why Levels deliberately will not choose a white point for you. Measured on every master tested, a 99.9th-percentile white point drove about 0.08% of pixels to pure white, roughly six thousand star cores, and Seestar cores do not saturate in the capture, so that colour is real data. On a starless layer there are no cores to clip, so the move is safe there and only there. Measured on three masters, mean colour rises 30-50% as the endpoints come in, while the brightest star cores move by at most 1.4 levels out of 255.
  • The endpoints are set on a full-width histogram of the starless layer, with the two handles ON it — where the data begins and ends is the whole judgement, and a histogram is the only thing that can answer it. Values can be typed instead; the boxes and the handles are the same control.
  • A clipping view that shows what YOU are about to lose. It follows Photoshop's polarity — a white ground while the black point is being worked, black while the white point is — and it marks only what the current endpoints add, stating separately what the image arrived already carrying. A stretched master usually arrives with 2-6% of its noise floor already crushed by the automatic black point, so reporting the total would have made the black end look ruined before anything was touched.
  • A compare control on Starless Levels: off, a draggable wipe divider, or side by side with the panes locked to one zoom and pan, so both views move together.

Changed

  • Narrowband's OIII boost is replaced by two separate things, because it was doing two jobs at once and they disagree. The OIII-to-Ha normalisation is now purely photometric — it matches the channels and nothing else — and a new Oxygen strength rides on top of it as the look control. This matters because the old control's centre value was its LEAST colourful setting: at a matched point the two gases cancel wherever both are strong, and moving in either direction added colour, which is not a thing a slider should do. Oxygen strength defaults to 0.85, chosen by eye against measurements on M 16 and NGC 7000 after the two targets were found to want opposite directions from the matched value.
  • Recipes saved before this release that contain a Narrowband step are refused rather than loaded. There is no honest mapping from the old single value onto the two controls that replaced it, and the alternative — dropping it silently and rendering with a default it was never given — would produce a different picture without saying so. Open the image in Narrowband and save the recipe again.
  • The clipping overlay is drawn by one piece of code now, shared between the main window and Starless Levels, so a mark means the same thing in both. The mark's colour is still the channel that died.

Fixed

  • Share crashed on any image whose width Qt had to pad. Qt aligns each row of a QImage to a four-byte boundary, and the conversion back assumed the padding was always a whole number of pixels — true at 1080 wide, false after a crop or an upscale. A 4107-pixel-wide drizzled frame failed outright with a reshape error.
  • A recipe preflight named tool and geometry steps by their internal ids, so it said 'flip_h', 'color_balance' or 'narrowband' at the user instead of the names those steps carry everywhere else in the app.

v0.28.0

Frames with a roof or a tree in them are rejected automatically, and the in-app help finally describes the app that shipped

9 September 2026

Added

  • Frame grading catches obstructions — a roof, a tree, a bank of cloud drifting through. It was already measuring how BRIGHT the background is, which cannot see this: a dark roof across a third of the frame leaves the average sky level almost unchanged. It now also measures how much the background VARIES across the frame, which is exactly what an obstruction does to it. On a real 2,535-frame IC 1396A session — shot from a garden ringed by houses, where the scope slewed into one of them at the end of each night — it moved the kept count from 2,037 to 1,908 at Normal strictness, and the frames it removed are the ones with the house in them. The gate is session-relative and must stay that way: measured across fourteen sessions, deep-sky frames sit at 0.19-1.62 on this scale while wide-field Milky Way frames sit at 22 and 176, because the galactic plane crossing the frame IS real background structure. Any fixed threshold that catches a roof would delete every Milky Way frame ever shot.

Changed

  • Narrowband opens with Saturation at 0.85 instead of 0.50. 0.50 means 'native' — no boost at all — while the two-gas palette costs colour by construction: a warm pink mapped to red hydrogen and teal oxygen goes neutral wherever the two overlap. So the step was taking colour out and putting none back, and renders came out slightly flatter than the image they were given. Measured on a 724-frame IC 1396A master, the nebula lost 7% of its colour at the old default and gains 4% at the new one. Saved recipes carry their own value and render exactly as before.
  • Seven step topics in the help are rewritten to say how to CHOOSE, not just that a control exists. Two of them were worse than thin: Local Contrast and Star Reduction both told you to 'pick light, medium or strong' long after both controls became sliders. Noise Reduction now carries the measurement that matters most about it — GraXpert at its maximum reaches the same noise floor as NoiseXTerminator's lightest setting, and star sizes are flat across GraXpert's whole range, so there is no reason to be shy with it.
  • The Narrowband help says which control to reach for when a render looks washed out, and it is not Saturation. OIII boost at ×1.00 matches oxygen to hydrogen, so where both gases are strong the core comes out neutral — and saturation cannot rescue a neutral pixel, because it scales distance from grey and that distance is zero. ×1.00 is the least colourful setting on the slider; moving either way adds colour.

Fixed

  • The Stack dialog painted its own explanations over its own controls, in the state a new user gets. With the explanations expanded — the default — the dialog's contents need 844 pixels and it opened at 700, with a hard floor of 500 that allowed the squeeze. The form's rows were then laid out 46 pixels apart while being 54 to 72 pixels tall, so 'the frames.' printed across 'Trim the ragged edges' and 'size' across the Output field. The window now sizes itself to its contents, and on a screen too short to hold them the explanations fold away rather than overlapping.
  • Every verdict in the frame list was truncated. The column is 209 pixels wide and the shortest verdict needed 437, so the first thing lost was always the right-hand end — which is where the measurement is, and the measurement is the part you cannot get anywhere else. The table now takes the extra width when you widen the dialog (the preview used to take it), the verdict column is sized to what it holds, and each verdict has a short form for the table and the full sentence in its tooltip.
  • The help topics for Trim and fullscreen existed and could not be opened. Both were written, both were current, and neither was listed in the help browser or reachable from any step — 406 words shipping inside the app that no one could read. Drizzle, meanwhile, had no help at all despite shipping four releases ago; the Stacking topic now explains what drizzling does instead of enlarging, the three things the recommendation weighs, and what it costs.

v0.27.0

Zooming no longer eats memory, stacking anchors on the middle of the drift, and the window opens the size it was always meant to

6 September 2026

Changed

  • Star Spikes puts its preview beside the sliders instead of above them, matching Curves, Narrowband, Share, Upscale, Stack and Colour Balance. Stacked, the preview got a letterbox strip of the window while six slider tracks ran the full width to carry a control that needs about 200 pixels; side by side on a 1080-wide dialog the preview is 722x678.
  • Stacking anchors the master on the middle of the session's drift rather than on the first frame, so re-stacking data you already have will produce a different — larger and cleaner — master than before. Nothing about your existing files changes; only new stacks.

Fixed

  • Zooming in could exhaust the machine's memory. A drop-shadow effect on the image made Qt redraw the WHOLE picture into an offscreen buffer at the zoomed size, so the cost grew as the square of the zoom and the visible area never bounded it. On a 5-megapixel frame that reached 2.3 GB by the seventh click of the wheel, and on a real session it took a 64 GB machine to a 215 GB footprint and an unresponsive desktop. The shadow is drawn directly now: memory stays flat at any zoom, and zoom is capped at 32x.
  • The stacked master was anchored on the first frame of the session, which is the worst choice available. The field drifts over a night, so the first frame sits at one end of that drift and half of its footprint is covered only by the earliest frames — leaving a wide band of barely-stacked data that no amount of noise reduction can rescue, because the samples are not there. Anchoring on the frame nearest the middle of the drift raised the fully-covered area of a real 186-frame NGC 7000 session from 54% to 83%, and the largest clean rectangle from 2.97 to 4.98 megapixels.
  • The main window has been opening at 640x480 since the splash screen was added, whatever size the code asked for: the splash holds an event loop while the window is built but not yet shown, and that discards the size. A third of the toolbar was folded behind an overflow chevron as a result. The window now opens wide enough for its own toolbar — measured from the layout rather than hardcoded — and is clamped to the screen, so a small display still gets a window that fits it.
  • Batch said nothing at all when the recipe path could not be read. A path that was set but missing, renamed, or a folder matched none of the checks, so the status line stayed empty and Run stayed enabled — you pressed it and lost the run to a load error. It now names the problem and refuses to run, which is what the pre-check exists to do.

v0.26.0

Mosaic panels match colour, and Curves gets a curve per channel and per colour

5 September 2026

Added

  • Curves has a channel and a colour selector. Pick RGB for the tone curve you already had, R, G or B to move one channel on its own, or S for a saturation curve — then narrow any of them to one family of colours, reds for Ha, gold for the star field, cyan for OIII. Grey pixels are never affected, so the background does not drift while you push a colour. Each combination is its own curve and they all stay set; an "Active curves" line lists the ones doing something.
  • Mosaic and Drizzle work together again. The two were locked apart in 0.24.0 because the combination produced an unusable master — that turned out to be a bug in drizzle's auto-crop rather than anything about mosaics, and with it fixed the gate had nothing left to protect.

Changed

  • Stacking holds about 13% less memory — 8.9 GB down to 7.8 GB on a real session — by not holding more frames in flight than it can work on. Measured: the extra ones bought no speed at all. The master is bit-identical.
  • The large curve editor is a window you can move, with a preview you can zoom and pan. It renders whatever is on screen from the full-resolution image, so on a 14,000-pixel mosaic you can now inspect a detail at 1:1 instead of judging a curve from a thumbnail.
  • The Share dialog says which of the two pictures in front of you is the accurate one. The exported file is colour-managed and the preview is not, so on a wide-gamut screen the file comes out very slightly less saturated than the preview — small, mostly in warm tones, and the file is the one to trust.

Fixed

  • Mosaic panels matched brightness but not colour. Over a session running several hours the sky's colour changes, and each panel kept its own tint — a patchwork of rectangular tiles, invisible at normal saturation and unmistakable when you push it. Panels are now matched per channel: measured on a 39-pointing M 31 session, the colour difference between panels fell 87%.
  • Drizzle's auto-crop was throwing the picture away. It kept only the region covered by a whole number of frames, which on drizzle's continuous coverage discarded most of the interior: an NGC 281 master came out 96×1712 where it should have been 4112×7568.
  • The clipping warning cried wolf. It counted every single pixel whose noise dipped below black and called them crushed — 13% of a channel on a normal image, all of it recovered by Noise Reduction. It now reports the same number but only warns when the clipping is a real region of lost detail.
  • A mosaic could report no plate solver while Settings showed ASTAP found. The two disagreed about what an .app bundle is.

v0.25.0

Nocturne tells you what it did — which tools ran, what a recipe will do, and where a stack's time went

4 September 2026

Added

  • The processing report says which engine actually ran. Several steps have an external tool and a built-in fallback whose results differ materially, and until now a history line reading “Star Reduction 0.40” could not tell you whether StarXTerminator or the free split produced it. The report names the implementation and, when it is not the preferred one, why — “RC-Astro is not configured in Settings”.
  • Batch says what a recipe will do before you run it. Not blocked is not the same as will-do-what-you-saved: most tool-backed steps quietly fall back to a free implementation, and a batch is the worst place to discover that — a whole folder is already processed by then. It now tells you up front, leading with anything that cannot run at all.
  • A log file at ~/.nocturne/nocturne.log recording how long each stacking phase took.

Changed

  • The Stack dialog's explanations fold away, behind the same “How this works” control the main window uses and remembering your choice across both. Collapsed, the frame list — the part you actually work in — gets 63% more room. What never hides is what you decide ON: the drizzle time-and-size estimate, and the reason an option was unavailable.
  • The Stack dialog's labels stand alone: “Frame selection — how picky to be about which subs to keep” rather than “Strictness”, and “rejection” rather than a bare Greek “κ”.

Fixed

  • The Stack dialog was cutting its own explanations in half. A window short of height sliced them mid-sentence and painted them over the row below — 4 of 5 explanations at 900×700, and worse the smaller the window, so worst exactly where there was least room to begin with.
  • An Ha/OIII master could not name its own target until you saved and reopened it. The file on disk had the full header; the copy handed to the app had almost nothing, so a title plate on a freshly combined master came up blank where “NGC 7000 / North America Nebula” belonged.
  • Sharpen Nebulosity could not be saved in a recipe. The Enhancements panel offers eleven taps and the recipe registry listed ten, so that one was silently dropped and reported as un-capturable — a shipped feature treated as unsupported.

v0.24.0

Half the download, and a Share dialog that gives the picture the room

2 September 2026

Added

  • Masters record when they were taken, and at what gain. Neither was ever written to the file — the session that made a stack showed the date, and re-opening that same master tomorrow showed nothing. A stack that runs past midnight now records both ends of the night, so a title plate can say “26–27 Aug 2026” rather than picking one date and being wrong about half the frames.

Changed

  • The app is 264 MB instead of 491 MB. It was carrying 153 MB of a super-resolution model removed in the last release — nothing left in the app could load it — and 78 MB of an HTML test-coverage report that ships inside one of its libraries. Neither was reachable.
  • Share's controls moved into a labelled column beside the picture. Every one now has a name — Look, Typeface, Type size, Colour, Background, Position — where before a box reading “Medium” sat two rows under one reading “2048 px” with nothing to say which size was which. The preview is about 40% larger in the same window.
  • The reframing pane appears only when you are reframing. On Original there is nothing to crop, so the picture gets the whole width; pick a shape and the frame comes back. It is headed “Post as”, and says plainly that your image is not changed — only the shared copy.
  • Dates read as “31 Aug 2026” rather than “2026-08-31”, in the title plate and the Import panel alike.

Fixed

  • Mosaic and Drizzle can no longer both be selected. Together they produced an unusable master: on a real mosaic panel, 736×112 where the same frames stacked normally give 2112×3824. The run then failed at plate-solving AFTER stacking every panel — hours of work to reach an error message. Whichever you tick last now wins, and the reason is shown.
  • The Share preview opened at its smallest size and stayed there until you resized the window.
  • The credit field opened showing the end of its own text, as though the start had been lost.

v0.23.0

Your picture, titled — the Share tool becomes a plate you'd be happy to print

2 September 2026

Added

  • A title plate in Share. Instead of one line of data across the bottom, a share now carries up to three: the object's catalogue designation, its common name, and a credit line. Nocturne fills all three in from the image itself — from the plate solve if you ran one, otherwise from the file's own target header plus its catalogue — and every one of them is yours to edit or delete.
  • Five typefaces, shipped with the app: a geometric sans, a humanist one, an elegant serif, an inscription serif and a condensed face. They travel inside Nocturne rather than being borrowed from your Mac, so a share looks the same wherever it is opened.
  • Five looks, one click each. Scrim fades the sky under the text with no visible edge; Plate sets the text straight on the picture with a soft shadow; Keyline frames it; Matte mounts the picture above the caption instead of over it; and Data is the caption strip exactly as it was, for anyone who liked it.
  • Nine positions and five backgrounds for the plate, plus a warm off-white that sits on a night sky more comfortably than pure white.
  • Common names for the objects you actually shoot. Nocturne now recognises a target however it is spelled — M 31, M31, NGC 224 and NGC0224 all find “Andromeda Galaxy” — and knows objects the standard catalogue omits entirely, like M 45 and IC 1396A.
  • A log file at ~/.nocturne/nocturne.log, so an overnight stack can tell you afterwards where its time went.

Changed

  • Faster launch: 9.2 seconds to 1.0 on an M1, by not shipping an inference runtime the app never uses.
  • A share's caption wraps instead of being cut off. A real 2,037-frame export was losing its date and the photographer's handle to an ellipsis, silently.

Fixed

  • Choosing “Save” when asked about unsaved changes did nothing but cancel what you were doing — on every path: quitting, opening a file, opening or closing a project. The save was starting in the background, and the app treated “not finished yet” as “you cancelled”.
  • Upscale's “Open as copy” replaced your project without asking, discarding an unsaved edit history that undo cannot reach back across. It asks now.
  • Saving after “Open as copy” wrote the new image over your saved .nocturne file, under the old name, with that name still in the title bar.
  • Frame grading rejected frames for being fractionally worse than their neighbours. A rejection now has to be meaningfully worse, not merely relative.
  • The Share preview sat at its minimum size for the life of the dialog instead of filling the pane.
  • A file dialog opened from inside Upscale or Stack could be unreachable behind the window it belonged to.

v0.22.0

Drizzle — genuinely more detail from well-dithered subs — and a picture file that matches your screen

1 September 2026

Added

  • Drizzle x2 stacking. Instead of enlarging the finished image, it rebuilds it on a grid twice as fine, recovering detail the pixel grid threw away. On 100 real frames it produced stars 22% tighter and found 64% more of them than a plain 2x enlargement. It is off by default, and the dialog says what it costs before you press anything: roughly 10x the stacking time, and every step afterwards works on an image four times the size. Nocturne also advises whether your particular subs will benefit, based on how sharp the stars are and how many frames you have.
  • Stacking tells you how long it will take and how big the file will be, for the frames you have actually selected, before you commit to it.

Changed

  • Trimming the ragged edges is no longer preselected, in Stack or in Ha/OIII. Trimming cannot be undone without stacking again — hours for a large set — while keeping the edges costs one click of Trim afterwards. The recoverable choice is now the default.
  • The Stack dialog's options were rebuilt so each one reads as a control with its explanation beneath it, rather than a line of run-on text.
  • A drizzled master is named _drizzle and records the finer pixel scale, so it plate-solves correctly and cannot be confused with an ordinary stack in the same folder.

Fixed

  • Exporting before you had stretched wrote a file about ten times darker than the picture on screen. A PNG, JPEG or TIFF is now exactly what the canvas showed. FITS still holds your linear data, as it should.
  • The before/after divider was a hairline you could not grab. It now has a round handle with arrows in the middle, and both the line and its grab area stay the same size on screen however far you zoom out. Comparing also works properly when the earlier image is larger than the current one.
  • SPCC blamed Gaia for what was a certificate problem on your own machine. It now says which it is, so a problem in Nocturne is not reported as a problem with your network.
  • A master is named for the frames it actually contains. Frames that fail to align after grading were not being counted, so a file could claim 2037 frames while holding 2034.

v0.21.0

The app could never reach the internet — and a toolbar ordered around how you actually work

31 August 2026

Added

  • Trim has the framing controls Crop has always had. An Aspect ratio box locks the box to a fixed shape and Guides draws the rule of thirds or a centre cross inside it, so a late trim can be composed rather than merely eyeballed. Both default to off, so trimming a few pixels off one edge works exactly as before.
  • Compressed FITS files open. A tile-compressed file (often .fits.fz, and what several capture programs and archives hand out) keeps its image in a different place inside the file, and Nocturne only ever looked in the first — so those files could not be opened at all.

Changed

  • The toolbar is ordered by when a session reaches each tool, its icons are tinted by group so related tools read as a set, and About has gone — it was a button spending permanent space on something you look at once.
  • The GraXpert / RC-Astro / ASTAP checkmarks have moved into Settings. They sat in the toolbar reporting good news forever; now the toolbar speaks only when a tool is configured but broken.

Fixed

  • Nocturne could not make a secure connection at all once built. Certificates were resolved against the machine the app was built on, so on any other Mac every attempt failed silently. The update check has therefore never once told anyone about a new version, and SPCC's star-catalogue lookup was failing the same way. Certificates now travel with the app, and a release is blocked if the built app cannot make a connection.
  • Aspect ratios 1:1 and 4:5 did nothing on a landscape image — which is every Seestar frame. Choosing them left the box exactly as it was, in Crop and in Share. Changing your mind about a ratio also no longer shrinks your selection.
  • The Export step no longer shows a greyed-out "Next →". It is the last step, and a disabled Next reads as something you have failed to do.
  • Upscale no longer shows an Engine dropdown containing a single choice.

v0.20.0

Ha/OIII extraction, rebuilt — and a way to use what it makes

29 August 2026

Added

  • Combine Ha + OIII, a new tool. Give it a stacked Ha file and a stacked OIII file and it builds the same kind of two-gas master the extractor makes, ready for the normal steps. The files can come from Nocturne or from anywhere else — another program, a mono camera, someone else's data — so channels Nocturne could not open at all are now something it can process. A Balance slider decides how much to lift the oxygen toward the hydrogen while the data is still linear, which is the one thing you cannot do after a stretch, and a live preview shows the result as you move it. If the two files do not line up it says how far apart they are and offers to align them.
  • Ha/OIII can write each gas as its own file. Off by default; tick Also write separate Ha and OIII files and you get a mono Ha and a mono OIII beside the master, left un-equalised so the true ratio between the two gases survives for whoever recombines them.
  • Ha/OIII gained the controls Stack has always had: Strictness, Framing (trim the ragged edges, or keep the full frame), a frame preview — click any row to see that sub — and a Verdict column that says why a frame was left out instead of leaving you a row of zeros. Rejected rows are dimmed, and a frame kept with a caveat is amber.
  • Ha/OIII can be stopped. A 1,116-frame extract runs for a long time and there was no way out of it; grading is interruptible too.
  • The Ha/OIII dialog explains itself. It had no descriptive text and not one tooltip, which is why it was possible to commission the tool and still not know what subs it takes or what to do with the result.

Changed

  • Ha/OIII is 8.7x faster. Both gases now travel through one pass over the frames instead of one pass each, and registration runs across processes as the normal stacker has since v0.16.0. On 80 real subs a run went from 48.0 s to 15.4 s.
  • The oxygen channel is 35% stronger. Green and blue both measure the same oxygen line, and they were averaged evenly despite green coming from twice as many sensor pixels and measuring the line better. Weighting them by how well each actually sees it is worth 26% on its own.
  • An Ha/OIII master now names its camera, its filter and whether it was trimmed. It carried none of that, so a master loaded back in could not say what took it, and two masters of the same subs could differ in size by half with nothing on disk to say why.
  • The Ha/OIII help no longer claims that ordinary stacking mixes the two gases together. That is the standard argument for this kind of tool and it is true of most programs, but not of Nocturne, which debayers in a way that never looks across colours. What the tool actually gives you is the two gases brought to a comparable level while the data is still linear.

Fixed

  • The two gases came out about a pixel apart. Red, green and blue sit at different places in the sensor's colour grid, and each was being put back as though they sat in the same place. Every star carried a faint colour fringe and the master was softer than it should have been. Fixing it also made the hydrogen channel slightly sharper and cleaner than a normal stack of the same frames.
  • Field rotation was being drawn onto the picture. An untrimmed Ha/OIII master came out with bright wedges across it where a normal stack of the same subs was clean: frames were never brought to a common sky level, so every coverage boundary became a step in brightness. It was invisible for as long as the tool always cropped to the middle.
  • Ha/OIII and Stack framed the same subs differently, because they chose different reference frames. Ha/OIII picked by overall score, which favours a frame with many stars over a sharp one — on a night when transparency varies that can align a whole session to a soft frame.
  • The Ha/OIII window wasted its space when maximised: one line of text was given 237 pixels while the frame list and preview were squeezed into 238.
  • Wide-gamut colour profiles work when exporting Starless + Stars, which are 16-bit TIFFs like any other and were being refused one.

v0.19.0

Star Spikes, Narrowband and Colour Balance, gone over control by control

27 August 2026

Added

  • Narrowband has a Tame core slider. A bright nebula core often comes out of the palette combine close to white with its colour squeezed out; this rolls those highlights back down so the colour underneath shows. On a 30-minute Pacman master it takes the near-white share of the core from 6% to 2%. It was in the engine all along, sitting at a value that did nothing, with no control able to reach it. Off by default, so nothing you have already made changes.
  • Star Spikes has Variation and Star colour. Real diffraction spikes are never identical: Variation gives each star its own arm length, angle and brightness, and lets the four arms differ from one another, so a field of them stops looking stamped. Star colour carries each star's own hue into its cross — a bright star's core is blown white in every channel, so the colour is now read from a ring around it instead of its centre.
  • Compare with original in all three dialogs — Narrowband, Star Spikes and Colour Balance. Splits the preview against the image you opened with, using the same draggable divider as the main window's Before/After. A recolour or an effect is hard to judge against nothing.
  • Star Spikes has a Reset, and finds its stars without freezing the window while it opens.

Changed

  • The clipping warning now says which colour channel died, and the overlay is coloured by it. It reads "6.6% of red crushed to zero" rather than "6.6% shadows (R)", and a mark's colour tells you which channel is gone — red, green or blue for one, yellow, magenta or cyan for two, white for all three, which is the only case where the pixel really is black. The measurement was always per channel; nothing said so, so checking whether the pixel looked black tested the wrong thing.
  • Star Spikes picks its stars far better. It ranked them by total light, which let a diffuse patch of nebula outrank a genuinely bright star and get a cross drawn on it — the largest such patch on a real master was 5,099 pixels. It now ranks by brightness and discards anything not shaped like a star, and the count slider will not offer more stars than the image holds.
  • Narrowband's Green blend is greyed out in Pseudo-SHO and Pseudo-bicolor, where it never did anything. Those palettes take green straight from one gas, so the slider moved and the picture did not. Your setting is kept and applies again in HOO.
  • The Narrowband palette list explains itself. Each palette now says what it does to each gas — hydrogen red and oxygen teal in HOO, gold and blue in Pseudo-SHO, magenta and green in Pseudo-bicolor — rather than leaving three names to guess at.

Fixed

  • Narrowband's Apply froze the window for up to eight seconds on a large master, with nothing on screen to say why. It now runs in the background and says what it is doing.
  • Narrowband's Saturation slider barely touched the nebula core — the part you are usually trying to colour. The boost was being tapered away from bright areas to protect star colour, on a layer whose stars had already been removed. On a real master the core now responds half again as strongly.
  • Narrowband's Protect background traced a hard edge around the nebula. The boundary followed the noise pixel by pixel; it is now softened, which removed every one of the 300,000 places where the mask jumped in a single step.
  • Narrowband produced a different image from a recipe or a Batch run than it did by hand, because the tool and the engine disagreed about whether Preserve lightness starts on. They now cannot disagree.
  • Star Spikes drew its crosses slightly beside the stars rather than on them — up to three pixels off, against arms less than one and a half pixels thick. It now finds each star's centre to a fraction of a pixel.
  • Star Spikes said nothing at all when an image had no stars in it: four sliders that moved and did nothing, with no way to tell a broken tool from an image with nothing to work on. It now says so.
  • Colour Balance could save an image built from settings you had already changed. Apply runs in the background, and the sliders stayed live while it worked, so nudging one during the seconds it takes on a large mosaic changed what was written — and the settings recorded in the log and the provenance report were read even later than that. Everything is now captured the moment you press Apply, and the controls are held while it runs.
  • The Narrowband panel cut off the end of its own text — the palette description was sliced mid-sentence and "Preserve lightness" lost its last word.

v0.18.0

A beta that says so, a Batch that cannot overwrite your masters, and help that matches the app

25 August 2026

Added

  • Nocturne now tells you it is beta. A launch splash carries the logo and the beta marker, and the version reads as beta everywhere it is shown. The word had appeared nowhere on your own machine before — only on the website — so nothing in the application itself ever said what stage it is at.
  • Batch checks your recipe against the tools you have installed before it runs, and says which one is missing. A recipe containing Background needs GraXpert; without it every file in the folder used to fail in turn, under an error that never mentioned GraXpert. Recipes that do not use Background are unaffected — every other tool-backed step falls back to a free implementation and runs fine without RC-Astro.

Changed

  • Seven help topics rewritten against the dialogs that actually exist: Ha/OIII, Narrowband, Dualband, Recipes & Batch, Star Spikes, Upscale Crop and Auto Enhance. The Ha/OIII topic described a tool that is not in the application, the Recipes & Batch topic named none of its controls, Star Spikes gave neither a default nor a range for any of its sliders, and Auto Enhance promised a plan it does not always run.

Fixed

  • The Starless + Stars export was locked to sRGB. Both files it writes are 16-bit TIFFs, so they can carry Display P3, Adobe RGB or ProPhoto RGB exactly like any other 16-bit export — the colour space list simply refused to offer them.
  • Batch could write an export straight over the file it had just read. With the output folder set to the input folder and the format set to FITS, each processed image overwrote its own source. A stacked master is hours of capture, and there was no prompt and no undo.
  • Batch reported "Done — 0/0 succeeded" when pointed at a folder holding nothing it can read, which reads as success. It now refuses before starting and names both the folder it searched and the extensions it searched for — which also covers images sitting one level further down, since it does not search subfolders.

v0.17.0

Colour-managed exports, a proper Curves editor, and setup that configures itself

20 August 2026

Added

  • Choose the colour space on export — sRGB, Display P3, Adobe RGB or ProPhoto RGB. The image is converted into the space you pick and the ICC profile is embedded, so Photoshop and Lightroom read it as what it is instead of assuming their own working space. Wide-gamut spaces on 16-bit TIFF.
  • A large Curves editor, over three times the area of the side panel, with the live preview beside it.
  • Six Curves presets — Add contrast, Strong contrast, Lift faint, Deepen sky, Tame highlights — each measured against your own image rather than a fixed shape, so the background stays put while the rest of the curve moves.
  • Curves now draws your histogram behind the grid, with black-to-white ramps along both axes so you can see which tones you are moving.
  • Nocturne finds GraXpert, RC-Astro and ASTAP where their installers put them, so a fresh install usually needs no setup at all — and a Rescan button repairs a path that has been typed wrong.

Changed

  • Auto Levels now sets a black point and nothing else. It had been re-brightening midtones on top of a stretch that already placed the background, lifting the sky 12–30% and washing images out.
  • GraXpert denoise strengths recalibrated against real data: medium is 14% quieter and 36% cleaner in colour, at the same runtime.
  • The Levels black point adjusts in thousandths rather than hundredths — it is the value Auto sets, and hundredths rounded most of the adjustment away.

Fixed

  • Every Browse button in Settings did nothing, in every release since v0.12.0. Configuring GraXpert, RC-Astro or ASTAP by hand-typed path was the only route left.
  • A tool path pointing at a file that cannot be run — a document, a folder — was reported as installed with a green checkmark.
  • Exports carried no colour profile at all, so other editors guessed and could render a correct file far too dark.
  • Auto Levels did nothing to the shadows of any mosaic: its black point read the empty border and came out as exactly zero.
  • Auto Levels clipped roughly 6,000 star cores to pure white on a typical frame, throwing away their colour.
  • The Open large editor button in Curves did nothing.

v0.16.0

Stacking is seven times faster.

19 August 2026

Changed

  • Stacking is about seven times faster. A 266-frame Pleiades stack that took ten minutes now takes under a minute and a half. Nocturne was using one processor core out of fourteen; it now uses your machine properly, and it works out how hard to push from the machine it finds itself on rather than from a fixed number — so a laptop is never asked to do what a desktop can, and a desktop is not held back to what a laptop could manage. The finished master is identical to the pixel, so saved projects reproduce exactly as they did before and nothing you have already made changes.

Fixed

  • A finished mosaic now opens in the editor, the same as any ordinary stack. It used to complete and then go nowhere — you had to close the stacking window and open the file by hand. It had been that way since mosaics arrived.

v0.15.0

Colour you can steer, and stacks that stopped blurring themselves.

18 August 2026

Added

  • Green ↔ Magenta and Cool ↔ Warm sliders on the Colour step. After you calibrate — sky balance or photometric — two sliders shift the overall colour of the picture, with a live preview as you drag and their own Apply. Both sit at zero and change nothing until you move them; double-click either to re-centre it. They multiply the colour channels rather than clamping one of them down, so the differences between stars survive the adjustment: an orange star stays orange next to a blue one, which is the one thing Remove Green cannot promise. Seestar data tends to land slightly magenta — measured at the same amount in a single raw frame as in a finished stack, so it comes from the camera rather than from the stacking — and a small nudge toward green is usually all it wants. The panel now runs in the order you would actually work in: calibrate, nudge to taste, then remove green only if you imported the image from other software, which is where a green cast normally comes from.
  • Opening a saved project shows progress instead of appearing to freeze.

Changed

  • Stacks are sharper. Registration was resampling every frame with bilinear interpolation, the softest option available, which set a floor on how sharp any stack could be. Measured on 266 frames of the Pleiades, moving to bicubic recovered 4.5% of star sharpness with no artefacts. A sharper demosaic was tried alongside it and rejected: it measured 21.7% sharper again, but painted a four-fold coloured cross around every star, and filtering that out bleached the real colour from the stars before it removed the artefact.
  • Colour Balance opens faster — the star separation is reused between opens rather than recomputed each time.

Fixed

  • Stretch committed something different from what you were looking at. Pressing Apply without touching the slider changed the picture: 94.7% of pixels moved and the mean brightness rose 8.9%.
  • The image no longer moves as you step through the pipeline. The right-hand panel changed width from one step to the next, shifting the picture under your cursor; it now holds a fixed width.
  • Stacking registers against the sharpest frame rather than the highest-scoring one. Star count was swamping sharpness in the score, so on a night of varying transparency a hazier but star-rich frame could be chosen as the reference every other frame was aligned to. On a Milky Way set this took the finished master from 2.95 to 2.14 FWHM.
  • Colour calibration now says which failure it hit — Gaia unreachable, no usable stars, or an unreadable answer — instead of reporting all three as "Couldn't reach Gaia", which sent people looking at their network for faults that were not there.

v0.14.0

Colour work that no longer needs another program.

17 August 2026

Added

  • Colour Balance, a new finishing tool on the toolbar. Shift the colour of one tonal range at a time, inside a band of brightness you choose. Shadows, midtones and highlights each keep their own three sliders — Cyan/Red, Magenta/Green, Yellow/Blue — so you can warm the arms of a galaxy and leave its golden core alone in a single adjustment. The band is set with two handles over the image's own histogram, with a black-to-white scale beneath them so it is clear what is being selected, and the presets are measured from your picture rather than being fixed numbers: a stretched sky sits wherever the stretch put it. Tick Show the mask and the areas that will change light up in their own colours while everything else dims, so you can see exactly where the adjustment lands rather than only how strong it is. Your stars are separated out, left completely untouched, and laid back on top. It is a finishing tool, so it appends to your history and never discards work you have already done — run it twice with different settings if you want to treat two parts of the picture differently.
  • Black and white points on the Curves editor. Both end handles now drag: pull the low one right to set a black point, the high one left to set a white point. That is the commonest move there is on a curve and it was previously impossible — the corners were pinned. Click any point to see its input and output, and nudge it with the arrow keys one 8-bit level at a time, or ten with Shift.

Changed

  • Colour Balance skips the pixels its mask discards, which took Apply on a 39.5 megapixel mosaic from 7.6 seconds to 3.4, and it now composes off the interface thread so the window stays responsive while it works.

Fixed

  • Open Project could not open a project. It raised an error instead of opening anything, and had done since v0.12.0 — two releases. The cause was a change to how file dialogs are opened: the new one returns a path where the old one returned a path and a filter, and the caller was still expecting both.
  • The Colour Balance and Narrowband previews were throwing away most of the star field when shrinking the image for display, taking every thirteenth pixel rather than averaging. Measured on three hundred synthetic stars, two hundred and fifty-three disappeared entirely and the survivors were drawn at full brightness — which is why stars looked blocky when you zoomed in. Both now average, so every star survives.
  • The Narrowband preview showed the starless layer, with the stars only added back when you pressed Apply. What you were tuning against was never what you got.
  • Curves mishandled a lifted black point, crushing the very shadows it was meant to lift. The curve carried on past its outermost control points instead of holding their values, so raising the black point returned something darker than the point itself.

v0.13.0

Mosaics, and a large master that no longer fights back.

16 August 2026

Added

  • Mosaic stacking. Point Nocturne at a folder of subs covering several pointings, tick Mosaic in the Stack dialog, and it works out which frames belong to which panel from where the telescope was aimed, stacks each panel with the ordinary stacker, plate-solves them, builds one global frame on the sky and assembles a single wide picture — panel edges feathered, every overlap matched at once rather than pair by pair. It needs ASTAP installed and takes considerably longer than an ordinary stack. Built and validated on a 302-sub Andromeda mosaic.
  • See what background extraction removed. After the step runs, tick Show what was removed to put the subtracted gradient on the canvas on its own. Mid-grey is where nothing was taken. A smooth ramp, brighter toward one edge or corner, is sky-glow and means the step did its job; if instead you can see the shape of your object in it, the model mistook your signal for sky and subtracted some of it — undo and try Light. That failure is nearly invisible in the corrected image, where the object merely looks a little flat, and obvious here.
  • The stacking report now tells you the peak level a master was normalised by.

Changed

  • Large images are around five times quicker to work with. On a 39.5 megapixel mosaic, one move of a slider went from 2.66 seconds to 0.54, and opening that master from 12.4 seconds to 5.6. Nearly two thirds of the stretch was being spent computing four numbers — the median and spread of each channel — by reading every one of 39 million pixels twice. Reading a fixed, evenly spaced sample instead returns the same four numbers to within a ten-millionth. The sample is derived from the image's shape rather than chosen at random, so the same image always produces the same result and two exports can never differ. A test forces the exhaustive path back on and checks that not one pixel moves by more than one step in 256; on the real master the worst case was a quarter of a step.

Fixed

  • A mosaic master now records what went into it. It was written with its position on the sky in place of the usual stack details, so the frame count, exposure and filter were missing from the finished file.
  • Show what was removed could not be clicked. Whether the control was available was worked out only when the step's panel was first drawn, and applying a step redraws the panel without rebuilding it — so after running background extraction the control stayed greyed out until you navigated to another step and back.
  • The removed gradient was shown in the wrong colours. Background extraction takes out a fixed amount per colour channel as well as a gradient, and scaling all three channels together turned that fixed amount into colour: on a North America Nebula frame the gradient rendered vivid blue-green when it was in fact strongest in red. Each channel is now levelled on its own before the view is brightened, so colour in it once again means one channel genuinely had a stronger gradient than the others.
  • A real gradient could be reported as nothing. The threshold below which the app decides nothing measurable was removed sat just above a gradient measured on a real 54-minute capture, so a slightly flatter sky would have answered “removed nothing measurable” for a correction that plainly changed the picture.

v0.12.0

Colours that match your data — and dialogs that open where you can see them.

15 August 2026

Changed

  • Green removal now starts at zero. With the stretch fixed, most images have no green to remove — and on a clean image the old default of 0.40 was making the sky slightly greener, because green removal only acts where green exceeds red and blue, which on clean data happens only in the noise. It is still there, at whatever strength you choose, for an image that genuinely needs it.
  • Projects saved before this release will reopen with the corrected colour, not the colour you saved. A saved project replays its steps rather than storing the finished pixels, so it now benefits from the fix.

Fixed

  • Images no longer come out green. The stretch — the step that lifts faint signal into view — was giving each colour channel its own amount of amplification, based on how noisy that channel was. A colour camera has twice as many green photosites as red or blue, so green arrives smoother, and the stretch mistook "smoother" for "needs more boost", amplifying green about twice as hard as the other channels. On a real Andromeda mosaic this turned a picture whose data was genuinely red-dominant into one that looked distinctly green. Photometric colour calibration reported no problem, correctly — the green was never in your data; it was added afterwards. The stretch now levels the channels first and brightens them all identically, so it changes brightness and never colour. Checked against five captures across a dark site and a light-polluted one, on both filters.
  • The app no longer freezes when a dialog opens. On a second monitor, macOS was placing Open and Save panels on your primary display — and if Nocturne was fullscreen, on a different desktop entirely. The panel had control, so every click elsewhere just beeped and the app looked hung, with no way out but force-quitting and losing the session. File dialogs are now attached to Nocturne's own window, where they cannot wander off to another screen.
  • Annotations no longer switch themselves back on. Hiding the plate-solve overlay and then zooming brought it straight back, because zooming rebuilds the overlay and your choice to hide it was stored on the thing being rebuilt.

v0.11.2

A fresh install no longer asks for Xcode before it will open a photograph.

5 August 2026

Fixed

  • On a Mac without Apple's command line developer tools, launching Nocturne popped a system dialog asking to install them. Nothing was broken — dismissing it left the app working normally — but it is a poor thing to meet on a machine you have just installed on, and nothing about opening a FITS needs a compiler. The cause was a library Nocturne uses to debayer raw frames, which runs `git describe` when it loads in order to decorate a version string. On a developer's machine that fails quietly and is never noticed; without the tools installed, macOS answers the same call by offering to install them. Nocturne now stops that lookup before it can start a process, which the library already copes with by falling back to its packaged version number.

v0.11.1

Background extraction that does what the label says.

5 August 2026

Changed

  • The Background strength control now has a real range. Both settings previously removed within about a percentage point of each other — measured across GraXpert's entire smoothing range, the choice spanned 2.2 points, which is not a choice. Light now removes roughly half of what Strong does, and Strong removes essentially the whole modelled gradient. That makes Light genuinely useful for the case it exists for: when your target fills the frame — a large galaxy, or a nebula spanning most of the picture — the model can mistake the object's faint outer parts for sky and subtract the very thing you came for. If Strong leaves your object looking flat or hollowed out at the edges, that is what happened; undo and try Light.

Fixed

  • Background extraction's two strengths were the wrong way round. The options are labelled by how much correction they apply, but were implemented as GraXpert's smoothing setting — the opposite axis, where a higher number means a stiffer model that removes LESS. So "strong" was gentler than "light", and the in-app help told you to reach for it when the gradient was heavy. Both now do what they say, and Strong is the default.

v0.11.0

Stacking that keeps your pixels — and a camera it recognises.

4 August 2026

Added

  • Sharpen Nebulosity, an eleventh Enhancements tap. Sharpening a whole astro frame finds the noise first and rings the stars; this sharpens the starless layer under a signal mask and screens the stars back untouched, so nebula structure crisps up while stars cannot ring and the background is left alone. It is the easiest finishing move to overdo — one or two taps is usually right.
  • Nocturne now recognises which Seestar took the picture, reading it from the file rather than assuming. Every camera question previously answered "S30 Pro", which is invisible if that is what you own and wrong otherwise — an S50's image scale is 2.39 arcsec/pixel against the S30 Pro's 3.74, enough to make a plate solve fail and quietly cost photometric colour its calibration. Adding a future model is a single entry.
  • Trailed frames are now rejected when stacking. Wind, a nudge of the tripod or a tracking slip stretches the stars into short streaks, and that could not be detected before: frame sharpness is measured as the geometric mean of the two star axes, which is unchanged when a star is stretched one way and squeezed the other. A real frame with stars 70% longer than wide passed as a good one. A new Round column shows the measurement, where 1.00 is circular.
  • Keep the full frame when stacking. An alt-az mount rotates the field as it tracks, so the outer edges of a stack are built from fewer frames than the middle, and Nocturne used to always trim back to the fully covered region — about a quarter of the picture. Turn "Trim the ragged edges" off and you keep everything. You can always crop later with the Crop step or Trim, but nothing can put back what the stacker discarded.
  • Stacking says how far along it is. The progress bar fills once per phase, and reaching 100% only to restart with no explanation reads as a hang, so each phase now says "Step 2 of 3". Grading also explains itself while it runs, including that your Strictness and Integration choices apply instantly afterwards and never re-read the files.

Changed

  • Every frame is brought to a common sky level before combining. Sky brightness varies enormously across a session — 262% on a real M31 run, as the target climbed and the moon moved — so which frames a given pixel happened to average used to change its background. That drew the rotation pattern onto the finished picture as curved bands wherever the edges were kept.
  • The in-app help now explains Strictness and Integration properly: what grading measures, what each option means in plain terms, when you would pick one over another, and why a frame count that does not change when you change Strictness is informative rather than broken. Sigma-clipping versus Average, and what the kappa setting actually does, are covered too.

Fixed

  • The edges of a stack came out dark. Frames that did not reach a pixel still counted toward its average, so an edge pixel covered by 10 of 80 frames came out at 12% of its true brightness — a smooth ramp inward that no amount of cropping could remove. Sigma-clipping appeared immune to this and was not.
  • Frame grading could reject most of a good session. At Strict the quality threshold could fall below the session's own median, condemning perfectly typical frames; on a real session it rejected 37 of 60. The bright-sky warning had been misfiring the same way all along.
  • Reset did nothing on a loaded project. It restored from a value that was only set when opening a FITS file, so it failed on every saved project — and reported the failure only to the console, leaving the button looking dead.
  • A stacked master lost its optical details, so anything afterwards that needed the image scale fell back to an assumption instead of the real values. Masters now also record which camera took the data.

v0.10.0

Trim without losing your edit, a distraction-free view, and labels that stop colliding.

2 August 2026

Added

  • Trim — cut the edges off a finished image without losing the edit. Ragged stacking borders and smeared corners are often invisible in the linear data you cropped at the start and only appear once you have stretched, at which point going back to the Crop step would discard every step you had done since. Trim adds a final step instead of reaching back, so the whole edit survives and undo still works. Available once the image is stretched.
  • Press F for the image and nothing else — toolbar, step list, panels and the log all step aside so you can judge noise, star shapes and faint detail without the interface competing for attention. Escape returns, and your zoom and position are kept.
  • Names for objects that had none. The deep-sky catalogues added recently arrived as bare designations, so the Elephant's Trunk appeared as "vdB 142". Eighteen of the best-known now carry the names people actually use — which also means a frame is more often identified as the thing you pointed at rather than as the largest catalogued region that happens to overlap it.

Changed

  • The in-app help now covers Trim, the full-screen view, the objects-in-field list, the Density control, Re-solve, the clipping line's "on import" reading, and Share's caption and output controls. It also says plainly that plate solving needs ASTAP's star database — a separate download from ASTAP itself, and much the most common reason a solve fails.

Fixed

  • Annotation labels could print on top of one another on a crowded field, rendering "LDN 1109" and "LDN 1110" as a single unreadable smear. Labels stay a fixed size on screen while their spacing was being worked out in image pixels, so at anything below 100% zoom they were larger than the space reserved for them. They now re-place themselves as you zoom. Burned exports were never affected.

v0.9.0

Plate solving that works beyond the Seestar — and several things that were quietly wrong.

1 August 2026

Added

  • Plate solving no longer gives up when its assumed image scale turns out to be wrong. When a file carries no optical details in its header — which most stacked masters do not — Nocturne assumes the Seestar's image scale, which is right for a Seestar and badly wrong for anything else. If a solve fails with that assumption, it now drops the hint and tries again without one, so frames from other instruments can solve where they previously failed. The result card says when that happened, which is also the clearest available signal that a frame did not come from a Seestar.

Fixed

  • The same object could be named three different ways in the same window. The overlay labelled the Andromeda Galaxy "M 31" while the object list beside it and the solved-target line both called it "NGC 224". Every surface now uses the name people actually use.
  • Dialogs that show an image — Share, Upscale Crop, Star Spikes — opened with the picture shrunk into the middle of the window, and only corrected themselves once you changed something. The view now re-fits when the window is resized, while leaving a zoom you chose deliberately alone.
  • Sharing an annotated image drew the caption band on top of the annotations, swallowing the coordinate-grid labels and cutting object labels in half. With annotations burned in, the caption now sits below the picture by default, where it cannot cover anything — and you can still move it back onto the image if you prefer.

v0.8.0

Share grows up — and a colour fix that was quietly costing you accuracy.

1 August 2026

Added

  • The Share caption is yours. Nocturne still writes a first draft from the image's own data — target, integration, frame count — but it is now an ordinary text field you can rewrite, trim, or replace with something the metadata never knew. Put it on the image or below it (below extends the canvas, so nothing you photographed is covered), left, centred or right, at three sizes, in any colour, with a slider for how dark the band behind it is. The styling is remembered between shares; the text starts fresh for each image.
  • Share now lets you choose the output: 1080, 2048 or 4096 px, or full size, as JPEG or PNG. PNG is the better choice when the image carries annotations or a caption, since labels and text are hard edges and JPEG softens exactly those. Exports only ever scale down, and the status line reports the pixel size actually produced.
  • The objects the plate solve found now appear beside the image by themselves, and follow the Annotations button rather than needing a separate control. Click a row to jump the view to that object; close it with its own ✕ if you would rather see the whole picture.
  • Plate Solve is greyed out until ASTAP is configured, and says what to install rather than waiting for you to press it and then complaining.

Changed

  • The clipping warning now judges what your editing session actually caused, while still reporting the true total. An image that arrives already crushed — a re-imported export, or an upscaled copy — used to show amber from the first Stretch with nothing you could do about it, which is precisely the cry-wolf failure the warning was built to avoid. It now reads, for example, "0.9% shadows clipped (0.9% shadows on import)" and stays calm until you add to it.
  • Share's aspect buttons show which one is selected. Previously nothing indicated the current choice, so the only way to know what you would get was to read the shape of the preview.
  • Cropping, rotating or flipping a solved image now tells you the plate solve no longer lines up and its annotations have been hidden, instead of removing them in silence.

Fixed

  • Photometric colour (SPCC) silently fell back to sky balance on any master whose header carried no optical details — which is most stacked masters exported from another tool. The plate-solve tool already handled this by falling back to the Seestar's known image scale, but the colour step did not, so it solved blind, failed, and quietly used the lesser method. On a test capture this took it from no solution at all to 1,718 matched stars.
  • A shared image ignored the plate-solved target. If your file's header never named what you photographed but Nocturne identified it, the caption left the target out entirely — while the info strip and the provenance report both showed it.
  • Opening a new image left the previous image's annotation pill and object list on screen, describing a field you were no longer looking at.
  • The plate-solve screenshot on this site and in the project README dated from before the annotation-mirroring fix, so both were illustrating the bug rather than the feature. Replaced with a current capture.

v0.7.1

Two correctness fixes — a bad pixel no longer blanks a channel, and a background step can't land on the wrong image.

1 August 2026

Fixed

  • A single bad pixel could turn a whole colour channel black on screen. Frames registered with rotation (alt-az field rotation) often carry NaN "no data" in the corners, and one such pixel was enough to blank an entire channel of the display. Three faults compounded: importing a file containing NaN skipped normalisation entirely, leaving values far outside the range every later step assumes; the display stretch derived its parameters from a statistic that one bad sample destroys; and export cast those pixels differently from the canvas, so a saved file could disagree with what you were shown. Non-finite pixels are now treated the same way everywhere — as no data, drawn black — and the good pixels around them are unaffected.
  • Opening or closing an image while a step was still running could corrupt it or crash. Closing a project mid-step raised an error; opening a different image mid-step silently applied the previous image's result to the new one and recorded it in the wrong history. Saving while opening another image could also write the new project to the old file. A result now only ever lands on the image it was computed for, and Open Project no longer silently does nothing while a step is running.

v0.7.0

Plate solving you can steer — an object list, a Cancel button that works, and annotations on Share.

31 July 2026

Added

  • Objects in field — everything the solve found, as a list beside the image: deep-sky objects in the overlay's own significance order, named stars below with their magnitude. Click a row to jump the view to it. The list shows the whole field, including objects Density leaves off the image, so the ones hardest to spot are the ones easiest to reach.
  • Share can carry your annotations. A checkbox switches the preview between the clean and the annotated frame, so a labelled image gets the social reframing and caption band too — previously the only way to publish a labelled image was a PNG export, which skips both. The checkbox is hidden entirely when there is no solution.
  • Plate solving falls back to the instrument profile for the field-of-view hint when a file carries no optics. A stacked master exported from another tool routinely has neither FOCALLEN nor XPIXSZ, which left ASTAP solving a few-degree field blind and usually failing. The result card says when the scale was assumed rather than read, since on data from another instrument that assumption is wrong.

Fixed

  • Cancel during a plate solve did nothing. The button set the flag and the interface reported "Cancelling…" while ASTAP carried on to completion. It now genuinely stops the solver, and a solve still grinding after three minutes gives up with a diagnostic rather than holding on indefinitely.
  • A pointing hint taken from a bare RA header card was parsed as hours when it was in degrees, making the search centre meaningless. Latent — those files carry pointing elsewhere too, so the bad value was never actually passed — but a file without that fallback would have been handed nonsense.
  • The changelog on this site listed releases by headline alone, so you could not tell which version you were running. Every entry now names its version, and the newest is marked Latest.

v0.6.0

Plate solving grows up — and a fix that has been mislabelling your images since 0.3.0.

31 July 2026

Added

  • Object circles are drawn at each object's real size on the sky instead of a fixed dot, so a large nebula's ring shows how far it extends — past the frame edge if the object is bigger than your field. A dashed ring means the catalogue records no size.
  • A Plate Solve tool panel with a checkbox per layer (objects, named stars, RA/Dec grid, compass, scale bar), a Density control for how crowded the labels get, and a result card showing the field centre, size, scale, orientation, solver and elapsed time.
  • Colour by type: violet Messier objects, white dark nebulae, cyan planetary nebulae, orange galaxies, yellow named stars.
  • An RA/Dec coordinate grid, drawn as true curved lines with edge labels.
  • Far more to find in your frames. The deep-sky catalogue grew from 13,962 NGC/IC objects to 15,890 by adding Sharpless HII regions, Lynds and Barnard dark nebulae and van den Bergh reflection nebulae — so the dark lane inside the North America Nebula is now labelled LDN 935. Named stars grew from 371 to 2,831 by adding Bayer and Flamsteed designations.
  • An Annotations button on the image toggles the overlay without closing the tool, so you can keep the labels up while you carry on editing.

Changed

  • The Plate Solve toolbar button now opens the tool rather than solving immediately — solving starts when you press Solve, so a several-second run never begins by surprise.
  • Labels are placed to avoid overlapping each other, in order of significance, with a leader line when a label has to sit away from its object.
  • Labels are larger and carry a proper dark halo, so they stay readable over bright nebulosity as well as dark sky.
  • Annotations are clipped to the image, and a solution is cleared when you crop, rotate or flip, since it belongs to the framing it was made for.
  • The result card reports no confidence score and no mirrored/not-mirrored flag. Neither can be established reliably from what the solver returns, and a wrong claim on the panel that exists to tell you the solve is trustworthy is worse than a missing one.

Fixed

  • Every annotation was mirrored vertically. Object labels, stars, the grid and the compass have all been placed on the wrong side of the image since plate solving shipped in 0.3.0 — most visible on named stars, where a label sat in empty sky while the star was elsewhere in the frame. Large nebula circles disguised it because they landed roughly over their nebula either way.
  • Photometric colour (SPCC) matched Gaia stars against the same mirrored positions, so its matches were coincidental rather than real. It now matches around 1,500 stars on a typical frame.
  • Annotated PNG exports silently dropped named stars — the exported image no longer matches what the overlay showed.
  • Sharpless objects were labelled with designations that do not exist (Sh 2117 instead of Sh 2-117), and drew a second ring and label over objects already catalogued, including on the North America and Orion nebulae.
  • The identified target could be a huge diffuse complex that merely overlaps the frame rather than the object you photographed.

v0.5.0

Know exactly what you're looking at — pixel readout, clipping warnings, and a precise cursor.

31 July 2026

Added

  • Hover pixel readout — a floating pill reports the pixel under your cursor: R/G/B (or V for mono) plus L luminance. Before Stretch it shows four decimals and tags the reading "linear", because the preview is auto-stretched while the value underneath is not.
  • Clipping warning — from Stretch onward, a live summary under the histogram shows how much of the image is blown or crushed, naming the worst channel, and turns amber past a threshold calibrated on real Seestar stacks. Tick Show clipping to paint the affected pixels on the canvas (blue shadows, red highlights) live, even mid-slider-drag.
  • Crosshair cursor over the image, so you can tell precisely which pixel a reading belongs to — the normal cursor everywhere else, and the grab hand while panning.
  • Batch processing gained a Cancel button, and each failed file is now named with the reason it failed instead of a bare success count.

Changed

  • The Levels-only clipping checkbox is retired — clipping feedback is now global and works on every step from Stretch on, including Curves.
  • Share and Upscale now ask you to Stretch first rather than silently producing a near-black result from linear data.
  • Histogram redraws about 4x faster (126 ms to 36 ms on an 8 MP frame), so live previews are smoother.
  • The in-app update link now uses HTTPS.

Fixed

  • Nocturne failed to start when run from a source checkout — a toolbar icon was missing from the repository, so launching from a fresh clone raised an error. The downloadable app was unaffected.
  • Auto Enhance now gates on a crop and respects the crop you chose.
  • Remove Green's live preview goes through the same canvas path as every other step, so what you see matches what applies.

v0.4.2

Five new one-tap Enhancements, plus recipe/batch capture and an in-app update check.

26 July 2026

Added

  • Five new Enhancements taps — Star Colour (recover stars' natural colour via a star/starless split), Vibrance (oversaturation-resistant colour pop), Boost Gold (warm hue boost for dust and star fields), Dark Structure (definition in dust lanes and dark nebulae), and Soft Glow (dreamy Orton-style bloom).
  • Enhancements taps are now captured in Recipes and replayed in Batch, so finishing survives folder processing.
  • In-app "Update available" indicator — a fail-silent GitHub check on launch (no telemetry).

Changed

  • Refreshed in-app help, README, and testers' guide to cover the newer tools (Auto Enhance, Plate Solve, Share, Upscale Crop, Saved Projects, Provenance, Photometric/SPCC colour, ASTAP).

Fixed

  • The crop overlay now stays within the image — resizing or moving the box clamps to the bounds.

v0.4.1

Plate-solving fixed in the app build

25 July 2026

Fixed

  • Plate Solve now works in the downloaded app — a packaging issue had it failing to solve or annotate (it had always worked when run from source).
  • macOS "Get Info" now reports the correct app version.
  • A plate-solve that can't complete now explains why, instead of showing a generic message.

v0.4.0

Saved projects, one-tap Auto Enhance, and shareable exports

25 July 2026

Added

  • Saved Projects — save your whole editing session as a .nocturne file and reopen it exactly, pixel for pixel.
  • Auto Enhance — one adaptive tap that detects dual-band vs broadband data and processes accordingly.
  • Share — reframe and caption an image for social, then export or copy to the clipboard.
  • Upscale Crop — a 2× layered upscale of any crop, exported or opened as a copy.
  • Provenance report — a readable record of every step applied to an image, from the Project menu (Save or Copy).
  • Cancel, live progress and failure diagnostics for long operations (stacking, grading, Auto Enhance, external tools).
  • A histogram info strip (resolution · integration · target), Close Project, recent projects, and refreshed toolbar icons.

Changed

  • Auto Enhance reworked to always use photometric colour with a gentler stretch.
  • The right panel no longer shifts as status messages update, and the message panels clear when a new image is opened.

Fixed

  • Readable FITS import details, a Close button on every dialog, and the Star Spikes preview now opens fitted to the image.

v0.3.0

Photometric colour & a calmer interface

23 July 2026

  • Photometric colour calibration (SPCC). Colour is now calibrated against real Gaia catalogue stars in the frame, so the sky lands neutral and star colours are true — with an automatic fall-back to sky balance when a field can't be solved.
  • Interface overhaul. Status and results now live in a copyable output area, blocking warnings sit right beside the buttons, and Back/Next stay pinned so they never shift under you.
  • Collapsible step-help. The in-panel explainer can be folded away once you know a step — and it remembers your choice everywhere.
  • Annotation polish. Named bright stars (Deneb, Vega…), clearer object labels, compass and scale bar.

Plate Solve & Annotate

22 July 2026

  • Plate solving with ASTAP. Solve any image to identify exactly what you shot, then overlay deep-sky object labels, a compass and a scale bar.
  • Exports keep the astrometry. Annotations burn into PNG exports, and the WCS is written into exported FITS.
  • Free star separation. Star Reduction, Remove Green Fringe and the nebula saturation boost now work without RC-Astro — with an optional quality lift if you own it.

Narrowband, denoise & artistic tools

20–21 July 2026

  • Guided Narrowband tool. Map Ha/OIII into finished palettes with a live preview, on the stars-removed image or the whole frame.
  • Choose your denoise engine. RC-Astro NoiseXTerminator, GraXpert, or a built-in method — whatever you have installed.
  • Star Spikes for artistic diffraction spikes, Remove Green Fringe, and a masked nebula saturation boost.
  • Spacebar before/after peek, and a default working folder used by every file picker.

Smarter stacking & a full pipeline audit

17–19 July 2026

  • Frame grading in stacking. Every sub gets a verdict (kept, soft stars, clouds…), a strictness control, quality-ranked integration and a plain-language summary of what was kept.
  • Curves (a smooth monotone-cubic editor) and HDR core recovery for taming bright galaxy and nebula cores.
  • Beginner audit of every step: Levels (auto + clipping preview), a reworked Crop (composition guides, live size, click-to-dismiss), and an Import panel that reports accurate integration time and real sensor details.

Colourise, Enhancements & in-app Help

4–6 July 2026

  • One-press Colourise. Turn a dualband master into a finished two-gas colour image — stars removed, nebula colour-mapped, stars screened back — with Advanced sliders when you want them.
  • Deconvolution step (RC-Astro BlurXTerminator, or a free fallback).
  • Tap-to-stack Enhancements, a browsable Help window, and progress indicators throughout.

First release

Late June – early July 2026

  • The guided, non-destructive pipeline — a live preview and full undo at every step.
  • Built-in stacking, Ha/OIII extraction, real narrowband palettes, and recipes & batch processing.
  • Native macOS app, and this website.