Documentation

vMix + Tevyr

vMix is the live production software broadcasters and streamers use when they need a control surface that can do everything OBS does plus replay, multi-camera switching, and instant graphics. Tevyr fits vMix the same way it fits OBS — as a browser-source overlay or a webhook-driven cue partner — with a few vMix-specific shortcuts that make wiring even faster.

What's vMix?

vMix is paid commercial production software for Windows. It's the standard tool for live sports broadcasts, high-end streams, and any production with multiple inputs and instant replay. Get it from vmix.com.

What you can do

Tevyr as a vMix Web Browser input

vMix's built-in Web Browser input renders any URL as a video source. Drop a Tevyr output URL in and you get a frame-perfect timer overlay you can switch to like any other input.

Shortcut button → Tevyr action

vMix's Shortcuts feature can fire URLs. Bind a keyboard shortcut, MIDI key, or vMix Web Controller button to a Tevyr API call — driving Tevyr from your existing vMix shortcut list.

vMix Title overlay + Tevyr text

For broadcast-style lower thirds with synced timer text, fire vMix Title input macros from Tevyr webhooks. The 'time remaining' field updates in vMix automatically.

Recording / streaming control

Tevyr session start → vMix StartRecording. Tevyr session end → vMix StopRecording. Same pattern for Stream Start/Stop. Producer never touches the vMix recording panel.

Pattern 1 — Tevyr as a vMix Web Browser input

The fastest setup. vMix has a native Web Browser input type that renders any URL.

