Skip to content

Commit 1001d55

Browse files
authored
2.0 changelogs (#116)
* Add v2.0.0 and v2.0.0rc1 changelogs Adds two new changelog entries under `changelog/`: a detailed `v2_0_0.md` covering major 2.0.0 features, improvements, and fixes (sync/triggering, multi-camera recording, timestamps, mono handling, processors, lifecycle, and diagnostics), plus `v2_0_0rc1.md` documenting the 2.0 RC1 rewrite highlights, release notes, contributor credits, and PR-based change log. * Refine v2.0.0 changelog structure Reworked the v2.0.0 release notes for clearer organization and wording across trigger sync, timestamps, recording, monochrome support, processor workflows, lifecycle handling, GUI updates, and diagnostics. * Add GitHub footer
1 parent d5220fe commit 1001d55

2 files changed

Lines changed: 255 additions & 0 deletions

File tree

‎changelog/v2_0_0.md‎

Lines changed: 200 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,200 @@
1+
# DeepLabCut-Live-GUI v2.0.0
2+
3+
This release expands hardware synchronization, high-throughput multi-camera recording, frame timestamp reporting, monochrome capture, and custom processor integration.
4+
It also improves data safety, diagnostics, and general usability.
5+
6+
## Camera triggering and synchronization
7+
8+
### Added
9+
10+
- Hardware trigger configuration for compatible **GenTL** and **Basler** cameras
11+
- Trigger roles for common synchronization setups:
12+
- **Off / Free-run** for continuous acquisition
13+
- **External trigger** for cameras driven by an external hardware signal
14+
- **Follower** for cameras synchronized to a master camera or shared trigger source
15+
- **Master output** for free-running cameras that emit a synchronization signal
16+
- Configuration for trigger selector, input source, activation condition, and frame read timeout
17+
- **Strict mode** to reject unsupported trigger configurations instead of applying them best-effort
18+
19+
### Changed
20+
21+
- Added a dedicated trigger settings dialog to the camera configuration workflow
22+
- Active camera labels now show configured trigger roles
23+
- Multi-camera startup now prioritizes external and follower cameras before free-running cameras and trigger-generating masters
24+
25+
### Fixed
26+
27+
- Improved handling of unsupported or incomplete trigger configurations
28+
- Improved expected timeout handling while cameras wait for hardware trigger pulses
29+
- Improved trigger cleanup when cameras stop or close
30+
31+
32+
## Frame timestamps and synchronization data
33+
34+
### Added
35+
36+
- Optional hardware frame timestamp reporting for supported cameras
37+
- Basler camera timestamp-counter reporting with raw tick values and tick-frequency metadata when available
38+
- An updated timestamp JSON schema containing:
39+
- Per-frame software timestamps
40+
- Optional per-frame hardware timestamp values supplied by cameras or SDKs
41+
- Timestamp source, timebase, unit, and conversion metadata
42+
- Explicit indexes for written frames
43+
44+
### Changed
45+
46+
- Software and hardware timestamp sources are now described separately
47+
- Timestamp entries are added only after frames are successfully written by the encoder
48+
- Documentation now distinguishes Unix wall-clock timestamps from device-specific camera clock values
49+
50+
### Fixed
51+
52+
- Improved timestamp consistency when frames are dropped before encoding
53+
- Preserved raw hardware timestamp values alongside converted values
54+
- Improved fallback behavior when hardware timestamps or conversion metadata are unavailable
55+
56+
## Multi-camera performance and recording
57+
58+
### Added
59+
60+
- An optional **Use faster encoding parameters** setting for supported FFmpeg software codecs
61+
- This can improve encoding throughput for high-resolution or high-frame-rate recordings, at the cost of larger files
62+
- A dedicated full-rate recording path for each active camera
63+
- Recording is independent of the inference and display pipelines
64+
- Display or inference slowdowns no longer directly limit recording throughput
65+
- Recorder diagnostics for throughput, write latency, queue depth, and dropped frames
66+
67+
### Changed
68+
69+
- Decoupled GUI display from camera capture, pose inference, and recording rates
70+
- The GUI display is capped at 30 FPS while cameras can continue running at their full rate
71+
- Inference continues to discard stale frames
72+
- Improved use of each camera's reported runtime frame rate when configuring its recorder
73+
- Moved recording dispatch and frame transformations closer to camera workers to reduce work on the GUI thread
74+
- Reorganized recording logic into dedicated services
75+
76+
### Fixed
77+
78+
- Prevented asynchronously queued frames from being modified through reused camera buffers or NumPy views
79+
- Improved frame-size mismatch and encoder error handling
80+
- Improved recording shutdown, retry, cleanup, and UI recovery behavior
81+
- Prevented recording controls from remaining disabled after a failed stop operation
82+
83+
## Monochrome camera performance improvements
84+
85+
### Added
86+
87+
- A **Preserve mono frames** option for supported backends
88+
- This avoids unnecessary conversion of monochrome frames to three-channel color
89+
- Native monochrome frame support for compatible GenTL and Basler cameras
90+
- Camera output-format settings and runtime format reporting
91+
- Camera probing for detected pixel format, emitted frame format, and recommended mono handling
92+
93+
### Changed
94+
95+
- Camera labels and diagnostics now indicate preserved mono output
96+
- Improved reporting when the camera pixel format differs from the frame format emitted to the application
97+
- Grayscale conversion remains available in the recorder when required by the selected encoding path
98+
99+
### Fixed
100+
101+
- Improved handling of monochrome and higher-bit-depth frames before display and encoding
102+
103+
## Custom processor workflows
104+
105+
### Added
106+
107+
- Processor hooks for recording start and stop events
108+
- These allow custom processing, saving, and cleanup to remain synchronized with recording
109+
- Recording context containing session, run folder, filename, and output file information
110+
- Support for processor plugins that must be constructed in the inference worker
111+
- Clearer processor status and recording state information in the GUI
112+
113+
### Changed
114+
115+
- Improved custom processor discovery, selection, enablement, and settings persistence
116+
- Processor-controlled recording now uses the standard recording lifecycle
117+
- Stopping inference while recording now provides a clearer warning that processor data may remain unsaved or unpaired, depending on the processor implementation
118+
119+
### Fixed
120+
121+
- Improved processor cleanup and finalization when recording stops
122+
- Prevented duplicate recording start notifications
123+
- Improved handling of processors that do not implement optional saving methods
124+
125+
## Camera and preview lifecycle
126+
127+
### Added
128+
129+
- Explicit handling for cameras that are starting, running, or stopping
130+
- Support for cancelling preview while cameras are still opening
131+
- Runtime reporting of actual camera frame rate, resolution, pixel format, and output format
132+
133+
### Changed
134+
135+
- **Stop Preview** remains available during camera startup
136+
- User-configured camera order is preserved in the tiled display while trigger startup ordering is handled separately
137+
- Stable internal camera identities are now separated from human-readable display labels
138+
139+
### Fixed
140+
141+
- Improved partial multi-camera startup when some cameras open successfully and others fail
142+
- Prevented cameras from reporting a successful start after startup was cancelled
143+
- Improved cleanup of partially initialized backends and worker threads
144+
- Improved detection and rejection of duplicate camera configurations
145+
- Improved recovery from camera disconnections, repeated empty frames, and startup failures
146+
- Improved controller shutdown finalization
147+
148+
## GUI and usability
149+
150+
### Added
151+
152+
- **Help → View documentation** action for opening the DeepLabCut-Live-GUI documentation
153+
- Detected camera resolution, frame rate, pixel format, and output format in the camera configuration dialog
154+
- Improved recording path previews with session and run-folder placeholders
155+
- Persistent preferences for recording names, processor selection, inference camera, and encoding options
156+
157+
### Changed
158+
159+
- Improved camera discovery, configuration, reset, and preview workflows
160+
- Improved camera and recorder status summaries
161+
- Improved recording session naming and container-aware filename handling
162+
- Improved control availability during camera startup, inference, recording, and shutdown
163+
164+
### Fixed
165+
166+
- Improved asynchronous error reporting so background failures are visible in the GUI
167+
- Improved cleanup when closing camera dialogs or the main application window
168+
- Improved handling of unavailable cameras restored from saved configurations
169+
- Improved configuration persistence and restoration across application sessions
170+
171+
## Reliability and diagnostics
172+
173+
### Added
174+
175+
- Timing diagnostics for camera workers, controller dispatch, inference, and recording
176+
- Expanded automated coverage for camera backends, trigger modes, recording, timestamps, processor hooks, and GUI lifecycle behavior
177+
178+
### Changed
179+
180+
- Improved logging for camera discovery, runtime information, recording state, and processor lifecycle events
181+
- Expanded backend contract tests for camera reads, trigger waits, timestamp propagation, and cleanup
182+
183+
### Fixed
184+
185+
- Improved handling of stale camera identities and GenTL producer paths
186+
- Improved best-effort cleanup without hiding the original failure
187+
- Improved consistency between camera backend results and downstream capture, inference, and recording code
188+
189+
----------
190+
191+
## What's Changed
192+
* Update README install instructions for PyPI release by @C-Achard in https://github.com/DeepLabCut/DeepLabCut-live-GUI/pull/64
193+
* Fix save_original bug in the processors by @arturoptophys in https://github.com/DeepLabCut/DeepLabCut-live-GUI/pull/75
194+
* Add validation + compatibility tests for DeepLabCut-live by @deruyter92 in https://github.com/DeepLabCut/DeepLabCut-live-GUI/pull/56
195+
* Several fixes to worker logic by @C-Achard in https://github.com/DeepLabCut/DeepLabCut-live-GUI/pull/57
196+
* Upgrade & fix GenTL multi-camera mode by @C-Achard in https://github.com/DeepLabCut/DeepLabCut-live-GUI/pull/76
197+
* Feature: triggered cameras, master and follower scheme by @C-Achard in https://github.com/DeepLabCut/DeepLabCut-live-GUI/pull/96
198+
* Feature: encoding, UI and performance improvements by @C-Achard in https://github.com/DeepLabCut/DeepLabCut-live-GUI/pull/114
199+
200+
**Full Changelog**: https://github.com/DeepLabCut/DeepLabCut-live-GUI/compare/v2.0.0rc1...v2.0.0

‎changelog/v2_0_0rc1.md‎

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
Version 2.0 is a major rewrite of the application from scratch, delivering a redesigned GUI powered by the latest DLC-Live pose estimation workflows.
2+
3+
## New in 2.0
4+
5+
- New GUI rebuilt from the ground up using PySide6
6+
- PyTorch support for DeepLabCut Live inference
7+
- New camera backends for broader hardware support and more flexible acquisition setups
8+
9+
## Highlights
10+
11+
Improved experience for live preview, inference, and recording
12+
Better support for multi-camera experimental workflows
13+
Modernized architecture to support future extensions and backend improvements
14+
15+
## Notes
16+
17+
This is a major update and may differ from previous versions in setup, supported workflows, and backend behavior.
18+
Please review the [updated documentation](https://deeplabcut.github.io/DeepLabCut/docs/dlc-live/dlc-live-gui/index.html) for installation, camera configuration, and model compatibility.
19+
20+
## Credits
21+
* @arturoptophys PySide6 rewrite, new preview, controls & camera backends
22+
* @C-Achard Production polish, UI/UX improvements, camera backends improvements, documentation
23+
* @deruyter92 Code review, testing and feedback
24+
* @MMathisLab Project lead
25+
26+
---
27+
28+
## What's Changed
29+
* Support Basler camera a2A2590-60umBAS (and other Basler cameras, untested) by @antortjim in https://github.com/DeepLabCut/DeepLabCut-live-GUI/pull/11
30+
* Basler camera support by @MMathisLab in https://github.com/DeepLabCut/DeepLabCut-live-GUI/pull/12
31+
* Relax python version upper bound by @jeylau in https://github.com/DeepLabCut/DeepLabCut-live-GUI/pull/20
32+
* Upgrade Aravis backend features and testing by @C-Achard in https://github.com/DeepLabCut/DeepLabCut-live-GUI/pull/42
33+
* Improving testing coverage and pre-commit checks before release by @C-Achard in https://github.com/DeepLabCut/DeepLabCut-live-GUI/pull/43
34+
* Refactor camera config dialog and reduce code duplication by @C-Achard in https://github.com/DeepLabCut/DeepLabCut-live-GUI/pull/46
35+
* Final UI tweaks by @C-Achard in https://github.com/DeepLabCut/DeepLabCut-live-GUI/pull/47
36+
* Improve camera config loading UX and improve Basler backend by @C-Achard in https://github.com/DeepLabCut/DeepLabCut-live-GUI/pull/45
37+
* Upgrade Gentl backend by @C-Achard in https://github.com/DeepLabCut/DeepLabCut-live-GUI/pull/44
38+
* README update for PySide6 version by @C-Achard in https://github.com/DeepLabCut/DeepLabCut-live-GUI/pull/50
39+
* Add standardized linting workflow and config by @C-Achard in https://github.com/DeepLabCut/DeepLabCut-live-GUI/pull/53
40+
* Upgrade Gentl backend cti discovery by @C-Achard in https://github.com/DeepLabCut/DeepLabCut-live-GUI/pull/51
41+
* Pre-release cleanup for PySide6 GUI by @C-Achard in https://github.com/DeepLabCut/DeepLabCut-live-GUI/pull/54
42+
* Update dlclive requirement & add deploy workflow by @C-Achard in https://github.com/DeepLabCut/DeepLabCut-live-GUI/pull/48
43+
* Deploy workflow candidate for 2.0.0rc1 by @C-Achard in https://github.com/DeepLabCut/DeepLabCut-live-GUI/pull/55
44+
* Upgrade PySide6 multi-camera GUI by @C-Achard in https://github.com/DeepLabCut/DeepLabCut-live-GUI/pull/38
45+
* Remove .coveragerc (duplicated in pyproject.toml) by @C-Achard in https://github.com/DeepLabCut/DeepLabCut-live-GUI/pull/61
46+
* Trigger CI on main/master pushes and tags by @C-Achard in https://github.com/DeepLabCut/DeepLabCut-live-GUI/pull/62
47+
* Add docs link to README by @C-Achard in https://github.com/DeepLabCut/DeepLabCut-live-GUI/pull/63
48+
49+
## New Contributors
50+
* @antortjim made their first contribution in https://github.com/DeepLabCut/DeepLabCut-live-GUI/pull/11
51+
* @MMathisLab made their first contribution in https://github.com/DeepLabCut/DeepLabCut-live-GUI/pull/12
52+
* @jeylau made their first contribution in https://github.com/DeepLabCut/DeepLabCut-live-GUI/pull/20
53+
* @C-Achard made their first contribution in https://github.com/DeepLabCut/DeepLabCut-live-GUI/pull/42
54+
55+
**Full Changelog**: https://github.com/DeepLabCut/DeepLabCut-live-GUI/compare/v1.0...v2.0.0rc1

0 commit comments

Comments
 (0)