starbash 0.1.0__py3-none-any.whl → 0.1.3__py3-none-any.whl
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.
Potentially problematic release.
This version of starbash might be problematic. Click here for more details.
- starbash/analytics.py +121 -0
- starbash/app.py +223 -38
- starbash/commands/repo.py +103 -21
- starbash/commands/selection.py +137 -0
- starbash/commands/user.py +63 -0
- starbash/database.py +476 -25
- starbash/defaults/__init__.py +0 -0
- starbash/{appdefaults.sb.toml → defaults/starbash.toml} +5 -45
- starbash/main.py +142 -13
- starbash/paths.py +38 -0
- starbash/repo/manager.py +129 -59
- starbash/selection.py +251 -0
- starbash/templates/__init__.py +0 -0
- starbash/templates/userconfig.toml +53 -0
- starbash/url.py +9 -0
- starbash-0.1.3.dist-info/METADATA +114 -0
- starbash-0.1.3.dist-info/RECORD +24 -0
- {starbash-0.1.0.dist-info → starbash-0.1.3.dist-info}/WHEEL +1 -1
- starbash-0.1.0.dist-info/METADATA +0 -82
- starbash-0.1.0.dist-info/RECORD +0 -15
- {starbash-0.1.0.dist-info → starbash-0.1.3.dist-info}/entry_points.txt +0 -0
- {starbash-0.1.0.dist-info → starbash-0.1.3.dist-info/licenses}/LICENSE +0 -0
starbash/selection.py
ADDED
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
"""Selection state management for filtering sessions and targets."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import json
|
|
6
|
+
import logging
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
from typing import Any, Optional
|
|
9
|
+
from datetime import datetime
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class Selection:
|
|
13
|
+
"""Manages the current selection state for filtering sessions and targets.
|
|
14
|
+
|
|
15
|
+
This class maintains persistent state about what the user has selected:
|
|
16
|
+
- Target names
|
|
17
|
+
- Date ranges
|
|
18
|
+
- Filters
|
|
19
|
+
- Image types
|
|
20
|
+
- Telescope names
|
|
21
|
+
|
|
22
|
+
The selection state is saved to disk and can be used to build database queries.
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
def __init__(self, state_file: Path):
|
|
26
|
+
"""Initialize the Selection with a state file path.
|
|
27
|
+
|
|
28
|
+
Args:
|
|
29
|
+
state_file: Path to the JSON file where selection state is persisted
|
|
30
|
+
"""
|
|
31
|
+
self.state_file = state_file
|
|
32
|
+
self.targets: list[str] = []
|
|
33
|
+
self.date_start: Optional[str] = None
|
|
34
|
+
self.date_end: Optional[str] = None
|
|
35
|
+
self.filters: list[str] = []
|
|
36
|
+
self.image_types: list[str] = []
|
|
37
|
+
self.telescopes: list[str] = []
|
|
38
|
+
|
|
39
|
+
# Load existing state if it exists
|
|
40
|
+
self._load()
|
|
41
|
+
|
|
42
|
+
def _load(self) -> None:
|
|
43
|
+
"""Load selection state from disk."""
|
|
44
|
+
if self.state_file.exists():
|
|
45
|
+
try:
|
|
46
|
+
with open(self.state_file, "r") as f:
|
|
47
|
+
data = json.load(f)
|
|
48
|
+
self.targets = data.get("targets", [])
|
|
49
|
+
self.date_start = data.get("date_start")
|
|
50
|
+
self.date_end = data.get("date_end")
|
|
51
|
+
self.filters = data.get("filters", [])
|
|
52
|
+
self.image_types = data.get("image_types", [])
|
|
53
|
+
self.telescopes = data.get("telescopes", [])
|
|
54
|
+
logging.debug(f"Loaded selection state from {self.state_file}")
|
|
55
|
+
except Exception as e:
|
|
56
|
+
logging.warning(f"Failed to load selection state: {e}")
|
|
57
|
+
|
|
58
|
+
def _save(self) -> None:
|
|
59
|
+
"""Save selection state to disk."""
|
|
60
|
+
try:
|
|
61
|
+
# Ensure parent directory exists
|
|
62
|
+
self.state_file.parent.mkdir(parents=True, exist_ok=True)
|
|
63
|
+
|
|
64
|
+
data = {
|
|
65
|
+
"targets": self.targets,
|
|
66
|
+
"date_start": self.date_start,
|
|
67
|
+
"date_end": self.date_end,
|
|
68
|
+
"filters": self.filters,
|
|
69
|
+
"image_types": self.image_types,
|
|
70
|
+
"telescopes": self.telescopes,
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
with open(self.state_file, "w") as f:
|
|
74
|
+
json.dump(data, f, indent=2)
|
|
75
|
+
logging.debug(f"Saved selection state to {self.state_file}")
|
|
76
|
+
except Exception as e:
|
|
77
|
+
logging.error(f"Failed to save selection state: {e}")
|
|
78
|
+
|
|
79
|
+
def clear(self) -> None:
|
|
80
|
+
"""Clear all selection criteria (select everything)."""
|
|
81
|
+
self.targets = []
|
|
82
|
+
self.date_start = None
|
|
83
|
+
self.date_end = None
|
|
84
|
+
self.filters = []
|
|
85
|
+
self.image_types = []
|
|
86
|
+
self.telescopes = []
|
|
87
|
+
self._save()
|
|
88
|
+
|
|
89
|
+
def add_target(self, target: str) -> None:
|
|
90
|
+
"""Add a target to the selection.
|
|
91
|
+
|
|
92
|
+
Args:
|
|
93
|
+
target: Target name to add to the selection
|
|
94
|
+
"""
|
|
95
|
+
if target not in self.targets:
|
|
96
|
+
self.targets.append(target)
|
|
97
|
+
self._save()
|
|
98
|
+
|
|
99
|
+
def remove_target(self, target: str) -> None:
|
|
100
|
+
"""Remove a target from the selection.
|
|
101
|
+
|
|
102
|
+
Args:
|
|
103
|
+
target: Target name to remove from the selection
|
|
104
|
+
"""
|
|
105
|
+
if target in self.targets:
|
|
106
|
+
self.targets.remove(target)
|
|
107
|
+
self._save()
|
|
108
|
+
|
|
109
|
+
def add_telescope(self, telescope: str) -> None:
|
|
110
|
+
"""Add a telescope to the selection.
|
|
111
|
+
|
|
112
|
+
Args:
|
|
113
|
+
telescope: Telescope name to add to the selection
|
|
114
|
+
"""
|
|
115
|
+
if telescope not in self.telescopes:
|
|
116
|
+
self.telescopes.append(telescope)
|
|
117
|
+
self._save()
|
|
118
|
+
|
|
119
|
+
def remove_telescope(self, telescope: str) -> None:
|
|
120
|
+
"""Remove a telescope from the selection.
|
|
121
|
+
|
|
122
|
+
Args:
|
|
123
|
+
telescope: Telescope name to remove from the selection
|
|
124
|
+
"""
|
|
125
|
+
if telescope in self.telescopes:
|
|
126
|
+
self.telescopes.remove(telescope)
|
|
127
|
+
self._save()
|
|
128
|
+
|
|
129
|
+
def set_date_range(
|
|
130
|
+
self, start: Optional[str] = None, end: Optional[str] = None
|
|
131
|
+
) -> None:
|
|
132
|
+
"""Set the date range for the selection.
|
|
133
|
+
|
|
134
|
+
Args:
|
|
135
|
+
start: ISO format date string for start of range (inclusive)
|
|
136
|
+
end: ISO format date string for end of range (inclusive)
|
|
137
|
+
"""
|
|
138
|
+
self.date_start = start
|
|
139
|
+
self.date_end = end
|
|
140
|
+
self._save()
|
|
141
|
+
|
|
142
|
+
def add_filter(self, filter_name: str) -> None:
|
|
143
|
+
"""Add a filter to the selection.
|
|
144
|
+
|
|
145
|
+
Args:
|
|
146
|
+
filter_name: Filter name to add to the selection
|
|
147
|
+
"""
|
|
148
|
+
if filter_name not in self.filters:
|
|
149
|
+
self.filters.append(filter_name)
|
|
150
|
+
self._save()
|
|
151
|
+
|
|
152
|
+
def remove_filter(self, filter_name: str) -> None:
|
|
153
|
+
"""Remove a filter from the selection.
|
|
154
|
+
|
|
155
|
+
Args:
|
|
156
|
+
filter_name: Filter name to remove from the selection
|
|
157
|
+
"""
|
|
158
|
+
if filter_name in self.filters:
|
|
159
|
+
self.filters.remove(filter_name)
|
|
160
|
+
self._save()
|
|
161
|
+
|
|
162
|
+
def is_empty(self) -> bool:
|
|
163
|
+
"""Check if the selection has any criteria set.
|
|
164
|
+
|
|
165
|
+
Returns:
|
|
166
|
+
True if no selection criteria are active (selecting everything)
|
|
167
|
+
"""
|
|
168
|
+
return (
|
|
169
|
+
not self.targets
|
|
170
|
+
and self.date_start is None
|
|
171
|
+
and self.date_end is None
|
|
172
|
+
and not self.filters
|
|
173
|
+
and not self.image_types
|
|
174
|
+
and not self.telescopes
|
|
175
|
+
)
|
|
176
|
+
|
|
177
|
+
def get_query_conditions(self) -> dict[str, Any]:
|
|
178
|
+
"""Build query conditions based on the current selection.
|
|
179
|
+
|
|
180
|
+
Returns:
|
|
181
|
+
Dictionary of query conditions that can be used with Database methods.
|
|
182
|
+
Special keys:
|
|
183
|
+
- 'date_start': ISO date string for start of range
|
|
184
|
+
- 'date_end': ISO date string for end of range
|
|
185
|
+
"""
|
|
186
|
+
conditions = {}
|
|
187
|
+
|
|
188
|
+
# Note: This returns a simplified conditions dict.
|
|
189
|
+
# The actual query building will be enhanced later to support
|
|
190
|
+
# complex queries with date ranges, multiple targets, etc.
|
|
191
|
+
|
|
192
|
+
if self.targets:
|
|
193
|
+
# For now, just use the first target
|
|
194
|
+
# TODO: Support multiple targets in queries
|
|
195
|
+
conditions["OBJECT"] = self.targets[0] if len(self.targets) == 1 else None
|
|
196
|
+
|
|
197
|
+
if self.filters:
|
|
198
|
+
# For now, just use the first filter
|
|
199
|
+
# TODO: Support multiple filters in queries
|
|
200
|
+
conditions["FILTER"] = self.filters[0] if len(self.filters) == 1 else None
|
|
201
|
+
|
|
202
|
+
if self.telescopes:
|
|
203
|
+
# For now, just use the first telescope
|
|
204
|
+
# TODO: Support multiple telescopes in queries
|
|
205
|
+
conditions["TELESCOP"] = (
|
|
206
|
+
self.telescopes[0] if len(self.telescopes) == 1 else None
|
|
207
|
+
)
|
|
208
|
+
|
|
209
|
+
# Add date range conditions
|
|
210
|
+
if self.date_start:
|
|
211
|
+
conditions["date_start"] = self.date_start
|
|
212
|
+
if self.date_end:
|
|
213
|
+
conditions["date_end"] = self.date_end
|
|
214
|
+
|
|
215
|
+
return conditions
|
|
216
|
+
|
|
217
|
+
def summary(self) -> dict[str, Any]:
|
|
218
|
+
"""Get a summary of the current selection state.
|
|
219
|
+
|
|
220
|
+
Returns:
|
|
221
|
+
Dictionary with human-readable summary of selection criteria
|
|
222
|
+
"""
|
|
223
|
+
if self.is_empty():
|
|
224
|
+
return {
|
|
225
|
+
"status": "all",
|
|
226
|
+
"message": "No filters active - selecting all sessions",
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
summary = {"status": "filtered", "criteria": []}
|
|
230
|
+
|
|
231
|
+
if self.targets:
|
|
232
|
+
summary["criteria"].append(f"Targets: {', '.join(self.targets)}")
|
|
233
|
+
|
|
234
|
+
if self.telescopes:
|
|
235
|
+
summary["criteria"].append(f"Telescopes: {', '.join(self.telescopes)}")
|
|
236
|
+
|
|
237
|
+
if self.date_start or self.date_end:
|
|
238
|
+
date_range = []
|
|
239
|
+
if self.date_start:
|
|
240
|
+
date_range.append(f"from {self.date_start}")
|
|
241
|
+
if self.date_end:
|
|
242
|
+
date_range.append(f"to {self.date_end}")
|
|
243
|
+
summary["criteria"].append(f"Date: {' '.join(date_range)}")
|
|
244
|
+
|
|
245
|
+
if self.filters:
|
|
246
|
+
summary["criteria"].append(f"Filters: {', '.join(self.filters)}")
|
|
247
|
+
|
|
248
|
+
if self.image_types:
|
|
249
|
+
summary["criteria"].append(f"Image types: {', '.join(self.image_types)}")
|
|
250
|
+
|
|
251
|
+
return summary
|
|
File without changes
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# This is your Starbash user configuration file. It can be used to provide default settings
|
|
2
|
+
# to workflows.
|
|
3
|
+
|
|
4
|
+
# (or wherever is appropriate for the user's platform).
|
|
5
|
+
|
|
6
|
+
[repo]
|
|
7
|
+
kind = "preferences"
|
|
8
|
+
|
|
9
|
+
[analytics]
|
|
10
|
+
# enabled = true # default is true - change to false if you don't want any analytics/crash-reports
|
|
11
|
+
# include_user = false # default is false - change to true if you'd like your email added to crash reports/analytics
|
|
12
|
+
|
|
13
|
+
[user]
|
|
14
|
+
# default author info
|
|
15
|
+
# name = "Your Name"
|
|
16
|
+
# email = "youremail@somedomain.com"
|
|
17
|
+
# website = "https://yourwebsite"
|
|
18
|
+
# license = "FIXME eventually applied as the default license for generated images Creative commons etc..."
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
# [config]
|
|
22
|
+
# Filters fits fields should we store in our DB cache. By default we store all fits headers.
|
|
23
|
+
#fits-whitelist = [
|
|
24
|
+
# "INSTRUME",
|
|
25
|
+
# "FILTER",
|
|
26
|
+
# "TELESCOP",
|
|
27
|
+
# "IMAGETYP",
|
|
28
|
+
# "DATE-OBS",
|
|
29
|
+
# "DATE-LOC",
|
|
30
|
+
# "DATE",
|
|
31
|
+
# "EXPTIME", # Use use this instead of EXPOSURE because it seems like not all apps use EXPOSURE (Siril)
|
|
32
|
+
# "FWHEEL",
|
|
33
|
+
# "OBJECT",
|
|
34
|
+
# "RA", # we ignore the text version OBJCTRA / OBJCTDEC
|
|
35
|
+
# "DEC",
|
|
36
|
+
# "OBJCTROT",
|
|
37
|
+
# "FOCPOS",
|
|
38
|
+
# "SITELAT",
|
|
39
|
+
# "SITELON",
|
|
40
|
+
# "SITEELEV",
|
|
41
|
+
# "NAXIS1",
|
|
42
|
+
# "NAXIS2",
|
|
43
|
+
# "SWCREATE",
|
|
44
|
+
# "XBINNING",
|
|
45
|
+
# "YBINNING",
|
|
46
|
+
# "GAIN",
|
|
47
|
+
# "CCD-TEMP",
|
|
48
|
+
# "SET-TEMP",
|
|
49
|
+
# "AMBTEMP",
|
|
50
|
+
#]
|
|
51
|
+
|
|
52
|
+
# DO NOT edit below this line, they are managed automatically via
|
|
53
|
+
# the "sb repo add" etc... commands.
|
starbash/url.py
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
project = "https://github.com/geeksville/starbash"
|
|
2
|
+
analytics_docs = f"{project}/blob/main/doc/analytics.md"
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
def new_issue(report_id: str | None = None) -> str:
|
|
6
|
+
if report_id:
|
|
7
|
+
return f"{project}/issues/new?body=Please%20describe%20the%20problem%2C%20but%20include%20this%3A%0ACrash%20ID%20{report_id}"
|
|
8
|
+
else:
|
|
9
|
+
return f"{project}/issues/new?body=Please%20describe%20the%20problem"
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: starbash
|
|
3
|
+
Version: 0.1.3
|
|
4
|
+
Summary:
|
|
5
|
+
License-File: LICENSE
|
|
6
|
+
Author: Kevin Hester
|
|
7
|
+
Author-email: kevinh@geeksville.com
|
|
8
|
+
Requires-Python: >=3.12,<3.15
|
|
9
|
+
Classifier: Programming Language :: Python :: 3
|
|
10
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
13
|
+
Requires-Dist: astropy (>=7.1.1,<8.0.0)
|
|
14
|
+
Requires-Dist: multidict (>=6.7.0,<7.0.0)
|
|
15
|
+
Requires-Dist: platformdirs (>=4.5.0,<5.0.0)
|
|
16
|
+
Requires-Dist: restrictedpython (>=8.1,<9.0)
|
|
17
|
+
Requires-Dist: rich (>=14.2.0,<15.0.0)
|
|
18
|
+
Requires-Dist: sentry-sdk (>=2.42.1,<3.0.0)
|
|
19
|
+
Requires-Dist: tomlkit (>=0.13.3,<0.14.0)
|
|
20
|
+
Requires-Dist: typer (>=0.20.0,<0.21.0)
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
|
|
23
|
+
# Starbash
|
|
24
|
+
|
|
25
|
+

|
|
26
|
+

|
|
27
|
+
|
|
28
|
+

|
|
29
|
+
|
|
30
|
+
A tool for automating/standardizing/sharing astrophotography workflows.
|
|
31
|
+
|
|
32
|
+
# Current status
|
|
33
|
+
|
|
34
|
+
Not quite ready 😊. But making good progress.
|
|
35
|
+
|
|
36
|
+
See the current [TODO](TODO.md) file for work items. I'll be looking for pre-alpha testers/feedback soon.
|
|
37
|
+
|
|
38
|
+
## Current features
|
|
39
|
+
|
|
40
|
+
* Automatically recognizes and auto-parses the default NINA, Asiair and Seestar raw file repos (adding support for other layouts is easy)
|
|
41
|
+
* Multisession support by default (including automatic selection of correct flats, biases and dark frames)
|
|
42
|
+
* 'Repos' can contain raw files, generated masters, preprocessed files, or recipes.
|
|
43
|
+
|
|
44
|
+
## Features coming soon
|
|
45
|
+
|
|
46
|
+
* Automatically performs **complete** preprocessing on OSC (broadband, narrowband or dual Duo filter), Mono (LRGB, SHO) data. i.e. give you 'seestar level' auto-preprocessing, so you only need to do the (optional) custom post-processing.
|
|
47
|
+
* Generates a per target report/config file which can be customized if the detected defaults or preprocessing are not what you want
|
|
48
|
+
* 'Recipes' provide repeatable/human-readable/sharable descriptions of all processing steps
|
|
49
|
+
* Repos can be on the local disk or shared via HTTPS/github/etc. This is particularly useful for recipe repos
|
|
50
|
+
* Uses Siril and Graxpert for its pre-processing operations (support for Pixinsight based recipies will probably be coming at some point...)
|
|
51
|
+
* The target report can be used to auto generate a human friendly 'postable/sharable' report about that image
|
|
52
|
+
* Target reports are sharable so that you can request comments by others and others can rerender with different settings
|
|
53
|
+
|
|
54
|
+
## Installing
|
|
55
|
+
|
|
56
|
+
Currently the easiest way to install this command-line based tool is to install is via [pipx](https://pipx.pypa.io/stable/). If you don't already have pipx and you have python installed, you can auto install it by running "pip install --user pipx." If you don't have python installed see the pipx link for pipx installers for any OS.
|
|
57
|
+
|
|
58
|
+
Once pipx is installed just run:
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
pipx install starbash
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Supported commands
|
|
65
|
+
|
|
66
|
+
### Setup & Configuration
|
|
67
|
+
- `sb setup` - Configure starbash via a brief guided process
|
|
68
|
+
- `sb info` - Show user preferences location and other app info
|
|
69
|
+
|
|
70
|
+
### Repository Management
|
|
71
|
+
- `sb repo [--verbose]` - List installed repos (use `-v` for details)
|
|
72
|
+
- `sb repo add <filepath|URL>` - Add a repository
|
|
73
|
+
- `sb repo remove <REPONUM>` - Remove the indicated repo from the repo list
|
|
74
|
+
- `sb repo reindex [--force] [REPONUM]` - Reindex the specified repo (or all repos if none specified)
|
|
75
|
+
|
|
76
|
+
### User Preferences
|
|
77
|
+
- `sb user name "Your Name"` - Set name for attribution in generated images
|
|
78
|
+
- `sb user email "foo@example.com"` - Set email for attribution in generated images
|
|
79
|
+
- `sb user analytics <on|off>` - Turn analytics collection on/off
|
|
80
|
+
|
|
81
|
+
### Selection & Filtering
|
|
82
|
+
- `sb selection` - Show information about the current selection
|
|
83
|
+
- `sb selection any` - Remove all filters (select everything)
|
|
84
|
+
- `sb selection target <TARGETNAME>` - Limit selection to the named target
|
|
85
|
+
- `sb selection telescope <TELESCOPENAME>` - Limit selection to the named telescope
|
|
86
|
+
- `sb selection date <after|before|between> <DATE> [DATE]` - Limit to sessions in the specified date range
|
|
87
|
+
|
|
88
|
+
### Viewing Data
|
|
89
|
+
- `sb session` - List sessions (filtered based on the current selection)
|
|
90
|
+
- `sb target` - List targets (filtered based on the current selection)
|
|
91
|
+
- `sb instrument` - List instruments (filtered based on the current selection)
|
|
92
|
+
- `sb filter` - List all filters found in current selection
|
|
93
|
+
|
|
94
|
+
### Export & Processing
|
|
95
|
+
- `sb export <dirs|BIAS|LIGHT|DARK|FLAT> [DIRLOC]` - Export data
|
|
96
|
+
- `sb process siril` - Generate Siril directory tree and run Siril GUI
|
|
97
|
+
- `sb process auto` - Automatic processing
|
|
98
|
+
- `sb process masters` - Generate master flats, darks, and biases from available raw frames
|
|
99
|
+
|
|
100
|
+
## Supported tools (now)
|
|
101
|
+
|
|
102
|
+
* Siril
|
|
103
|
+
* Graxpert
|
|
104
|
+
* Python (you can add python code to recipies if necessary)
|
|
105
|
+
|
|
106
|
+
## Supported tools (future?)
|
|
107
|
+
|
|
108
|
+
* Pixinsight?
|
|
109
|
+
* Autostakkert?
|
|
110
|
+
|
|
111
|
+
## Developing
|
|
112
|
+
|
|
113
|
+
We try to make this project useful and friendly. If you find problems please file a github issue.
|
|
114
|
+
We accept pull-requests and enjoy discussing possible new development directions via github issues. If you might want to work on this, just describe what your interests are and we can talk about how to get it merged.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
starbash/__init__.py,sha256=co39eIssQlFxWfO3cDhp52reRy6qEyJX5u5K8OsxiDk,138
|
|
2
|
+
starbash/analytics.py,sha256=0TfiZthKRMqW38Jg1VJDjpykZXBrK33tNKuhQibkCK0,3579
|
|
3
|
+
starbash/app.py,sha256=7GdznZHSxpsQ5ZrW0nPgvSEGAwgijfpbw2rINNU1hcU,16228
|
|
4
|
+
starbash/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
|
+
starbash/commands/repo.py,sha256=UyfAD6A0fP8DV1uMRJz_NydDkP0UiHbxtceZ25_g7r8,4641
|
|
6
|
+
starbash/commands/selection.py,sha256=gI6LSvs8CW5t2pW0peCLL5O87WqLkS9LDuaK2gI1NeM,4600
|
|
7
|
+
starbash/commands/user.py,sha256=JpwYa9cYxm2gkekcxrj7CsbJO7fgbGwRxmjvpua0BOY,1598
|
|
8
|
+
starbash/database.py,sha256=59u78srp3G4Ya0HOIP2qOokp2osQPFgUQM_8TbfIjPg,17936
|
|
9
|
+
starbash/defaults/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
|
+
starbash/defaults/starbash.toml,sha256=WWM7igZ-GXk4bM7qSFtjHaVh7beqisCkeVBjs7c2G6I,1774
|
|
11
|
+
starbash/main.py,sha256=8D4Xa0WwM3TDW-HkaQUTo79Uh8hAXgOJYyEEkUgC7HQ,5391
|
|
12
|
+
starbash/paths.py,sha256=BKKnSXt3tOh16o7ljDcQLtWKIiepEmud9JFtzRwDHtg,1317
|
|
13
|
+
starbash/repo/__init__.py,sha256=TqspuLjPSNnO38tvCGa0fJvvasgecHl6fE7m0-Lj8ho,148
|
|
14
|
+
starbash/repo/manager.py,sha256=NRMGmDWt8KV8OdsrgPiuQ91EPi8xlSbVtOWGgSePuOk,10944
|
|
15
|
+
starbash/selection.py,sha256=DPzUlls3n-sBqkwTUns2ZNaPi61PGnh7Z_ZQOC1jXYc,8347
|
|
16
|
+
starbash/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
17
|
+
starbash/templates/userconfig.toml,sha256=eaBMgac4RCdvlGV6cKPqRuVyF_ijfkvEF-c3LJ6_euw,1440
|
|
18
|
+
starbash/tool.py,sha256=S1kOTbeHTrA0meqwftgL0SA4VhJdZWWx2h1Wtwu1Izg,8749
|
|
19
|
+
starbash/url.py,sha256=lorxQJ27jSfzsKCb0QvpcvLiPZG55Dkd_c1JPFbni4I,402
|
|
20
|
+
starbash-0.1.3.dist-info/METADATA,sha256=zdFUMvEJQ8Aq28LTkcQDtvY_uu6G7Efy5w2FTH4IH_E,5295
|
|
21
|
+
starbash-0.1.3.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
|
|
22
|
+
starbash-0.1.3.dist-info/entry_points.txt,sha256=REQyWs8e5TJsNK7JVVWowKVoytMmKlUwuFHLTmSX4hc,67
|
|
23
|
+
starbash-0.1.3.dist-info/licenses/LICENSE,sha256=ixuiBLtpoK3iv89l7ylKkg9rs2GzF9ukPH7ynZYzK5s,35148
|
|
24
|
+
starbash-0.1.3.dist-info/RECORD,,
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.1
|
|
2
|
-
Name: starbash
|
|
3
|
-
Version: 0.1.0
|
|
4
|
-
Summary:
|
|
5
|
-
Author: Kevin Hester
|
|
6
|
-
Author-email: kevinh@geeksville.com
|
|
7
|
-
Requires-Python: >=3.12,<3.15
|
|
8
|
-
Classifier: Programming Language :: Python :: 3
|
|
9
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
10
|
-
Requires-Dist: astropy (>=7.1.1,<8.0.0)
|
|
11
|
-
Requires-Dist: multidict (>=6.7.0,<7.0.0)
|
|
12
|
-
Requires-Dist: platformdirs (>=4.5.0,<5.0.0)
|
|
13
|
-
Requires-Dist: restrictedpython (>=8.1,<9.0)
|
|
14
|
-
Requires-Dist: rich (>=14.2.0,<15.0.0)
|
|
15
|
-
Requires-Dist: tinydb (>=4.8.2,<5.0.0)
|
|
16
|
-
Requires-Dist: tomlkit (>=0.13.3,<0.14.0)
|
|
17
|
-
Requires-Dist: typer (>=0.20.0,<0.21.0)
|
|
18
|
-
Description-Content-Type: text/markdown
|
|
19
|
-
|
|
20
|
-
# Starbash
|
|
21
|
-

|
|
22
|
-
|
|
23
|
-
A tool for automating/standardizing/sharing astrophotography workflows.
|
|
24
|
-
|
|
25
|
-
# Current status
|
|
26
|
-
|
|
27
|
-
Not quite ready 😊. But making good progress.
|
|
28
|
-
|
|
29
|
-
See my personal [TODO](TODO.md) file. I'll be looking for pre-alpha testers/feedback soon.
|
|
30
|
-
|
|
31
|
-
## features
|
|
32
|
-
|
|
33
|
-
* Automatically recognizes and auto-parses the default NINA, Asiair and Seestar raw file repo layouts (adding support for other layouts is easy)
|
|
34
|
-
* Automatically performs preprocessing on OSC (broadband, narrowband or dual Duo filter), Mono (LRGB, SHO) data
|
|
35
|
-
* Multisession support by default (including auto selection of correct flats, biases and dark frames)
|
|
36
|
-
* Generates a per target report/config file which can be customized if the detected defaults are not what you want
|
|
37
|
-
* 'Recipes' provide repeatable/human-readable/sharable descriptions of all processing steps
|
|
38
|
-
* 'Repos' can contain raw files, generated masters, preprocessed files, or recipes.
|
|
39
|
-
* Repos can be on the local disk or shared via HTTPS/github/etc. This is particularly useful for recipe repos
|
|
40
|
-
|
|
41
|
-
## Supported commands
|
|
42
|
-
|
|
43
|
-
* setup - configure for you via a brief guided process
|
|
44
|
-
* info - show user preferences location and other app info
|
|
45
|
-
|
|
46
|
-
* repo add file/path|URL
|
|
47
|
-
* repo remove REPONAME|REPONUM
|
|
48
|
-
* repo list
|
|
49
|
-
* repo reindex REPONAME|REPONUM|all
|
|
50
|
-
|
|
51
|
-
* target list
|
|
52
|
-
* target select TARGETNAME
|
|
53
|
-
|
|
54
|
-
* reset - remove any filters on targets, sessions, etc...
|
|
55
|
-
|
|
56
|
-
* session list
|
|
57
|
-
* session date after DATE
|
|
58
|
-
* session date before DATE
|
|
59
|
-
|
|
60
|
-
* instrument list
|
|
61
|
-
|
|
62
|
-
* export dirs|BIAS|LIGHT|DARK|FLAT [DIRLOC]
|
|
63
|
-
|
|
64
|
-
* process auto
|
|
65
|
-
|
|
66
|
-
## Supported tools
|
|
67
|
-
|
|
68
|
-
* Siril
|
|
69
|
-
* Graxpert
|
|
70
|
-
|
|
71
|
-
# Future status
|
|
72
|
-
|
|
73
|
-
## Supported tools
|
|
74
|
-
|
|
75
|
-
* Pixinsight?
|
|
76
|
-
* Autostakkert?
|
|
77
|
-
|
|
78
|
-
## Features
|
|
79
|
-
|
|
80
|
-
* The target report can be used to auto generate a human friendly 'postable/sharable' report about that image
|
|
81
|
-
* Target reports are sharable so that you can request comments by others and others can rerender with different settings
|
|
82
|
-
|
starbash-0.1.0.dist-info/RECORD
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
starbash/__init__.py,sha256=co39eIssQlFxWfO3cDhp52reRy6qEyJX5u5K8OsxiDk,138
|
|
2
|
-
starbash/app.py,sha256=8f1OSJPlgSMri8kMFrQ6nac5M1gAgPl-FRnuXeOWMAQ,8754
|
|
3
|
-
starbash/appdefaults.sb.toml,sha256=YTUwTqg2DcDFs9VDB1gqchNqk-hg_cGlpaa134hLOJU,2606
|
|
4
|
-
starbash/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
|
-
starbash/commands/repo.py,sha256=Xg9aaaURrv45bJF5w4rsD2X5_FdeM4dp9d9xbGaG4Ds,985
|
|
6
|
-
starbash/database.py,sha256=HFJI0CAQIFfKGx3yTS7anREAcvjiNZhObwyAbD5WD48,2254
|
|
7
|
-
starbash/main.py,sha256=VNV2y8pz_NMbGXjIDuFIDbbS0Q0B5GMqKTXitFf1tb4,579
|
|
8
|
-
starbash/repo/__init__.py,sha256=TqspuLjPSNnO38tvCGa0fJvvasgecHl6fE7m0-Lj8ho,148
|
|
9
|
-
starbash/repo/manager.py,sha256=jOhN-Rx60rtueLsHLoVdvcyWTDOqfUGZN6nbbJzRntI,8586
|
|
10
|
-
starbash/tool.py,sha256=S1kOTbeHTrA0meqwftgL0SA4VhJdZWWx2h1Wtwu1Izg,8749
|
|
11
|
-
starbash-0.1.0.dist-info/LICENSE,sha256=ixuiBLtpoK3iv89l7ylKkg9rs2GzF9ukPH7ynZYzK5s,35148
|
|
12
|
-
starbash-0.1.0.dist-info/METADATA,sha256=N1fSGzjmBFEWL5V7uxbwcGbS3X_UExpxja4cZjA3KIE,2564
|
|
13
|
-
starbash-0.1.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
14
|
-
starbash-0.1.0.dist-info/entry_points.txt,sha256=REQyWs8e5TJsNK7JVVWowKVoytMmKlUwuFHLTmSX4hc,67
|
|
15
|
-
starbash-0.1.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|