Most narrowband palettes are a fixed mapping: SII to red, Ha to green, OIII to blue, and then a long fight with the green. The Foraxx palette, published by The Coldest Nights, decides the mix pixel by pixel instead. Two factors computed from the data choose, at each pixel, how much SII replaces Ha in red and how much Ha replaces OIII in green:

o  = OIII^~OIII
ho = (Ha*OIII)^~(Ha*OIII)
R  = o*SII + ~o*Ha
G  = ho*Ha + ~ho*OIII
B  = OIII

~x is 1 - x. The result is the bronze-and-teal look with far less green cast, and it works with only Ha and OIII too, where red is simply Ha. Paul Hancock’s Foraxx Palette Utility turned that recipe into a PixInsight script that many of us ran for two years. Then PixInsight 1.9.4 arrived.

The PixInsight script, rebuilt

PixInsight 1.9.4 replaced its JavaScript engine with V8, and the old script used two idioms the new runtime silently ignores: the dialog inheritance trick and process constants on the prototype. Its update package also refused to install past 1.9.2. So I rewrote it for V8, kept Paul’s expressions, hue curves and saturation settings byte for byte, and gave it a test suite that runs inside a headless PixInsight and checks every output pixel against the formula. It ships from the theatr.us PixInsight repository and appears under Script > theatr.us.

The rewrite was also the chance to add the controls people kept asking for. The two factors are masks, so the script lets you reshape them: a bias moves where SII takes over from Ha, or Ha from OIII, and a contrast sharpens or softens the transition. Neutral values give the original palette exactly. Each channel has a gain and a midtones control, the second lifting faint OIII or SII without pushing highlights into clipping the way a plain gain does. Three extras generate things you would otherwise build by hand: channel-ratio masks such as OIII/(Ha+OIII) that select oxygen-rich structure regardless of brightness and fade out in the faint background; a protected saturation boost through a mask that spares the dark background and already saturated pixels; and a colour-preserving brightness curve on CIE L* alone, PixInsight’s equivalent of a Luminosity-mode curve. Plain SHO, HOO, HSO and OHS mappings are there too, for comparison, and every option is remembered between runs.

The same palette as Photoshop layers

The Photoshop version takes a different route to the same pixels. Instead of writing a flattened result, it builds a group of ordinary layers whose blend modes and masks reproduce the palette exactly. Only the two factors are non-linear, so the plugin computes them once and stores them as layer masks. Everything else maps onto Photoshop directly: a Normal layer with a mask is the linear mix the formula asks for, and each channel result tinted into pure red, green or blue and screened over black adds without loss, because screening against zero changes nothing.

The stack, bottom to top, is a black layer, then red, green and blue groups in Screen mode, each holding a tinted base layer and, where the palette mixes, a tinted top layer with the factor as its mask, and an optional stars group built the same way from the star layers. Merge any of it and the pixels do not change. Paint on a mask, drop a curves layer inside a group, or lower a group’s opacity, and you are editing the palette rather than a baked result. The plugin has a live thumbnail preview, gains, red and green mask bias and contrast, and OIII midtone shaping, and it builds large images in strips as a single undo step. The masks are computed once, so later edits to the source layers do not follow; build a new group for that.

The first release is a beta, validated on Windows with Photoshop 2026 against a 97-megapixel narrowband example, with every output pixel within one 16-bit step of the formula. 32-bit documents are out, since Photoshop has no Screen blend at that depth.

Which one, and when

Use the PixInsight script when the palette is one step in a PixInsight workflow and you want the generated masks for further work there. Use the Photoshop plugin when you finish in Photoshop and want the palette to stay editable. Both read the same stretched, starless SII, Ha and OIII images, and both treat the stars separately. If you stack with Seiza, its colour pipeline can render a Foraxx palette straight from calibrated masters for a first look.

The guide for both, with every option explained, is at theatr.us/software/astro/foraxx. The PixInsight script installs from https://pixinsight.theatr.us/; the Photoshop plugin is a .ccx from its releases page. Source: foraxx-palette-utility and foraxx-photoshop.

The palette and its expressions are The Coldest Nights’ work, published in June 2020 and named after its author, ForaxX; the Cloudy Nights thread has years of examples. The original PixInsight utility is Paul Hancock’s (Paulyman Astro), copyright 2023-2024. The V8 rewrite, the added controls, the Photoshop plugin and the packaging are mine. Both are released under the Apache License 2.0. This product is based on software from the PixInsight project, developed by Pleiades Astrophoto and its contributors.