Eliminate bundled ONNX models (~348 MB) from the installer. Replace with a post-install download system that is hardware-aware, integrity-verified, and user-controllable.
An in-depth explanation of each of these implementations can be found here
Pre-implementation
Computed SHA-256:
| FILE |
SHA-256 SUM |
| FaceNet_128D.onnx |
c37946ea8cce94141777dcbcccb8a61786c9a7c4f0c9f40471bd27029fa664ed |
| YOLOv11_Medium.onnx |
f53a0bf6a141788f329ab92b438045f0ebac73ff10285b9ef0d06551cdbd01ea |
| YOLOv11_Medium_Face.onnx |
fd3ab085d776ee1ce59fd47def82c2abf49bbfde3a10a1b5b660b76cb41a6912 |
| YOLOv11_Nano.onnx |
634279b40c07c6391472c51ad45b81ebc48706a9a1fe72dd3396322acd0c053b (as mentioned in Ultralytics v8.3.0 release assets |
| YOLOv11_Nano_Face.onnx |
1d09cb0f31d46700a3e80838623aeafa125f2cd0d1c9a12f0b0853bf64b0a83d |
| YOLOv11_Small.onnx |
8bfa953dbe93bef33b09be00da01cb4727f25416cb5d2fdb2a9f1083283b8aaa |
| YOLOv11_Small_Face.onnx |
213333bbecd049c8e1d8bc63b4799df08d2ec52c8f8a6737b37b75ba839d7c03 |
Backend Foundation
Backend API
Build and CI
Frontend
Eliminate bundled ONNX models (~348 MB) from the installer. Replace with a post-install download system that is hardware-aware, integrity-verified, and user-controllable.
An in-depth explanation of each of these implementations can be found here
Pre-implementation
models-v1.0GitHub Release tagComputed SHA-256:
Backend Foundation
APSchedulerfromrequirements.txt; addpsutilandhttpxapp/models/model_registry.py:ModelSpecTypedDict +MODEL_REGISTRYdictapp/models/model_registry.json: committed registry export for offline bundlingapp/utils/model_downloader.py:ensure_model()with streaming download, SHA-256 verification, and retry (with Range-header resumability).YOLO.py: replace eagerInferenceSessionin__init__with lazyget_session()FaceNet.py: same lazy pattern; on-demand only, not included in first-run tier downloadBackend API
app/utils/hardware_detect.py:detect_hardware_tier()usingpsutil+ort.get_device()app/routes/models.py:models_routerwith:GET /models/statusGET /models/recommended-tierPOST /models/download/{model_key}: returnstask_idGET /models/download/{task_id}/progress: SSE streamDELETE /models/{model_key}POST /models/setup: accepts tier, triggers download of that tier's two YOLO modelsmodels_routerinmain.pyBuild and CI
backend/PictoPy.spec: excludesONNX_Exports/, bundlesmodel_registry.jsonbuild-and-release.yml: swap inlinepyinstallercommand for spec file; removerobocopy/cpmodel-copy stepsONNX_Exports/absent,model_registry.jsonpresent at correct pathFrontend