starbash 0.2.7__tar.gz → 0.3.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. {starbash-0.2.7 → starbash-0.3.1}/PKG-INFO +52 -8
  2. {starbash-0.2.7 → starbash-0.3.1}/README.md +47 -7
  3. {starbash-0.2.7 → starbash-0.3.1}/pyproject.toml +11 -1
  4. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/aliases.py +1 -1
  5. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/analytics.py +5 -2
  6. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/app.py +23 -26
  7. starbash-0.3.1/src/starbash/assets/favicon.ico +0 -0
  8. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/commands/process.py +3 -1
  9. starbash-0.3.1/src/starbash/commands/publish.py +356 -0
  10. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/database.py +39 -0
  11. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/defaults/starbash.toml +69 -0
  12. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/doit.py +61 -1
  13. starbash-0.3.1/src/starbash/fits.py +36 -0
  14. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/main.py +6 -1
  15. starbash-0.3.1/src/starbash/parameters.py +166 -0
  16. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/paths.py +19 -1
  17. starbash-0.3.1/src/starbash/processed_target.py +430 -0
  18. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/processing.py +244 -13
  19. starbash-0.3.1/src/starbash/publish/__init__.py +5 -0
  20. starbash-0.3.1/src/starbash/publish/credentials.py +206 -0
  21. starbash-0.3.1/src/starbash/publish/github.py +234 -0
  22. starbash-0.3.1/src/starbash/publish/github_service.py +452 -0
  23. starbash-0.3.1/src/starbash/recipes/crop.py +75 -0
  24. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/recipes/osc.py +84 -8
  25. starbash-0.3.1/src/starbash/report.py +151 -0
  26. starbash-0.3.1/src/starbash/siril/import_registration.py +173 -0
  27. starbash-0.3.1/src/starbash/stage_utils.py +119 -0
  28. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/stages.py +10 -11
  29. starbash-0.3.1/src/starbash/templates/__init__.py +0 -0
  30. starbash-0.3.1/src/starbash/templates/report/Gemfile +3 -0
  31. starbash-0.3.1/src/starbash/templates/report/README.md.jinja +21 -0
  32. starbash-0.3.1/src/starbash/templates/report/__init__.py +0 -0
  33. starbash-0.3.1/src/starbash/templates/report/_config.yml +8 -0
  34. starbash-0.3.1/src/starbash/templates/report/default.html +61 -0
  35. starbash-0.3.1/src/starbash/templates/report/index.md.jinja +11 -0
  36. starbash-0.3.1/src/starbash/templates/report/target.md.jinja +42 -0
  37. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/templates/target/master.toml +3 -5
  38. starbash-0.3.1/src/starbash/templates/target/processed/about.toml +14 -0
  39. starbash-0.3.1/src/starbash/templates/target/processed/main.toml +22 -0
  40. starbash-0.3.1/src/starbash/templates/target/processed/sessions.toml +1 -0
  41. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/tool/__init__.py +2 -1
  42. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/tool/base.py +18 -1
  43. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/tool/rcastro.py +2 -2
  44. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/tool/siril.py +1 -1
  45. starbash-0.3.1/src/starbash/tool/starnet.py +78 -0
  46. starbash-0.2.7/src/starbash/parameters.py +0 -175
  47. starbash-0.2.7/src/starbash/processed_target.py +0 -273
  48. starbash-0.2.7/src/starbash/stage_utils.py +0 -45
  49. starbash-0.2.7/src/starbash/templates/target/processed.toml +0 -52
  50. {starbash-0.2.7 → starbash-0.3.1}/LICENSE +0 -0
  51. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/__init__.py +0 -0
  52. {starbash-0.2.7/src/starbash/defaults → starbash-0.3.1/src/starbash/assets}/__init__.py +0 -0
  53. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/check_version.py +0 -0
  54. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/commands/__init__.py +0 -0
  55. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/commands/info.py +0 -0
  56. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/commands/repo.py +0 -0
  57. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/commands/select.py +0 -0
  58. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/commands/user.py +0 -0
  59. {starbash-0.2.7/src/starbash/recipes → starbash-0.3.1/src/starbash/defaults}/__init__.py +0 -0
  60. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/doit_types.py +0 -0
  61. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/dwarf3.py +0 -0
  62. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/exception.py +0 -0
  63. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/filtering.py +0 -0
  64. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/icon.py +0 -0
  65. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/linux.py +0 -0
  66. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/os.py +0 -0
  67. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/processing_like.py +0 -0
  68. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/recipes/README.md +0 -0
  69. {starbash-0.2.7/src/starbash/templates → starbash-0.3.1/src/starbash/recipes}/__init__.py +0 -0
  70. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/rich.py +0 -0
  71. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/safety.py +0 -0
  72. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/score.py +0 -0
  73. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/selection.py +0 -0
  74. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/sim_siril/__init__.py +0 -0
  75. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/sim_siril/connection.py +0 -0
  76. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/sim_siril/enums.py +0 -0
  77. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/sim_siril/utility.py +0 -0
  78. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/templates/repo/master.toml +0 -0
  79. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/templates/repo/processed.toml +0 -0
  80. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/templates/userconfig.toml +0 -0
  81. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/toml.py +0 -0
  82. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/tool/context.py +0 -0
  83. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/tool/graxpert.py +0 -0
  84. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/tool/python.py +0 -0
  85. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/ui/main.py +0 -0
  86. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/url.py +0 -0
  87. {starbash-0.2.7 → starbash-0.3.1}/src/starbash/windows.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: starbash
