v4.0.0-beta.5

CVHub520/X-AnyLabelingv4.0.0-beta.5Apr 26, 2026by CVHub520

AI Summary

This significant release adds client-side SAM 3 ONNX support, HEIC/HEIF image loading, and configurable Qt image allocation limits, while fixing numerous security and thread safety issues.

Key Highlights

  • Added client-side SAM 3 ONNX support for text-grounded segmentation
  • Added HEIC and HEIF image loading support
  • Added configurable Qt image allocation limit via flag
  • Replaced eval with ast.literal_eval to prevent code injection
  • Fixed multiple race conditions in model manager and inference threads

New Features

  • SAM 3 ONNX support for text-grounded segmentation
  • HEIC and HEIF image loading support
  • Qt image allocation limit configuration

Full Release Notes

https://github.com/user-attachments/assets/da8b0c7b-f35a-487a-bcbc-cdb20583ff34

> PyPI: https://pypi.org/project/x-anylabeling-cvhub/
> Baidu Cloud: https://pan.baidu.com/s/1pgaw02inCvbEgOme9ajDJA?pwd=e528

> [!NOTE]
> Due to compatibility issues across different systems, if the precompiled version doesn’t work properly on your machine, you can try building and running it from source instead. For details, check out the official installation guide and user documentation.

### πŸš€ New Features

- Add client-side SAM 3 ONNX support for text-grounded segmentation. (#1232)
- Add HEIC and HEIF image loading support.
- Add configurable Qt image allocation limit via `--qt-image-allocation-limit` flag.

### πŸ› Bug Fixes

- Replace `eval` with `ast.literal_eval` in label dialog to prevent arbitrary code injection.
- Scope SSL verification bypass to model downloads only to avoid unintended side effects.
- Avoid shared mutable defaults in shape and label dialogs.
- Guard `loaded_model_config` reads and writes with a lock to prevent race condition.
- Connect QThread `finished` to `deleteLater` in model manager to prevent use-after-free.
- Load an independent config copy in `fetch_models_async` to eliminate shared-dict race with main thread.
- Move non-video batch inference loop to QThread to prevent UI freeze.
- Call `quit()` on `pre_inference_thread` in GroundingSAM2 unload to actually stop the thread.
- Disconnect `scan_finished` signal before EXIF cleanup to prevent a stale signal from killing a new scan.
- Launch Ultralytics training via a stable worker subprocess. (#1354)
- Return `(None, None)` from `imread_unicode` when `imdecode` fails on corrupt images.
- Guard VOC XML `size` and object `name` element lookups against missing elements.
- Correct "diccicult" typo to "difficult" in MOT export shape lookup.
- Guard all `classes.index` calls against unknown labels to prevent `ValueError`.
- Unpack shape in canvas label-text loop to fix stale variable reference in `paintEvent`.
- Guard `shapes_backups` access in `mouseReleaseEvent` against empty list and out-of-range index.
- Guard `scale_fit_window` and `scale_fit_width` against zero pixmap or widget dimensions.
- Replace `textChanged` disconnect/connect with `QSignalBlocker` to prevent `TypeError` on first load.
- Raise on download failure in `get_model_abs_path` instead of silently returning `None`.
- Remove always-false membership loop in provider config handling.
- Clear stale PPOCR output files before each export run to prevent data accumulation.
- Log unhandled settings keys instead of silently ignoring them.
- Log skipped files in async EXIF scan instead of silently swallowing exceptions.
- Correct remote server debug log to use `current_model_id` and fix `parameters` typo.

### πŸ› οΈ Improvements

- Speed up canvas `fill_drawing` path by replacing `deepcopy` with a shallow copy.
- Avoid redundant base64 decode-encode round-trip in `LabelFile.load`.
- Speed up temporary video handling by using `shutil.copy2` instead of a full in-memory read.
- Add GeCo2 counting example and usage documentation. (#1293)
- Add troubleshooting tip for SOCKS proxy error in the Chatbot FAQ.
- Harden PyInstaller executable build script and normalize repository line endings.

### 🌟 Contributors

A total of 2 developers contributed to this release.

Thank @CVHub520, @fhong-jpg

**Full Changelog**: https://github.com/CVHub520/X-AnyLabeling/compare/v4.0.0-beta.4...v4.0.0-beta.5