New Release: Ultralytics v8.4.96

:rocket: Ultralytics v8.4.96: Faster NDJSON, YOLO26 Depth Deployment, and Reliability Fixes

Ultralytics v8.4.96 is now available! This release delivers safer and dramatically faster NDJSON conversion, expanded YOLO26 Depth deployment guidance, new Ultralytics Platform On Premise documentation, and a broad set of training, validation, tracking, and inference fixes. :glowing_star:

:sparkles: Highlights

:locked_with_key: Faster, safer NDJSON conversion

NDJSON records are now validated during the existing hash scan, eliminating an additional full-dataset pass while strengthening filesystem safety.

  • Collision-free filenames are generated from stable record indexes.
  • Untrusted source filenames and class names can no longer control output paths.
  • Classification datasets use dense numeric class directories with hidden metadata preserving original class names.
  • Reported conversion performance improves by approximately 7.8Γ— for detection and 6.8Γ— for classification compared with the reverted implementation.

This work was completed through PR #25188 by @amanharshx and finalized without a validation prepass in PR #25196 by @glenn-jocher.

:straight_ruler: YOLO26 Depth in Rust

Rust inference documentation now covers depth estimation with yolo26n-depth.onnx, including:

  • Depth visualization with --colormap and --depth-viz.
  • Per-pixel depth maps and valid depth ranges.
  • Center-pixel depth value access.
  • Updated jet and disparity visualization defaults.
  • ultralytics-inference version 0.0.29.

The updates arrived through PR #25192, PR #25193, and PR #25195, all contributed by @onuralpszr.

:rocket: New Intel deployment guide

A new guide explains how to deploy Ultralytics YOLO26 using Intel DL Streamer, OpenVINO, GStreamer, and Docker. It includes FP32, FP16, and INT8 export workflows for Intel CPUs, GPUs, and NPUs, plus GPU/NPU inference, video output, and multi-stream processing.

Explore the implementation in PR #25078 by first-time contributor @tbujewsk. :tada:

:office_building: Expanded Platform On Premise documentation

Enterprise users can now find clearer guidance for connecting Linux, macOS, and Windows workers to the Ultralytics Platform. These workflows support local dataset browsing, annotation, training, and model storage while keeping image and video pixels on the customer’s computer.

The documentation was introduced in PR #25167 and expanded in PR #25174, both by @glenn-jocher.

:hammer_and_wrench: Reliability and Correctness Fixes

  • Results.update(probs=...) now wraps probabilities in Probs, restoring summary(), plot(), and export functionality through PR #25157 by @JESUSROYETH.
  • RT-DETR standalone validation now respects single_cls and classes through PR #25158 by @JESUSROYETH.
  • Keypoints and segmentation polygons remain aligned with boxes after letterbox resizing thanks to PR #25156 by @JESUSROYETH.
  • Classification confusion matrices no longer contain a phantom background class following PR #25155 by @JESUSROYETH.
  • TensorBoard graph tracing now uses dataset channels through PR #25160 by @Laughing-q.
  • Validation compile mode is forwarded correctly to attempt_compile through PR #25162 by @Laughing-q.
  • CopyPaste mode is now validated explicitly through PR #25168 by @Laughing-q.
  • Segmentation loss no longer silently drops images when overlap_mask=False and instance count is below batch size, fixed in PR #25173 by @JESUSROYETH.
  • save_one_box() now returns crops in the requested BGR format regardless of save, corrected in PR #25172 by @JESUSROYETH.
  • FastSAM no longer overwrites the first detection when processing full-image boxes following PR #25175 by @JESUSROYETH.
  • ECC camera-motion translation is now rescaled correctly after downscaling in GMC through PR #25181 by @JESUSROYETH.
  • Trainer recovery now handles falsy best_fitness values and NaN branches correctly through PR #25176 by first-time contributor @Zenka737.
  • YOLOE segmentation training no longer mixes text prompts into visual-prompt training, fixed in PR #25178 by @JESUSROYETH.
  • CLI choice arguments now receive explicit configuration validation through PR #25182 by @glenn-jocher.
  • End-to-end NMS now returns original detection indexes with return_idxs=True, while dead confusion-matrix code was removed in PR #25187 by @Zenka737.
  • polygons2masks_overlap avoids uint8 overflow that could drop instances beyond 128 overlaps, fixed in PR #25185 by @JESUSROYETH.
  • Python subprocess package-import handling was updated in PR #24447 by @raimbekovm, with the overbuilt approach subsequently reverted in PR #25190 by @glenn-jocher.

:books: Documentation and Usability Improvements

:package: Get Started

Upgrade to the latest release with:

pip install -U ultralytics

You can review every commit in the v8.4.95 to v8.4.96 full changelog and find release artifacts on the Ultralytics v8.4.96 release page.

Give v8.4.96 a try and share your feedback, benchmarks, and issue reports with the Ultralytics community. Thank you to every contributor who helped make this release faster, safer, and more reliable! :raising_hands: