Releases: christiantroyandrada/aporn-tool
Release list
v0.6.2.post1 — docs-only
Post-release: no code change from 0.6.2. Adds the Troubleshooting entries (GraXpert hang guard; cluster washed-background fix) to the published package page. Functionally identical to v0.6.2.
🤖 Generated with Claude Code
v0.6.2 — dark cluster background + GraXpert hang guard
Two fixes found during the 0.6.1 regression sweep (both pre-date 0.6.1).
Fixed
dso-star-clusterwashed-out background on light-polluted stacks. For DSLR /--stackedinput the cluster finish now stretches to an explicit dark background target (bareautostretchwashed a light-polluted stack's skyglow to grey). Scoped to that input only — Seestar FITS cluster output is byte-identical to 0.6.1. Tune underpipeline.cluster_finish.- GraXpert could hang the pipeline.
run_graxpertnow caps the GraXpert subprocess with a timeout (default 1200s); a stalled GraXpert (e.g. OOM on a very large DSLR image) fails the stage cleanly instead of blocking forever.
263 unit tests pass. Full details in CHANGELOG.
🤖 Generated with Claude Code
v0.6.1 — handheld Milky Way foreground de-ghost
--no-tripod — recover a sharp foreground from a hand-held Milky Way stack
Star-aligned stacking sharpens the sky but smears the fixed foreground (house / trees / wires) into a ghost when frames are shot hand-held. dso-milky-way --no-tripod keeps the deep stacked sky and paints the foreground back in from a single sharp frame.
- Foreground found from per-pixel variance across the registered frames (sky is aligned = still; foreground moves) — no horizon line to draw. Sky = the low-variance region flood-filled from the image centre; interior/tiny false positives are folded back to sky (border-touch + size guards) so they never render as black blobs.
- New
deghostfinish stage (resume-safe; no-ops cleanly without registered frames). Newpipeline.no_tripodconfig block;--no-tripodflag (wide mode only).
Changed
milkyway_finishdefaults retuned for a dark sky with the Milky Way popping (autostretch_bg0.20→0.10,clip-2.5→-2.9,satu0.5→0.85).
Notes
- The ragged hand-held border is best trimmed with an explicit
--crop "X Y W H"box. - Regression-tested across every mode; no regressions. Full details in CHANGELOG.
🤖 Generated with Claude Code
v0.6.0
New in 0.6.0:
- dso-milky-way — stack a wide-field Milky Way from phone/camera stills (JPEG/HEIC/PNG/TIFF), no FITS needed.
- DSLR / mirrorless DSO — the four DSO modes now accept raw (CR2/CR3/NEF/ARW/DNG/...), TIFF, or JPEG with full master calibration (--darks/--flats/--bias), plus --focal/--pixel/--coords.
- --stacked — feed an already-stacked linear image (from DSS, Siril, etc.) straight into a mode's finish.
- Emission/star-cluster finish now seeds its plate solve so SPCC runs on DSLR/stacked data, and falls back gracefully (local Gaia -> online -> skip).
The Seestar FITS path is unchanged. See CHANGELOG.md for details.
v0.5.0
v0.5.0 — Composite dual-layer finish + target-type modes
⚠️ Breaking
dso-mosaicis removed → usedso-galaxy. Whether a capture is single-panel or a
multi-panel mosaic is now auto-detected from the subs' pointing spread (override with
--mosaic/--single; the decision is always printed). Update any scripts/launchers.- NGC 7000 recategorised from mosaic to
emission.
Composite dual-layer finish (galaxy / emission / reflection)
- The modern star/nebula separate-and-recombine workflow: remove stars → process the starless
nebula layer and the stars layer independently → recombine with a screen blend. Lets the
background be darkened/denoised hard without smearing stars — dramatically cleaner results on
short-integration / light-polluted data. Tunable with--star-reduce(galaxy 0.5,
emission/reflection 1.0). Star-cluster is excluded (the stars are the subject).
Modes are now target types
dso-galaxy(new) ·dso-emission-nebula·dso-reflection-nebula·dso-star-cluster.- Mosaic is a capture technique, not a target category — it applies to any type and is detected
from the data. - Emission now calls the StarNet2 CLI (composite); no mode needs SIRIL-internal StarNet any more.
Validated end-to-end from raw Seestar subs via the bare <mode> --in <folder> command on
M31 (galaxy/mosaic), M33 (galaxy/single), M8 + M20 (emission), and VdB106 (reflection). 195 tests.
🤖 Generated with Claude Code
v0.4.0
Centralize all pipeline parameters in one config file.
Every tunable knob — stack/register, GraXpert, auto-crop, SPCC, the per-mode stretch·GHT·saturation·star-blend, the reflection dual-layer dials, subsky degree, rmgreen, and deliverable JPEG quality — now lives under a pipeline block in aporntool.config.json, grouped by stage/mode.
- Out of the box: the first run auto-writes the config (all defaults) next to you to edit — no code to touch.
aporn-tool config --initwrites it on demand. - Guarded: no file / deleted / empty / corrupt → built-in defaults; partial files override only their keys; unknown / wrong-typed / non-finite values are ignored. A hand-edited file can't break a run. With no config, the pipeline is byte-identical to v0.3.3.
- Fixes: emission/cluster plate-solve now honours the configured SPCC catalog;
crop.target_blocks: 0no longer divides by zero.
Verified end-to-end on a real 922-sub M31 mosaic via the simplest command: aporn-tool dso-mosaic --in "<subs>".
v0.3.3
Docs cleanup. Tightened the README and changelog prose. No functional changes.
v0.3.2
- Cleaner reflection backgrounds. Added selective background desaturation to the reflection
finish: the global blue boost that makes the nebula pop no longer floods the sky with blue
speckle — low-signal pixels fade to neutral black while the nebula keeps its colour. (New
desaturate_background; defaultsbg_desat=0.14,bg_desat_soft=0.14.) --versionis now correct. It read a hardcoded string that was never bumped (so 0.3.0/0.3.1
both reported0.2.0); it now derives from the installed package metadata and can't drift again.
v0.3.1
Maintenance release — no functional changes.
- Refreshed the PyPI page. The 0.3.0 upload was tagged one commit before the README badge/header
fix, so its PyPI description still showed a stale "Latest release: v0.2.0" line. PyPI freezes a
version's description at upload, so this rebuild (from the corrected README) is the only way to
update the page. - CI: publish-workflow actions bumped off the deprecated Node 20 —
checkout@v7,
setup-python@v6,upload-artifact@v7,download-artifact@v8.
v0.3.0
First release published to PyPI — pip install aporn-tool, then run aporn-tool <mode> --in …
(the one-word aporntool and python -m aporntool also work).
Added
- Target + coordinate auto-detection —
--targetis now optional: when omitted, the object name
and coordinates are read from the subs' FITS header (OBJECT+RA/DEC), so unlisted targets
(e.g. VdB 106) work with no manual coords.--outis now optional too, defaulting to a<TARGET>
folder beside the input subs. The everyday command is just mode +--in(e.g.
aporntool dso-mosaic --in "/path/to/M31 subs").--target/--outstill override. --cleanflag (alldso-*modes): on a fully successful run, deletes the working files in
_work/<target>/except the golden anchor (02_linear/<TARGET>_Linear.fit), the manifest, and
logs. Reclaims almost all scratch disk (a real M8 run went 18 GB → 25 MB) while keeping a cheap
re-finish —--from bge(mosaic/reflection) or--from finish(emission/cluster) rebuilds every
deliverable from the anchor with no re-stack. Off by default; a failed run never cleans, so resume
always works.
Removed
--coordsflag — no longer needed now that coordinates are read from the FITS header. The
resolve_target(name, coords=…)library function still accepts explicit coords.