---
title: "Get the current runtime state of a vision mixer block."
method: GET
path: "/api/flows/{flow_id}/blocks/{block_id}/state"
tags: ["flows"]
---

# Get the current runtime state of a vision mixer block.

`GET /api/flows/{flow_id}/blocks/{block_id}/state`

Reflects the live overlay state — bus inputs, PiP visibility, FTB, DSK,
overlay alpha, per-PiP composition. Clients use this on (re)connect to
reconcile state; subsequent changes flow over the `VisionMixerStateChanged`
WebSocket event.

## Path parameters

- `flow_id` string, required
- `block_id` string, required

## Response `200`

Current vision mixer state

- VisionMixerState — Current runtime state of a vision mixer block. This is the snapshot a client uses to reconcile on (re)connect when WS events have not yet arrived. Static config (input count, labels, DSK count) is *not* included — that lives on the block resource itself.
  - `dsk_enabled` boolean[], required — DSK on/off state, one entry per configured DSK input.
  - `ftb_active` boolean, required — Whether Fade to Black is currently active.
  - `fx_available` boolean — Whether the shader FX engine is built into this pipeline (GPU backend with Shader FX enabled). When `false`, effect endpoints reject and shader transitions downgrade to Fade.
  - `input_effects` VideoEffect[] — Current per-input video effects (length = configured `num_inputs`). Empty when the FX engine is unavailable.
    - union — A persistent video effect ("look") applied to a vision mixer input or to the PGM master output. JSON encoding is internally tagged on `type`: `{"type": "pixelate", "block_size": 24.0}`. All numeric parameters are clamped server-side (see [`VideoEffect::sanitized`]); colors are `#RRGGBB` hex strings.
      - object — No effect (identity passthrough).
        - `type` 'none', required
      - object — Chroma key: pixels close to `key_color` become transparent.
        - `key_color` string — Key color as `#RRGGBB` (typically green `#00B140` or blue).
        - `similarity` number, float — Chroma distance below which pixels are fully keyed (0..1).
        - `smoothness` number, float — Soft edge width added above `similarity` (0..1).
        - `spill` number, float — Spill suppression amount — desaturates key-colored fringes (0..1).
        - `type` 'chroma_key', required
      - object — Mosaic pixelation (privacy or stylization).
        - `block_size` number, float — Block size in source pixels (2..200).
        - `type` 'pixelate', required
      - object — Disc-bokeh defocus blur (24-tap Vogel spiral, single pass).
        - `radius` number, float — Blur radius in source pixels (0..40).
        - `type` 'blur', required
      - object — Two-color luma mapping. `low`=black point color, `high`=white point color. Grayscale = `#000000`/`#FFFFFF`, sepia = `#2B1D0E`/`#FFF1DF`.
        - `high` string
        - `low` string
        - `mix` number, float — Blend between original (0) and duotone (1).
        - `type` 'duotone', required
      - object — Darkened corners.
        - `amount` number, float — Strength of the darkening (0..1).
        - `softness` number, float — Falloff softness (0.01..1).
        - `type` 'vignette', required
      - object — Animated VHS look: chroma shift, scanlines, tape noise.
        - `intensity` number, float — Overall intensity (0..1).
        - `type` 'vhs', required
      - object — Animated old-film look: grain, flicker, scratches, warm tone.
        - `intensity` number, float — Overall intensity (0..1).
        - `type` 'old_film', required
      - object — Edge detection glow added on top of the image.
        - `color` string — Glow color as `#RRGGBB`.
        - `intensity` number, float — Glow strength (0..1).
        - `type` 'edge_glow', required
      - object — CRT monitor: barrel distortion, scanlines, RGB grille.
        - `intensity` number, float — Overall intensity (0..1).
        - `type` 'crt', required
      - object — Newspaper-print halftone dots.
        - `dot_size` number, float — Dot grid size in pixels (3..40).
        - `type` 'halftone', required
      - object — Thermal-camera false color over luma.
        - `intensity` number, float — Blend between original (0) and thermal (1).
        - `type` 'thermal', required
      - object — Night-vision scope: green phosphor, lifted shadows, grain, vignette.
        - `intensity` number, float — Blend between original (0) and night vision (1).
        - `type` 'night_vision', required
      - object — Color quantization into bands (screen-print / toon).
        - `levels` number, float — Number of levels per channel (2..16).
        - `type` 'posterize', required
      - object — Underwater: wavy refraction, blue-green grade, caustic shimmer.
        - `intensity` number, float — Overall intensity (0..1).
        - `type` 'underwater', required
      - object — Primary color correction + white balance — the camera-matching tool. Every control is neutral at its default, so an untouched correction is an identity pass. Applied in a fixed order: white balance, brightness, contrast, hue, saturation, gamma.
        - `brightness` number, float — Additive brightness offset (-1..1, neutral 0).
        - `contrast` number, float — Contrast multiplier around mid-gray (0..2, neutral 1).
        - `gamma` number, float — Midtone gamma curve (0.1..3, neutral 1).
        - `hue` number, float — Hue rotation: -1..1 maps to -180..180 degrees (neutral 0).
        - `saturation` number, float — Saturation: 0 = grayscale, 1 = unchanged, up to 2 (0..2, neutral 1).
        - `temperature` number, float — White balance temperature: warm (+) / cool (-) (-1..1, neutral 0).
        - `tint` number, float — White balance tint: magenta (+) / green (-) (-1..1, neutral 0).
        - `type` 'color_correct', required
  - `input_resolutions` InputResolution[] — Negotiated resolution per input (length = configured `num_inputs`). `None` for inputs whose caps are not negotiated yet. Inputs can have arbitrary resolutions/aspects — clients must not assume the PGM aspect (the crop editor needs the real source aspect for its window math).
    - `height` integer, required
    - `width` integer, required
  - `master_effect` union — A persistent video effect ("look") applied to a vision mixer input or to the PGM master output. JSON encoding is internally tagged on `type`: `{"type": "pixelate", "block_size": 24.0}`. All numeric parameters are clamped server-side (see [`VideoEffect::sanitized`]); colors are `#RRGGBB` hex strings.
    - object — No effect (identity passthrough).
      - `type` 'none', required
    - object — Chroma key: pixels close to `key_color` become transparent.
      - `key_color` string — Key color as `#RRGGBB` (typically green `#00B140` or blue).
      - `similarity` number, float — Chroma distance below which pixels are fully keyed (0..1).
      - `smoothness` number, float — Soft edge width added above `similarity` (0..1).
      - `spill` number, float — Spill suppression amount — desaturates key-colored fringes (0..1).
      - `type` 'chroma_key', required
    - object — Mosaic pixelation (privacy or stylization).
      - `block_size` number, float — Block size in source pixels (2..200).
      - `type` 'pixelate', required
    - object — Disc-bokeh defocus blur (24-tap Vogel spiral, single pass).
      - `radius` number, float — Blur radius in source pixels (0..40).
      - `type` 'blur', required
    - object — Two-color luma mapping. `low`=black point color, `high`=white point color. Grayscale = `#000000`/`#FFFFFF`, sepia = `#2B1D0E`/`#FFF1DF`.
      - `high` string
      - `low` string
      - `mix` number, float — Blend between original (0) and duotone (1).
      - `type` 'duotone', required
    - object — Darkened corners.
      - `amount` number, float — Strength of the darkening (0..1).
      - `softness` number, float — Falloff softness (0.01..1).
      - `type` 'vignette', required
    - object — Animated VHS look: chroma shift, scanlines, tape noise.
      - `intensity` number, float — Overall intensity (0..1).
      - `type` 'vhs', required
    - object — Animated old-film look: grain, flicker, scratches, warm tone.
      - `intensity` number, float — Overall intensity (0..1).
      - `type` 'old_film', required
    - object — Edge detection glow added on top of the image.
      - `color` string — Glow color as `#RRGGBB`.
      - `intensity` number, float — Glow strength (0..1).
      - `type` 'edge_glow', required
    - object — CRT monitor: barrel distortion, scanlines, RGB grille.
      - `intensity` number, float — Overall intensity (0..1).
      - `type` 'crt', required
    - object — Newspaper-print halftone dots.
      - `dot_size` number, float — Dot grid size in pixels (3..40).
      - `type` 'halftone', required
    - object — Thermal-camera false color over luma.
      - `intensity` number, float — Blend between original (0) and thermal (1).
      - `type` 'thermal', required
    - object — Night-vision scope: green phosphor, lifted shadows, grain, vignette.
      - `intensity` number, float — Blend between original (0) and night vision (1).
      - `type` 'night_vision', required
    - object — Color quantization into bands (screen-print / toon).
      - `levels` number, float — Number of levels per channel (2..16).
      - `type` 'posterize', required
    - object — Underwater: wavy refraction, blue-green grade, caustic shimmer.
      - `intensity` number, float — Overall intensity (0..1).
      - `type` 'underwater', required
    - object — Primary color correction + white balance — the camera-matching tool. Every control is neutral at its default, so an untouched correction is an identity pass. Applied in a fixed order: white balance, brightness, contrast, hue, saturation, gamma.
      - `brightness` number, float — Additive brightness offset (-1..1, neutral 0).
      - `contrast` number, float — Contrast multiplier around mid-gray (0..2, neutral 1).
      - `gamma` number, float — Midtone gamma curve (0.1..3, neutral 1).
      - `hue` number, float — Hue rotation: -1..1 maps to -180..180 degrees (neutral 0).
      - `saturation` number, float — Saturation: 0 = grayscale, 1 = unchanged, up to 2 (0..2, neutral 1).
      - `temperature` number, float — White balance temperature: warm (+) / cool (-) (-1..1, neutral 0).
      - `tint` number, float — White balance tint: magenta (+) / green (-) (-1..1, neutral 0).
      - `type` 'color_correct', required
  - `overlay_alpha` number, double, required — Multiview overlay alpha (0.0–1.0).
  - `pips` PipState[], required — Per-PiP runtime state (length = configured `num_pips`).
    - `bg` integer, nullable — Background input index, or `None` if no bg is set.
    - `transforms` object — Per-source crop transforms, keyed by input index.
    - `zones` Zone[], required — Overlay zones (FIFO order, oldest first inside each zone).
      - `border` ZoneBorder — Border drawn around each source box in a zone. Rendered by the mixer itself on a PGM-side overlay — borders are a function of the mixer's own live geometry (boxes move with morphs, takes and punch-ins), so no external graphics source could stay in sync.
        - `color` string, required — Border color as `#RRGGBB` or `#RRGGBBAA` hex.
        - `width` number, float, required — Border width in PGM canvas pixels, drawn outward from the box edge. Every render target scales it by `region_width / pgm_width`, so the border looks proportionally identical on PGM, the PVW big display and the PiP thumbnails regardless of resolution.
      - `capacity` integer, nullable — Max sources allowed in the zone. `None` = unlimited (up to [`MAX_PIP_OVERLAYS`]). A capacity of 1 is "swap mode": replacing the source animates a cross-fade.
      - `rect` NormRect — Normalized rectangle in container coordinates. Each component is in `0.0..=1.0`. `(x, y)` is the top-left corner; `(w, h)` is the size. Used to position a PiP overlay slot anywhere inside its parent region without coupling to the output resolution.
        - `h` number, float, required
        - `w` number, float, required
        - `x` number, float, required
        - `y` number, float, required
      - `sources` integer[] — Current sources (FIFO, oldest first). Sources auto-tile within `rect`.
  - `preview_input` integer, nullable — Current PVW input. `None` when PVW is a PiP source.
  - `preview_pip` integer, nullable — PiP index currently displayed on PVW, or `None` if PVW is an input.
  - `program_input` integer, nullable — Current PGM input. `None` when PGM is a PiP source.
  - `program_pip` integer, nullable — PiP index currently displayed on PGM, or `None` if PGM is an input.

## Other responses

- `404` — Block has no live state (pipeline not running)

## Changes

> 25 revisions in range; 17 could not be searched.

- **2026-04-07** `1e67862a080e` — 1 breaking
  - api path removed without deprecation

[Change history](https://skmtc.dev/eyevinn/apis/strom-api/changes/api/flows/:flow_id/blocks/:block_id/state/get.md)

---

[API](https://skmtc.dev/eyevinn/apis/strom-api.md) · [All operations](https://skmtc.dev/eyevinn/apis/strom-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/eyevinn/strom-api/revisions/0df7ca64263f/schema)
