|
| 1 | +# DeepLabCut-Live-GUI v2.0.0 |
| 2 | + |
| 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. |
| 5 | + |
| 6 | +## Camera triggering and synchronization |
| 7 | + |
| 8 | +### Added |
| 9 | + |
| 10 | +- Added hardware trigger configuration for compatible **GenTL** and **Basler** cameras |
| 11 | +- Added 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 | +- 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 |
| 18 | + |
| 19 | +### Changed |
| 20 | + |
| 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 |
| 43 | + |
| 44 | +### Fixed |
| 45 | + |
| 46 | +- Several logic and lifecycle fixes, which should help improve overall error handling and stability |
| 47 | + |
| 48 | +## Frame timestamps and synchronization data |
| 49 | + |
| 50 | +### Added |
| 51 | + |
| 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: |
| 55 | + - Per-frame software timestamps |
| 56 | + - Optional per-frame hardware timestamp values, supplied by cameras and SDK |
| 57 | + - Timestamp source, timebase, unit, and conversion metadata |
| 58 | + - Explicit frame indexes for written frames |
| 59 | + |
| 60 | +### Changed |
| 61 | + |
| 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 |
| 66 | + |
| 67 | +### Fixed |
| 68 | + |
| 69 | +- Improved timestamp consistency when frames are dropped before encoding |
| 70 | + |
| 71 | +## Monochrome camera performance improvements |
| 72 | + |
| 73 | +### Added |
| 74 | + |
| 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. |
| 80 | + |
| 81 | +### Changed |
| 82 | + |
| 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 |
| 85 | + |
| 86 | +## GUI and usability |
| 87 | + |
| 88 | +### Added |
| 89 | + |
| 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 |
| 94 | + |
| 95 | +### Changed |
| 96 | + |
| 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 |
| 100 | + |
| 101 | +### Fixed |
| 102 | + |
| 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 |
| 107 | + |
| 108 | +## Custom processor workflows |
| 109 | + |
| 110 | +### Added |
| 111 | + |
| 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 |
| 118 | + |
| 119 | +### Changed |
| 120 | + |
| 121 | +- Improved custom processor discovery, selection and settings persistence |
| 122 | + |
| 123 | +### Fixed |
| 124 | + |
| 125 | +- Improved processor cleanup and finalization when recording stop |
| 126 | + |
| 127 | +## Camera and preview lifecycle |
| 128 | + |
| 129 | +### Added |
| 130 | + |
| 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 |
| 133 | + |
| 134 | +### Changed |
| 135 | + |
| 136 | +- Updated preview controls so **Stop Preview** remains available during camera startup |
| 137 | +- Preserved user-configured camera order for the tiled display |
| 138 | + |
| 139 | +### Fixed |
| 140 | + |
| 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 |
| 144 | +- Improved cleanup of partially initialized backends and worker threads |
| 145 | +- Improved detection and rejection of duplicate camera configurations |
| 146 | +- Improved recovery when cameras disconnect, repeatedly return empty frames, or fail during startup |
| 147 | +- Improved controller shutdown finalization |
| 148 | + |
| 149 | +## Reliability and diagnostics |
| 150 | + |
| 151 | +### Added |
| 152 | + |
| 153 | +- Added focused timing diagnostics for camera workers, controller dispatch, inference, and recording |
| 154 | + |
| 155 | +### Fixed |
| 156 | + |
| 157 | +- 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 |
0 commit comments