Skip to content

Commit 07984d5

Browse files
committed
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.
1 parent 09b3b9d commit 07984d5

1 file changed

Lines changed: 105 additions & 77 deletions

File tree

‎changelog/v2_0_0.md‎

Lines changed: 105 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -1,159 +1,187 @@
11
# DeepLabCut-Live-GUI v2.0.0
22

3-
This release expands hardware synchronization, high-throughput multi-camera recording, frame timestamp reporting, monochrome capture performance, and custom processor integration.
4-
It also improves data safety, camera lifecycle handling, diagnostics, and general GUI usability.
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, lifecycle management, diagnostics, and general usability.
55

66
## Camera triggering and synchronization
77

88
### Added
99

10-
- Added hardware trigger configuration for compatible **GenTL** and **Basler** cameras
11-
- Added trigger roles for common synchronization setups:
10+
- Hardware trigger configuration for compatible **GenTL** and **Basler** cameras
11+
- Trigger roles for common synchronization setups:
1212
- **Off / Free-run** for continuous acquisition
1313
- **External trigger** for cameras driven by an external hardware signal
1414
- **Follower** for cameras synchronized to a master camera or shared trigger source
1515
- **Master output** for free-running cameras that emit a synchronization signal
16-
- Added configuration fields for trigger selector, input source, signal activation, and frame read timeout
17-
- Includes a **Strict mode** to reject unsupported trigger configurations instead of applying them best-effort
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
1818

1919
### Changed
2020

21-
- Updated the camera configuration dialog with a dedicated trigger settings GUI section
22-
- Updated active camera labels to show trigger roles
23-
- Changed multi-camera startup ordering so external and follower cameras begin opening before free-running cameras and trigger-generating masters
24-
25-
## Multi-camera performance and recording
26-
27-
### Added
28-
29-
- Added a dedicated recording path for each active camera
30-
- Rather than being coupled upstream of inference and UI display, recording is now a fully independent, prioritized pipeline
31-
- This helps ensure that recording is not affected by inference or display slowdowns, and that each camera can be recorded at its full frame rate
32-
- Added additional recorder throughput, write latency, and buffer diagnostics.
33-
- Added an optional **Use faster encoding parameters** setting for supported FFmpeg software codecs.
34-
- At the cost of file size, this can help support very high frame rates and resolutions on multi-camera setups
35-
36-
### Changed
37-
38-
- Decoupled the GUI display rate from camera capture, pose inference, and recording rates
39-
- The GUI is now capped at 30 FPS for display, while cameras can run at their full frame rate for inference and recording.
40-
- Inference still ignores any stale frames.
41-
- Added support for better using each camera’s reported runtime frame rate when configuring its recorder
42-
- Moved recording dispatch and frame transformations closer to the camera worker to reduce the impact on GUI responsiveness
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
4324

4425
### Fixed
4526

46-
- Several logic and lifecycle fixes, which should help improve overall error handling and stability
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+
4731

4832
## Frame timestamps and synchronization data
4933

5034
### Added
5135

52-
- Added optional hardware frame timestamp reporting for supported cameras
53-
- Added Basler camera timestamp-counter reporting with raw tick values and tick-frequency metadata when available
54-
- Added updated timestamp JSON schema with:
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:
5539
- Per-frame software timestamps
56-
- Optional per-frame hardware timestamp values, supplied by cameras and SDK
40+
- Optional per-frame hardware timestamp values supplied by cameras or SDKs
5741
- Timestamp source, timebase, unit, and conversion metadata
58-
- Explicit frame indexes for written frames
42+
- Explicit indexes for written frames
5943

6044
### Changed
6145

62-
- Changed timestamp sidecars to describe software and hardware timestamp sources separately
63-
- Clarified the distinction between Unix wall-clock timestamps and device-specific camera-clock values
64-
- Changed timestamp recording so entries are added only for frames successfully written by the encoder
65-
- This should help the reliability of timestamp data for downstream analysis
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
6649

6750
### Fixed
6851

6952
- 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
7055

