New Release: Ultralytics v8.3.230

:rocket: Ultralytics v8.3.230 Release – Smoother Installs, Better Colors, Stronger Deployments

Ultralytics v8.3.230 is now live! :tada:

This release focuses on stability, UX, and deployment reliability:

  • Fixed color issues in visualizations (tensors + PIL) so your predictions look right everywhere :artist_palette:
  • Improved TensorRT dynamic input handling for more robust deployments :gear:
  • Made device selection safer on CPU/MPS :laptop:
  • Relaxed dependency constraints for smoother installs and upgrades :package:
  • Polished docs UX/SEO and CI workflows for long-term reliability :books:

You can view the full release details in the v8.3.230 GitHub release page, which is available via the official Ultralytics repository’s releases section.


:glowing_star: Summary

This is a quality-focused update: if you

  • visualize results with YOLO, RT-DETR, or SAM,
  • deploy models with TensorRT and dynamic shapes,
  • run on CPU or Apple MPS, or
  • maintain modern Python environments with recent dependencies,

then v8.3.230 should give you a more stable, predictable, and visually accurate experience. :white_check_mark:


:new_button: New & Improved Behavior

:artist_palette: 1. Correct Colors for Visualizations (Tensor + PIL)

Color handling in visualizations has been corrected for tensor pipelines and PIL outputs, thanks to @Y-T-G in the pull request that fixes color conversion for tensor inputs and PIL plots, which you can find in the Ultralytics repository under pull request number 22734.

What changed:

  • Fixed channel order for tensor inputs across:
    • YOLO detect
    • YOLO classify
    • RT-DETR
    • SAM
  • Ensured pil=True plots now return proper RGB images (no more “off” or washed-out colors).
  • Standardized behavior so Results.plot() routes through annotator.result(pil) for consistent outputs.

Impact:
If you are building UIs, dashboards, or workflows that rely on accurate overlays and colors, this update should make your visual outputs both trustworthy and consistent.


:gear: 2. More Robust TensorRT Dynamic Input Handling

Dynamic TensorRT models are now handled more safely, with updates from @Laughing-q in the pull request that improves validation with dynamic TensorRT models by using max_shape as the input_shape, available as pull request 22729 in the Ultralytics repository.

What changed:

  • Dynamic TensorRT models now use the maximum profile shape as the input shape, instead of the “optimal” one.

Impact:

  • Reduces runtime shape errors when running YOLO models at larger or varying resolutions.
  • More reliable for production deployments where input sizes can differ but must stay within a defined profile.

:brain: 3. Safer Device Selection for CPU / MPS

Device selection logic was hardened for CPU/MPS environments by @Y-T-G, in the pull request that sets CUDA_VISIBLE_DEVICES to an empty string to avoid Windows crashes, which is available as pull request 22740 in the Ultralytics GitHub repository.

What changed:

  • Calling select_device("cpu") or select_device("mps") now sets CUDA_VISIBLE_DEVICES to "" instead of "-1".

Impact:

  • Avoids crashes and odd CUDA behavior on some systems (including Windows).
  • Provides more predictable device behavior for:
    • CLI runs
    • Python API usage
    • Environments where GPUs must be “hidden” or disabled.

:package: 4. Looser Dependency Version Pins

Dependency constraints have been relaxed to play nicer with modern Python stacks, led by @glenn-jocher in the pull request that reverts strict upper dependency limits in pyproject.toml, which you can find as pull request 22721 in the Ultralytics repository.

What changed:

  • Removed upper bounds on major dependencies including:
    numpy, matplotlib, opencv-python, pillow, pyyaml, requests, scipy, torchvision, psutil, polars.
  • Updated PyTorch requirements to:
    • General: torch>=1.8.0
    • Windows: torch>=1.8.0,!=2.4.0 (skipping a known-bad Windows CPU version).
  • Updated ultralytics-thop to >=2.0.18 (no upper cap).

