Back
User manual

Bitfrost FX — user manual

Everything you need to produce a broadcast: create scenes, control the scoreboard live, hook up your Stream Deck and more.

Getting started

Quick start: from sign-in to your first broadcast.

  1. Sign in via /auth (Google or email).
  2. Choose or create a workspace from the workspace picker in the top left.
  3. Invite teammates from Workspace settings if you're a team.
  4. Create scenes in the studio (the main view) — scoreboard, lower-third, ticker, lineup, or a custom scene.
  5. Open the control panel via the 'Control panel' button to operate the broadcast live.
  6. Add ONE URL to OBS: /overlay/program?workspace=YOUR_WORKSPACE_ID as a Browser Source. Anything you put live in the Program panel shows up there automatically.
💡 Tip: Pin the scenes you use often — they appear as favorites at the top of the control panel.

Workspaces & roles

All content belongs to a workspace. You can belong to several.

  • Admin: full control, can delete the workspace and invite/remove members.
  • Editor: can create, edit and operate scenes and content.
  • Viewer: can view scenes and the control panel, but can't change anything.

Invite from Workspace settings → Generate invite link. The link is valid for 7 days.

The studio (main view)

This is where you build and design your scenes.

  • Scene list on the left: create, rename, duplicate, delete scenes.
  • Canvas in the middle: live preview. Click a layer to select it, drag to move.
  • Layer panel on the right: order, visibility, lock, styles and animations per layer.
  • Bottom panel: media library, presets, scene settings.
💡 Tip: Custom scenes can contain anything: text, images, shapes, scoreboard blocks, lower-third blocks etc. Use them for completely bespoke graphics.

Scoreboard

live control

Score, clock, period and team names — all editable live.

Open the scoreboard block in the control panel to operate the match.

  • Score: +/− buttons for home and away. Click the number to type an exact value.
  • Clock: Start/Pause/Reset. Quick-adjust −10s, −1s, +1s, +10s. Quick presets 45:00 and 90:00.
  • Period: type freely (1ST, 2ND, HT, FT) or use quick buttons.
  • Teams: edit name and short name directly in the scoreboard block.
⚠️ Note: The clock ticks on the server — it keeps counting even if you close the tab.

Lower-third

Name plates with a title and subtitle.

  • Title (e.g. name) + subtitle (e.g. role).
  • Show/hide with a single click — the animation runs automatically.
  • Style is controlled in the layer panel in the studio (font, color, animation).

Ticker

Scrolling news bar at the bottom of the screen.

  • Add or remove items in the list.
  • Speed adjusted with a slider (or via Stream Deck).
  • Clear the entire ticker with one click.

Lineup

Show starting elevens and player lists.

  1. Add teams and players under Workspace → Teams.
  2. Create a lineup scene and pick which team to display.
  3. Players are pulled in automatically based on order and shirt number.

Media library

Images, logos and videos to use in scenes.

  • Upload via the media button in the bottom panel or directly when adding an image.
  • Mark 'In library' to reuse it across multiple scenes.
  • Files are stored per workspace.

Custom control panel in /program

drag & drop

Build a personal button surface below the scene list on the Program page — like a software Stream Deck.

Buttons are private per user and saved per workspace. Other operators see their own buttons.

  1. Go to /program. Scroll below the scene list until you see 'Control panel'.
  2. Click 'Add button' — the edit dialog opens immediately.
  3. Set label, color, which scene the button affects and what action runs.
  4. Save. The button shows up in the grid.
  5. Drag to move. Drag the small corner at the bottom right to resize.
  6. Right-click (or double-click) a button to edit or remove it.
  7. Left-click to run the button's action.
  • Show / hide scene — toggles visibility just like the eye in the control panel.
  • Solo — shows only the chosen scene and hides all others in one click.
  • Set value in scene data — type a field (e.g. homeScore) and a value. Great for resetting or jumping to a known score.
  • Increment counter — type a field and a step (e.g. +1 or -1). Perfect for score buttons.
💡 Tip: Want minus buttons for the score? Set the action to 'Increment counter' with step = -1.
⚠️ Note: The button is active (white border) only when the action is 'Show/hide scene' and the scene is visible.

