v1.3.8
π 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, #2737):
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-640in 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 and the block creation docs for the block-author contract.
π·οΈ Rich Label visualization + Label v2 with adaptive text sizing
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, #2722).
π€ Gemini v4 with native object detection coordinates
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, #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, #2701):
ROBOFLOW_REGION=eu inference ... # api.roboflow.eu
ROBOFLOW_REGION=eu ROBOFLOW_ENVIRONMENT=staging inference ... # api.roboflow-eu.oneThe 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_modelsexecution stack (@dkosowski87, #2731; follow-up test fixes in #2733). - RTSPS streams fall back to OpenCV/FFmpeg TLS when the primary path cannot negotiate the transport (@NVergunst-ROBO, #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, #2725).
π§ Fixed
- Workflow output serialization no longer 500s on string-declared kinds β output kinds declared as plain strings (e.g.
"string") crashed serialization withTypeError: unhashable type: 'list'; such kinds are now resolved by name and the matching serializer applied (@rafel-roboflow, #2730). - Profiling handles read-only filesystems β an
OSErrorwhen dumping profiler traces on read-only deployments is caught instead of failing the run (@iamfaham, #2732). - SAM3 usage tracking fixed (@grzegorz-roboflow, #2720).
π§ Maintenance
- Security:
setuptools>=83.0.0dependency floor (@PawelPeczek-Roboflow, #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 customtransformersdependency set required by NVIDIA Cosmos 3 Edge: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
π New Contributors
Full Changelog: v1.3.7...v1.3.8