- Add AudioRecorder with input device capture, monitoring, recording, stats, level snapshots, and waveform snapshots
- Add AudioRecorder settings, level data, waveform chunk data, and frame factory helpers
- Expose AudioRecorder and related APIs to Python/SWIG
- Add AudioDevices input device listing support
- Register AudioRecorder in CMake and OpenShot public headers
- Write recorded audio through FFmpegWriter using configured codec, sample rate, channels, layout, and bitrate
- Finalize recorder writers cleanly on stop/close, including prepared recordings that never start
- Update FFmpegWriter audio timestamps, packet durations, encoder flush behavior, and stream duration metadata
- Fix FLAC outputs so FFmpegReader reports valid duration and video length after recording
- Improve AudioWaveformer extraction for audio files with missing/unknown duration metadata
- Add AudioRecorder unit tests for validation, monitoring, waveform, levels, and synthetic recording behavior
- Add AudioWaveformer/FFmpegWriter regression coverage for FLAC duration and waveform extraction
- Preserve the first seeded Cutie memory frame as a permanent memory slot and
use the remaining slots as rolling working memory. This keeps the initial
prompted mask available during later propagation instead of evicting it from
the FIFO window.
- Also letterbox frames and masks into the fixed Cutie ONNX input size instead
of stretching them, unletterbox propagated masks back to source dimensions,
and mark padded memory regions invalid for memory readout.
- Reordered the bounds check before indexing predictedBoxes in sort.cpp
- Marked SortTracker constructor explicit
- Removed TrackingBox::classScores from the public result struct and moved it into a private DetectionBox helper in sort.cpp
- Replaced the raw prototype scan loop with std::find_if
- Supports multiple positive rect prompts instead of only the first rect.
- Preserves negative rects as ranking filters instead of collapsing them to center points.
- Ranks EfficientSAM candidates with soft penalties for negative point hits and negative rect overlap.
- Unions separate EfficientSAM passes for multiple positive rects so multiple target objects can remain selected.
- Makes GPU_AUTO conservative:
- CUDA if available
- otherwise CPU
- OpenCL only when explicitly requested with GPU_OPENCL
- Adds simple requested/selected DNN device logging for Object Detection, EfficientSAM, and Cutie.
- Removing XMem as a backend for Object Mask effect (replacing with Cutie model)
- Detect Cutie model dimensions from selected model filenames instead of relying on a fixed propagation size.
- Support multiple Cutie quality tiers with matching encode/decode/readout dimensions.
- Add fallback mask threshold behavior for EfficientSAM when the default threshold produces an empty mask.
- Reduce Object Mask preview/export failures with larger Cutie model variants.
- Use a single EfficientSAM ONNX model for ObjectMask seed mask generation
- Add EfficientSAM prompt preprocessing and mask candidate selection
- Keep seed-frame output as the raw EfficientSAM mask while still seeding XMem
- Add ClipProcessingJobs::PreviewObjectMask for single-frame interactive previews
- Accept EfficientSAM model JSON keys while preserving legacy encoder_model aliases
- Remove ObjectMask protobuf shutdown call that could destabilize Python teardown
- Add ObjectMask ONNX validation coverage
- Add ObjectMask effect for rendering and exposing generated object masks
- Add EdgeSAM preprocessing path for prompt-based seed and reseed masks
- Add XMem ONNX propagation between seed frames for single-object tracking
- Support positive/negative points, positive rect prompts, and prompt keyframes
- Store generated masks in protobuf data for playback and downstream effects
- Add mask color/alpha plus stroke color/alpha/width effect controls
- Register ObjectMask with effect discovery and clip preprocessing jobs
- Add focused ObjectMask effect tests
- Support YOLO segmentation ONNX outputs, persist sparse RLE masks in object-detection protobuf data, and render configurable mask overlays in the Object Detection effect.
- Also normalize tracked object classes at save time, smooth short mask gaps, and expose Draw Mask / Mask Color / Mask Alpha only when mask data is available.
- YOLOv5: [1, num_boxes, 5 + classes]
- YOLO26 no-end2end export: [1, attributes, candidates], e.g. [1,116,8400]
-Also kept the YOLOv5-seg safety fix: when a classes file exists, mask coefficients are not treated as extra classes.
- Add libopenshot-side ONNX model validation for object detection
- Return user-displayable error text instead of throwing through callers
- Share ONNX load/error handling between validation and object detection processing
- Fail early for YOLOv5 on OpenCV older than 4.3
- Expose validation through ClipProcessingJobs for Python bindings
- Only mark timeline clips as open after Clip::Open() succeeds
- Allow later GetFrame() calls to retry opening clips after transient failures
- Prevent cache rebuilds from repeatedly generating blank frames for closed clips
- Add regression coverage for a failed first open followed by a successful retry
- Replace YOLOv3 Darknet loading with YOLOv5 ONNX model loading and validation.
- Parse YOLOv5 outputs with top class candidates for smoother labels.
- Improve SORT tracking with class-score smoothing and stricter geometry gates.
- Prevent active tracks from hopping to adjacent objects or tiny nested detections.
- Keep object ids stable through protobuf load/save and add an object-detection debug example.
- Add class-based default colors and matching border/background defaults.
- Add All Objects pseudo-selection support for tracked-object properties.
- Honor tracked-object corner radius when using tracker/object detector masks.
- Add regression tests for tracking stability, all-object styling, masks, and keyframes.
- Remove unused tracked-object rotation property from JSON, properties, and box values
- Add per-object Draw Text support alongside Draw Box
- Use deterministic class colors for Object Detector instead of random seeded colors
- Scale tracked-object stroke widths based on preview raster size
- Keep Object Detector text rendering gated by both global and per-object text settings