3
- Version: 0.2.7
3
+ Version: 0.3.1
4
4
  Summary: A tool for automating/standardizing/sharing astrophotography workflows.
5
5
  License-File: LICENSE
6
6
  Author: Kevin Hester
@@ -11,10 +11,14 @@ Classifier: Programming Language :: Python :: 3.12
11
11
  Classifier: Programming Language :: Python :: 3.13
12
12
  Classifier: Programming Language :: Python :: 3.14
13
13
  Requires-Dist: astropy (>=7.1.1,<8.0.0)
14
+ Requires-Dist: click (>=8.0,<8.5)
14
15
  Requires-Dist: doit (>=0.36.0,<0.37.0)
15
16
  Requires-Dist: graxpert[cpuonly] (>=3.2.0a2,<4.0.0)
17
+ Requires-Dist: jinja2 (>=3.1,<4.0)
18
+ Requires-Dist: keyring (>=25.6,<26.0)
16
19
  Requires-Dist: numpy (==2.2.6)
17
20
  Requires-Dist: platformdirs (>=4.5.0,<5.0.0)
21
+ Requires-Dist: pygal (>=3.0,<4.0)
18
22
  Requires-Dist: pyqt6 (>=6.10.1,<7.0.0)
19
23
  Requires-Dist: restrictedpython (>=8.1,<9.0)
20
24
  Requires-Dist: rich (>=14.2.0,<15.0.0)
@@ -37,15 +41,16 @@ Description-Content-Type: text/markdown
37
41
  A tool for automating/standardizing/sharing astrophotography workflows.
38
42
 
39
43
  ## What is starbash?
44
+ <img src="https://raw.githubusercontent.com/geeksville/starbash/refs/heads/main/doc/icon/generated/web/icon-192.png" alt="Starbash: Astrophotography workflows simplified" width="30%" align="right" style="margin-bottom: 20px;">
40
45
 