71-
## Monochrome camera performance improvements
56+
## Multi-camera performance and recording
7257

7358
### Added
7459

75-
- Added a **Preserve mono frames** option for supported backends.
76-
- This avoids performance bottlenecks from unnecessary conversion of mono frames to color
77-
- Added camera output format settings and runtime format reporting
78-
- Added native monochrome frame support for compatible GenTL & Basler cameras
79-
- Added camera probing for detected pixel format, emitted frame format, and recommended mono handling.
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
8066

8167
### Changed
8268

83-
- Updated camera labels and diagnostics to indicate preserved mono output
84-
- Additional reporting when the camera’s pixel format differs from the frame format emitted to the application
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
8575

86-
## GUI and usability
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
8784

8885
### Added
8986

90-
- Added detected camera resolution, frame rate, pixel format, and output format to the camera configuration dialog
91-
- Added better recording path previews with session and run folder placeholders.
92-
- Added additional persistent preferences for recording names, processor selection, inference camera, and encoding options
93-
- Added **Help → View documentation** to open the DeepLabCut-Live-GUI documentation
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
9492

9593
### Changed
9694

97-
- Improved camera configuration, reset, discovery, and preview workflows
98-
- Improved camera and recorder status summaries
99-
- Improved recording session naming and container-aware filename handling
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
10098

10199
### Fixed
102100

103-
- Prevented recording and preview controls from becoming permanently disabled after failed stop operations
104-
- Improved cleanup when closing camera dialogs or the main application window
105-
- Improved handling of unavailable cameras loaded from a saved configuration
106-
- Improved configuration persistence and restoration across application sessions
101+
- Improved handling of monochrome and higher-bit-depth frames before display and encoding
107102

108103
## Custom processor workflows
109104

110105
### Added
111106

112-
- Added processor hooks for recording start and recording stop events
113-
- This allows custom data processing, saving, or cleanup to be performed in sync with the recording
114-
- NOTE: Stopping inference while recording is active may leave processor data unsaved or unpaired with the recording, depending on the processor implementation.
115-
- Added recording context communication with session, run folder, filename, and output file information
116-
- Added support for processor plugins that must be constructed in the inference worker
117-
- Added clearer processor status and recording state information in the GUI
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
118112

119113
### Changed
120114

121-
- Improved custom processor discovery, selection and settings persistence
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
122118

123119
### Fixed
124120

125-
- Improved processor cleanup and finalization when recording stop
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
126124

127125
## Camera and preview lifecycle
128126

129127
### Added
130128

131-
- Added better checks for cameras that are starting, running, or stopping to avoid unresponsive GUI states
132-
- Improved cancelling preview while cameras are still opening
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
133132

134133
### Changed
135134

136-
- Updated preview controls so **Stop Preview** remains available during camera startup
137-
- Preserved user-configured camera order for the tiled display
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
138138

139139
### Fixed
140140

141-
- Improved partial multi-camera startup behavior when some cameras open successfully and others fail
142-
- Separated stable internal camera identity from human-readable display labels
143-
- Prevented a camera from reporting a successful start after startup was cancelled
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
144143
- Improved cleanup of partially initialized backends and worker threads
145144
- Improved detection and rejection of duplicate camera configurations
146-
- Improved recovery when cameras disconnect, repeatedly return empty frames, or fail during startup
145+
- Improved recovery from camera disconnections, repeated empty frames, and startup failures
147146
- Improved controller shutdown finalization
148147

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+
149171
## Reliability and diagnostics
150172

151173
### Added
152174

153-
- Added focused timing diagnostics for camera workers, controller dispatch, inference, and recording
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
154182

155183
### Fixed
156184

157185
- Improved handling of stale camera identities and GenTL producer paths
158-
- Improved best-effort cleanup without allowing cleanup errors to hide the original failure
159-
- Improved consistency between camera backend return values and downstream capture, inference, and recording code
186+
- Improved best-effort cleanup without hiding the original failure
187+
- Improved consistency between camera backend results and downstream capture, inference, and recording code

0 commit comments

Comments
 (0)