Impact:

  • Fewer version conflicts when installing Ultralytics YOLO into existing environments.
  • Better compatibility with recent PyTorch / numpy ecosystems, while still avoiding known-bad combos on Windows.

:framed_picture: 5. Docs UX & SEO Improvements

Documentation UX and SEO have been refined by @sergiuwaxmann, @glenn-jocher, and @RizwanMunawar via multiple pull requests:

  • A refreshed docs banner highlighting Ultralytics’ funding and investors, introduced in pull request 22689 in the Ultralytics GitHub repository, improves first impressions and branding.
  • Safer page title logic in main.html prevents template errors when pages lack a TOC or page metadata, implemented in pull request 22746 in the same repository.
  • Object blurring and cropping guides now embed a new YouTube tutorial aligned with current YOLO11 workflows, which you can explore through the pull request adding the video tutorial under ID J1BaCqytBmA (pull request 22745).

Impact:

  • More stable docs rendering and better SEO.
  • Easier onboarding for workflows like blurring and cropping using YOLO11.

:test_tube: 6. CI & Workflow Maintenance

Continuous integration and automation have been upgraded for long-term health, with changes provided by @dependabot in the pull request that bumps actions/checkout from v5 to v6 across workflows, which is available as pull request 22741 in the Ultralytics GitHub repository.

What changed:

  • All GitHub workflows (CI, docs, Docker, link checks, publishing, mirroring, etc.) now use actions/checkout@v6.

Impact:

  • Keeps automation aligned with current GitHub Actions best practices.
  • Helps ensure more reliable builds, tests, and releases in the future.

:magnifying_glass_tilted_left: What’s Included (PR Overview)

Here is a quick mapping of the key pull requests and authors in this release:

  • Dependency pin update and revert of strict upper limits by @glenn-jocher is detailed in pull request 22721 in the Ultralytics repository.
  • Dynamic TensorRT max_shape handling by @Laughing-q is implemented in pull request 22729.
  • Updated docs banner by @sergiuwaxmann is available as pull request 22689.
  • Workflow upgrade to actions/checkout@v6 by @dependabot is located in pull request 22741.
  • Safer docs main.html handling by @glenn-jocher is stored in pull request 22746.
  • New object blur/crop tutorial embed by @RizwanMunawar appears in pull request 22745.
  • Safer CUDA_VISIBLE_DEVICES handling for CPU/MPS by @Y-T-G is part of pull request 22740.
  • Fixed color conversion for tensor inputs and PIL plots by @Y-T-G is implemented in pull request 22734.

You can explore the complete diff between versions using the comparison tool that GitHub provides between tags v8.3.229 and v8.3.230 within the Ultralytics repository.


:test_tube: How to Try v8.3.230

Upgrade to the latest version with:

pip install --upgrade ultralytics

Then run a quick check, for example with YOLO11 detection:

from ultralytics import YOLO

model = YOLO("yolo11n.pt")  # latest recommended model family
results = model("https://ultralytics.com/images/bus.jpg")
results[0].plot(pil=True)   # verify colors and overlays look correct

You can also experiment with TensorRT exports and dynamic shapes:

from ultralytics import YOLO

model = YOLO("yolo11n.pt")
model.export(format="engine", dynamic=True)

engine_model = YOLO("yolo11n.engine")
engine_model("https://ultralytics.com/images/zidane.jpg", imgsz=960)

:raising_hands: Community & Feedback

This release is shaped by reports, PRs, and reviews from the YOLO community and Ultralytics team. Huge thanks to everyone who contributed:
@Y-T-G, @Laughing-q, @sergiuwaxmann, @RizwanMunawar, @dependabot, and all others involved.

We would love your feedback:

  • If you notice any remaining color issues, TensorRT edge cases, or device-selection quirks, please open an issue or join the discussion in the Ultralytics GitHub Discussions area.
  • If installs are smoother or your deployments are more stable with v8.3.230, sharing that experience also helps guide future work.

Enjoy v8.3.230, and let us know how it works in your pipelines! :rocket: