Skip to content
Merged
Show file tree
Hide file tree
Changes from 11 commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
8efc257
Basler backend: device discovery & fixes
C-Achard Feb 12, 2026
1ea3c3b
Refactor preview restart logic, add logging
C-Achard Feb 12, 2026
c17e1f2
Remove optional transforms from Basler backend
C-Achard Feb 12, 2026
af3564f
Refine crop validation and camera UI commit flow
C-Achard Feb 12, 2026
55e5c52
Show dirty state for Apply Settings button
C-Achard Feb 12, 2026
4f77655
Basler: better exposure/gain and stream reset
C-Achard Feb 12, 2026
ff797b2
Suppress selection side-effects and block signals
C-Achard Feb 12, 2026
4404f78
Robust GUI test teardown; block QMessageBox
C-Achard Feb 12, 2026
abed9d1
Cancel probe worker and copy QImage
C-Achard Feb 12, 2026
6db3f74
Improve preview handling and refactor tests
C-Achard Feb 12, 2026
be27cc4
Make camera dialog tests deterministic
C-Achard Feb 12, 2026
48faa41
Refactor camera config dialog and reduce code duplication (#46)
C-Achard Feb 13, 2026
262d558
Wait for scan completion in max cameras test
C-Achard Feb 16, 2026
38005ab
Add color/colormap UI and refactor layouts
C-Achard Feb 16, 2026
4cac077
Refactor color combos & add sizing behavior
C-Achard Feb 16, 2026
12f3c4b
Handle SIGINT and use compact combo widgets
C-Achard Feb 16, 2026
81b0f4e
Log keyboard interrupt on quit
C-Achard Feb 16, 2026
e9b5d52
Make controls dockable and refine UI layout
C-Achard Feb 16, 2026
60da747
Make controls dock closable and transparent title
C-Achard Feb 16, 2026
c29e8ca
Disable dock close; add Show controls action
C-Achard Feb 16, 2026
e480b28
Merge pull request #47 from DeepLabCut/cy/ux-tweaks
C-Achard Feb 16, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
552 changes: 453 additions & 99 deletions dlclivegui/cameras/backends/basler_backend.py

Large diffs are not rendered by default.

18 changes: 14 additions & 4 deletions dlclivegui/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,10 +85,20 @@ def _coerce_gain(cls, v):
def _validate_crop(self):
for f in ("crop_x0", "crop_y0", "crop_x1", "crop_y1"):
setattr(self, f, max(0, int(getattr(self, f))))
# Optional: if any crop is set, enforce x1>x0 and y1>y0
if any([self.crop_x0, self.crop_y0, self.crop_x1, self.crop_y1]):
if not (self.crop_x1 > self.crop_x0 and self.crop_y1 > self.crop_y0):
raise ValueError("Invalid crop rectangle: require x1>x0 and y1>y0 when cropping is enabled.")

# No crop
if self.crop_x0 == self.crop_y0 == self.crop_x1 == self.crop_y1 == 0:
return self

# Allow x1/y1 == 0 to mean "to edge"
# If x1 is explicitly set (>0), it must be > x0
if self.crop_x1 > 0 and self.crop_x1 <= self.crop_x0:
raise ValueError("Invalid crop rectangle: require x1 > x0 (or x1=0 for 'to edge').")

# If y1 is explicitly set (>0), it must be > y0
if self.crop_y1 > 0 and self.crop_y1 <= self.crop_y0:
raise ValueError("Invalid crop rectangle: require y1 > y0 (or y1=0 for 'to edge').")

return self

def get_crop_region(self) -> tuple[int, int, int, int] | None:
Expand Down
508 changes: 404 additions & 104 deletions dlclivegui/gui/camera_config_dialog.py

Large diffs are not rendered by default.

6 changes: 5 additions & 1 deletion dlclivegui/gui/main_window.py
Original file line number Diff line number Diff line change
Expand Up @@ -1454,7 +1454,11 @@ def _start_preview(self) -> None:
# Store active settings for single camera mode (for DLC, recording frame rate, etc.)
self._active_camera_settings = active_cams[0] if active_cams else None
for cam in active_cams:
cam.properties.setdefault("fast_start", True)
if not isinstance(cam.properties, dict):
cam.properties = {}
ns = cam.properties.setdefault((cam.backend or "").lower(), {})
if isinstance(ns, dict):
ns["fast_start"] = False

self.multi_camera_controller.start(active_cams)
self._update_inference_buttons()
Expand Down
Loading