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. ![]()
Highlights
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.
YOLO26 Depth in Rust
Rust inference documentation now covers depth estimation with yolo26n-depth.onnx, including:
- Depth visualization with
--colormapand--depth-viz. - Per-pixel depth maps and valid depth ranges.
- Center-pixel depth value access.
- Updated jet and disparity visualization defaults.
ultralytics-inferenceversion0.0.29.
The updates arrived through PR #25192, PR #25193, and PR #25195, all contributed by @onuralpszr.
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. ![]()
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.
Reliability and Correctness Fixes
Results.update(probs=...)now wraps probabilities inProbs, restoringsummary(),plot(), and export functionality through PR #25157 by @JESUSROYETH.- RT-DETR standalone validation now respects
single_clsandclassesthrough 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_compilethrough PR #25162 by @Laughing-q. CopyPastemode is now validated explicitly through PR #25168 by @Laughing-q.- Segmentation loss no longer silently drops images when
overlap_mask=Falseand instance count is below batch size, fixed in PR #25173 by @JESUSROYETH. save_one_box()now returns crops in the requested BGR format regardless ofsave, 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
GMCthrough PR #25181 by @JESUSROYETH. - Trainer recovery now handles falsy
best_fitnessvalues 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_overlapavoidsuint8overflow 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.
Documentation and Usability Improvements
- Augmentation and export argument tables were corrected in PR #25163 by @raimbekovm.
- Semantic segmentation documentation now explains the
masks/folder fallback behavior through PR #25161 by @raimbekovm. - The tracker default and object-blurring solutions table were corrected in PR #25170 by @raimbekovm.
- CoreML and LiteRT mobile benchmarks now include YOLO26 Depth results through PR #25177 by @glenn-jocher.
- Platform code examples received clearer rendering and readability improvements in PR #25179 by @glenn-jocher.
- An obsolete documentation workflow badge was removed in PR #25180 by @glenn-jocher.
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! ![]()