41
- <img src="https://raw.githubusercontent.com/geeksville/starbash/refs/heads/main/doc/img/icon.jpg" alt="Starbash: Astrophotography workflows simplified" width="30%" align="right" style="margin-bottom: 20px;">
42
-
43
- * Automatic - with sensible defaults that you can change as needed. Just a few keystrokes to preprocess an entire repo of raw images.
44
- * Easy - provides a 'seestar-like' autoprocessing all your sessions (by default). You can optionally do manual postprocessing with all this 'grunt work' preprocessing automated.
46
+ * Automatic - with sensible defaults that you can change as needed. Just a few keystrokes to auto-process an **entire** repo of raw images. It uses sensible customizable defaults - you can optionally tweak parameters and reprocess as needed.
47
+ * Easy - provides a 'seestar-like' autoprocessing all your sessions (by default). You can optionally do manual postprocessing with all this 'grunt work' default processing automated.
45
48
  * Fast<sup>1</sup> - even with large image repositories. Automatic master bias and flat generation. Automatic preprocessing/ stacking/background-elimination with reasonable defaults.
46
- * Multi-session - by default. So your workflows can stack from multiple nights (and still use the correct flats etc...).
49
+ * Multi-session - by default. So your workflows can stack from multiple nights (and still use/auto-generate the correct flats, darks/biases etc...).
47
50
  * Shareable - you can share/use recipes for image preprocessing flows. The eventual goal is a transition away from opaque burried scripts. Recipes can come from multiple repos and you or other orgs can host recipes.
51
+ * Automatic (optional) posting/creation of your generated images and workflows to a free ['github pages'](https://docs.github.com/en/pages) website. [Sample](https://geeksville.github.io/starbash-public/targets/sh2-91/).
48
52
  * Attribution (by default) - a full set of contributions to final image can be tracked: instrument, raw images, processed-by, recipes-by/version etc...
53
+ * Full session/FITS aware history - select targets by name, date-range, instrument etc...
49
54
 
50
55
  (This project is currently 'alpha' and missing recipes for some workflows, but adding new recipes is easy and we're happy to help. Please file a GitHub issue if your images are not auto-processed and we'll work out a fix.)
51
56
 
@@ -55,7 +60,7 @@ A tool for automating/standardizing/sharing astrophotography workflows.
55
60
  ## What is starbash NOT
56
61
 
57
62
  ### Not a new image processing tool (like Siril)
58
- It is important to understand that Starbash is primarily a tool for **repeatable**, **sharable**, **semi-automated** workflows. It is tool agnostic and really just focuses on the relationship between tools, images and sessions. It builds upon the great work of existing tools (currently mainly Siril and Graxpert) so we can grow an ecosystem of recipes.
63
+ It is important to understand that Starbash is primarily a tool for **repeatable**, **sharable**, **semi-automated** workflows. It is tool agnostic and really just focuses on the relationship between tools, images and sessions. It builds upon the great work of existing tools (currently mainly [Siril](https://siril.org/), [GraXpert](https://graxpert.com/), [Blurxterminator](https://www.rc-astro.com/software/bxt/) and [Starnet2](https://starnetastro.com/cli-tools/)) so we can grow an ecosystem of recipes.
59
64
 
60
65
  ### Not a set of scripts
61
66
 
@@ -93,10 +98,19 @@ If you are interested in alpha-testing we ❤️ you. This README should have e
93
98
  * Repos can be on the local disk or shared via HTTPS/GitHub/etc. This is particularly useful for recipe repos.
94
99
  * [Graxpert](https://graxpert.com/) based [recipe stages](https://github.com/geeksville/starbash-recipes/tree/main/graxpert) added (support for Pixinsight-based recipes will probably be coming at some point...).
95
100
 
101
+ ### From the alpha 3 (0.3.0) release (2026/08/31)
102
+
103
+ - Added end-to-end GitHub Pages publishing, including a friendlier GitHub setup flow and automatic token refresh.
104
+ - Introduced the new processing layout with shareable per-target configuration and improved recipe/dependency handling.
105
+ - Added Starnet, BlurXTerminator, and NoiseXTerminator support, with live Siril progress and automatic star recomposition.
106
+ - Improved FITS/session reporting with focal-length and FWHM information, plus more reliable OSC stacking.
107
+ - Added safer cleanup of temporary processing files and clearer warnings when external tools are missing.
108
+ - Publishing is now about twice as fast thanks to concurrent uploads.
109
+
96
110
  ## Features coming soon
97
111
 
98
112
  * Recipe 'writers guide' documentation. Currently iterating based on usage reports 😄
99
- * Support for mono-camera workflows (the alpha only includes osc recipes).
113
+ * Support for mono-camera workflows (this alpha only includes osc recipes).
100
114
  * The target report can be used to auto-generate a human-friendly 'postable/shareable' report about that image.
101
115
  * Target reports are shareable so that you can request comments from others and others can rerender with different settings.
102
116
  * Namespaces for recipes are disambiguated to be globally unique
@@ -194,6 +208,23 @@ If you don't want the automated processing you can still ask Starbash to prepare
194
208
 
195
209
  ![siril session](https://raw.githubusercontent.com/geeksville/starbash/refs/heads/main/doc/vhs/process-siril.gif)
196
210
 
211
+ ### Fully extensible/repeatable/sharable workflows
212
+
213
+ Early user guide [here](doc/toml/guide.md).
214
+
215
+ ### Publish a shareable website
216
+
217
+ Generate a local GitHub Pages-compatible site or publish processed targets to
218
+ your personal public `starbash-public` repository. The first time you run this command
219
+ it will walk you through creating a (free) account and signing into github:
220
+
221
+ ```text
222
+ sb publish github # Publish to github
223
+ ```
224
+
225
+ See the [GitHub publishing guide](doc/publish/github.md) for prerequisites,
226
+ preview instructions, authentication, and troubleshooting.
227
+
197
228
  ## Supported commands
198
229
 
199
230
  ### Repository Management
@@ -242,6 +273,8 @@ Starbash is a tool agnostic workflow manager. But it wouldn't be possible witho
242
273
 
243
274
  * [Siril](https://siril.org/)
244
275
  * [Graxpert](https://graxpert.com/) - for background and noise elimination
276
+ * [blur exterminator / noise exterminator](https://www.rc-astro.com/stand-alone-rc-astro-tools/)
277
+ * [starnet](https://starnetastro.com/cli-tools/) - for star removal
245
278
  * [Python](https://www.python.org/) (you can add Python code to recipes if necessary)
246
279
 
247
280
  ## Credits
@@ -258,6 +291,17 @@ We accept pull-requests and enjoy discussing possible new development directions
258
291
 
259
292
  [Click here](https://raw.githubusercontent.com/geeksville/starbash/refs/heads/main/doc/development.md) for the current work in progress developer docs. They will get better before our beta release...
260
293
 
294
+ ## AI slop and development
295
+
296
+ I'm okay with using AI tools to help make code. In fact, I used them a fair amount so far on this project (one of my first experiments with not writing all my code 'by hand'). So far it has been pretty fun.
297
+
298
+ However, in some of my other open-source projects, I've seen the current hell PR management is becoming. So I'd **love** any code contributions y'all want to make (and I promise to be kind) but:
299
+
300
+ * Please only send in PRs **you** are willing to sign off as 'nicely written' (using your experience as an engineer). If your little AI buddy made something a bit ugly, please iterate with it first to make it not ugly.
301
+ * Send in PRs that are fairly 'atomic' (touch just the code they need to touch for one nicely defined feature or bug-fix)
302
+ * Only send in tested code you've run on real hardware (not just the simulator)
303
+ * If you are new at making software: no problem! We can talk in the pull-request and make it better.
304
+
261
305
  ## License
262
306
 
263
307
  Copyright 2025 Kevin Hester, kevinh@geeksville.com.
@@ -7,15 +7,16 @@
7
7
  A tool for automating/standardizing/sharing astrophotography workflows.
8
8
 
9
9
  ## What is starbash?
10
+ <img src="https://raw.githubusercontent.com/geeksville/starbash/refs/heads/main/doc/icon/generated/web/icon-192.png" alt="Starbash: Astrophotography workflows simplified" width="30%" align="right" style="margin-bottom: 20px;">
10
11
 
11
- <img src="https://raw.githubusercontent.com/geeksville/starbash/refs/heads/main/doc/img/icon.jpg" alt="Starbash: Astrophotography workflows simplified" width="30%" align="right" style="margin-bottom: 20px;">
12
-
13
- * Automatic - with sensible defaults that you can change as needed. Just a few keystrokes to preprocess an entire repo of raw images.
14
- * Easy - provides a 'seestar-like' autoprocessing all your sessions (by default). You can optionally do manual postprocessing with all this 'grunt work' preprocessing automated.
12
+ * Automatic - with sensible defaults that you can change as needed. Just a few keystrokes to auto-process an **entire** repo of raw images. It uses sensible customizable defaults - you can optionally tweak parameters and reprocess as needed.
13
+ * Easy - provides a 'seestar-like' autoprocessing all your sessions (by default). You can optionally do manual postprocessing with all this 'grunt work' default processing automated.
15
14
  * Fast<sup>1</sup> - even with large image repositories. Automatic master bias and flat generation. Automatic preprocessing/ stacking/background-elimination with reasonable defaults.
16
- * Multi-session - by default. So your workflows can stack from multiple nights (and still use the correct flats etc...).
15
+ * Multi-session - by default. So your workflows can stack from multiple nights (and still use/auto-generate the correct flats, darks/biases etc...).
17
16
  * Shareable - you can share/use recipes for image preprocessing flows. The eventual goal is a transition away from opaque burried scripts. Recipes can come from multiple repos and you or other orgs can host recipes.
17
+ * Automatic (optional) posting/creation of your generated images and workflows to a free ['github pages'](https://docs.github.com/en/pages) website. [Sample](https://geeksville.github.io/starbash-public/targets/sh2-91/).
18
18
  * Attribution (by default) - a full set of contributions to final image can be tracked: instrument, raw images, processed-by, recipes-by/version etc...
19
+ * Full session/FITS aware history - select targets by name, date-range, instrument etc...
19
20
 
20
21
  (This project is currently 'alpha' and missing recipes for some workflows, but adding new recipes is easy and we're happy to help. Please file a GitHub issue if your images are not auto-processed and we'll work out a fix.)
21
22
 
@@ -25,7 +26,7 @@ A tool for automating/standardizing/sharing astrophotography workflows.
25
26
  ## What is starbash NOT
26
27
 
27
28
  ### Not a new image processing tool (like Siril)
28
- It is important to understand that Starbash is primarily a tool for **repeatable**, **sharable**, **semi-automated** workflows. It is tool agnostic and really just focuses on the relationship between tools, images and sessions. It builds upon the great work of existing tools (currently mainly Siril and Graxpert) so we can grow an ecosystem of recipes.
29
+ It is important to understand that Starbash is primarily a tool for **repeatable**, **sharable**, **semi-automated** workflows. It is tool agnostic and really just focuses on the relationship between tools, images and sessions. It builds upon the great work of existing tools (currently mainly [Siril](https://siril.org/), [GraXpert](https://graxpert.com/), [Blurxterminator](https://www.rc-astro.com/software/bxt/) and [Starnet2](https://starnetastro.com/cli-tools/)) so we can grow an ecosystem of recipes.
29
30
 
30
31
  ### Not a set of scripts
31
32
 
@@ -63,10 +64,19 @@ If you are interested in alpha-testing we ❤️ you. This README should have e
63
64
  * Repos can be on the local disk or shared via HTTPS/GitHub/etc. This is particularly useful for recipe repos.
64
65
  * [Graxpert](https://graxpert.com/) based [recipe stages](https://github.com/geeksville/starbash-recipes/tree/main/graxpert) added (support for Pixinsight-based recipes will probably be coming at some point...).
65
66
 
67
+ ### From the alpha 3 (0.3.0) release (2026/08/31)
68
+
69
+ - Added end-to-end GitHub Pages publishing, including a friendlier GitHub setup flow and automatic token refresh.
70
+ - Introduced the new processing layout with shareable per-target configuration and improved recipe/dependency handling.
71
+ - Added Starnet, BlurXTerminator, and NoiseXTerminator support, with live Siril progress and automatic star recomposition.
72
+ - Improved FITS/session reporting with focal-length and FWHM information, plus more reliable OSC stacking.
73
+ - Added safer cleanup of temporary processing files and clearer warnings when external tools are missing.
74
+ - Publishing is now about twice as fast thanks to concurrent uploads.
75
+
66
76
  ## Features coming soon
67
77
 
68
78
  * Recipe 'writers guide' documentation. Currently iterating based on usage reports 😄
69
- * Support for mono-camera workflows (the alpha only includes osc recipes).
79
+ * Support for mono-camera workflows (this alpha only includes osc recipes).
70
80
  * The target report can be used to auto-generate a human-friendly 'postable/shareable' report about that image.
71
81
  * Target reports are shareable so that you can request comments from others and others can rerender with different settings.
72
82
  * Namespaces for recipes are disambiguated to be globally unique
@@ -164,6 +174,23 @@ If you don't want the automated processing you can still ask Starbash to prepare
164
174
 
165
175
  ![siril session](https://raw.githubusercontent.com/geeksville/starbash/refs/heads/main/doc/vhs/process-siril.gif)
166
176
 
177
+ ### Fully extensible/repeatable/sharable workflows
178
+
179
+ Early user guide [here](doc/toml/guide.md).
180
+
181
+ ### Publish a shareable website
182
+
183
+ Generate a local GitHub Pages-compatible site or publish processed targets to
184
+ your personal public `starbash-public` repository. The first time you run this command
185
+ it will walk you through creating a (free) account and signing into github:
186
+
187
+ ```text
188
+ sb publish github # Publish to github
189
+ ```
190
+
191
+ See the [GitHub publishing guide](doc/publish/github.md) for prerequisites,
192
+ preview instructions, authentication, and troubleshooting.
193
+
167
194
  ## Supported commands
168
195
 
169
196
  ### Repository Management
@@ -212,6 +239,8 @@ Starbash is a tool agnostic workflow manager. But it wouldn't be possible witho
212
239
 
213
240
  * [Siril](https://siril.org/)
214
241
  * [Graxpert](https://graxpert.com/) - for background and noise elimination
242
+ * [blur exterminator / noise exterminator](https://www.rc-astro.com/stand-alone-rc-astro-tools/)
243
+ * [starnet](https://starnetastro.com/cli-tools/) - for star removal
215
244
  * [Python](https://www.python.org/) (you can add Python code to recipes if necessary)
216
245
 
217
246
  ## Credits
@@ -228,6 +257,17 @@ We accept pull-requests and enjoy discussing possible new development directions
228
257
 
229
258
  [Click here](https://raw.githubusercontent.com/geeksville/starbash/refs/heads/main/doc/development.md) for the current work in progress developer docs. They will get better before our beta release...
230
259
 
260
+ ## AI slop and development
261
+
262
+ I'm okay with using AI tools to help make code. In fact, I used them a fair amount so far on this project (one of my first experiments with not writing all my code 'by hand'). So far it has been pretty fun.
263
+
264
+ However, in some of my other open-source projects, I've seen the current hell PR management is becoming. So I'd **love** any code contributions y'all want to make (and I promise to be kind) but:
265
+
266
+ * Please only send in PRs **you** are willing to sign off as 'nicely written' (using your experience as an engineer). If your little AI buddy made something a bit ugly, please iterate with it first to make it not ugly.
267
+ * Send in PRs that are fairly 'atomic' (touch just the code they need to touch for one nicely defined feature or bug-fix)
268
+ * Only send in tested code you've run on real hardware (not just the simulator)
269
+ * If you are new at making software: no problem! We can talk in the pull-request and make it better.
270
+
231
271
  ## License
232
272
 
233
273
  Copyright 2025 Kevin Hester, kevinh@geeksville.com.
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "starbash"
3
- version = "0.2.7"
3
+ version = "0.3.1"
4
4
  description = "A tool for automating/standardizing/sharing astrophotography workflows."
5
5
  authors = ["Kevin Hester <kevinh@geeksville.com>"]
6
6
  readme = "README.md"
@@ -21,10 +21,17 @@ restrictedpython = ">=8.1,<9.0"
21
21
  astropy = ">=7.1.1,<8.0.0"
22
22
  platformdirs = ">=4.5.0,<5.0.0"
23
23
  typer = "^0.20.0"
24
+ # Typer 0.20.1 still imports Click's deprecated stream helpers. Click 8.5
25
+ # warns about those imports, so keep the compatible pre-8.5 release line until
26
+ # Typer removes that dependency on deprecated APIs.
27
+ click = ">=8.0,<8.5"
24
28
  sentry-sdk = "^2.42.1"
25
29
  update-checker = "^0.18.0"
26
30
  doit = "^0.36.0"
27
31
  textual = "^6.8.0"
32
+ jinja2 = ">=3.1,<4.0"
33
+ pygal = ">=3.0,<4.0"
34
+ keyring = ">=25.6,<26.0"
28
35
 
29
36
  # Note: to use graxpert from the local tree rather than pypi use:
30
37
  # graxpert = {path = "GraXpert", extras = ["cpuonly"], develop = true}
@@ -45,6 +52,9 @@ ruff = "^0.14.4"
45
52
  basedpyright = "^1.33.0"
46
53
  textual-dev = "^1.8.0"
47
54
 
55
+ # Adds the `graph` command to doit (GraphViz output) for `sb process doit graph`.
56
+ doit-graph = "^0.3.0"
57
+
48
58
  # We don't currently use this text based sql client
49
59
  # harlequin = "^2.4.1"
50
60
 
@@ -29,7 +29,7 @@ def normalize_target_name(name: str | None) -> str | None:
29
29
  """Converts a target name to an any filesystem-safe format by removing spaces and other noise"""
30
30
  if name is None:
31
31
  return None
32
- return name.replace(" ", "").replace("(", "").replace(")", "").lower()
32
+ return name.replace("-", " ").replace(" ", "").replace("(", "").replace(")", "").lower()
33
33
 
34
34
 
35
35
  def pre_normalize(name: str) -> str:
@@ -75,7 +75,6 @@ def analytics_shutdown() -> None:
75
75
 
76
76
  def is_development_environment() -> bool:
77
77
  """Detect if running in a development environment."""
78
-
79
78
  # Check for explicit environment variable
80
79
  if os.getenv("SENTRY_ENVIRONMENT") == "development":
81
80
  return True
@@ -139,7 +138,11 @@ class NopAnalytics:
139
138
 
140
139
 
141
140
  def analytics_start_span(**kwargs: Any) -> Any:
142
- """Start an analytics/tracing span if analytics is enabled, otherwise return a no-op context manager."""
141
+ """Start an analytics/tracing span if analytics is enabled, otherwise return a no-op context manager.
142
+
143
+ arguments (example):
144
+ name="operation-name", op="category"
145
+ """
143
146
  if analytics_allowed:
144
147
  import sentry_sdk
145
148
 
@@ -10,7 +10,6 @@ from typing import Any
10
10
 
11
11
  import rich.console
12
12
  import typer
13
- from astropy.io import fits
14
13
  from rich.logging import RichHandler
15
14
  from rich.progress import track
16
15
  from toml_repo import Repo, RepoManager, get_config_suffix
@@ -39,6 +38,7 @@ from starbash.database import (
39
38
  )
40
39
  from starbash.dwarf3 import extend_dwarf3_headers
41
40
  from starbash.exception import NonSoftwareError, UserHandledError, raise_missing_repo
41
+ from starbash.fits import read_fits_header
42
42
  from starbash.linux import linux_init
43
43
  from starbash.os import symlink_or_copy
44
44
  from starbash.paths import get_user_config_dir, get_user_config_path
@@ -719,31 +719,24 @@ class Starbash:
719
719
 
720
720
  if not found or force:
721
721
  # Read and log the primary header (HDU 0)
722
- with fits.open(str(f), memmap=False) as hdul:
723
- # convert headers to dict
724
- hdu0: Any = hdul[0]
725
- header = hdu0.header
726
- if type(header).__name__ == "Unknown":
727
- raise ValueError("FITS header has Unknown type: %s", f)
728
-
729
- items = header.items()
730
- headers = {}
731
- for key, value in items:
732
- if (not whitelist) or (key in whitelist):
733
- headers[key] = value
734
-
735
- # Add any extra metadata if it was missing in the existing headers
736
- for key, value in extra_metadata.items():
737
- headers.setdefault(key, value)
738
-
739
- # Store relative path in database (use POSIX-style forward slashes for consistency)
740
- headers["path"] = relative_path_str
741
- if self._extend_image_header(headers, f):
742
- image_doc_id = self.db.upsert_image(headers, repo.url)
743
- headers[Database.ID_KEY] = image_doc_id
744
-
745
- if not found: # allow a session to also be created
746
- return headers
722
+ headers = read_fits_header(f)
723
+ if not whitelist:
724
+ headers = dict(headers)
725
+ else:
726
+ headers = {key: value for key, value in headers.items() if key in whitelist}
727
+
728
+ # Add any extra metadata if it was missing in the existing headers
729
+ for key, value in extra_metadata.items():
730
+ headers.setdefault(key, value)
731
+
732
+ # Store relative path in database (use POSIX-style forward slashes for consistency)
733
+ headers["path"] = relative_path_str
734
+ if self._extend_image_header(headers, f):
735
+ image_doc_id = self.db.upsert_image(headers, repo.url)
736
+ headers[Database.ID_KEY] = image_doc_id
737
+
738
+ if not found: # allow a session to also be created
739
+ return headers
747
740
 
748
741
  return None
749
742
 
@@ -781,6 +774,10 @@ class Starbash:
781
774
  all_files,
782
775
  description=f"Indexing {repo.url}...",
783
776
  ):
777
+ if ".sbignore" in str(f):
778
+ logging.warning('Skipping "%s": path contains ".sbignore".', f)
779
+ continue
780
+
784
781
  try:
785
782
  # progress.console.print(f"Indexing {f}...")
786
783
  if repo_kind == "master":
@@ -90,7 +90,7 @@ def siril(
90
90
  else:
91
91
  session_to_dir(candidates[0].candidate, subdir)
92
92
 
93
- # FIXME put an starbash.toml repo file in output_dir (with info about what we picked/why)
93
+ # FIXME put a processed-target metadata file in output_dir (with info about what we picked/why)
94
94
  # to allow users to override/reprocess with the same settings.
95
95
  # Also FIXME, check for the existence of such a file
96
96
 
@@ -264,6 +264,8 @@ def doit(
264
264
  from starbash import console
265
265
 
266
266
  console.print("[red]This command is currently for developers only...[/red]")
267
+ # Build the full task tree so doit subcommands (graph/list/info) have data to show.
268
+ proc.load_tasks_for_inspection()
267
269
  proc.doit.run(ctx.args)
268
270
 
269
271