Setup

  1. In vMix, click Add InputWeb Browser
  2. In the URL field, paste your Tevyr output URL
  3. Set:
    • Width: 1920 for full-frame, smaller for corner overlays
    • Height: 1080 (full-frame) or fit to your overlay design
    • Frame Rate: 30 (Tevyr doesn't update faster than that)
  4. Tick Audio if you want Tevyr's audio chimes routed through vMix
  5. Click OK

The Tevyr browser input now appears in your input list. Use vMix's standard switching, transitions, and overlay channels (1-4) to bring it on/off air.

Tip

For overlay use, set the Tevyr input as Overlay 1 in vMix. Pin it on top of any active scene. Toggle it on/off with vMix's Overlay 1 button or shortcut — the timer floats over your camera feed without changing the underlying scene.

Transparent background

Add ?bg=transparent to your Tevyr output URL so the timer floats over your live video without a black box behind it:

https://tevyr.com/output/YOUR_OUTPUT_ID?sig=...&bg=transparent

Pattern 2 — vMix Shortcut → Tevyr API call

vMix's Shortcuts feature can fire URLs via the WebControllerSendString function — though for our purposes the simplest path is the OpenURL function plus a small loopback trick, or routing through Companion.

Easiest approach: route through Companion

  1. Set up Bitfocus Companion as your control hub
  2. In vMix, bind the keyboard shortcut you want (e.g., F5) to a Companion button
  3. Companion fires the Tevyr API call

This sounds indirect but it's actually how most production-grade rooms wire it — Companion sits between every control surface and every target, so swapping any piece is a one-line change.

Direct approach (no Companion)

Use vMix's WebControllerSendString function to fire a custom URL:

  1. Settings → Shortcuts → Add
  2. Function: WebControllerSendString
  3. Value: the full Tevyr API URL with room_id and api_key
  4. Trigger: keyboard shortcut, MIDI note, or any vMix trigger source

vMix fires the URL when the shortcut triggers. Tevyr responds. Done.

Pattern 3 — vMix Title text driven by Tevyr

This is the broadcast-style lower-third pattern: a vMix Title input shows "Speaking now: [Name] · [Time remaining]" with the time field updating live from Tevyr.

Setup

  1. In vMix, create a Title input with text fields for Speaker.Text and TimeRemaining.Text
  2. Use a small bridge (Companion is easiest) to:
    • Listen for Tevyr's session.started webhook → call vMix's SetText function on Speaker.Text
    • Poll Tevyr's /v1/event/playback_status once per second → update TimeRemaining.Text

The result: when Tevyr advances to a new session, vMix's lower third updates with the new speaker name. As the timer counts down, the time field tracks live.

This is significantly more work than browser-source overlay. Only worth it if you need true broadcast-grade typography and animations from vMix's title engine.

Pattern 4 — Tevyr cues vMix recording

Have Tevyr start and stop the vMix recording so files are perfectly trimmed.

Setup

  1. In Companion, add a vMix connection (uses vMix's TCP/HTTP API)
  2. Add a trigger: on Tevyr webhook event=session.started AND session.title="Show Start" → vMix action StartRecording
  3. Add another: on Tevyr webhook event=session.completed AND session.title="Show End" → vMix action StopRecording

The producer programs the show flow once. The recording bookends itself.

Pattern 5 — Drive vMix from a Tevyr macro (vMix HTTP integration)

The newest path: a first-class vMix (HTTP API) integration template in Tevyr's Settings → Integrations. Tevyr stores the vMix Web Controller URL as an encrypted connection; macros call vMix functions directly via flow.http_request. No Companion bridge, no per-shortcut URL setup, no extra middleware.

Use this when:

  • You want Tevyr macros (not vMix shortcuts) to be the source of truth for show automation
  • You're building branching logic (run a recording cue only if a session label matches; cut to a specific input based on prior step output)
  • You already have Tevyr managing the rundown and want vMix to follow
Network requirements

vMix's Web Controller listens on the LAN (default port 8088). Tevyr runs in the cloud — you must expose it via a Cloudflare Tunnel, Tailscale Funnel, or your firewall's reverse proxy. Plain LAN-only setups will not work; the vMix API URL you paste below must resolve from any internet host.

Setup

  1. In vMix, Settings → Web Controller → Enable (default port 8088)
  2. If you want basic auth, set the username/password in vMix's Web Controller settings — Tevyr supports inline basic auth
  3. Expose your vMix machine publicly via a tunnel (e.g. https://vmix.example.com:8088)
  4. In Tevyr, Settings → Integrations → Add new → vMix (HTTP API)
  5. Paste the URL. If you set basic auth, embed it inline: https://user:pass@vmix.example.com:8088
  6. Name the connection, click Save, then Test — Tevyr calls /api/?Function=Version and shows a green toast with the vMix version on success

Use the connection in a macro

Drag flow.http_request, pick your vMix connection. Available actions:

  • Cut to input/api/?Function=Cut&Input={{fields.input}} (input number or input name)
  • Quick play input/api/?Function=QuickPlay&Input={{fields.input}}
  • Start recording/api/?Function=StartRecording
  • Stop recording/api/?Function=StopRecording
  • Start streaming/api/?Function=StartStreaming

Recipes

Recipe — Cut to input 3 on session start

Trigger: lifecycle event on_session_start. Action: Cut to input. Input: 3.

Recipe — Auto-record around the show

Two macros wired to event-lifecycle triggers:

TriggerAction
on_event_startStart recording
on_event_endStop recording (with flow.wait_ms 5s prior to capture closing applause)

Recipe — QuickPlay a sting on a hotkey macro

Bind a Tevyr keyboard shortcut macro to a flow.http_request → QuickPlay step with the input set to your sting input. Press the hotkey, the sting plays through vMix without you switching apps.

Troubleshooting

401 Unauthorized — basic auth wrong. Re-check the inline credentials in your connection URL; remember the format is https://user:pass@host:port.

502 Bad Gateway — tunnel down. Hit https://your-vmix.example.com/api/?Function=Version from a non-LAN device to confirm the tunnel works before re-testing.

Function not found — typo in the input name or function. vMix matches input names case-insensitively but spaces matter. Use input numbers (1, 2, 3) when in doubt.

Web Controller is enabled but the URL returns 404 — vMix needs to be running (not just installed) for the Web Controller to respond. Confirm via https://your-vmix.example.com/api/?Function=Version in a browser first.

Recipes (browser-source overlay)

Replace YOUR_OUTPUT_ID and sig with your actual output URL parameters.

Full-frame Tevyr screen as a vMix input

https://tevyr.com/output/YOUR_OUTPUT_ID?sig=...

vMix Web Browser input: 1920×1080, 30fps. Use as a regular input, switch to it for full-screen sponsor walls, agendas, and break screens.

Transparent timer overlay

https://tevyr.com/output/YOUR_OUTPUT_ID?sig=...&bg=transparent

vMix Web Browser input: 1920×1080. Set as Overlay 1. Toggle on/off with vMix's Overlay 1 button.

Compact corner timer

https://tevyr.com/output/YOUR_OUTPUT_ID?sig=...&bg=transparent&size=small

vMix Web Browser input: 400×120. Position via vMix's Position panel; pin top-right or bottom-right.

Troubleshooting

"vMix Web Browser input is laggy"

  • vMix's web rendering is CPU-bound. Each browser input uses a Chromium instance; expect 5-10% CPU per 1080p source on a modern PC
  • Lower the input resolution if a full HD source isn't required
  • vMix has built-in browser-source frame buffering — increase the buffer if you see micro-stutters

"Tevyr audio doesn't reach my stream"

  • Confirm the Audio tickbox is enabled on the Web Browser input
  • vMix's audio mixer treats the input like any other; check it's not muted in the M (mute) column
  • Audio is only emitted when audio alerts are configured on that Tevyr output

"Shortcut fires but vMix shows an error"

  • vMix's WebControllerSendString needs the full URL with https:// — http-only URLs are silently rejected
  • The URL must be URL-encoded in the shortcut value field. Spaces become + or %20, ampersands stay as & (but special characters in message text need encoding)

"I want to control multiple Tevyr events from one vMix"

vMix shortcuts each target a single URL. The cleanest pattern is to define separate shortcut lists per event, with each shortcut hitting its event-specific room_id and api_key.

Context variables

vMix HTTP function-call paths (e.g. ?Function=SetText&Input=1&Value=...) support {{ctx.*}} interpolation — set a vMix overlay's text from {{ctx.session.title}} or {{ctx.session.speaker_name}} at fire time. See the full context-variable reference in the Macros guide. Common ones: {{ctx.event.title}}, {{ctx.session.title}}, {{ctx.session.speaker_name}}, {{ctx.timer.remaining_seconds}}, {{ctx.now.iso}}.

Triggered by webhook events

vMix can be fired automatically from any webhook event — session.started → Cut to that session's input, timer.warning → flash a "wrap" overlay. When creating a webhook, pick Integration mode and select your vMix connection.