setiastrosuitepro 1.7.3__py3-none-any.whl → 1.7.5__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 setiastrosuitepro might be problematic. Click here for more details.

Files changed (52) hide show
  1. setiastro/images/clonestamp.png +0 -0
  2. setiastro/saspro/__init__.py +15 -4
  3. setiastro/saspro/__main__.py +23 -5
  4. setiastro/saspro/_generated/build_info.py +2 -2
  5. setiastro/saspro/abe.py +4 -4
  6. setiastro/saspro/autostretch.py +29 -18
  7. setiastro/saspro/blemish_blaster.py +54 -14
  8. setiastro/saspro/clone_stamp.py +753 -0
  9. setiastro/saspro/gui/main_window.py +27 -6
  10. setiastro/saspro/gui/mixins/menu_mixin.py +1 -0
  11. setiastro/saspro/gui/mixins/toolbar_mixin.py +10 -15
  12. setiastro/saspro/legacy/numba_utils.py +301 -119
  13. setiastro/saspro/numba_utils.py +998 -270
  14. setiastro/saspro/ops/settings.py +6 -6
  15. setiastro/saspro/pixelmath.py +1 -1
  16. setiastro/saspro/planetprojection.py +310 -105
  17. setiastro/saspro/resources.py +2 -0
  18. setiastro/saspro/sfcc.py +14 -8
  19. setiastro/saspro/stacking_suite.py +413 -174
  20. setiastro/saspro/subwindow.py +28 -35
  21. setiastro/saspro/translations/all_source_strings.json +2 -2
  22. setiastro/saspro/translations/ar_translations.py +3 -3
  23. setiastro/saspro/translations/de_translations.py +2 -2
  24. setiastro/saspro/translations/es_translations.py +2 -2
  25. setiastro/saspro/translations/fr_translations.py +2 -2
  26. setiastro/saspro/translations/hi_translations.py +2 -2
  27. setiastro/saspro/translations/it_translations.py +2 -2
  28. setiastro/saspro/translations/ja_translations.py +2 -2
  29. setiastro/saspro/translations/pt_translations.py +2 -2
  30. setiastro/saspro/translations/ru_translations.py +2 -2
  31. setiastro/saspro/translations/saspro_ar.ts +2 -2
  32. setiastro/saspro/translations/saspro_de.ts +4 -4
  33. setiastro/saspro/translations/saspro_es.ts +2 -2
  34. setiastro/saspro/translations/saspro_fr.ts +2 -2
  35. setiastro/saspro/translations/saspro_hi.ts +2 -2
  36. setiastro/saspro/translations/saspro_it.ts +4 -4
  37. setiastro/saspro/translations/saspro_ja.ts +2 -2
  38. setiastro/saspro/translations/saspro_pt.ts +2 -2
  39. setiastro/saspro/translations/saspro_ru.ts +2 -2
  40. setiastro/saspro/translations/saspro_sw.ts +2 -2
  41. setiastro/saspro/translations/saspro_uk.ts +2 -2
  42. setiastro/saspro/translations/saspro_zh.ts +2 -2
  43. setiastro/saspro/translations/sw_translations.py +2 -2
  44. setiastro/saspro/translations/uk_translations.py +2 -2
  45. setiastro/saspro/translations/zh_translations.py +2 -2
  46. setiastro/saspro/window_shelf.py +62 -1
  47. {setiastrosuitepro-1.7.3.dist-info → setiastrosuitepro-1.7.5.dist-info}/METADATA +1 -1
  48. {setiastrosuitepro-1.7.3.dist-info → setiastrosuitepro-1.7.5.dist-info}/RECORD +52 -50
  49. {setiastrosuitepro-1.7.3.dist-info → setiastrosuitepro-1.7.5.dist-info}/entry_points.txt +1 -1
  50. {setiastrosuitepro-1.7.3.dist-info → setiastrosuitepro-1.7.5.dist-info}/WHEEL +0 -0
  51. {setiastrosuitepro-1.7.3.dist-info → setiastrosuitepro-1.7.5.dist-info}/licenses/LICENSE +0 -0
  52. {setiastrosuitepro-1.7.3.dist-info → setiastrosuitepro-1.7.5.dist-info}/licenses/license.txt +0 -0
@@ -196,7 +196,7 @@ from setiastro.saspro.resources import (
196
196
  colorwheel_path, font_path, csv_icon_path, spinner_path, wims_path, narrowbandnormalization_path,
197
197
  wimi_path, linearfit_path, debayer_path, aberration_path, acv_icon_path,
198
198
  functionbundles_path, viewbundles_path, selectivecolor_path, rgbalign_path, planetarystacker_path,
199
- background_path, script_icon_path, planetprojection_path,
199
+ background_path, script_icon_path, planetprojection_path,clonestampicon_path,
200
200
  )
