Skip to content

v1.8.2

Choose a tag to compare

@MTaraszewski MTaraszewski released this 23 Oct 18:35
· 25 commits to main since this release
649b479

🚀 Added

🩻 Anomaly detection gets its own blocks

roboflow_core/anomaly_detection_model@v1 runs a PatchCore or FoundAD model and returns the raw anomaly_score, the threshold in effect, the is_anomalous verdict and the float32 anomaly_map that the classification block used to drop. roboflow_core/anomaly_heatmap_visualization@v1 paints that map over the image with the same ramp the Roboflow app draws, or any OpenCV colour map. Heads-up on the contract: the request confidence now decides the verdict, sigmoid((score - threshold) / scale) >= confidence, so you tune the operating point like for any other model; omit it and you get the model-eval recommendation, and the response gains anomaly_scale so you can re-decide yourself. PatchCore also stops allocating a 2 GiB distance matrix per request: 16 concurrent requests on an L4 went from 16× HTTP 500 to 16× 200 (@probicheaux, #3201).

🏭 Read the line before you run the model

The OPC UA Reader enterprise block (roboflow_enterprise/opc_reader@v1) returns the latest value of one OPC UA variable on every frame, so gating a video workflow on "is the line running" no longer needs a custom Python block. It subscribes instead of polling: the first run connects, every later run reads from memory, so the per-frame cost is the same at 60 fps as at 1 fps and a dead server never stalls the pipeline. During an outage runs repeat the last value with error_status set while the block reconnects in the background. Not available on the hosted platform (@rvirani1, #3176).

🧱 A new serving stack lands in the repo (preview)

@grzegorz-roboflow is cooking foundations for new server - change is here: #2251) - stay tuned for further update.

🧵 Detections Stitch stops round-tripping masks

With overlap_filtering_strategy: none every mask survives, so encoding each crop as a compact mask and decoding it again was pure overhead. Masks are now copied straight into one dense output array. Median block latency: 300 masks from twelve 640×640 crops 18.7 ms → 11.2 ms; 48 fragmented masks 14.1 ms → 0.7 ms (@rafel-roboflow, #3103).

🔧 Fixed

  • pip install inference-cli works again — supervision 0.31 removed ByteTrack, so a fresh CLI install failed on import; supervision is now capped <0.31.0 in every package. 1.8.1 shipped this fix to PyPI without a GitHub release (@YashwinReddy29, #3217; @PawelPeczek-Roboflow, #3224).
  • Dataset upload v1 compiles again — its images field advertised image as the schema name, so compilation raised BlockInterfaceError and /describe_interface crashed (@PawelPeczek-Roboflow, #3210).
  • SAM 3 remote mode returns the masks you asked for — the proxy routes dropped format and nms_iou_threshold, so sam3@v3 asked for RLE, got polygons and silently returned zero detections. binary now gets a 501 instead of polygon JSON it did not ask for (@iurisilvio, #3243).
  • YOLO-World, Grounding DINO and OWLv2 reach model monitoring — pingback results carried model_id: null, so Roboflow rejected them and failed the whole batch with them: 7,109 results from 113 devices in one month. Results now name the model that ran and carry a numeric requested confidence (@iurisilvio, #3205).
  • Buffer block keeps its history straight — later frames mutated earlier frames' outputs, corrupting histories and batch results downstream (@rafel-roboflow, #3242).
  • Property extraction on tracked and empty frames — tracker_id is read from its native field, empty frames return [] instead of raising, and a missing property names the upstream block that should supply it (@rafel-roboflow, #3106).
  • SDK directory loader keeps path casing — Images/FRAME.JPG was lowercased into a path that does not exist on Linux, and files differing only by case collapsed into one (@Ricardo-M-L, #3209).
  • CLI says what to do when nothing listens on 9001 — inference infer now explains it needs a server and how to start one or point --host at the hosted API; retries and async timeouts keep the right error class (@tsayin4, #3129; @dkosowski87, #3258).
  • Windows installer imports torchvision — native operators were missing from the bundle and the GPU build could keep CPU wheels; each flavour now installs a verified torch/torchvision pair, CUDA 12.6 for GPU (@ColePBryan, #3214).

⚙️ Execution Engine v1.17.0

Bumped from 1.16.1. Workflow syntax errors no longer echo the failing step's literal field values, so a password or a URL with credentials stays out of the HTTP error and the server log. ExecutionEngine.close() releases what blocks hold between runs (OPC UA Reader, MQTT Reader and Kafka Consumer connections): streamvision calls it when a pipeline is joined and the HTTP route queues it after the sink tasks. Blocks initialised before a failing block are closed instead of leaking threads. No workflow changes needed. Details in workflows/CHANGELOG.md (@rvirani1, #3176; @dkosowski87, #3264).

🚧 Maintenance

  • Versions — inference 1.8.2, inference-models 0.39.5, roboflow-workflows 0.2.13, streamvision 0.1.3 (@MTaraszewski, #3261, #3262, #3265).
  • inference-models 0.39.5 extras — anomaly_scale in anomaly metadata, TensorRT models fall back to tensorrt_lean, SAM3 visual prompts can return RLE, an opt-in vLLM proxy backend for Qwen3 VLMs, and boolean env vars accept 1/0, yes/no and on/off. Full list in inference_models/docs/changelog.md.
  • aiohttp ~=3.14.4 — picks up the fixes for GHSA-2g87-pp6c-29x5 and GHSA-5wr8-gcqf-gqf3 across workflows, streamvision, SDK and CLI (@grzegorz-roboflow, #3227).
  • CI builds each image once — every push to main saves the CPU and GPU images in Depot Registry and both USE_INFERENCE_MODELS legs pull the same digest; hosted E2E runs as four parallel shards (@MTaraszewski, #3211, #3228).
  • T4 runner stops re-downloading weights — model caches persist between stages and runs, and /model/clear now honours DISK_CACHE_CLEANUP (@MTaraszewski, #3232); SAM3 integration tests clear weights once per module instead of re-pulling 3.4 GB per test (@grzegorz-roboflow, #3229); uv caches reset weekly after growing to 19 GB (@grzegorz-roboflow, #3225).
  • Test and review hygiene — active-learning quota test pinned to one clock minute (@dkosowski87, #3256); batched tensor-native classification on the new server keeps one images_metadata entry per image (@grzegorz-roboflow, #3226); a legacy-to-new-stack parity review skill (@grzegorz-roboflow, #3255); CODEOWNERS update (@dkosowski87, #3257).
  • Docs — max_fps docstrings now describe what the code does: streams drop frames, video files process every frame unless ENABLE_FRAME_DROP_ON_VIDEO_FILE_RATE_LIMITING=True (@ssrajadh, #3163).

⚠️ Windows installer notice

The GPU installer attached to this release uses PyTorch CUDA 12.6 wheels. Blackwell GPUs, including GeForce RTX 50-series, are not supported by it; use the CPU installer on those machines. Docker images have their own compatibility matrix.

🏅 New Contributors

Full Changelog: v1.8.0...v1.8.2