Add production-shaped video processor runtime - #2800
Conversation
|
👋 Thanks for the pull request! Here is how automated Claude review works here, so you spend credits (and reviewer time) wisely. 🚧 Right now this is a draft, so automated Claude review is paused — nothing is being spent yet. Mark it Ready for review to trigger it. Warning 💸 The Claude reviewer bills in credits, not vibesAutomated review spins up a real agent that reads real code and spends real credits on every pass. It is glad to help — but it is not a rubber duck, a linter you poke in a loop, or a substitute for reading the contributing guide. Treat it like an expensive senior reviewer whose time you booked, and show up prepared. Draft when unsure, Ready when you mean it:
However you get there, arrive prepared:
Reviews are not free. A draft costs nothing to review; a Ready PR is a promise that it is worth reviewing.
|
|
Staging GStreamer cadence follow-up (2026-08-18):
Conclusion: model execution was not slower in NVDEC mode; bursty producer delivery plus the one-frame latest-only InferencePipeline queue discarded otherwise processable frames. The bounded two-frame FIFO absorbs most bursts for ~5 ms median mean-latency cost. Code is on this branch in a8b6cfb plus IPC telemetry allowlist fixes f901faa / 3dd6dc4. Infra PR roboflow-infra#2454 now enables 2/lazy only for the staging ingest experiment; chart defaults remain 1/eager and the env block remains disabled by default. |
|
Closing in favor of the extraction: the processor runtime now lives in the dedicated https://github.com/roboflow/rf-video-processor repository (code, tests, image builds, and the ARCHITECTURE/DEPLOYMENT/MULTI_CELL docs are canonical there — imported from this branch at 389a634, with base images pinned to inference-server 1.5.0+ so the merged #2832 tensor-painter fix is included). The one inference-side piece, the GStreamer CUDA producer telemetry delta, is #2868. This branch stays as the pre-extraction history and evidence archive alongside #2616. |
… GStreamer CUDA producer (#2868) Extracted from the video processor runtime branch (#2800): - ROBOFLOW_GSTREAMER_CUDA_APPSINK_SYNC opts the appsink into clock-synced delivery for controlled comparisons; the low-latency sync=false default is unchanged - grab-cadence counters (gap count/mean/max, under-half-period and over-1.5-period buckets) surface source delivery jitter in tensor_bridge_stats without touching the frame path - source_stream_metadata exposes bounded width/height/fps for runtime telemetry The original branch asserted grab_gap_mean_us == 35_000 for gaps of 10ms and 70ms; the implementation reports the integer mean (40_000), so the assertion was corrected here. Co-authored-by: Paweł Pęczek <146137186+PawelPeczek-Roboflow@users.noreply.github.com>
Summary
and platform mutations supervisor-owned;
processorAccessTokenon status and results mutations without exposingit to child IPC, environment, logs, metrics, or status;
[POC — do not merge] Video sources: connector agent + warm processor + local media plane #2616.
This supersedes the deployable worker portion of #2616. The benchmark corpus and historical result
artifacts stay on the POC branch; this PR is the production-shaped working branch and does not need
to merge yet.
Architecture documentation
ARCHITECTURE.md— connector/control/media/result flows, repository ownership, process boundaries, and authenticationDEPLOYMENT.md— cell topology, runtime configuration, exact image provenance, rollout order, smoke gates, and rollbackMULTI_CELL_SCALING_RFC.md— sticky home-cell placement, relay sharding, dedicated capacity, admission, and phased rolloutRuntime contract
PROCESSOR_JOB_EXECUTION_MODE=thread|processPROCESSOR_VIDEO_INGEST_MODE=pyav|gstreamer_cudaENABLE_TENSOR_DATA_REPRESENTATION=true|falseENABLE_FRAME_DROP_ON_VIDEO_FILE_RATE_LIMITING=true|falsegstreamer_cudarequires tensor representation;Exact image evidence
The proof-aware worker images were built from exact runtime revision
bbf0b89e15d4560a2792ed723b05b87a12e410ea. Current PR head includes only the later deploymentevidence update.
4795afc7-337b-4061-a739-7a0b70f37148(SUCCESS)video-processor-runtime@sha256:85f4395ce395789720eaacc72732cc2d08a07174ffc0a6681218d734009b91a2video-processor-cpu-telemetry@sha256:93517c11390ba1267d77f7e8fb8f6a0f5a584d2f4d850527aa81c88843086530dd2013a2-085c-4fc2-b735-b18a152671f1GPU and1c41387c-33d0-4f27-b04c-29e8890f15a3CPU (SUCCESS)The exact GPU and CPU images are currently healthy on staging. GPU is process-per-job with
capacity 8; CPU remains threaded with capacity 4. Both report ready, zero active jobs, and zero
container restarts.
Control-plane compatibility
The current roboflow #14376 server contract and this worker agree on all proof-bearing mutations:
/video-jobs/:jobId/statusincluding heartbeat, completion, and failure;/video-jobs/:jobId/results/upload-urls;/video-jobs/:jobId/results/complete.The token remains in supervisor-only memory and is removed on finish, cancellation, failure,
removal, or reclaim. The old server ignores the backward-compatible extra request field, enabling
worker-first rollout.
All video control traffic must use
https://api.roboflow.onein staging orhttps://api.roboflow.comin production. Hosting routes it tolight-v2-video; workers and othervideo components must not target
light-v2-deviceor a direct Functions/Cloud Run URL.Validation
git diff --checkvalidation;Remaining staging gate
Deploy the matching roboflow #14376
light-v2-videofunction, Hosting rewrites, and app. Then runone authenticated GPU and CPU lifecycle smoke proving source list, create/claim, heartbeat,
results, preview, JSON events, cancellation, and
activeJobs=0. The stable workspace route returns404 until that API/Hosting deployment is live.