201
201
 
202
202
  import faulthandler
@@ -691,8 +691,8 @@ class AstroSuiteProMainWindow(
691
691
  self.apply_theme_from_settings()
692
692
  self._populate_view_panels_menu()
693
693
  # Startup check (no lambdas)
694
- if self.settings.value("updates/check_on_startup", True, type=bool):
695
- QTimer.singleShot(1500, self.check_for_updates_startup)
694
+ #if self.settings.value("updates/check_on_startup", True, type=bool):
695
+ # QTimer.singleShot(1500, self.check_for_updates_startup)
696
696
 
697
697
  self._hdr_refresh_timer = QTimer(self)
698
698
  self._hdr_refresh_timer.setSingleShot(True)
@@ -1473,7 +1473,7 @@ class AstroSuiteProMainWindow(
1473
1473
 
1474
1474
  def _open_user_scripts_github(self):
1475
1475
  # User script examples on GitHub
1476
- url = QUrl("https://github.com/setiastro/setiastrosuitepro/tree/main/scripts")
1476
+ url = QUrl("https://drive.google.com/drive/folders/1TSxKZey4R_t7F2RsB53Hd1SBIGXv3-Nl?usp=drive_link")
1477
1477
  QDesktopServices.openUrl(url)
1478
1478
 
1479
1479
  def _open_scripts_discord_forum(self):
@@ -2798,7 +2798,7 @@ class AstroSuiteProMainWindow(
2798
2798
  target = float(self.settings.value("display/target", 0.30, type=float))
2799
2799
  sigma = float(self.settings.value("display/sigma", 5.0, type=float))
2800
2800
  linked = bool(self.settings.value("display/stretch_linked", False, type=bool))
2801
- use_16 = self.settings.value("display/autostretch_16bit", True, type=bool)
2801
+ use_24 = self.settings.value("display/autostretch_24bit", True, type=bool)
2802
2802
 
2803
2803
  # if your view exposes per-view overrides, prefer those
2804
2804
  if hasattr(view, "autostretch_target"):
@@ -2824,7 +2824,7 @@ class AstroSuiteProMainWindow(
2824
2824
  target_median=target,
2825
2825
  linked=linked,
2826
2826
  sigma=sigma,
2827
- use_16bit=use_16,
2827
+ use_24bit=use_24,
2828
2828
  )
2829
2829
  except Exception as e:
2830
2830
  QMessageBox.warning(self, "Display-Stretch", f"Failed to apply autostretch:\n{e}")
@@ -3560,6 +3560,27 @@ class AstroSuiteProMainWindow(
3560
3560
  dlg.resize(900, 650)
3561
3561
  dlg.show()
3562
3562
 
3563
+ def _open_clone_stamp(self):
3564
+ from setiastro.saspro.clone_stamp import CloneStampDialogPro
3565
+ sw = self.mdi.activeSubWindow()
3566
+ if not sw:
3567
+ QMessageBox.information(self, "Clone Stamp", "No active image window.")
3568
+ return
3569
+ view = sw.widget()
3570
+ doc = getattr(view, "document", None)
3571
+ if doc is None or getattr(doc, "image", None) is None:
3572
+ QMessageBox.information(self, "Clone Stamp", "Active document has no image.")
3573
+ return
3574
+
3575
+ dlg = CloneStampDialogPro(self, doc)
3576
+ try:
3577
+ dlg.setWindowIcon(QIcon(clonestampicon_path))
3578
+ except Exception:
3579
+ pass
3580
+ dlg.resize(900, 650)
3581
+ dlg.show()
3582
+
3583
+
3563
3584
  def _open_wavescale_hdr(self):
3564
3585
  from setiastro.saspro.wavescale_hdr import WaveScaleHDRDialogPro
3565
3586
  sw = self.mdi.activeSubWindow()
@@ -134,6 +134,7 @@ class MenuMixin:
134
134
  m_fn.addAction(self.act_background_neutral)
135
135
  m_fn.addAction(self.act_blemish)
136
136
  m_fn.addAction(self.act_clahe)
137
+ m_fn.addAction(self.act_clone_stamp)
137
138
  m_fn.addAction(self.act_convo)
138
139
  m_fn.addAction(self.act_crop)
139
140
  m_fn.addAction(self.act_curves)
@@ -36,7 +36,7 @@ from setiastro.saspro.resources import (
36
36
  nbtorgb_path, freqsep_path, multiscale_decomp_path, contsub_path, halo_path, cosmic_path,
37
37
  satellite_path, imagecombine_path, wims_path, wimi_path, linearfit_path,
38
38
  debayer_path, aberration_path, functionbundles_path, viewbundles_path, planetarystacker_path,
39
- selectivecolor_path, rgbalign_path, planetprojection_path,
39
+ selectivecolor_path, rgbalign_path, planetprojection_path, clonestampicon_path,
40
40
  )
41
41
 
42
42
  # Import shortcuts module
@@ -204,22 +204,11 @@ class ToolbarMixin:
204
204
  tb_fn.addAction(self.act_remove_green)
205
205
  tb_fn.addAction(self.act_convo)
206
206
  tb_fn.addAction(self.act_extract_luma)
207
-
208
- #btn_luma = tb_fn.widgetForAction(self.act_extract_luma)
209
- #if isinstance(btn_luma, QToolButton):
210
- # luma_menu = QMenu(btn_luma)
211
- # luma_menu.addActions(self._luma_group.actions())
212
- # btn_luma.setMenu(luma_menu)
213
- # btn_luma.setPopupMode(QToolButton.ToolButtonPopupMode.MenuButtonPopup)
214
- # btn_luma.setStyleSheet("""
215
- # QToolButton { color: #dcdcdc; }
216
- # QToolButton:pressed, QToolButton:checked { color: #DAA520; font-weight: 600; }
217
- # """)
218
-
219
207
  tb_fn.addAction(self.act_recombine_luma)
220
208
  tb_fn.addAction(self.act_rgb_extract)
221
209
  tb_fn.addAction(self.act_rgb_combine)
222
210
  tb_fn.addAction(self.act_blemish)
211
+ tb_fn.addAction(self.act_clone_stamp)
223
212
  tb_fn.addAction(self.act_wavescale_hdr)
224
213
  tb_fn.addAction(self.act_wavescale_de)
225
214
  tb_fn.addAction(self.act_clahe)
@@ -1005,6 +994,11 @@ class ToolbarMixin:
1005
994
  self.act_blemish.setStatusTip(self.tr("Interactive blemish removal on the active view"))
1006
995
  self.act_blemish.triggered.connect(self._open_blemish_blaster)
1007
996
 
997
+ self.act_clone_stamp = QAction(QIcon(clonestampicon_path), self.tr("Clone Stamp..."), self)
998
+ self.act_clone_stamp.setIconVisibleInMenu(True)
999
+ self.act_clone_stamp.setStatusTip(self.tr("Interactive clone stamp on the active view"))
1000
+ self.act_clone_stamp.triggered.connect(self._open_clone_stamp)
1001
+
1008
1002
  self.act_wavescale_hdr = QAction(QIcon(hdr_path), self.tr("WaveScale HDR..."), self)
1009
1003
  self.act_wavescale_hdr.setStatusTip(self.tr("Wave-scale HDR with luminance-masked starlet"))
1010
1004
  self.act_wavescale_hdr.setIconVisibleInMenu(True)
@@ -1196,7 +1190,7 @@ class ToolbarMixin:
1196
1190
  self.act_planetary_stacker.setStatusTip(self.tr("Stack SER videos (planetary/solar/lunar)"))
1197
1191
  self.act_planetary_stacker.triggered.connect(self._open_planetary_stacker)
1198
1192
 
1199
- self.act_planet_projection = QAction(QIcon(planetprojection_path), self.tr("Planetary Projection..."), self)
1193
+ self.act_planet_projection = QAction(QIcon(planetprojection_path), self.tr("3D Projection..."), self)
1200
1194
  self.act_planet_projection.setIconVisibleInMenu(True)
1201
1195
  self.act_planet_projection.setStatusTip(self.tr("View your planets with stereographic projection"))
1202
1196
  self.act_planet_projection.triggered.connect(self._open_planet_projection)
@@ -1278,7 +1272,7 @@ class ToolbarMixin:
1278
1272
  self.act_script_editor.setStatusTip(self.tr("Open the built-in script editor"))
1279
1273
  self.act_script_editor.triggered.connect(self._show_script_editor)
1280
1274
 
1281
- self.act_open_user_scripts_github = QAction(self.tr("Open User Scripts (GitHub)..."), self)
1275
+ self.act_open_user_scripts_github = QAction(self.tr("Open User Scripts (GoogleDrive)..."), self)
1282
1276
  self.act_open_user_scripts_github.triggered.connect(self._open_user_scripts_github)
1283
1277
 
1284
1278
  self.act_open_scripts_discord = QAction(self.tr("Open Scripts Forum (Discord)..."), self)
@@ -1416,6 +1410,7 @@ class ToolbarMixin:
1416
1410
  reg("rgb_extract", self.act_rgb_extract)
1417
1411
  reg("rgb_combine", self.act_rgb_combine)
1418
1412
  reg("blemish_blaster", self.act_blemish)
1413
+ reg("clone_stamp", self.act_clone_stamp)
1419
1414
  reg("wavescale_hdr", self.act_wavescale_hdr)
1420
1415
  reg("wavescale_dark_enhance", self.act_wavescale_de)
1421
1416
  reg("clahe", self.act_clahe)