v1.3.8

roboflow/inferencev1.3.8Jul 31, 2026by PawelPeczek-Roboflow

AI Summary

Adds opt-in model pre-loading for Workflows, introduces Rich Label visualization and Label v2, upgrades Gemini to v4 with native detection coordinates, and unifies region/environment selection.

Key Highlights

  • Opt-in model pre-loading for Workflows to reduce startup latency
  • Rich Label visualization with TrueType fonts and adaptive text sizing
  • Gemini v4 with native object detection coordinates
  • Uniform region & environment selection across SDK and CLI
  • RF-DETR object detection now uses full execution plan

New Features

  • Opt-in model pre-loading for InferencePipeline
  • Rich Label visualization block
  • Label v2 with adaptive text sizing
  • Gemini v4 Workflow block
  • Uniform region & environment selection
  • RTSPS fallback to OpenCV/FFmpeg TLS
  • Structured stream error codes

Full Release Notes

# 🚀 Added

## ⚡ Opt-in model pre-loading for Workflows in `InferencePipeline`

Video processing deserves predictable startup — until now, every model used by a Workflow was loaded lazily on the first frame, so the pipeline connected to the stream and then stalled while weights downloaded. `InferencePipeline.init_with_workflow(...)` gains an **opt-in** parameter that pre-loads all Roboflow models declared by the workflow's blocks at pipeline init, before a single frame is processed (@PawelPeczek-Roboflow, https://github.com/roboflow/inference/pull/2737):

```python
pipeline = InferencePipeline.init_with_workflow(
    video_reference="rtsp://...",
    workflow_specification=workflow,
    workflows_dependencies_pre_init=["roboflow_platform_model"],
    on_prediction=my_sink,
)
```

- **Concrete model ids** (like `yolov8n-640` in the spec) register in the model manager at init — weights are fetched upfront, first-frame latency stays flat.
- **Input-fed model ids** (`model_id: "$inputs.model"`) resolve once, on the first frame, when runtime parameters are known — including ids that blocks synthesize from version fields (e.g. `clip/<version>`).
- Pre-loading honors the effective step execution mode — nothing is fetched when steps execute remotely — and if a size-bounded model manager evicts a pre-loaded model, you get a warning instead of a silent cold start.
- Everything defaults to off: without the parameter, behavior is exactly as before.

The same knob is available on `ExecutionEngine.init(..., dependencies_pre_init=...)` for anyone embedding the Workflows Execution Engine directly. Under the hood, Workflow blocks can now declare their dependent resources (Roboflow models, Roboflow projects, third-party hosted models) through a typed, serializable contract, and the compiler can deduce the full dependency set of a compiled workflow — groundwork that pre-loading is the first consumer of. Execution Engine version goes to `v1.14.0`; see the [Execution Engine changelog](https://github.com/roboflow/inference/blob/main/docs/workflows/execution_engine_changelog.md) and the [block creation docs](https://inference.roboflow.com/workflows/create_workflow_block/) for the block-author contract.

## 🏷️ Rich Label visualization + Label v2 with adaptive text sizing

<img width="3024" height="1964" alt="image" src="https://github.com/user-attachments/assets/47a9253d-fd2e-4099-856c-3f39c5cf4d70" />


Detection labels finally look good: the new **Rich Label** visualization block renders sharp, anti-aliased text using TrueType fonts instead of OpenCV's dated bitmap fonts, with a dropdown of 20 approved fonts (downloaded from pinned URLs and verified against SHA-256 checksums). Alongside it, **Label v2** adds an Automatic text-sizing mode that scales label text to the image resolution, keeping labels readable from thumbnails up to 4K (@SkalskiP, https://github.com/roboflow/inference/pull/2722).

## 🤖 Gemini v4 with native object detection coordinates

<img width="2235" height="2838" alt="image" src="https://github.com/user-attachments/assets/edbe2933-35d7-4b6f-8193-86224b2246d0" />


The new `google_gemini@v4` Workflow block switches to Gemini-native `box_2d` object detection output and enforces a JSON output schema, eliminating the malformed-response parsing failures seen in v3. Across every tested Gemini model, v4 **increased mAP@50 while reducing average token usage and inference time per image**; the supported model catalog is expanded and v3 behavior is preserved for existing workflows (@SkalskiP, https://github.com/roboflow/inference/pull/2734).

## 🌍 Uniform region & environment selection

One switch selects the region, one the environment — and `inference`, the CLI, the SDK, and `inference-models` all resolve their default hosts from the same registry (@imbgar-roboflow, https://github.com/roboflow/inference/pull/2701):

```bash
ROBOFLOW_REGION=eu inference ...                              # api.roboflow.eu
ROBOFLOW_REGION=eu ROBOFLOW_ENVIRONMENT=staging inference ... # api.roboflow-eu.one
```

The scattered per-file host ternaries are gone; `inference_sdk/regions.py` is the single source of truth for the region × environment matrix.

## 🎛️ Execution & operations

- **RF-DETR object detection now uses the full execution plan**, aligning it with the rest of the `inference_models` execution stack (@dkosowski87, https://github.com/roboflow/inference/pull/2731; follow-up test fixes in https://github.com/roboflow/inference/pull/2733).
- **RTSPS streams fall back to OpenCV/FFmpeg TLS** when the primary path cannot negotiate the transport (@NVergunst-ROBO, https://github.com/roboflow/inference/pull/2727).
- **Structured stream error codes for RTSPS and auth failures** — stream connection problems now surface as typed, actionable errors instead of generic failures (@NVergunst-ROBO, https://github.com/roboflow/inference/pull/2725).

# 🔧 Fixed

- **Workflow output serialization no longer 500s on string-declared kinds** — output kinds declared as plain strings (e.g. `"string"`) crashed serialization with `TypeError: unhashable type: 'list'`; such kinds are now resolved by name and the matching serializer applied (@rafel-roboflow, https://github.com/roboflow/inference/pull/2730).
- **Profiling handles read-only filesystems** — an `OSError` when dumping profiler traces on read-only deployments is caught instead of failing the run (@iamfaham, https://github.com/roboflow/inference/pull/2732).
- **SAM3 usage tracking fixed** (@grzegorz-roboflow, https://github.com/roboflow/inference/pull/2720).

# 🚧 Maintenance

- **Security: `setuptools>=83.0.0`** dependency floor (@PawelPeczek-Roboflow, https://github.com/roboflow/inference/pull/2735).

---

### 📦 Side note: dual GPU build for Cosmos 3

There is still no released `transformers` version that ships the NVIDIA Cosmos 3 model code, so this release again publishes **two GPU server builds**:
- `roboflow/roboflow-inference-server-gpu:1.3.8` — the standard build, with the regular dependency stack (no Cosmos 3).
- `roboflow/roboflow-inference-server-gpu:1.3.8-cosmos3` — identical server, but with the custom `transformers` dependency set required by **NVIDIA Cosmos 3 Edge**:

  ```bash
  docker pull roboflow/roboflow-inference-server-gpu:1.3.8-cosmos3
  ```

Use the `-cosmos3` tag only if you need the Cosmos 3 Edge preview self-hosted; all other images are single-build.

---

**Full changelog:** [`v1.3.7...v1.3.8`](https://github.com/roboflow/inference/compare/v1.3.7...v1.3.8)

# 🏅  New Contributors
* @bczifra made their first contribution in https://github.com/roboflow/inference/pull/2698
* @iamfaham made their first contribution in https://github.com/roboflow/inference/pull/2732

**Full Changelog**: https://github.com/roboflow/inference/compare/v1.3.7...v1.3.8