Scene data & fields you can control

for buttons

Overview of which fields you can drive with 'Set value' and 'Increment counter' in the custom control panel — or via Stream Deck.

Write the field with dot notation. For scoreboard scenes the fields are at the root (e.g. homeScore). For Custom scenes with an embedded scoreboard they live under scoreboard.* (e.g. scoreboard.homeScore).

Scoreboard fields:

  • homeScore / awayScore — integers, home and away score.
  • homeName / awayName — full team name (text).
  • homeShort / awayShort — short name (3 letters, text).
  • homeColor / awayColor — primary color as hex (#RRGGBB).
  • homeLogo / awayLogo — URL to the logo (text).
  • period — free text (1ST, 2ND, HT, FT, P1, P2…).
  • clock — clock string (e.g. '12:34'). The server normally ticks it.
  • status — optional status row (e.g. 'PAUSE', 'PEN').

Lower-third fields:

  • title — title (e.g. name).
  • subtitle — subtitle (e.g. role).

Bug (channel logo / small badge):

  • text — the displayed text.
  • position — corner: tl, tr, bl, br (top-left, top-right, bottom-left, bottom-right).

Ticker (scrolling news bar):

  • items — array of strings (hard to set from a button; use the control panel directly).
  • speed — integer, speed in px/s.

Lineup:

  • teamName — the team name.
  • formation — formation string (e.g. '4-3-3').
💡 Tip: The value in a 'Set value' button is parsed automatically as a number if it looks like one, as true/false if you write that, otherwise as text.
⚠️ Note: Custom scenes: layer values (e.g. text on a text layer) live under data.layers[i].text and can't easily be set from a button today. Instead embed a scoreboard block in the scene and drive scoreboard.homeScore etc.

Scene data vs. layer names

important

What's the difference between a system field like homeScore and the name you give a layer yourself? And how does your custom graphic find the right layer automatically?

These are two different things that are easy to confuse:

Scene dataLayer name
What is it?Structured JSON belonging to the whole sceneLabel you set on a layer in the layer panel
Who decides the names?The system (fixed keys like homeScore, period, clock)You — anything, e.g. 'Home score (live)'
Where does the value live?In the scene data object: scene.data.homeScoreOn the layer: scene.data.layers[i].text
Used by the button?Yes — write this in 'Set value' / 'Increment counter'No — it's only for you as the operator
Visible on the overlay?Indirectly: via layers that mirror the field, or a scoreboardNever — the name is shown only in the editor

In a SCOREBOARD scene it's simple — all fields live directly on data:

{
  "homeScore": 3,
  "awayScore": 1,
  "period": "P2",
  "clock": "12:34"
}

In a CUSTOM scene there are both free layers AND (if you've embedded a scoreboard block) a scoreboard object under data.scoreboard. Here a SMART AUTO-MAPPING (fuzzy match) is used so your text layers automatically pick up the right value:

{
  "scoreboard": { "homeScore": 3, "awayScore": 1, "period": "P2" },
  "layers": [
    { "type": "text", "name": "Home score (live)", "text": "0" },
    { "type": "text", "name": "Period display",     "text": "" }
  ]
}

When you change scoreboard.homeScore (e.g. via a +1 button) the system scans every text layer: if the layer name contains a known 'fragment key' the value is written into the layer's text. The match is CASE-INSENSITIVE and ignores spaces, dashes and Swedish characters (å→a, ä→a, ö→o).

Here is the full mapping in use today:

Layer name contains…Scene data fieldExample layer names that match
homescorescoreboard.homeScore'Home score', 'Home Score (big)', 'HOMESCORE'
homepointsscoreboard.homeScore'Home points', 'Home points live'
awayscorescoreboard.awayScore'Away score', 'Awayscore'
awaypointsscoreboard.awayScore'Away points'
homeshortscoreboard.homeShort'Home short', 'HomeShortName'
homenamescoreboard.homeName'Home name', 'Home team name'
awayshortscoreboard.awayShort'Away short'
awaynamescoreboard.awayName'Away name'
periodscoreboard.period'Period', 'Period display', 'Match period'
clockscoreboard.clock'Clock', 'Match clock', 'Big clock'
statusscoreboard.status'Status', 'Match status'
💡 Tip: Want a text layer NOT to be mirrored? Rename it to something that doesn't contain any of the fragments above — e.g. 'Big number' instead of 'Home score'.
💡 Tip: Want more control? Use a SCORE layer (type 'score') instead of text — then you explicitly point at which field it should display, no name matching needed.
⚠️ Note: Fuzzy match only applies to TEXT layers in Custom scenes with an embedded scoreboard. Regular scoreboard scenes don't use this mechanism — there the numbers are drawn directly from data.

Summary for buttons:

What you want to doWrite this in the button's 'Field'
Increment home score in a scoreboard scenehomeScore
Increment home score in a custom scene with a scoreboard blockscoreboard.homeScore
Set period in a scoreboard sceneperiod
Set period in a custom scene with a scoreboard blockscoreboard.period
Change the text of a single text layerLayer name does NOT work — do it in the editor

Stream Deck integration

URL buttons

Trigger scoreboard, scenes, lower-third and ticker straight from a Stream Deck button.

  1. Click 'Stream Deck' in the top right of the control panel.
  2. Create a token (one is enough per Stream Deck — keep it secret).
  3. Pick which scene the URLs should target.
  4. Copy any URL from the list.
  5. In Stream Deck: add a button of type 'Website' (System → Open).
  6. Paste the URL. Enable 'Access in background' so no window pops up.

Available actions: score +/−, clock start/stop/reset/adjust/set, period, scene show/hide/toggle/solo, lower-third set text, ticker set/append/clear/speed.

https://your-domain.com/api/control?token=XXX&action=score-home-plus&scene=Match
💡 Tip: You can swap ?scene=Name for ?sceneId=UUID if you prefer to reference by ID.
⚠️ Note: If you lose track of who has a token — delete it in the Stream Deck dialog. All buttons using that token will stop working immediately.

OBS / vMix integration

All scenes go to ONE shared Program output (vMix-style).

  • Program output: /overlay/program?workspace=WORKSPACE_ID — the only URL you need in OBS.
  • Anything you mark 'On Air' in the control panel stacks live on the same Browser Source.
  • For one-off shares there is also /overlay/program?token=SHARE_TOKEN (shows only the shared scene).

Recommended resolution: 1920x1080. The background is transparent — set CSS in OBS to 'transparent' if needed.

💡 Tip: Browser Source updates itself via realtime — you don't need to refresh when changing things in the control panel.

Keyboard shortcuts

Hotkeys in the studio (when the canvas is focused).

Cmd/CtrlZ
Undo
Cmd/CtrlShiftZ
Redo
Cmd/CtrlD
Duplicate selected layer
Cmd/CtrlC
Copy layer
Cmd/CtrlV
Paste layer
Delete
Remove selected layer
Arrow keys
Move layer 1px
ShiftArrow
Move layer 10px
Esc
Deselect

Troubleshooting

  • Overlay shows nothing in OBS: check that the scene is visible (eye icon) in the control panel.
  • The clock doesn't move: press Start. It does not start automatically.
  • Stream Deck button does nothing: check that the token isn't deleted and the scene name matches.
  • Realtime updates are laggy: reload the OBS Browser Source once (Refresh cache).

Latest changes

The manual is updated on every new release.

  • 2026-04-25 — New manual section: Scene data vs. layer names — full comparison table + fuzzy match mapping for custom scenes.
  • 2026-04-25 — Custom control panel on /program: drag-drop buttons, right-click to edit/remove.
  • 2026-04-25 — Realtime broadcast straight from the database to the overlay (lower latency than polling).
  • 2026-04-25 — Manual extended with field reference for scene data (scoreboard, lower-third, bug, ticker, lineup).
  • 2026-04-20 — User manual released.
  • 2026-04-20 — Stream Deck integration via URL buttons (all actions).
  • 2026-04-20 — Clock quick-adjust (±1s, ±10s) and presets (45:00, 90:00).
  • 2026-04-20 — Edit team names, short names and period directly from the scoreboard block.