# Advanced Installation
Source: https://docs.visualradioassist.live/advanced-installation
Advanced installation steps for VRA Server Clients, like updates and SSL connections.
Only proceed with caution. These advanced steps can break communication between VRA Server Clients
How server apps stay up to date and how Enterprise users set their own schedule.
Update locally installed VRA clients by hand from the Cloud.
Install SSL certificates for direct browser access to the Core API and Studio Bus.
# Direct Local Bus / API SSL Connection
Source: https://docs.visualradioassist.live/advanced-installation/direct-local-bus-api-ssl-connection
To get direct browser access to the Core API and Studio Bus for the fastest communication possible in the VRA suite, you are required to install SSL certificates so the browser trusts the custom Core API.
To get direct browser access to the Core API and Studio Bus for the fastest communication possible in the VRA suite, you are required to install SSL certificates to make sure the browser trusts the custom Core API.
With Visual Radio Assist Core application version 4.5.12 the certificate bundle is automatically installed on startup, when not already detected in your store.
## Local Certificate Bundle
`Last update: 17-03-2026`
Download Bundle:
Install CA and Server Core certificates on your machine
## Add VRA Server Core to your hosts file
On your Core Machine, follow the steps for your OS:
### Mac OS
```bash theme={null}
sudo echo '127.0.0.1 core.vra.local' >> /etc/hosts
# optional
sudo echo '127.0.0.1 {studio_name}.core.vra.local' >> /etc/hosts
```
### Windows
```bash theme={null}
# Open your Hosts file
# WIN + R > %systemroot%/system32/drivers/etc
# File > Open Powershell|CMD as Administrator
#. Type "notepad hosts" + ENTER
# Add following lines and save
127.0.0.1 core.vra.local
# optional
127.0.0.1 {studio_name}.core.vra.local
```
(replace `{studio_name}` with your studio name)
Go to your [Core Settings](https://visualradio.cloud/studio/active/advanced/core) and adjust the Host to the configured host above.
# Manual Update Process
Source: https://docs.visualradioassist.live/advanced-installation/manual-update-process
To manually update the VRA locally installed clients, go to the Cloud page of the Server in the Studio you want to update.
To manually update the VRA locally installed clients, go to the Cloud page of the Server in the Studio you want to update:
In the Server overview you see all the running clients for the active Studio. When clicking on a Client you get the option to Update a client.
Updating a VRA Client takes between 5 to 30 seconds. Some updates of larger Output Player set-ups will take longer because the clients first have to be gracefully shutdown by the software.
## Initiating the update
It is generally good practice to start updating with the Core because the Output Player and Audio Manager Clients will stay up and running while the Core is restarting.
While the Core is restarting any Video Switcher Triggering will be interrupted. Automated Output Players that need a lot of fast Queues will also be interrupted for this timewindow.
After the Core has been updated you could confirm the updated version number in the Server Overview.
You can now initiate the manual update of the Audio Manager and Output Player by clicking the update buttons on the clients right after each other (updates can run simultaneously).
While the Output Player is updating is restarting any video signal that was active on the Client(s) will be interrupted and made blank / transparent. The start of a Output Player sometime causes a short flicker of the source to be visible on the Output.
While the Audio Manager is restarting any Audio Triggers will not be available or processed.
## Troubleshooting
### → The Client doesn’t start after the update
Try to start the Client manually, if this doesn’t start the Client rightaway a update is still being installed. After > 60 seconds try to download and install the latest version of the Client from the Cloud.
### → Initiating the update doesn’t trigger any restart or update to the latest version
**For Core Client:** Right Click your taskbar icon → More → Check For Updates
Try to restart the software manually. On restart the software will also check for updates and install them when available.
If this doesn’t work you can always download the latest version from the Cloud:
### → I don’t have access to the Cloud but have to initiate a update – how?
Follow the steps for restarting a Client to initiate an update manually onsite ⬆️.
# Update Policy
Source: https://docs.visualradioassist.live/advanced-installation/update-policy
Server apps update automatically (same as Cloud is always-up-to-date).
Server apps update automatically (same as Cloud is always-up-to-date)
Enterprise users can follow their own update-schedule by configuring VRA update timeslots in the Advanced Core Settings within Cloud.
**Download the latest version of the software here:**
# API Data Sources
Source: https://docs.visualradioassist.live/api-data-sources
Visual Radio Assist allows you to integrate external data feeds directly into your visual content, bringing real-time information to your broadcast.
Visual Radio Assist allows you to integrate external data feeds directly into your visual content, bringing real-time information to your broadcast. Whether you want to display breaking news, weather updates, sports scores, or social media feeds, API Data Sources make it possible to keep your audience informed with dynamic, up-to-date content.
## What Are API Data Sources?
An API Data Source is an external data feed that supplies real-time information to your Visual Radio broadcast. These sources can include:
* **RSS Feeds**: News feeds, blog updates, and content syndication
* **REST APIs**: Weather data, sports scores, stock prices, and custom integrations
* **JSON/XML Endpoints**: Structured data from third-party services
By connecting these data sources to Visual Radio Assist, you can create dynamic elements like news tickers, live updates, and contextual information that enhances your broadcast's relevance and engagement.
## Understanding API Data Source Structure
Every API Data Source in Visual Radio Assist consists of two main components:
**Base URL**: The primary domain or server address (e.g., `api.visualradioassist.cloud`)
**Endpoint**: The specific path to the data you want to access (e.g., `/test-endpoint` or `/authentication`)
Together, these create the complete URL that will be requested: `api.visualradioassist.cloud/test-endpoint`
This structure allows you to organize multiple endpoints under a single base URL, making it easier to manage related data sources from the same service.
## How to Add an API Data Source
Creating an API Data Source involves configuring the connection to your external feed and linking it to a variable for use in your visuals.
### Step 1: Set Up the Feed as a Data Source
We'll use the BBC World News feed as an example to demonstrate the setup process.
### Configure Base URL and Endpoint
The complete BBC World feed URL is: `https://feeds.bbci.co.uk/news/world/rss.xml`
To set this up in Visual Radio Assist:
1. Navigate to **Settings** and select the **Data Sources** tab
2. Click to create a new Data Source
3. Set the **Base URL** to `https://feeds.bbci.co.uk/news`
4. Select **RSS** as the data format
5. Specify the **Endpoint** as `/world/rss.xml`
### Choose the Fetch Type
Visual Radio Assist offers different methods for retrieving data:
**Cloud Proxied**: The Visual Radio Cloud server fetches the data on your behalf. This is essential when:
* The feed doesn't allow direct browser requests
* CORS (Cross-Origin Resource Sharing) restrictions prevent browser access
**Browser Direct**: Your browser fetches the data directly from the source (use only when the feed explicitly allows browser access).
When in doubt, start with **Cloud Proxied**. If you're unsure whether a feed allows direct browser access, test it first. Switching to Cloud Proxied typically resolves most fetch errors related to CORS restrictions.
### Test Your Connection
Once configured, use the **Test Request** button to verify that data is loading correctly. This allows you to inspect the data structure and confirm that your endpoint is responding as expected.
### Step 2: Link the Feed to a Variable
After your feed loads successfully, you need to connect it to a variable to make the data accessible within the Visual Designer.
### Auto-Generate Variables
The simplest method is to enable the **Auto-generate variable** toggle. When you save the API Data Source, Visual Radio Assist will automatically:
* Create a new variable with a descriptive name based on your feed
* Make the variable accessible throughout all visual creation areas
* Allow you to use the data in tickers, lower thirds, full-screen updates, and more
This automated approach saves time and ensures consistent naming conventions across your data sources.
## Working with Authenticated Feeds
Many professional APIs and internal systems require authentication to access their data. Visual Radio Assist supports authenticated feeds through:
**Authorization Tokens**: Add bearer tokens or API keys directly into the configuration
**Custom Headers**: Configure custom HTTP headers for specialized authentication methods
**Endpoint Parameters**: Include authentication credentials as URL parameters when required
This flexibility enables you to work with:
* Internal company APIs
* Paid data services
* Restricted or private feeds
* Enterprise-level integrations
## Using API Data Sources in Your Visuals
Once your data source is configured and linked to a variable, you can display the information in your visual content.
### Step 1: Create a Text Layer
1. Open the **Visual Designer** and navigate to the visual where you want to display data
2. Create a new **Text Layer**
3. Select the API Data Source Variable you just created
4. Open the **Data Selector** to browse the feed's complete structure
5. Choose the specific data field you want to display (e.g., `title` for news headlines)
### Step 2: Configure Data Display
To display multiple items from your feed:
1. Open the **Text Helper** panel
2. Copy the `loop` helper code
3. Paste it into your text field
4. This will automatically loop through all feed items and display the selected field for each
### Creating a News Ticker
To transform your data feed into a scrolling news ticker:
1. Select your text layer containing the feed data
2. Scroll to the bottom of the **Properties Panel**
3. Enable the **Ticker Effect**
4. Adjust ticker speed, direction, and behavior to suit your needs
Your real-time news ticker is now ready to display!
### Step 3: Design Your Visual
With your data displaying correctly, enhance the appearance and layout using the Visual Designer's full suite of tools:
**Layer Management**: Stack multiple layers to create complex layouts
**Branding Elements**: Add station logos, background graphics, and color schemes
**Additional Data Fields**: Display descriptions, publication times, author names, or other metadata from the same feed
**Styling Controls**: Adjust [**fonts**](/getting-started/use-your-custom-font), colors, sizes, animations, and positioning
The Visual Designer gives you complete control over how your external data appears on screen, ensuring it integrates seamlessly with your broadcast's visual identity.
# Get Started with Audio Directed auto-switching
Source: https://docs.visualradioassist.live/audio-manager
Automate your visual radio production with the Audio Manager - detect who's speaking, trigger camera switches, and keep your broadcast visually dynamic without manual intervention.
The Audio Manager bridges your studio's audio infrastructure and Visual Radio Assist Cloud's visual automation. It listens to audio inputs from your mixing desk or audio interface, detects activity like speech or music, and fires automated actions — switching cameras, executing macros, controlling playout — all driven by what's happening on-air.
## How It Works
1. Install the [Audio Manager Client](/machine-specs) on your studio server and connect it to your audio devices
2. Configure **Audio Inputs** - select devices, assign channels, and set gain and sensitivity levels
3. Create **Audio Triggers** that listen to specific inputs and detect audio activity above a threshold
4. Assign **Commandos** to each trigger - camera switches, macro executions, HTTP requests, and more
5. Use the **Audio Matrix** to visually map which triggers listen to which input channels
6. Fine-tune **Smart Triggering**, **Damping**, and **Fallback** settings for natural switching behavior
7. Monitor live trigger activity on the **Audio Status** dashboard
## Key Concepts
**Audio Inputs -** The physical audio channels from your studio devices (microphones, line inputs, Dante/Ravenna streams). Each input has configurable gain and sensitivity settings with live metering.
**Audio Triggers** - Rules that monitor audio inputs and fire actions when activity is detected. A trigger defines what to listen for (speech, music, tones), the detection threshold, and what actions to execute.
**Commandos** - The actions a trigger executes when activated. A single trigger can fire multiple commandos - switch a camera, run a macro, send an HTTP request
**Smart Triggering** - Intelligent switching logic that prevents rapid camera changes when multiple presenters speak simultaneously. Configurable timing ensures smooth, natural transitions.
**Fallback** - Automatic behavior when no triggers are active. After a configurable delay, VRA cycles through fallback commandos to keep your broadcastvisually engaging during silence.
Monitor audio inputs and fire commandos when activity is detected.
Keep your broadcast dynamic when no triggers are active.
Fine-tune detection and the technical configuration of audio device inputs.
### Preparation
# Audio Triggers
Source: https://docs.visualradioassist.live/audio-manager/audio-triggers
Audio Triggers are the core of VRA's audio-driven automation. They monitor your studio's audio inputs, detect activity like speech or music, and automatically execute actions. Switching cameras, firing macros and controlling your video output.
## What Is an Audio Trigger?
An Audio Trigger is a rule that monitors a specific audio input channel, detects when audio levels exceed a configured threshold, and fires one or more commandos in response. When the audio drops below the threshold, the trigger deactivates and can fire separate release commandos.
Each trigger is configured with a type that determines what kind of audio activity it detects, a threshold in decibels that controls its sensitivity, and a set of commandos that define what happens when it fires.
## Trigger Types
| Type | Description |
| ----------------------- | ------------------------------------------------------------ |
| Human Speaking | Detects a presenter speaking into a studio microphone |
| Human Speaking External | Detects speech from an external or remote source |
| Voice Call | Detects an incoming phone or voice call |
| Music | Detects music playback |
| Programmed Action Tone | Detects a specific programmed audio tone for automation cues |
## Commando Actions
When a trigger fires, it executes one or more commandos. Each commando performs a specific action:
| Action | Description |
| -------- | ------------------------------------------- |
| Camera | Switch to a specific camera angle |
| Switcher | Send a command to the video switcher |
| Macro | Execute a predefined macro sequence |
| Playout | Control an output player |
| HTTP | Send an HTTP request to an external service |
| PTZ | Move a PTZ camera to a preset position |
A single trigger can have multiple commandos. When combined with Smart Triggering, VRA intelligently selects between commandos assigned to different triggers. For example, cycling between camera angles when multiple presenters are speaking.
## Creating an Audio Trigger
1. Navigate to **Audio Manager** and open the **Triggers** page
2. Click **Add New**
3. Enter a **Name** to identify this trigger (e.g., "Host Mic", "Guest Left", "Music Input")
4. Select the **Type** that matches the audio source (Human Speaking, Music, etc.)
5. Assign the **Audio Input** this trigger should monitor
6. Set the **Threshold** in dB - audio above this level activates the trigger
7. Add one or more **Commandos** to define what happens when the trigger fires
8. Optionally add **Release Commandos** for actions when the trigger deactivates
9. Configure **Conditions** if the trigger should only be active during specific programs
10. Set a **Priority** level to control which trigger takes precedence when multiple are active
11. **Save** your trigger configuration
## Threshold and Live Metering
The threshold determines how loud the audio signal must be before the trigger activates. It is set in decibels (dB) - a lower value means the trigger is more sensitive.
The trigger detail page includes a **live meter** that shows the real-time audio level from the assigned input. Use this to calibrate your threshold:
1. Open the trigger's detail page
2. Have the presenter speak at their normal on-air volume
3. Observe the live meter to see the typical signal level
4. Set the threshold just below the normal speaking level
5. Test that the trigger activates consistently during speech and stays inactive during silence
## Commandos
Commandos define the actions that fire when a trigger activates. You can assign multiple commandos to a single trigger - for example, switching to a camera angle and sending an HTTP notification simultaneously.
Each commando specifies an **Action** type (Camera, Switcher, Macro, etc.) and the action-specific parameters (which camera, which macro, which URL).
When Smart Triggering is enabled in your studio's audio settings, VRA manages transitions between triggers intelligently. If multiple presenters are speaking, the system uses the **Keep Active Speaker Time** and **Dynamic Switching Time** settings to determine when to switch, avoiding rapid back-and-forth cuts.
## Release Commandos
Release Commandos fire when a trigger becomes inactive - when the audio drops below the threshold. Use these for cleanup actions, such as returning a PTZ camera to its home position or resetting a switcher state.
Release commandos follow the same configuration as regular commandos: select an action type and provide the action-specific parameters.
## Conditions
Conditions control when a trigger is available based on your broadcast schedule. A trigger with conditions only activates during specific scheduling programs - for example, you might configure a "Guest Mic" trigger to only be active during interview shows.
This lets you maintain a single set of triggers in your studio while automatically adapting behavior for different show formats.
## Attack Trigger
When **Attack Trigger** is enabled, the trigger fires immediately when the audio signal crosses the threshold, without waiting for the standard detection window. This is useful for triggers that need instant response - such as detecting a programmed action tone that should immediately switch to a specific camera.
For speech detection triggers, leaving attack trigger disabled generally produces smoother results, as the standard detection window helps filter out brief audio spikes.
## Additional Settings
**Enabled** - Toggle whether the trigger is active. Disabled triggers are shown as gray on the status dashboard and do not process audio.
**Lock** - Prevents accidental changes to the trigger's configuration. A locked trigger cannot be edited until it is unlocked.
**Fast Release** -
# Fallback scenarios
Source: https://docs.visualradioassist.live/audio-manager/fallback-scenarios
Last year we've launched conditions to make your triggers apply to different studio and programming/schedule scenario's, with new stability improvements and fallback fine tuning.
## Fallback Delay
Conditions
Last year we've launched conditions to make your triggers apply to different studio and programming/schedule scenario's in v4.0.801. The latest update includes new stability improvements to the Specific Conditions for Audio Triggers, that make sure that your triggers keep working after all unique studio events.
## New Fallback Fine Tuning
A question that a lot of radiostations had was how to delay triggering the Fallback Scenario, but not all conversation triggers (Talktime). We've just released a new delay option to make sure that your fallback scenario (one- or more) rundown triggers could be delayed by x seconds. This will keep your fallback rundown clean of unnesse dummies and will guarantee stability of the fallback scenario.
# Tweak Trigger Settings
Source: https://docs.visualradioassist.live/audio-manager/tweak-trigger-settings
Fine-tune how your audio triggers behave, including the technical configuration of audio device inputs.
## Technical configuration of Audio Device Inputs
See [Configure available audio device inputs](/set-up/configure-available-audio-device-inputs).
# Automations
Source: https://docs.visualradioassist.live/automations
The Automations feature in Visual Radio Assist enables dynamic control of your Visual Radio setup.
The **Automations** feature in Visual Radio Assist enables dynamic control of your Visual Radio setup. By leveraging specific conditions, you can create automated responses to studio events, audio triggers, time-based actions, and more. This functionality ensures efficient, hands-free operations that enhance your live broadcasting experience.
Are you looking for more information about automations in Outputs? Check
Are you looking for automations related triggering camera's with audio signals? Check [Audio Manager](/audio-manager)
## How Automations Work
Automations are driven by **conditions** that you define. Each condition represents a specific state or event within your Visual Radio environment. When a condition becomes **active** or **inactive**, it triggers corresponding commands, known as **activator** and **release commands**, respectively.
* **Activator Command**: Executed when a condition becomes active.
* **Release Command**: Executed when a condition becomes inactive.
These commands allow for precise control, such as switching camera angles, displaying visuals, or altering the state of connected hardware. These conditions are executed **instantly**, without any delay.
# Broadcaster Management
Source: https://docs.visualradioassist.live/broadcaster-management
Manage your broadcaster, its stations, and studios from one place.
This guide is being prepared. In the meantime, see [User Management](/user-management)
for how roles and permissions are scoped across your broadcaster's stations.
# Camera Angles
Source: https://docs.visualradioassist.live/camera-angles
Switch between camera angles automatically as part of your audio-driven automation.
This guide is being prepared. In the meantime, see [Audio Triggers](/audio-manager/audio-triggers)
and [Automations](/automations) for how camera switches are triggered during your broadcast.
# Cameras
Source: https://docs.visualradioassist.live/cameras
Control your studio cameras from one place. Live previews, angles, manual PTZ control and AI framing, powered by the Camera Assist app.
The Cameras page is the home for every camera in your studio. Each camera shows a live preview, its connection state and what is on air right now. From here you open the Camera Editor to control a camera, manage its angles and set up AI framing.
Cameras is powered by **Camera Assist**, a desktop app that runs on a machine in your studio. It talks to your camera hardware, generates the live previews and runs the AI features.
## How it works
1. Install and run [Camera Assist](/cameras/migrate-from-camera-angles) on a machine in your studio
2. Click **Add New Camera** and pick a camera type and model
3. Set the connection details and a stream source so the camera gets a live preview
4. Open the Camera Editor to create **angles**, the saved shots for that camera
5. Let [Audio Manager](/audio-manager) triggers, [Macros](/macros) or [Dashboards](/dashboards) execute those angles during your broadcast
## Camera types
* **PTZ Camera** - pan, tilt and zoom with live joystick control and presets. Supports models from Panasonic, Sony, Canon, AJA, PTZOptics, Vaddio and Lumens, plus generic VISCA over IP cameras.
* **Fixed Camera** - a stationary camera with an NDI or stream feed. Fixed cameras show a preview and can go on air, but have no control page.
* **Legacy Camera** - a vMix or CyanView controlled camera using the legacy commando flow. See [Camera Angles](/camera-angles).
## Key concepts
**Camera Assist** - The desktop app that powers the Cameras system. When it is offline, camera control and calibration are unavailable.
**Angle** - A saved shot for a camera: a position plus the command that puts it on air. Executing an angle moves the camera and switches it into program.
**Preset** - An in-camera position slot, 1 to 99. Angles can point to a preset or store their own custom position.
**AI framing** - Automatic face framing. The camera positions itself to frame presenters based on a framing standard, like a medium close-up.
**PGM trigger** - The command that puts this camera into program. Every camera has one, and each angle can override it.
## The Cameras page
Every camera is a card with a live preview. Badges show the camera model and whether it is **Disabled**, has **Ctrl** enabled or streams **Cloud live**. The border glows red while the camera is on air, and a **BUSY** badge appears while it moves to an angle. The dot in the footer shows the connection state.
* Click a card to open the Camera Editor. Fixed cameras open their settings instead.
* Drag the handle to reorder cameras.
* Right click a card to **Edit** or **Delete** it.
* Use the gear on a card to open its settings sheet.
Connect a camera, create angles, control PTZ and set up AI framing.
Install Camera Assist and move your studio to the new Cameras system.
## Studio-wide camera settings
General camera behavior lives at **Settings → Studio → Cameras**: the smart switching timeout, the studio fallback commando, the thumbnail generation interval and diagnostics like trace logging. PTZ connections and RCP controllers for the legacy flow are managed there as well.
# Camera Editor
Source: https://docs.visualradioassist.live/cameras/camera-editor
Connect a camera, create angles, control pan, tilt and zoom, and set up AI framing.
The Camera Editor is where you work on a single PTZ camera: its angles on the left, the live preview and manual controls in the middle, and the configuration of the selected angle on the right. Fixed cameras have no control page, they are configured entirely from their settings sheet.
## Add and connect a camera
Click **Add New Camera** on the [Cameras](/cameras) page and choose **PTZ Camera** or **Fixed Camera**. For a PTZ camera, pick your model from the list or choose a generic option. The camera settings sheet then covers everything the camera needs:
Give the camera a name and confirm the model. The model determines which
control protocol and features are available.
Enter the **Host** and **Port** of the camera on your studio network. Add
a username and password if the camera requires authentication. The
protocol, like VISCA over IP or the Panasonic HTTP interface, follows
your model choice.
Give the camera a video feed for previews: pick an **NDI source**, enter a
**Stream URL**, or use the camera's native MJPEG stream on supported
Panasonic models.
Set the **PGM Trigger**, the command that puts this camera into program.
Optionally override the studio **Fallback Commando** for this camera. It
is triggered when switching to this camera while it is already on air.
The connection panel at the top of the settings sheet shows whether the camera is reachable, its uptime and any connection errors.
Turn on **Cloud Live** to stream the camera to the cloud as a live feed, or
leave **Thumbnail generation** on for periodic preview frames. The capture
interval is configurable at **Settings → Studio → Cameras**.
## Work with angles
An angle is a saved shot: a camera position plus the command that plays when the angle is activated. Angles are what your automation targets. An [Audio Manager](/audio-manager) trigger, a [Macro](/macros) or a [Dashboard](/dashboards) button executes an angle, the camera moves there and goes on air.
* Click **New** in the angles list to add an angle.
* Double click an angle card, or use **Execute** in its context menu, to run it. The card shows **Busy** while the camera moves and **Current** when it is the active angle.
* Drag angle cards to reorder them.
Per angle you configure:
* **Position** - either a **Base preset**, one of the in-camera preset slots, or a **Custom** captured position. Use **Set from camera** to capture the current camera position.
* **Command** - plays when the angle is activated. By default the angle uses the camera's own command; turn on **Override** to give this angle a custom command.
* **AI framing** - per angle framing behavior, see below.
* A custom thumbnail, if you want something other than the captured preview.
When an angle is targeted by audio trigger rules, an **Audio Triggered by** row links straight to those triggers in the Audio Manager.
Saving changes while the camera is on air asks for confirmation first, and
angle settings are locked while the camera is busy moving.
## Manual control
The control pane gives you direct PTZ control:
* **Presets** - recall or store the in-camera preset slots, 1 to 99. Storing overwrites the slot with the current camera position.
* **Custom** - a joystick for pan and tilt, plus zoom and focus sliders, touch focus and auto focus.
Manual controls lock automatically while the camera is on air, unlock deliberately if you must, and while an angle is framing or a preset is being recalled. If Camera Assist is not running or the camera hardware is unreachable, the pane tells you exactly which of the two is the problem.
## AI framing
AI framing positions the camera to frame faces automatically. It needs two things before it can be enabled in the camera settings:
1. **Lens settings** - the wide and tele horizontal field of view and the pan and tilt range of your camera, in degrees. You find these in the camera manual.
2. **PTZ calibration** - a one-time automated run that measures the camera's pan, tilt and zoom units.
Calibration moves the camera live. Make sure the shot is clear before
starting.
Once enabled, you set the baseline: safe pan, tilt and zoom ranges, a **Framing standard** from close up to wide shot, **Prevent blocked frame** to avoid obstructed shots, and the **Alignment TTL**, how long a framing result stays valid.
Each angle can then refine this: its own framing standard, how many **Faces in shot** to target, fine **Pan, Tilt and Zoom nudges**, and **Prevent blocked frame** to keep the camera off air when no faces are detected. Everything an angle does not override is inherited from the camera.
# Migrate from legacy cameras
Source: https://docs.visualradioassist.live/cameras/migrate-from-camera-angles
Install Camera Assist to move your studio from the legacy camera setup to the new Cameras system.
The new [Cameras](/cameras) system is powered by Camera Assist, a desktop app that runs on a machine in your studio. Studios coming from the legacy [Camera Angles](/camera-angles) setup go through a short migration. Your existing cameras keep working exactly as before, nothing changes in your current setup. Migrating unlocks live previews, AI facial recognition, auto-framing and smart presenter tracking.
## Run the migration
Open the Cameras page. Studios that still need to migrate see a **Camera Assist required** card. Click **Start migration** to open the wizard.
Pick Windows or macOS and download the latest build. Run the installer on
a machine in the studio, ideally the same machine that runs your other VRA
studio apps.
Start Camera Assist. Once it reports online in this studio, VRA detects it
and migrates your cameras automatically. If the wizard keeps waiting, make
sure the app is actually running on the studio machine and the machine has
a working network connection.
That is all. When the migration completes you are redirected to the new Cameras page, where each migrated camera appears as a **Legacy Camera**.
## After migrating
* Legacy cameras keep using their existing commando flow. Your triggers and automations keep working.
* To unlock the new capabilities per camera, add it as a [PTZ or Fixed camera](/cameras/camera-editor) with its own connection and stream source.
* The old camera surface stays reachable while you transition. The wizard's **Back to old cameras** button takes you there.
# Get Started with Clips
Source: https://docs.visualradioassist.live/clips
Turn your recorded shows into shareable social media content - without heavy file transfers, wasted storage, or long post-production workflows.
Clips connects directly to your local recordings and lets you browse, select, and export only the moments that matter. No cloud uploads. No duplicate files. Just fast, selective post-production designed for radio broadcasters.
## How It Works
1. **Connect** your local storage (NAS, hard drive, vMix, HyperDeck) as an [Media Server Ingest Sources](/clips/media-server-ingest-sources)
2. **Browse** recordings directly in your browser - streamed from your local infrastructure
3. **Identify** key moments using auto-detected segments and studio event data
4. **Select** the exact in and out points for your clip
5. **Crop** for your target platform (9:16 for TikTok, 1:1 for Instagram, etc.)
6. **Export** only the selected segment - often under 100MB instead of 10GB+ size of the full recording
7. **Publish** your clips to social media
Connect your local storage so VRA can find your recordings.
Browse the raw recordings captured during your broadcasts.
Set in and out points on the timeline to build a clip.
Crop and export your selection into a downloadable clip.
# Editing your Clips in a Project
Source: https://docs.visualradioassist.live/clips/editing-your-clips-in-a-project
A Project is your workspace for creating a clip from a recording. It stores your timeline selection, crop settings, and export history - everything needed to go from a raw recording to a finished social media clip.
## Creating a Project
1. Open the **Recordings** page and find the show you want to clip
2. Click on the recording
3. A new project is created automatically, linked to that recording
Each project is tied to one recording and one user. Multiple users can create separate projects from the same recording.
***
## The Clips Editor
The editor is the main workspace where you create your clip. It is divided into three areas:
**Video Preview** - Streams the recording in real-time with full playback controls. When crop mode is enabled, a visual overlay shows your selected frame area directly on the video.
**Timeline** - The full recording duration displayed as an interactive bar with time markers, audio waveform, moments, and studio event data. This is where you set your in and out points.
**Side Panel** - A tabbed interface with detailed information about your project:
| Tab | Contents |
| ------------ | --------------------------------------------------------------------- |
| **Info** | Project title, recording details, creation date |
| **Moments** | Auto-detected speaking moments with timestamps |
| **Events** | Studio events — audio triggers, program changes |
| **Exports** | All exports created from this project, with status and download links |
| **Settings** | Project preferences and timeline display options |
***
## Timeline
The timeline is the core of the editor. It visualizes your entire recording as an interactive track where you navigate, identify key moments, and select the exact range for your clip.
### Navigation
**Scrolling** - Drag or scroll horizontally to move through the recording.
**Zoom** - Use the zoom slider or the +/− buttons to zoom in and out. The timeline adapts its time markers automatically — at lower zoom levels you see minute-based markers, at higher zoom levels you see individual seconds.
**Playhead** - The vertical line indicates the current playback position. Click anywhere on the timeline to jump to that point. Use the **Scroll to Playhead** button to re-center the view on the current position.
### Playback Controls
| Control | Action |
| ----------------- | -------------------------------------- |
| **Play / Pause** | Start or stop playback |
| **Step ±10s** | Jump forward or backward by 10 seconds |
| **Mute / Unmute** | Toggle audio |
| **Fullscreen** | Toggle fullscreen video preview |
### Time Display Modes
The timeline supports two display modes, configurable in project settings:
* **Relative Time** — shows elapsed time from the start of the recording (00:00:00, 00:05:30)
* **Absolute Time** — shows the actual clock time when the recording was captured (14:32:00, 14:37:30), useful when cross-referencing with your broadcast schedule or automation logs
### Making a Selection
The selection defines the **in** and **out** points of your clip — the segment that will be exported.
**Creating a selection** — Click and drag on the timeline to draw a selection range. The selected area is highlighted; everything outside the selection is dimmed.
**Adjusting a selection:**
* Drag the **left handle** to change the start point (in point)
* Drag the **right handle** to change the end point (out point)
* Use the **In** button to set the start at the current playhead position
* Use the **Out** button to set the end at the current playhead position
* Click **Clear** to remove the selection entirely
Your selection is saved automatically and persists across sessions.
### Moments
Moments are automatically detected speaking segments within your recording. VRA analyzes audio trigger data from your studio — microphone activity, presenter detection, external voice inputs — and groups continuous speech activity into distinct moments.
When there is a gap of more than 5 seconds between audio events, a new moment begins. Each moment is labeled sequentially: "Moment 1", "Moment 2", etc.
Moments appear as colored bars on the timeline. Click on any moment to jump directly to that point in the recording — no more scrubbing through an entire show to find the interesting parts.
Moments are generated from the same audio intelligence that powers VRA's live broadcast features. If your studio has presenter detection and audio triggers configured, Clips uses that data automatically to surface highlights.
### Studio Events
The timeline displays studio events that occurred during the recording:
* **Audio Triggers** - when specific audio sources became active or inactive
* **Scheduling Programs** - when shows went on or off air
Events are grouped by type and displayed as bars spanning their active duration. Click on any event in the side panel's **Events** tab to jump to that position on the timeline.
### Waveform
The audio waveform is rendered across the full timeline, giving you a visual representation of audio levels throughout the recording. Peaks indicate louder segments — typically speech, music transitions, or jingles — helping you visually spot interesting moments before playing them back.
***
## Managing Projects
Navigate to **Clips → Projects** to see all your projects. Each project card shows the recording thumbnail, project title, creation date, and the user who created it.
From this view you can open a project to continue editing, or archive and delete projects you no longer need.
# Making your Clips ready for publish
Source: https://docs.visualradioassist.live/clips/making-your-clips-ready-for-publish
Once you've selected a moment on your timeline, there are two steps to get it ready for social media: crop the frame to match your target platform's aspect ratio, then export the selection into a downloadable clip. This page covers both.
## Cropping
### Aspect Ratios
Clips supports four aspect ratios:
| Ratio | Use Case |
| -------- | ------------------------------------------- |
| **16:9** | YouTube, standard landscape video (default) |
| **9:16** | TikTok, Instagram Reels, YouTube Shorts |
| **1:1** | Instagram feed, Facebook posts |
| **4:3** | Standard definition, some social platforms |
### Enabling Crop Mode
1. In the project editor, activate **Crop Mode** from the toolbar
2. A crop overlay appears on the video preview
3. Select your desired **aspect ratio**
The overlay shows your selected frame area with a white border and rule-of-thirds grid. Everything outside the crop is dimmed.
### Adjusting the Crop Area
**Move** - Drag the center of the selection to reposition it within the video frame.
**Resize** - Drag any of the 8 handles (4 corners + 4 sides) to resize the crop area. The selected aspect ratio is locked automatically during resize, so your crop always matches the target format.
**Reset** - Clear your crop selection to start over with the default full-frame view.
### How Crop Settings Are Saved
Crop settings are stored as part of your project. Position and size are saved in pixels relative to the original video resolution, so your crop is preserved exactly as you configured it — even if you close and reopen the project later.
When you export, the crop is applied during rendering to produce a video in your chosen aspect ratio and frame area.
For vertical content (9:16), position your crop over the presenter or the most visually engaging part of your studio. Since your recordings are typically landscape (16:9), choosing the right crop position makes a significant difference in how your final clip looks on TikTok or Reels.
***
## Exporting
With your crop configured, you're ready to export your selection into a downloadable clip.
### Creating an Export
1. Make sure you have a **selection** defined on the timeline (in and out points)
2. Optionally, configure your **crop settings** for the target aspect ratio
3. Click **Export**
4. Enter a **file name** for your clip
5. Confirm to start the export
### Export Processing
Once created, your export moves through the following stages:
| Status | What's Happening |
| --------------- | ------------------------------------------------------------- |
| **Pending** | Export is queued for processing |
| **Downloading** | The selected segment is being fetched from your local storage |
| **Processing** | Video is being encoded with crop settings applied |
| **Uploading** | Processed file is being prepared for download |
| **Completed** | Your clip is ready to download |
| **Failed** | Something went wrong — check the failure reason for details |
A progress bar shows real-time completion percentage. Status updates are pushed to your browser automatically - no need to refresh the page.
### Downloading Your Clip
When an export reaches **Completed** status, a download button appears. Click it to save the finished clip to your computer.
You can find your exports in two places:
* **Project Editor → Exports tab** - shows exports for the current project
* **Clips → Exports** - shows all exports across all your projects
Each export card displays the file name, processing status, creation date, and the user who created it.
***
## What's Next
**Direct publishing** to social media platforms and **automatic export** to external storage locations (NAS, Google Drive) are on the roadmap.
# Managing your Clips recordings
Source: https://docs.visualradioassist.live/clips/managing-your-clips-recordings
Recordings are the raw video files captured during your live broadcasts. They are the starting point for every clip you create in Visual Radio Assist.
## How Recordings Work
When a live show ends, VRA detects the new file in your configured [Media Server Ingest Sources](/clips/media-server-ingest-sources) and makes it available in your Clips library. The recording itself stays on your local machine - VRA streams it to your browser on demand. There is no upload step. Your video files never leave your infrastructure until you explicitly export a clip.
## Browsing Recordings
Open the **Clips** section and navigate to **Recordings**. Here you can:
* Browse all available recordings in a paginated grid view
* **Filter by date range** to find a specific show
* **Filter by scheduling program** to narrow results by show type
* **Search** recordings by file name
* **Hover** over a recording card to scrub through thumbnail frames for a quick preview
Each recording card displays the file name, total duration, associated studio, and recording date. While a thumbnail is still being generated, a loading indicator is shown.
## Creating a Clip from a Recording
Click on any available recording to open it in the project editor. A new project is created automatically, and you can start selecting the moment you want to clip right away.
# Media Server Ingest Sources
Source: https://docs.visualradioassist.live/clips/media-server-ingest-sources
Before you can work with recordings in Clips, Visual Radio Assist needs to know where your video files are stored. Ingest Sources define the connection between your local storage and the VRA Cloud platform.
## What Is an Ingest Source?
An Ingest Source is a configured storage location that VRA monitors for new recordings. When a live show ends, the recording appears automatically in your Clips library.
Your Media Server Client handles the connection between VRA Cloud and your local files. It reads the video data from your configured storage and streams it to your browser on demand.
## Supported Source Types
Visual Radio Assist supports the following storage types:
| Type | Description |
| ---------------------------- | ------------------------------------------------------------- |
| **Local Directory** | A folder on the same machine running your Media Server Client |
| **Network Directory** | A shared folder on your local network (NAS, mapped drive) |
| **FTP** | Standard FTP server connection |
| **SFTP** | Encrypted FTP connection for secure transfers |
| **S3** | Amazon S3 bucket or S3-compatible storage |
| **HyperDeck** | Blackmagic HyperDeck recording device |
| **vMix Recording Directory** | Recordings captured directly by vMix |
## Setting Up an Ingest Source
1. Navigate to your **Station Settings** and open the **Ingest Sources** section
2. Click **Add Ingest Source**
3. Enter a **Name** to identify this source (e.g., "Studio A NAS", "vMix Recordings")
4. Select the **Source Type** that matches your storage setup
5. Provide the **Path** or **Media Connection** to the directory containing your recordings
6. If required, select the **Media Server Client** that has access to this storage location
7. Configure **Connection Info** for remote sources (FTP credentials, S3 access keys, etc.)
8. Save your configuration
Once saved, VRA will start monitoring the configured path for recordings. New files are detected automatically and appear in your Recordings library.
**Auto Cleanup**
Each Ingest Source can be configured to automatically remove old recordings after a set number of days. This keeps your storage manageable without manual intervention.
1. Toggle **Auto Cleanup** on for your Ingest Source
2. Set the **retention period** in days
3. Recordings older than the specified period will be removed automatically
## Media Connections
Media Connections let you connect external recording devices and production software to VRA. Once connected, VRA can monitor device status in real-time and link these connections to your Ingest Sources for automated recording workflows.
Connect HyperDeck, OBS, vMix, and remote storage devices to VRA.
Your Media Server Client must be running and connected to VRA Cloud for recordings to appear. If recordings are not showing up, verify the client is active and has access to the configured path.
# Media Connections
Source: https://docs.visualradioassist.live/clips/media-server-ingest-sources/media-connections
Media Connections let you connect external recording devices and production software to VRA. Once connected, VRA can monitor device status in real-time and link these connections to your Ingest Sources for automated recording workflows.
## Overview
Media Connections let you connect external recording devices and production software to VRA. Once connected, VRA can monitor device status in real-time and link these connections to your Ingest Sources for automated recording workflows.
## What Is a Media Connection?
A Media Connection represents a network connection between VRA and an external device or service. The Media Server Client maintains these connections and relays live status information - such as recording state, storage usage, and transport mode - directly to your browser.
Media Connections are managed per station and can be assigned to a specific studio.
## Supported Connection Types
| Type | Description | Default Port |
| ------------- | ------------------------------------------- | ------------ |
| **HyperDeck** | Blackmagic HyperDeck recording device | 80 |
| **OBS** | OBS Studio recording and streaming software | 4455 |
| **vMix** | vMix video production software | 8088 |
| **FTP** | Standard FTP server | 21 |
| **SFTP** | Encrypted FTP connection | 22 |
| **S3** | Amazon S3 or S3-compatible storage | 443 |
## Where to Find Media Connections
Navigate to **Station Settings → Studio → Media Server** and scroll to the **Media Connections** section. This section sits below [Media Server Ingest Sources](/clips/media-server-ingest-sources) on the same settings page.
## Creating a Media Connection
1. Click **Create Media Connection**
2. A side panel opens where you configure the connection
3. Enter a **Name** to identify this connection (a default name is generated automatically, e.g., "HYPERDECK 1")
4. Select the **Type** that matches your device or service
5. Enter the **Host** or use **mDNS** to discover devices in your network automatically.
6. The **Port** is filled in automatically based on the selected type, but can be changed if needed
7. Optionally, click **+ Add password** to provide authentication credentials
8. Click **Save Connection**
For HyperDeck connections, an additional configuration step is required after entering the host — see [HyperDeck Configuration](#hyperdeck-configuration) below.
## Editing a Media Connection
Click on any connection in the list to open it in the side panel. From here you can:
* **Enable or disable** the connection using the checkbox at the top
* Update the name, host, port, or password
* View the live **status panel** for supported device types (HyperDeck, OBS, vMix)
* **Delete** the connection using the Delete button
Changes are tracked automatically. If you try to close the panel with unsaved changes, you will be prompted to confirm.
## Connection Status
Each connection in the list displays real-time status information:
| Indicator | Meaning |
| -------------------------------------- | -------------------------------------------- |
| **Green dot** | Device is connected and communicating |
| **Red dot** | Device is enabled but not connected |
| **Grey dot** | Connection is disabled or no state available |
| **"Recording" badge** | Device is actively recording |
| **"Streaming" badge** | Device is actively streaming |
| **"Connected" / "Disconnected" badge** | Current connection state |
| **"Disabled" badge** | Connection has been manually disabled |
A studio badge is also shown to indicate which studio the connection belongs to.
Your Media Server Client must be running and connected to VRA Cloud for status updates to appear. If all connections show as disconnected, verify that the Media Server Client is active.
## How Media Connections Relate to Ingest Sources
Media Connections work together with [Media Server Ingest Sources](/clips/media-server-ingest-sources). When you create an Ingest Source for a device-based source type - **HyperDeck**, **vMix Recording Directory**, or **OBS Recording Directory** - you are asked to select an existing Media Connection or create a new one.
The Media Connection provides the network details (host, port, credentials), while the Ingest Source defines *what* to monitor (the recording path, scheduling rules, cleanup settings). This separation lets you reuse the same connection across multiple ingest configurations.
If your Ingest Source type does not require a device connection (e.g., Local Directory, Network Directory, FTP, SFTP, S3), you provide connection details directly in the Ingest Source configuration instead.
***
## Device-Specific Features
### HyperDeck Configuration
HyperDeck connections include an additional configuration step. After entering the host and clicking **Configure**, a settings panel appears with the following options:
**Storage Mode**
* **Local Disk** - use a disk inserted directly into the HyperDeck. Available disks are detected automatically, showing device name, volume, used space, clip count, and remaining record time. Select the disk you want to use for recordings.
* **NAS** - connect to network-attached storage via SMB. You can select from automatically discovered NAS devices on your network, choose from saved bookmarks, or enter an SMB path manually. SMB credentials (user and password) can be provided when needed.
**Timestamp Format**
| Format | Description |
| ------------------ | ---------------------------------------------- |
| **UTC** | Timestamps in Coordinated Universal Time |
| **Local Time** | Timestamps in your local timezone |
| **Filename Based** | Derive timestamps from the recording file name |
**Auto Select Disk** - when enabled, VRA will automatically force the selected disk to be the working set after the HyperDeck restarts.
**HyperDeck Status Panel** - once connected, the side panel shows live device information:
* Product name, device name, and software version
* Storage overview with usage bars per disk
* Transport mode and playback state
* Recording status and timecode
* Input source and video format
* Codec information
* Last update timestamp
HyperDeck devices on your local network can be discovered automatically via mDNS. When entering the host, matching devices appear as suggestions — select one to auto-fill the host, port, and device name.
### OBS Status Panel
When an OBS connection is active, the side panel displays:
* Connection state indicator
* Scenes - all configured scenes, with the active scene highlighted
* Recording - active/idle indicator, timecode, file size, output directory
* Streaming - active/idle indicator, timecode, data transferred, frame count and skipped frames
### vMix Status Panel
When a vMix connection is active, the side panel displays:
* Connection state indicator
* Recording and streaming status indicators
* vMix version and edition
* Tally - shows which inputs are currently on Program (PGM) and Preview (PVW)
# Composition Editor
Source: https://docs.visualradioassist.live/composition-editor
Visual Compositions allow you to combine multiple layers of graphics (Visuals) into a single, structured layout. By stacking and reusing layers, you ensure that visuals appear in the correct order within the Episode Playout.
Visual Compositions allow you to combine multiple layers of graphics (Visuals) into a single, structured layout. By stacking and reusing layers, you ensure that visuals appear in the correct order within the [**Episode Playout**](/episode-playout). When a layer is selected in the Playout, it becomes a **rundown item**, making it easy to manage and trigger during a live broadcast.
## How a Composition works
Compositions serve as the foundation for Playout Episodes. When creating a composition, you are essentially selecting the Visuals and their default values for use in the Playout. Once the composition is set up, it must be linked in the [Output Editor](/output-editor), which is only possible in the **Advanced Editor**.
Visual Composition overrides all classic content of the rundown and is only available in Manual Output Mode.
### Layer Aliases
Each layer in a composition can be assigned an **alias**. This is useful when you want to provide a more descriptive name for a visual without altering the original file. For example, if the visual is named **Lower Third**, but you need a dedicated layer for guest names, you can assign it an alias like **Guest Name**. The alias will be displayed in the Playout, while the visual itself remains unchanged.
### Default Variables
Visual Variables can have a **default value** set within the visual itself. However, when reusing visuals across different scenarios, conflicts may arise due to varying default values. To prevent this, the Composition Editor allows you to set default values for variables at the composition level.
### Playback Configurationg
Compositions can also include **predefined playback settings**:
* **Default Duration** – Assign a standard duration to each layer, so every time it is added to the rundown, it already has a set playtime.
* **Archiving & Auto-Archiving** – Choose whether rundown items should be archived manually or automatically after playback.
# Dashboards
Source: https://docs.visualradioassist.live/dashboards
Create your custom dashboard with buttons managing your Visual Radio environment with ease.
Dashboards are custom screens you build for your operators. Combine live status tiles with action buttons on a grid, then run the result fullscreen on a studio touchscreen or wall display. Operators see what matters and trigger heavy actions, like putting the studio on air, with one tap.
## How it works
1. Go to **Settings → Broadcaster → Dashboards** and click **Add new**
2. Name the dashboard, pick its station and click **Create and go to designer**
3. Add panels to the grid: status panes and action buttons
4. Set who can use the dashboard under **Access**
5. Click **Save Dashboard**, then **Launch** to open the live view
## Key concepts
**Dashboard** - A custom screen that belongs to a station, with an optional preferred studio. Opening a dashboard switches the operator to that studio automatically.
**Tab** - A page within a dashboard. Each tab has its own grid size and can be marked as the default tab.
**Panel** - A widget placed on the grid. Panels are either panes, which show live status, or buttons, which trigger actions. Each panel has a position, size and optional label.
**Grid** - Every tab is a grid you size with **Grid X** and **Grid Y**. Click an empty cell to add a panel at that spot.
## Create a dashboard
Go to **Settings → Broadcaster → Dashboards** and click **Add new**. Give the dashboard a name, select the station it belongs to and click **Create and go to designer**.
If the selected station is not your active station, you are switched to that
station after creation.
The list shows every dashboard with when and by whom it was last edited. Use the row menu to **Open** the live view, **Edit** the design or **Delete** the dashboard.
## Design your dashboard
The Dashboard Designer shows a 16:9 preview of the active tab. Click the **+** in an empty grid cell to add a panel there.
### Panel types
| Panel | What it does |
| -------------------------- | ------------------------------------------------------------------------------------ |
| Pane Studio State | Shows whether the studio is on air or off air |
| Pane Server State | Shows whether the Core server is active, with its hostname |
| Pane Audiomanager State | Live [Audio Manager](/audio-manager) status |
| Pane Nowplaying | Artist, title and cover art from your radio automation |
| Pane Scheduling | The on air program with its end time, from [Scheduling](/scheduling) |
| Upload Media Dump | A drop zone that uploads files straight into a chosen [Media Hub](/media-hub) folder |
| Button Internal Route | Navigates to a page in the app, like a Playout or the Media Hub |
| Button Trigger Macro | Fires a [Macro](/macros) |
| Button Trigger Camera | Switches to a camera |
| Button Toggle Server State | Activates or deactivates the Core server |
| Button Toggle Studio State | Puts the studio on air or takes it off air |
### Configure a panel
Every panel has a **Panel Label**, **Width**, **Height** and **Position X** and **Position Y** within the grid. Depending on the type there are extra options:
* **Alias** - a friendly display name for macro, camera and toggle buttons.
* **Required confirm action** - the operator must tap the button twice before it fires. Prevents accidental clicks on heavy actions.
* **Station Wide Action** - for state toggles, all studios in the station are triggered with this action.
* **Upload Directory** - for the media dump, choose where newly uploaded media is stored.
### Tabs
Add tabs with the **+** next to the tab bar to split a dashboard into multiple pages, like one tab for the presenter and one for the producer. Per tab you set the grid size, the **Tab name**, whether it is the **Default Tab** and whether it is **Visible**.
### Dashboard details
At the bottom of the designer, the **Details** section holds the dashboard name, whether it is **Enabled**, the default grid size, the preferred studio and the **Studio Selector Visible** setting: **always**, **never** or **overlay**. With overlay, studio status chips appear in the top bar of the live view.
## Use a dashboard live
Open a dashboard with **Launch** in the designer or **Open** in the dashboards list. The viewer runs at `/dashboards/{id}` and is built for touchscreens and wall displays.
* Toggle fullscreen with the fullscreen button in the top bar.
* Hide the top bar with the eye button. Double click the background to bring it back.
* Buttons with a required confirm action ask for a second tap before firing.
* Camera buttons are disabled when the Core server is not active.
## Who can access a dashboard
Creating and editing dashboards requires dashboard edit permissions. Which operators can use a dashboard is set per dashboard in the **Access** section of the designer:
* **User Access** - grant individual users from the station.
* **Role Access** - grant everyone with a station wide role at once.
To block a user again, edit their permissions in [User Management](/user-management). Managers can also set a **Resource lock** on a dashboard to prevent other operators from editing or deleting it.
# Develop with VRA
Source: https://docs.visualradioassist.live/develop-with-vra
Build on Visual Radio Assist with custom visual graphics, the Core Control API, the Cloud GraphQL API, and radio automation links.
## Outputs
Customize your Visuals with CSS selectors, custom code, and animation libraries.
## VRA API's
Communicate directly with the local Core application on your machine.
Integrate external systems with VRA Cloud over GraphQL.
## Link radio automation
Push now playing data to VRA with a simple generic integration.
Build a full, future-proof integration for your radio automation software.
## Ingest
Feature to be announced soon
# Cloud GraphQL API
Source: https://docs.visualradioassist.live/develop-with-vra/cloud-graphql-api
Visual Radio Assist provides a comprehensive GraphQL API that enables powerful integration capabilities with external broadcast systems, scheduling software, and custom applications.
Authenticate automated systems and integrations with API tokens.
Push now playing and upcoming items into a studio from the cloud side.
Put studios on air and activate their Core, by id or studio name.
Visual Radio Assist provides a comprehensive GraphQL API that enables powerful integration capabilities with external broadcast systems, scheduling software, and custom applications. This API serves as the primary interface for programmatic interaction with VRA Cloud.
## Overview
The VRA GraphQL API offers a flexible, efficient way to query and manipulate data within your Visual Radio Assist environment. Unlike traditional REST APIs, GraphQL allows you to request exactly the data you need in a single query, reducing network overhead and improving performance.
## API Endpoints
### Production Environment
```
API Endpoint: https://api.cloud.visualradioassist.live/graphql
GraphiQL Playground: https://api.cloud.visualradioassist.live/graphiql
```
## Authentication
All API requests require authentication using a Machine User token. For details on creating Machine Users, see the [Machine Users documentation](/develop-with-vra/cloud-graphql-api/machine-users).
```
POST /graphql
Content-Type: application/json
Authorization: Bearer your_machine_user_token
```
### GraphiQL Authentication
The GraphiQL playground provides automated authentication:
1. Click the **"Authorize with VRA Cloud"** button in the GraphiQL interface
2. Login with your VRA Cloud manager user credentials
3. Select a machine user from the dropdown to automatically authorize the playground
For machine-to-machine access, use the token generated during the machine user creation process.
## Core Concepts
### Programs and Scheduling
The API centers around `SchedulingProgram` objects that represent broadcast programs:
* **Programs**: Individual broadcast shows or segments
* **Presenters**: Host information associated with programs
* **Recurring Patterns**: Schedule repetition using RRule format
* **Media Assets**: Associated visual and audio content
### Media Management
* **Media References**: Support for external URLs and media file references
* **Metadata Handling**: Rich media information and categorization
## Key Operations
### Querying Programs
Retrieve existing program information:
```graphql theme={null}
query GetPrograms {
schedulingPrograms {
id
title
description
start
end
presenters {
id
fname
lname
name
avatar
}
media {
cdnImageId
metadata
}
rRule
}
}
```
### Creating/Updating Programs
Use the `upsertSchedulingProgram` mutation to create or update programs:
```graphql theme={null}
mutation UpsertProgram($input: UpsertSchedulingProgramInput!) {
upsertSchedulingProgram(input: $input) {
id
title
start
end
}
}
```
### Input Variables Example:
```json theme={null}
{
"input": {
"id": "S623-20250722",
"title": "Morning Show",
"description": "Daily morning broadcast",
"start": "2025-07-22 06:00:00",
"end": "2025-07-22 10:00:00",
"presenters": [
{
"id": 1,
"fname": "John",
"lname": "Doe",
"name": "John Doe",
}
],
"metadata": {},
"media": ["media_key_1", "media_key_2"],
"rrule": "FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR"
}
}
```
### RRule Format
VRA uses the iCalendar RRule standard for recurring programs. Common patterns:
```
Daily (weekdays only): FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR
Weekly: FREQ=WEEKLY
Monthly: FREQ=MONTHLY
Custom interval: FREQ=WEEKLY;INTERVAL=2 (every 2 weeks)
```
### RRule Testing
Use online tools like [rrule.js demo](https://jkbrzt.github.io/rrule/) to test and generate RRule strings.
## Integration Patterns
### External Scheduling System Sync
```javascript theme={null}
// Example Node.js integration
const fetch = require('node-fetch');
async function syncScheduleToVRA(externalPrograms) {
const endpoint = 'https://api.cloud.visualradioassist.live/graphql';
const token = process.env.VRA_MACHINE_USER_TOKEN;
for (const program of externalPrograms) {
const mutation = `
mutation UpsertProgram($input: UpsertSchedulingProgramInput!) {
upsertSchedulingProgram(input: $input) {
id
title
}
}
`;
const variables = {
input: transformToVRAFormat(program)
};
await fetch(endpoint, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
},
body: JSON.stringify({
query: mutation,
variables: variables
})
});
}
}
function transformToVRAFormat(externalProgram) {
return {
id: externalProgram.broadcastId,
title: externalProgram.showName,
description: externalProgram.synopsis,
start: externalProgram.startTime,
end: externalProgram.endTime,
presenters: externalProgram.hosts.map(host => ({
id: host.staffId,
firstName: host.first,
lastName: host.last,
name: `${host.first} ${host.last}`
}))
};
}
```
## Error Handling
### Common GraphQL Errors
```json theme={null}
{
"errors": [
{
"message": "Authentication required",
"extensions": {
"code": "UNAUTHENTICATED"
}
}
]
}
```
### Validation Errors
```json theme={null}
{
"errors": [
{
"message": "Invalid date format for field 'start'",
"path": ["upsertSchedulingProgram", "start"],
"extensions": {
"code": "BAD_USER_INPUT"
}
}
]
}
```
## Best Practices
### Query Optimization
* **Request Only Needed Fields**: GraphQL allows precise field selection
* **Use Fragments**: Reuse common field sets across queries
* **Batch Operations**: Combine multiple mutations when possible
* **Implement Caching**: Cache frequently accessed data
### Rate Limiting
* Implement request throttling in your application
* Monitor API usage through VRA Cloud dashboard
* Contact support for rate limit adjustments if needed
## Development Workflow
### 1. Exploration with GraphiQL
Use the interactive GraphiQL playground to:
* Explore the complete schema
* Test queries and mutations
* Validate data structures
* Generate example code
### 2. Schema Introspection
The GraphiQL interface provides full schema introspection, showing:
* Available queries and mutations
* Field types and relationships
* Required vs optional fields
* Deprecation notices
### 3. Testing Environment
Development environment access must be requested through [support@visualradioassist.live](mailto:support@visualradioassist.live):
* Request development environment access for integration testing
* Create test programs and data in the development environment
* Validate data transformations
* Test error scenarios
## Troubleshooting
### Authentication Issues
```bash theme={null}
# Test token validity
curl -X POST https://api.cloud.visualradioassist.live/graphql \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your_token" \
-d '{"query": "query { __typename }"}'
```
### Schema Validation
Use GraphiQL's built-in validation to check:
* Query syntax
* Field availability
* Type compatibility
* Required field presence
### Debugging Tips
* Enable detailed logging in your application
* Use GraphiQL for query testing and validation
* Monitor VRA Cloud audit logs for API activity
* Check network connectivity and DNS resolution
## Migration and Updates
### API Versioning
VRA maintains API compatibility but may introduce:
* New fields and mutations
* Deprecation warnings
* Enhanced validation rules
### Schema Updates
* Monitor the GraphiQL playground for schema changes
* Subscribe to [status.visualradio.cloud](http://status.visualradio.cloud) for API availability
* Check [changelog.visualradioassist.live](http://changelog.visualradioassist.live) for significant documentation changes
* Test integrations against new schema versions
* Update code to use new features and deprecate old patterns
# AutomationLink ingest
Source: https://docs.visualradioassist.live/develop-with-vra/cloud-graphql-api/automationlink-ingest
Push now playing and upcoming items into a studio through the Cloud GraphQL API when your radio automation cannot reach the Core directly.
The `ingestAutomationLinkData` mutation feeds AutomationLink from the cloud side. You send the current and upcoming items to a station, VRA Cloud hands them to the Core of each targeted studio, and the Core publishes them exactly like a locally linked radio automation. Use it when the automation runs outside the studio network, in a cloud playout system for example, and cannot post to the [Core Control API](/develop-with-vra/core-control-api) or the [generic HTTP link](/develop-with-vra/generic-http-radio-automation-link).
## How it works
1. Your automation calls `ingestAutomationLinkData` with the station, optionally one studio, and the `current` and `upcoming` sets.
2. VRA Cloud normalises each item and sends the sets to the Core of every targeted studio over the studio bus.
3. The Core publishes the items as now playing and upcoming, runs [Item Groups](/radio-automation-data) and updates the studio state.
4. For `MUSIC` items without `music_meta`, VRA Cloud looks up [Music Track Meta](/radio-automation-data) in the background and sends the enriched sets a moment later.
The studio needs a running Core. The Core owns the AutomationLink state, so ingested data reaches [visuals](/visual-variables), the Live Switcher and the studio dashboard through the same path as any other radio automation.
## Authentication
Authenticate as a [Machine User](/develop-with-vra/cloud-graphql-api/machine-users) of the station, or as a cloud user who has the station active. A machine user bound to another station is rejected with `Not authorized for this station`.
## Targeting studios
* `station_id` is required.
* `studio_id` targets one studio of the station. Omit it to send the same sets to every studio of the station.
* Omit `current` or `upcoming` to leave that set untouched on the Core. Send an empty list to clear it.
## Items
Each item in `current` and `upcoming` follows the `RadioAutomationItem` shape the Core uses for every automation:
* **id** - unique identifier from your automation. Use an md5 of artist and title if your system has none. The Core uses it to detect a new item, so a changed id means a new track.
* **title** and **artist** - the display values. Both must be at least 2 characters for Music Track Meta lookup.
* **category** - `MUSIC`, `TRACK`, `STATION` or `UNKNOWN`. Defaults to `MUSIC`. Only `MUSIC` items are enriched.
* **timestamp** - start of the item as a datetime with offset, normalised to UTC.
* **duration** and **offset** - in milliseconds.
* **end\_timestamp** and **completed** - mark an item that already ended.
* **igroups** - item group identifiers, when your automation already classifies items.
* **meta** - free-form source metadata like item codes, bpm or key, as a JSON encoded string. Stored as the item's meta string and available in visuals.
* **music\_meta** - artist, title and album details you already have. Any value here, even a cover URL alone, counts as supplied and skips the Music Track Meta lookup.
`meta` is a `JSON` scalar and must be sent as a JSON encoded string, not as a GraphQL object literal. Write `meta: "{ \"item_code\": \"M-48213\" }"` or pass the string through a variable. An object literal is rejected by the schema.
## Example
Push one current track and two upcoming tracks to a single studio. The current item ships its own cover and artist image, so VRA Cloud does not look it up. The upcoming items have no `music_meta` and are enriched in the background.
```graphql theme={null}
mutation {
ingestAutomationLinkData(input: {
station_id: "94bf2c80-2fb6-4c0a-b33d-5d2d1bb888e7"
studio_id: "99abda79-9c21-42a2-bb17-08f7886de136"
current: [{
id: "tame-impala-dracula"
category: MUSIC
artist: "Tame Impala"
title: "Dracula (with JENNIE)"
timestamp: "2026-08-14T08:12:30+02:00"
duration: 209000
completed: false
meta: "{ \"item_code\": \"M-48213\", \"bpm\": 118 }"
music_meta: {
title: "Dracula (with JENNIE)"
artists: [{
name: "Tame Impala"
image: {
regular: "https://cdn-images.dzcdn.net/images/artist/879015e713cc6ad6ffaeec154c027505/250x250-000000-80-0-0.jpg"
lg: "https://cdn-images.dzcdn.net/images/artist/879015e713cc6ad6ffaeec154c027505/500x500-000000-80-0-0.jpg"
}
}]
album: {
title: "Dracula (with JENNIE)"
cover: {
source: "deezer"
variants: {
sm: "https://cdn-images.dzcdn.net/images/cover/b868399da682f34dcd7d98af1c0de80b/250x250-000000-80-0-0.jpg"
regular: "https://cdn-images.dzcdn.net/images/cover/b868399da682f34dcd7d98af1c0de80b/500x500-000000-80-0-0.jpg"
lg: "https://cdn-images.dzcdn.net/images/cover/b868399da682f34dcd7d98af1c0de80b/1000x1000-000000-80-0-0.jpg"
}
}
}
}
}]
upcoming: [
{
id: "olivia-dean-man-i-need"
category: MUSIC
artist: "Olivia Dean"
title: "Man I Need"
timestamp: "2026-08-14T08:15:59+02:00"
duration: 184000
},
{
id: "ariana-grande-hate-that-i-made-you-love-me"
category: MUSIC
artist: "Ariana Grande"
title: "hate that i made you love me"
timestamp: "2026-08-14T08:19:03+02:00"
duration: 198000
}
]
}) {
ok
studios
enrichment_queued
}
}
```
Response:
```json theme={null}
{
"data": {
"ingestAutomationLinkData": {
"ok": true,
"studios": 1,
"enrichment_queued": 2
}
}
}
```
* **studios** - number of studios the sets were sent to.
* **enrichment\_queued** - number of unique `MUSIC` items queued for Music Track Meta lookup. The enriched sets follow on the same path once the lookup finishes, so expect a second update on the studio a few seconds later.
## Clearing the current item
Send an empty `current` list when the automation stops or goes to a non-music item you do not want on screen. `upcoming` stays as it was.
```graphql theme={null}
mutation {
ingestAutomationLinkData(input: {
station_id: "94bf2c80-2fb6-4c0a-b33d-5d2d1bb888e7"
studio_id: "99abda79-9c21-42a2-bb17-08f7886de136"
current: []
}) {
ok
}
}
```
## Related
* [Studio control](/develop-with-vra/cloud-graphql-api/studio-control) to put a studio on air or activate its Core from the same API.
* [Connecting with AutomationLink](/develop-with-vra/connecting-with-automationlink) for the fields VRA needs from any radio automation.
* [Radio automation data](/radio-automation-data) for Music Track Meta and Item Groups.
# Machine Users
Source: https://docs.visualradioassist.live/develop-with-vra/cloud-graphql-api/machine-users
Machine Users in Visual Radio Assist provide a secure way to authenticate automated systems and third-party integrations with the VRA Cloud platform.
Machine Users in Visual Radio Assist provide a secure way to authenticate automated systems and third-party integrations with the VRA Cloud platform. This functionality is essential for connecting external broadcast systems, scheduling software, and automation tools to your VRA instance.
## Overview
Machine Users are specialized accounts designed for system-to-system communication rather than human users. They provide API tokens that enable external applications to interact with VRA's GraphQL API securely and programmatically.
## Key Features
* **API Token Generation**: Create secure tokens for external system authentication
* **Granular Permissions**: Control what actions machine users can perform
* **Scalable Integration**: Support multiple external systems simultaneously
## Use Cases
Machine Users are commonly used for:
* **Broadcast Scheduling Integration**: Sync program schedules from external systems
* **Media Workflow Automation**: Automatically upload and manage media content
* **Real-time Data Exchange**: Stream live data between VRA and other broadcast tools
* **Custom Application Development**: Build custom interfaces and control systems
## Managing Machine Users
### Creating a Machine User
1. Navigate to the VRA Cloud dashboard
2. Go to **Settings** → **Broadcaster** → **Machine Users**
3. Click **Create New Machine User**
4. Configure the following settings:
* **Name**: Descriptive name for the machine user
* **Description**: Purpose and scope of the integration
* **Permissions**: Select appropriate access levels
* **Token Expiration**: Set token validity period (optional)
### Generating API Tokens
Once a Machine User is created:
1. Select the machine user from the list
2. Click **Generate Token**
3. Copy the generated token immediately (it won't be shown again)
4. Store the token securely in your external application
### Token Security Best Practices
* **Store Securely**: Never expose tokens in client-side code or version control
* **Use Environment Variables**: Store tokens in secure environment variables
* **Regular Rotation**: Regenerate tokens periodically for enhanced security
* **Principle of Least Privilege**: Grant only necessary permissions
* **Monitor Usage**: Regularly review API access logs
### Revoking Access
To revoke a machine user's access:
1. Go to **Machine Users** settings
2. Select the user to revoke
3. Click **Revoke Token** or **Delete Machine User**
4. Confirm the action
## Integration Examples
### Scheduling System Integration
Connect your existing broadcast scheduling system to automatically sync program information:
* Pull program data from external scheduling database
* Transform data to VRA format using GraphQL mutations
* Update VRA scheduling in real-time
* Handle recurring programs and schedule changes
### Media Automation
Automate media workflows:
* Monitor network folders for new content
* Automatically upload media to VRA Cloud Media Hub
* Associate media with scheduled programs
* Manage media metadata and categorization
# Studio control
Source: https://docs.visualradioassist.live/develop-with-vra/cloud-graphql-api/studio-control
Put studios on air and activate or deactivate their Core through the Cloud GraphQL API, by studio id or studio name.
Three mutations control a studio the way the studio panel in VRA Cloud does. They send the same internal commando to the Core, so the Core applies the change, updates its state and every connected client follows. Use them from a scheduling system, a control surface or a script that switches studios without an operator in the app.
## How it works
1. You call a mutation with the station and one or more studios.
2. VRA Cloud resolves each studio by id or by its internal name within the station.
3. VRA Cloud sends an internal commando to the Core of each studio over the studio bus.
4. The Core applies the state and publishes its new state to VRA Cloud and all clients.
The Core needs to be online. A commando to a studio without a running Core is not queued. The Core also keeps its own rules, so while the Core is in a state like standby it rejects the commando like it would from the app.
## Authentication
Authenticate as a [Machine User](/develop-with-vra/cloud-graphql-api/machine-users) of the station, or as a cloud user who has the station active.
## Addressing a studio
`studio_id` accepts the studio id or the studio name, the internal name of the studio in VRA Cloud. Names are matched exactly and only within the given station, so a script can use `Studio_1` instead of a UUID.
## Put a studio on air
```graphql theme={null}
mutation {
setStudioOnAirState(input: {
station_id: "94bf2c80-2fb6-4c0a-b33d-5d2d1bb888e7"
studio_id: "Studio_1"
state: ON_AIR
}) {
ok
studio_ids
}
}
```
`state` is `ON_AIR`, `OFF_AIR` or `TOGGLE`. `TOGGLE` flips whatever the Core currently has.
## Switch several studios at once
The station level mutation takes a list of studios with their new state. Every studio is resolved before anything is sent, so one unknown name fails the whole call and no studio changes.
```graphql theme={null}
mutation {
setStationStudiosOnAirState(input: {
station_id: "94bf2c80-2fb6-4c0a-b33d-5d2d1bb888e7"
studios: [
{ studio_id: "Studio_1", state: OFF_AIR }
{ studio_id: "Studio_2", state: ON_AIR }
]
}) {
ok
studio_ids
}
}
```
## Activate or deactivate a Core
```graphql theme={null}
mutation {
setCoreActivationState(input: {
station_id: "94bf2c80-2fb6-4c0a-b33d-5d2d1bb888e7"
studio_id: "Studio_1"
state: ACTIVE
}) {
ok
studio_ids
}
}
```
`state` is `ACTIVE`, `DEACTIVATED` or `TOGGLE`. A deactivated Core stops handling switcher and camera commandos until it is activated again.
## Response
Every mutation returns the same shape.
```json theme={null}
{
"data": {
"setStudioOnAirState": {
"ok": true,
"studio_ids": ["99abda79-9c21-42a2-bb17-08f7886de136"]
}
}
}
```
* **ok** - the commando was sent.
* **studio\_ids** - ids of the studios it was sent to, useful when you addressed them by name.
An unknown studio returns `No studio 'name' in this station`, a station you have no access to returns `Not authorized for this station`.
## Related
* [AutomationLink ingest](/develop-with-vra/cloud-graphql-api/automationlink-ingest) to push now playing data through the same API.
* [Core Control API](/develop-with-vra/core-control-api) for control on the studio network, including [Bitfocus Companion](/develop-with-vra/core-control-api/bitfocus-companion-control-over-visual-radio).
# Connecting with AutomationLink
Source: https://docs.visualradioassist.live/develop-with-vra/connecting-with-automationlink
Every radio automation software is different. Here is the guide on how to connect a new radio automation software with Visual Radio Assist.
Every radio automation software is different, to deliver the best Visual Radio experience to our client' radiostation Visual Radio Assist needs a couple of fields at minimum to function. Here is the guide on how to connect a new radio automation software with Visual Radio Assist.
Visual Radio Assist already integrates with the fields from these radio automations: [Link Radio Automation](/set-up/link-radio-automation) .
## Integration Overview
The VRA Radio Automation integration solution works best in a "PUSH" manner. This means that on a change within the radio automation, VRA must be notified as soon as possible with the up-to-date state of the **Currently** playing and (optionally) **upcoming/playlist** items.
See the complete overview of a possible radio automation data flow below:
### Advised flow
## Delivery
VRA (Visual Radio Assist) can receive the automation data payload in several ways (file, directory watch, tcp, (web)socket, Ember+, MQTT and HTTP(s)). But after several years of integration and video-audio syncing experience the advised way to deliver data to VRA is by making a `sub ms` **HTTP call**.
The API from VRA Core is accessible in the local network by HTTP and HTTPS (you have to trust the certificate bundle → [Advanced Installation](/advanced-installation)).
**Example of a push request to the VRA Core API**
```json theme={null}
POST https://core.vra.local:3001/alink/software_xyz
Content-type: application/(json|xml|..)
{payload}
```
VRA Core is also able to process data from your Radio Automation in the Cloud / Cloud Solution, via the Automation Cloud Link with sub 5 ms latency. Therefore a webhook could be configured to deliver the latest automation data to VRA. [Get in contact](https://visualradioassist.live/contact) to discuss the possibilities.
## Payload format
After making contact with VRA, the content of your payload determines the possibilities of your client within Visual Radio. Delivering for example upcoming track info is optional, but can enhance the experience in several ways.
The following fields are by default parsable by and required in the Core:
| Item **Field** | Description | Accuracy | Required in: Current | Upcoming | 🔄 Video sync |
| ----------------- | --------------------------------------------------------------------------------------------------------------------- | ----------------------- | --------------------------- | -------- | ------------- |
| Artist | | | ✅ | ✅ | ✅ |
| Title | | | ✅ | ✅ | ✅ |
| ID | Unique identifier of the item in the radio automation context | `Preferred UUID / ULID` | ✅ | ➖ | ✅ |
| Type | String describing the global type of the item (Music / Jingle / Station ID) | | ➖ | ➖ | ➖ |
| Start time | Starting timestamp of the item
In case of upcoming: projected starttime in the moment of generating the payload. | `\|< ms ` | ➖ | ➖ | ✅ |
| In point | Offset from the original beginning of the item | `\|< ms ` | ➖ | ➖ | ✅ |
| Duration | Total playable duration of the item | `\|< ms` | ➖ | ➖ | ➖ |
| Category | String describing the category of the item. (90s, 2000s, Sweep) | | ➖ | ➖ | ➖ |
| Extra Fields | All other fields are made available to the client in the Meta object. | | | | |
| **General** | Not required, but can improve processing | | | | |
| Message ID | Unique ID of the message, to prevent double processing | | | | |
| Message Timestamp | Generation timestamp, in-sync with sending machine' time | `\|< ms` | | | ✅ |
You are free to implement the fields and your additions in any parsable manner. But the advised 2023 payload format is a JSON request with a payload containing the wrapper with the General fields, the current field containing an **array** with the currently playing item(s) (multiple main players are able to play multiple items at the same time 😉) and the upcoming items within an array (by playing-order).
A full example of a generic payload can be found in the [Generic HTTP Radio Automation Link](/develop-with-vra/generic-http-radio-automation-link) docs or below. **Do note** that if you implement the exact same payload, the Generic Radio Automation Integration is sufficient enough (and by default available) to meet the basic needs of a radiostation client.
```json theme={null}
POST http://core.vra.local:3002/alink/generic
Content-type: application/json
{
"id": "{MessageID}",
"timestamp": "{MessageTimestamp}",
"current": [
{
"id": "{ID}",
"artist": "{Artist}",
"title": "{Title}",
"timestamp": "{Start time}",
"position": "{Start position / In point}",
"duration": "{Duration}",
"type": "{Type}",
"category": "{Category}",
"meta_1": "{Meta Field 1}",
"meta_2": "{Meta Field 2}"
}
],
"upcoming": [
{
"id": "{ID}",
"artist": "{Artist}",
"title": "{Title}",
"timestamp": "{Start time}",
"position": "{Start position / In point}",
"duration": "{Duration}",
"type": "{Type}",
"category": "{Category}",
"meta_1": "{Meta Field 1}",
"meta_2": "{Meta Field 2}"
},
{
"id": "{ID}",
"artist": "{Artist}",
"title": "{Title}",
"timestamp": "{Start time}",
"position": "{Start position / In point}",
"duration": "{Duration}",
"type": "{Type}",
"category": "{Category}",
"meta_1": "{Meta Field 1}",
"meta_2": "{Meta Field 2}"
}
]
}
```
### Handling character encoding
The Core API is only able to process correctly encoded and parsable UTF-8 payloads in the provided Content-type. This means that special characters (often used in artist/title strings) MUST be encoded in the way that the content format describes. Otherwise the payload won't be processed in the AutomationLink.
Interesting characters in `JSON` or `XML` payloads for example: `&` `"` `'` `< >` `/` `$` `,` `;`
When working with XML or JSON payloads, it is crucial to properly encode special characters in the property values. This is because some characters, such as `&`, `"`, `'`, `<`, `>`, `/`, `$`, `,`, and `;`, have a special meaning in XML and JSON formats and can cause parsing errors if not encoded properly.
To encode special characters in XML, you can use character entity references. These are special codes that represent the special characters in a way that can be read by the XML parser. For instance, to encode an ampersand character (`&`) in XML, you can use `&`. Similarly, to encode a single quote (`'`), you can use `’`, and to encode a double quote (`"`) you can use `"`.
To encode special characters in JSON, you can use backslashes to escape the character. For example, to encode a double quote character (`"`) in JSON, you can use `\"`. Similarly, to encode a backslash (`\`), you can use `\\`.
It is important to properly encode special characters to avoid processing errors in the AutomationLink. If you fail to do so, the XML or JSON parser may interpret a special character as a command or instruction, causing the payload to be parsed incorrectly. This can lead to data loss or other issues that can affect the functionality of your application.
By following the guidelines described above, you can ensure that your XML or JSON payloads are properly encoded and parsed without any issues, making it easier to work with and integrate your data with other systems.
## Ready to ingest? Request Integration 🔌
If the radio automation software is ready to deliver the automation now playing data in the described format, let us know!
We are happy to built the most feature-rich integrations with all possible radio automation software systems in the 🌎.
Mail us at [integration@visualradioassist.live](mailto:integration@visualradioassist.live) with the following details about how to "export" the data from the radio automation software into Visual Radio Assist:
🛠️ The `Content-type` of the request.
💬 An example payload of the export message / request, Additionally, a description could be added to provide a better understanding of the format of the payload and the supported fields.
📝 Any required Instructions (preferred with screenshots) on how to make the radio automation software ready to talk with Visual Radio Assist. For example, setting up a specific Template in "settings xyz" or adding a HTTP configuration somewhere. A good example of such an complete instruction is the link with PowerStudio: [Link Power Studio to Visual Radio](/set-up/link-radio-automation/link-power-studio-to-visual-radio).
🔑 Testing license of the software to build a minimal testing environment for the integration.
After receiving your integration request, we will start developing the integration to get it up and running. Once completed, the "AutomationLink Integration" will be made available to users on our beta environment. We will take care of creating documentation for the integration and informing users about the new possibilities with your software.
Finally we get in contact to handle the final testing together and to make sure the client can start working with the integration in production at right moment (release schedule).
# Core Control API
Source: https://docs.visualradioassist.live/develop-with-vra/core-control-api
The Core Control API delivers a direct way of communicating with the Local Core Application running on your machine.
The Core Control API delivers a direct way of communicating with the **Local** Core Application running on your machine.
The Core is the main server application responsible for all major triggers, connections and active state of the automation of the VRA software.
Normally you can control the Core easily via the [Cloud](http://visualradio.cloud), but in some advanced cases you also want direct Local API control over the VRA automations.
Configure ports, hostnames, and authentication for the Core API.
Reference for the available Core API HTTP endpoints.
Drive VRA from a StreamDeck with Companion.
## Existing functionality endpoints
The Core API is also being used for all external communication to VRA. The AutomationLink is one of the important modules that makes heavy use of the Core API.
Read more in the [Generic HTTP Radio Automation Link](/develop-with-vra/generic-http-radio-automation-link) and [Connecting with AutomationLink](/develop-with-vra/connecting-with-automationlink) documentation.
# Bitfocus Companion Control over Visual Radio
Source: https://docs.visualradioassist.live/develop-with-vra/core-control-api/bitfocus-companion-control-over-visual-radio
This doc described how to use Companion to utilize a StreamDeck to control the Visual Radio Assist Core application.
This doc described how to use Companion to utilize a StreamDeck to control the Visual Radio Assist Core application. Check the other [Core Control API](/develop-with-vra/core-control-api) pages as well for detailed endpoint and connectivity descriptions.
## Generic: HTTP Requests
To communicate with the VRA [Core Control API](/develop-with-vra/core-control-api) you have to setup a Generic HTTP Request in Companion with the connectivity details of your Core API ([Connectivity and Access management](/develop-with-vra/core-control-api/connectivity-and-access-management)):
## Create re-usable variables
To reference to current states and authorization required for the communication with the VRA Core API you have to setup the following variables:
* `vra_state_state` latest state from the Core
* `vra_auth` authorization string packed in the JSON headers for Companion's HTTP Request Connection, see [Connectivity and Access management](/develop-with-vra/core-control-api/connectivity-and-access-management)
## Startup & state sync Trigger
To keep the current state of VRA in sync with the StreamDeck at all times, create a refreshing State Sync **Trigger**:
For every request with the "VRA" (general request) Connection, make sure to use the `$(internal:custom_vra_auth)` variable to reference the current authorization header JSON from the variables.
The response of the "sync trigger" should be saved in the `vra_state_state` variable for later use.
# Create a "Toggle VRA" button
To toggle the Active state of VRA you can make use of the control endpoints in the Core API.
The current VRA State should be visible in the button via the `vra_state_state` variable and the value of the variable is updated after the Press Action.
### Sync color
You can update the button color with each state update via an extra trigger comparing the current `vra_state_state` value. Make sure to use the correct button location in the **Set background color** Action. You need to create two Triggers for the **`ACTIVE`** and **`DEACTIVATED`** state.
# Connectivity and Access management
Source: https://docs.visualradioassist.live/develop-with-vra/core-control-api/connectivity-and-access-management
Configure the Core API's ports, hostnames, and authentication for LAN and HTTPS access.
As mentioned in the **Local Server Applications** documentation the Core server runs by default on port `3002` allowing remote access over the LAN by all NIC's via host `0.0.0.0`
The Advanced Core Settings do allow you to set custom ports and hostnames to have more gradual control over the Core API network access.
Check out all the required steps to access the API over HTTPS via the advanced local installation steps:
## Authentication
Most endpoints of the Local API are secured with authentication.
Click on the **Generate Token** button in the \*\*Cloud Core Settings \*\*to generate an username and password for accessing the API.
The authentication method is "Basic Authentication" and you can authorize yourself with the `EXTERNAL_APP` username via the `Authorization` header:
```javascript theme={null}
Basic {base64([username]:[password]}
```
# Core API Endpoints
Source: https://docs.visualradioassist.live/develop-with-vra/core-control-api/core-api-endpoints
Reference for the Core API HTTP endpoints to read state and control your Studio and Core.
Open API doc coming soon
**BASE URL:** `http://{core_host_ip}:3002/api/`
**Authorization:** Basic - read more [Connectivity and Access management](/develop-with-vra/core-control-api/connectivity-and-access-management)
**Description:** Get current studio name of the Core client
**Description:** Set Active Core Studio Onair
**Content-type:** text/plain
**Response:** Current Core State
**Description:** Set Active Core Studio Offair
**Content-type:** text/plain
**Response:** Current Core State
**Description:** Toggle Active Core Studio Onair Status
**Content-type:** text/plain
**Response:** Current Core State
**Description:** This endpoint fetches all current state of the server
**Content-type:** application/json
**Description:** This endpoint fetches the current state of the server (for example `ACTIVATED`, or `DEACTIVATED`)
**Content-type:** text/plain
**Description:** This endpoint fetches the "activeness" of the server (multiple states can indicate "active" and this endpoint will just return `true` | `false`)
**Content-type:** text/plain
**Description:** Activate Core
**Content-type:** text/plain
**Response:** Current Core State
**Description:** Deactivate Core
**Content-type:** text/plain
**Response:** Current Core State
**Description:** Toggle Core state
**Content-type:** text/plain
**Response:** Current Core State
**Description:** ⚠️ **REBOOT all managed apps by Core (check Cloud → Studio Advanced → Core Settings)**
**Content-type:** text/plain
**Description:** Reload all Core Modules
**Description:** Reload and restart all Output Player instances in the Core (not the Player app clients itself)
More endpoints coming soon. Got suggestions for other endpoints? Mail [feedback@visualradioassist.live](mailto:feedback@visualradioassist.live) or request feature on [https://roadmap.visualradioassist.live](https://roadmap.visualradioassist.live)
# Develop Visual Graphics
Source: https://docs.visualradioassist.live/develop-with-vra/develop-visual-graphics
Customize your Visuals with CSS selectors, custom code, and animation libraries.
The CSS classes that mark each stage of a layer's transition.
Animate your Visuals with GSAP from the Designer's custom JS.
## CSS Selectors
**Default selectors:**
* `.canvas .layer` Canvas wrapper with reference to the layers
**Broken:** `#visual_canvas`
Due to the nature of the new Visual Canvas specification for the Visual Compositions Visual Canvas'es have to be unique, so we're adding a bit of the ID of the Visual to the `#visual_canvas_{#}` selector which is dynamic.
**Layer**
* `.layer` Wraps layer, with **Layer' CSS Selector** applied
* `# ID Selector` for Layer (customizable)
* `.type-{type}` → contains layer **type** (`.layer.type-text` = a text layer)
* `schedulingmedia`
* `text`
* `media`
* `html`
* `snippet`
**Elements**
* Text
* `.h1` - `.h6` + `.p` are classes that are added to the layer element
## Customize Visual
### Header HTML
Add libraries to your Output
**Included Libraries by default**
* ~~Tailwind CSS (CSS styling)~~
* [GSAP](https://gsap.com/)
→ See **CSS Selectors** for layer' element selectors
### Body Javascript
Raw Javascript to be added at the end of the Body
**Events**
To integrate your custom logic with the described Layer transition states ([see](/visual-designer) Designer) Events are dispatched on `activation` and `hide` events.
When an layer is activated the `layer-activated` event is triggered on the `.layer` HTML element. When hidden the `layer-hidden` event is triggered:
```javascript theme={null}
visualLink.getCanvasElement("layer-id")
.addEventlistener("layer-activated", function(){
// do special stuff
})
visualLink.getCanvasElement("layer-id")
.addEventlistener("layer-hidden", function(){
// do special stuff
})
```
### Body-end HTML
HTML code (CSS, etc.) that is added to the end of the body (`js` wont be evaluated, script tags will)
Adding animations for yet to be rendered elements
### Custom CSS
Appended at the end of the `header` after `Header HTML` .
**Only `em` is valid**
Avoid using **`px`** or **`rem`**, as they do not consistently produce predictable results across contexts. Prefer **`em`**, which provides more reliable and context-aware scaling.
# GSAP Animations with Visual Radio Graphics
Source: https://docs.visualradioassist.live/develop-with-vra/develop-visual-graphics/gsap-animations-with-visual-radio-graphics
To add GSAP animations to your Visuals in Visual Radio Assist, you can make use of the custom JS in the Designer.
To add GSAP animations to your Visuals in Visual Radio Assist, you can make use of the custom JS in the Designer.
## Quick Start
### Hello World Animation
Fade in a text layer when the visual appears:
```typescript theme={null}
if (typeof visualLink !== "undefined") {
const pm = visualLink.playStateManager;
const getCanvasElement = visualLink.getCanvasElement;
pm.on("enter", () => {
gsap.to(getCanvasElement("my-text-layer"), {
opacity: 1,
duration: 1
});
});
}
```
**Required Steps:**
1. Add custom JS to your visual
2. Set layer ID to `my-text-layer` (bottom of layer properties)
3. Turn off default transition on that layer
## Core Concepts
### The visualLink Object
`visualLink` connects your JavaScript to the visual lifecycle. Always check it exists:
```typescript theme={null}
if (typeof visualLink !== "undefined") {
// Your code here
}
```
When writing custom JavaScript for visuals, you have access to the `visualLink` object that provides methods to interact with your visual canvas. It's the **link** between the code and the **visual lifecycle and data**. Every layer is accessible via the `visualLink`.
### Getting Elements
**Never use** `document.querySelector` - visuals renderer places elements in different contexts on the page, there is no guarantee that the querySelector will query the element you expect it to return.
```javascript theme={null}
// NEVER use class names or IDs directly in custom JS
gsap.to("#title-ed8732d"...
gsap.to(".list item"...
document.querySelector("#title-ede8w9")...
```
**Always use** `visualLink.getCanvasElement()`:
```typescript theme={null}
// By ID
const title = visualLink.getCanvasElement("title-layer");
// By class (returns multiple)
const items = visualLink.getCanvasElement(".list-item");
```
Set IDs at bottom of layer properties panel.
### The Play State Manager
`visualLink.playStateManager` controls when your visual appears and disappears. It fires events at key moments in the [visual's lifecycle.](/develop-with-vra/develop-visual-graphics/layer-transition-lifecycle-for-css)
```typescript theme={null}
const pm = visualLink.playStateManager; // Shorthand for convenience
```
You register handlers for these moments using `pm.on()`.
### Lifecycle Events
Visuals have 3 key moments:
```typescript theme={null}
const pm = visualLink.playStateManager;
// 1. Before showing (prepare state)
pm.on("cuein", () => {
// Reset animations to start position
});
// 2. Show visual (play in animation)
pm.on("enter", () => {
// Start your animation
});
// 3. Hide visual (play out animation)
pm.on("leave", () => {
// Exit animation
});
```
**Execution order:** `cuein` → `enter` → `leave`
***
## GSAP Basics
### Three Animation Methods
```typescript theme={null}
// Animate TO a state
gsap.to(".element", { x: 100, duration: 1 });
// Animate FROM a state to current
gsap.from(".element", { opacity: 0, duration: 1 });
// Define both start and end
gsap.fromTo(".element",
{ opacity: 0, y: 50 },
{ opacity: 1, y: 0, duration: 1 }
);
```
### Common Properties
```typescript theme={null}
{
// Position
100, // Move right 100px
y: -50, // Move up 50px
// Appearance
opacity: 0.5, // Fade to 50%
scale: 1.2, // Scale to 120%
rotation: 45, // Rotate 45deg
// Timing
duration: 1, // 1 second
delay: 0.5, // Wait 0.5s before start
ease: "power2.out" // Easing function
}
```
[GSAP Cheatsheet](https://gsap.com/cheatsheet)
***
## Complete Examples
### Example 1: Simple Fade In
```typescript theme={null}
if (typeof visualLink !== "undefined") {
const pm = visualLink.playStateManager;
const getCanvasElement = visualLink.getCanvasElement;
const title = getCanvasElement("title");
pm.on("enter", () => {
gsap.from(title, {
opacity: 0,
duration: 0.5
});
});
}
```
**What this does:** Title fades in over 0.5s when visual enters.
### Example 2: Slide In + Fade Out
```typescript theme={null}
if (typeof visualLink !== "undefined") {
const pm = visualLink.playStateManager;
const getCanvasElement = visualLink.getCanvasElement;
const subtitle = getCanvasElement("subtitle");
pm.on("enter", () => {
gsap.from(subtitle, {
x: -100,
opacity: 0,
duration: 0.6
});
});
pm.on("leave", () => {
gsap.to(subtitle, {
opacity: 0,
duration: 0.3
});
});
}
```
**What this does:**
* **Enter:** Slides in from left with fade
* **Leave:** Fades out
### Example 3: Multiple Layers
```typescript theme={null}
if (typeof visualLink !== "undefined") {
const pm = visualLink.playStateManager;
const getCanvasElement = visualLink.getCanvasElement;
const layers = [
getCanvasElement("layer-1"),
getCanvasElement("layer-2"),
getCanvasElement("layer-3")
];
pm.on("enter", () => {
gsap.from(layers, {
opacity: 0,
y: 30,
duration: 0.5,
stagger: 0.2 // 0.2s delay between each
});
});
}
```
**What this does:** 3 layers appear one after another with 0.2s delay.
### Example 4: Using Timelines
For complex multi-step animations:
```typescript theme={null}
if (typeof visualLink !== "undefined") {
const pm = visualLink.playStateManager;
const getCanvasElement = visualLink.getCanvasElement;
const title = getCanvasElement("title");
const subtitle = getCanvasElement("subtitle");
const logo = getCanvasElement("logo");
const timeline = gsap.timeline({ paused: true });
timeline
.from(logo, { scale: 0, duration: 0.4 })
.from(title, { opacity: 0, y: -20, duration: 0.3 }, "-=0.2")
.from(subtitle, { opacity: 0, duration: 0.3 });
pm.on("enter", () => {
timeline.restart();
});
}
```
**What this does:**
1. Logo scales up
2. Title fades in from top (slightly before logo finishes)
3. Subtitle fades in
### Example 5: Full In/Out with Reset
```typescript theme={null}
if (typeof visualLink !== "undefined") {
const pm = visualLink.playStateManager;
const getCanvasElement = visualLink.getCanvasElement;
const layer = getCanvasElement("animated-layer");
const intro = gsap.timeline({ paused: true });
const outro = gsap.timeline({ paused: true });
intro.fromTo(layer,
{ opacity: 0, x: -50 },
{ opacity: 1, x: 0, duration: 0.6 }
);
outro.to(layer, {
opacity: 0,
x: 50,
duration: 0.4
});
pm.on("cuein", () => {
intro.progress(0).pause();
outro.progress(0).pause();
});
pm.on("enter", () => {
if (!intro.isActive()) intro.restart();
});
pm.on("leave", () => {
if (!outro.isActive()) outro.restart();
});
}
```
**What this does:**
* **`cuein`:** Reset both animations
* **`enter`:** Slide in from left
* **`leave`:** Slide out to right
**Important:** Always reset animations in `cuein` to prevent state issues.
***
## Transition Settings
Found in Visual settings below tag editor. Controls overall visual transition behavior.
### Default
Layers transition independently. Each layer uses its own timing.
**Use when:** Simple visuals with independent layer animations.
### Layer Based
Visual waits for ALL layers to finish transitioning.
**Duration = sum of all layer transitions**
**Use when:** Coordinated multi-layer animations where all must complete.
### Visual Based
Fixed duration for entire visual, layers animate within that time.
**Settings:**
* In Duration (ms): Time to show visual
* Out Duration (ms): Time to hide visual
**Use when:** Consistent timing regardless of layer complexity.
### Visual Fixed
Single fixed-length visual. No individual layer control.
**Settings:**
* In Duration (ms): Show time
* Out Duration (ms): Hide time
* Layer transitions disabled
**Use when:** Simple displays, no complex timing needed.
***
## Common Patterns
### Pattern: Layer That Only Animates In
```typescript theme={null}
pm.on("enter", () => {
gsap.from(layer, { opacity: 0, duration: 0.5 });
});
// No leave handler - uses default out
```
### Pattern: Continuous Animation
```typescript theme={null}
pm.on("enter", () => {
gsap.to(layer, {
rotation: 360,
duration: 2,
repeat: -1, // Infinite
ease: "none" // Linear
});
});
```
### Pattern: Sequence Multiple Animations
```typescript theme={null}
const tl = gsap.timeline();
tl.to(layer1, { opacity: 1, duration: 0.3 })
.to(layer2, { x: 100, duration: 0.5 })
.to(layer3, { scale: 1.5, duration: 0.4 });
```
### Pattern: Overlap Animations
```typescript theme={null}
const tl = gsap.timeline();
tl.to(layer1, { opacity: 1, duration: 0.5 })
.to(layer2, { x: 100, duration: 0.5 }, "-=0.3") // Start 0.3s before layer1 ends
.to(layer3, { scale: 1.5, duration: 0.5 }, "+=0.2"); // Start 0.2s after layer2 ends
```
***
## Troubleshooting
### Animation doesn't run
* [ ] `typeof visualLink !== "undefined"` wrapper exists
* [ ] Layer ID matches `getCanvasElement("id")`
* [ ] Default transition disabled on animated layers
* [ ] Console for errors
### Animation runs but looks wrong
* [ ] Using lifecycle events correctly (`cuein`/`enter`/`leave`)
* [ ] Reset animations in `cuein` for repeatable playback
* [ ] Transition Settings mode matches intent
### Element not found
* [ ] Layer ID set in properties (bottom of panel)
* [ ] Using `visualLink.getCanvasElement()` not `document.querySelector`
* [ ] ID has no `#` prefix in `getCanvasElement("id")`
### Animation plays multiple times
**Solution:** Check if active before restarting:
```typescript theme={null}
pm.on("enter", () => {
if (!timeline.isActive()) {
timeline.restart();
}
});
```
### Visual data not updating
Access visual data via `visualLink.data`:
```typescript theme={null}
console.log(visualLink.data); // See all available properties
const artistName = visualLink.data.artist;
```
***
## Best Practices
1. Always check `visualLink` exists before any code
2. Always use `visualLink.getCanvasElement()` for DOM queries
3. Reset animations in `cuein` for reliable repeated playback
4. Disable default transitions on GSAP-animated layers
5. Use timelines for multi-step animations
6. Check `isActive()` before restarting animations
7. Keep durations under 1s for snappy UI
8. Test with repeated plays (`cuein` → `enter` → `leave`)
***
## Reference
### visualLink API
```typescript theme={null}
visualLink.data // Visual content data
visualLink.canvas() // Main canvas element
visualLink.getCanvasElement(query) // Query elements safely
visualLink.playStateManager // Lifecycle events
visualLink.abortController // Cleanup controller
```
### Lifecycle Events
```typescript theme={null}
pm.on("cuein", handler) // Before show (reset)
pm.on("enter", handler) // Show visual (in animation)
pm.on("leave", handler) // Hide visual (out animation)
```
### GSAP Essentials
```typescript theme={null}
gsap.to(target, vars)
gsap.from(target, vars)
gsap.fromTo(target, fromVars, toVars)
gsap.timeline(vars)
```
[Full GSAP Docs](https://gsap.com/docs)[GSAP Cheatsheet](https://gsap.com/cheatsheet)
# Layer Transition Lifecycle for CSS
Source: https://docs.visualradioassist.live/develop-with-vra/develop-visual-graphics/layer-transition-lifecycle-for-css
The CSS classes that mark each stage of a layer's transition in and out of the active state.
### Layer Transition Lifecycle
**Activation/Active state means**: Output plays the layer' parent Visual AND Layer Condition is Live
* `.layer-in-transition` when the layer is **in** a transition mode between **active** states
* ~~`+750 ms`~~
* `.layer-transition-in` when a layer becomes **active**
* `.layer-transition-out` when a layer becomes **inactive**
* `.layer-visible` Layer transition \*\*done \*\*and Layer is **visible** and is **active**
* `.layer-hidden` Layer transition \*\*done \*\*and Layer is **hidden** and is not **active**
Future Lifecycle improvements include Visual's CUE-IN state (to know that a Visual is coming up in Output Player Rundown Queue) and a CUE-OUT state which identifies when a Visual's playtime is almost over.
### Default opacity (fade) transition / CSS
```scss theme={null}
.layer {
&:not(.type-html):not(.type-visual):not(.type-snippet) {
display: flex;
}
&.layer-out-transition {
opacity: 1;
transition: 300ms ease-in;
}
iframe {
position: relative;
z-index: -1;
}
&.layer-in-transition {
opacity: 0;
transition: 300ms ease-out;
}
&.layer-transition-in {
opacity: 0;
}
&.layer-visible {
opacity: 100;
}
&.layer-transition-out {
opacity: 100;
}
&.layer-hidden {
opacity: 0;
}
}
```
# Generic HTTP Radio Automation Link
Source: https://docs.visualradioassist.live/develop-with-vra/generic-http-radio-automation-link
Visual Radio Assist already integrates with a lot of the most used radio automation softwares, but integrating yours is quick and easy with the generic automation link.
Visual Radio Assist already integrates with a lot of the most used radio automation softwares ([Link Radio Automation](/set-up/link-radio-automation) ). But it could happen that we missed yours, luckily integrating is quick and easy with the generic automation link integration. This way you can enable your client to work with Visual Radio after your next update.
Looking for a complete and future-proof integration that works best for your radio automation software? Check out the [Connecting with AutomationLink](/develop-with-vra/connecting-with-automationlink) documentation for all steps to create a **custom integration**.
## Generic JSON Request
Make the following request to push your automation data to the VRA Core API (hostname `core.vra.local` or the LAN VRA machine IP). [Network Connectivity](/network-connectivity)
```json theme={null}
POST http://core.vra.local:3002/alink/generic
Content-type: application/json
{
"id": "{MessageID}",
"timestamp": "{MessageTimestamp}",
"current": [
{
"id": "{ID}",
"artist": "{Artist}",
"title": "{Title}",
"timestamp": "{Start time}",
"position": "{Start position / In point}",
"duration": "{Duration}",
"type": "{Type}",
"category": "{Category}",
"meta_1": "{Meta Field 1}",
"meta_2": "{Meta Field 2}"
}
],
"upcoming": [
{
"id": "{ID}",
"artist": "{Artist}",
"title": "{Title}",
"timestamp": "{Start time}",
"position": "{Start position / In point}",
"duration": "{Duration}",
"type": "{Type}",
"category": "{Category}",
"meta_1": "{Meta Field 1}",
"meta_2": "{Meta Field 2}"
},
{
"id": "{ID}",
"artist": "{Artist}",
"title": "{Title}",
"timestamp": "{Start time}",
"position": "{Start position / In point}",
"duration": "{Duration}",
"type": "{Type}",
"category": "{Category}",
"meta_1": "{Meta Field 1}",
"meta_2": "{Meta Field 2}"
}
]
}
```
### `{Fields}` description
| Item **Field** | Description | Accuracy | Required in: Current | Upcoming | 🔄 Video sync |
| ----------------- | --------------------------------------------------------------------------------------------------------------------- | ----------------------- | --------------------------- | -------- | ------------- |
| Artist | | | ✅ | ✅ | ✅ |
| Title | | | ✅ | ✅ | ✅ |
| ID | Unique identifier of the item in the radio automation context | `Preferred UUID / ULID` | ✅ | ➖ | ✅ |
| Type | String describing the global type of the item (Music / Jingle / Station ID) | | ➖ | ➖ | ➖ |
| Start time | Starting timestamp of the item
In case of upcoming: projected starttime in the moment of generating the payload. | `\|< ms ` | ➖ | ➖ | ✅ |
| In point | Offset from the original beginning of the item | `\|< ms ` | ➖ | ➖ | ✅ |
| Duration | Total playable duration of the item | `\|< ms` | ➖ | ➖ | ➖ |
| Category | String describing the category of the item. (90s, 2000s, Sweep) | | ➖ | ➖ | ➖ |
| Extra Fields | All other fields are made available to the client in the Meta object. | | | | |
| **General** | Not required, but can improve processing | | | | |
| Message ID | Unique ID of the message, to prevent double processing | | | | |
| Message Timestamp | Generation timestamp, in-sync with sending machine' time | `\|< ms` | | | ✅ |
### Handling character encoding
The Core API is only able to process correctly encoded and parsable UTF-8 payloads in the provided Content-type. This means that special characters (often used in artist/title strings) MUST be encoded in the way that the content format describes. Otherwise the payload won't be processed in the AutomationLink.
Interesting characters in `JSON` or `XML` payloads for example: `&` `"` `'` `< >` `/` `$` `,` `;`
When working with XML or JSON payloads, it is crucial to properly encode special characters in the property values. This is because some characters, such as `&`, `"`, `'`, `<`, `>`, `/`, `$`, `,`, and `;`, have a special meaning in XML and JSON formats and can cause parsing errors if not encoded properly.
To encode special characters in XML, you can use character entity references. These are special codes that represent the special characters in a way that can be read by the XML parser. For instance, to encode an ampersand character (`&`) in XML, you can use `&`. Similarly, to encode a single quote (`'`), you can use `’`, and to encode a double quote (`"`) you can use `"`.
To encode special characters in JSON, you can use backslashes to escape the character. For example, to encode a double quote character (`"`) in JSON, you can use `\"`. Similarly, to encode a backslash (`\`), you can use `\\`.
It is important to properly encode special characters to avoid processing errors in the AutomationLink. If you fail to do so, the XML or JSON parser may interpret a special character as a command or instruction, causing the payload to be parsed incorrectly. This can lead to data loss or other issues that can affect the functionality of your application.
By following the guidelines described above, you can ensure that your XML or JSON payloads are properly encoded and parsed without any issues, making it easier to work with and integrate your data with other systems.
# Episode Playout
Source: https://docs.visualradioassist.live/episode-playout
The Episode Playout is designed for managing recurring programs based on live scheduling. While it functions similarly to the Manual Playout, it offers additional features and layout-customization options. The Episode Playout allows you to control the first five upcoming scheduled programs.
The **Episode Playout** is designed for managing recurring programs based on live scheduling. While it functions similarly to the [**Manual Playout**](/manual-playout), it offers additional features and layout-customization options. The Episode Playout allows you to control the first five upcoming scheduled programs.
All the scheduled programs in **Scheduling** are **episodes,** as they are typically recurring and will air again at a later time. Their rundown generally remains the same, including presenters, show-related visuals, and other predefined elements.
### Episode Rundown list
The rundown list forms the basis of a Episode, containing all the graphics that can be shown on the Playout Preview and Program Signals.
### Live control
All the changes (including in preview) you make in the Episode Playout are **live** on playout-episode-basis; this means that changes you make will directly be visible for other users in the same playout. You have control over two Playout busses; the preview and onair program bus.
**PVW** – Preview
The preview bus is an exact stream from the Output Player, meaning that what is looking great in Preview will be exactly the same when it is airing in PGM. By selecting items in the Rundown List you activate them in Preview, with a live-showcase of your modifications of the rundown item.
The Preview bus also allows you to check out the rundown items of upcoming (up to 5) programs in the future and make last minute modifications. When you want to **prepare items** for future shows the [Composer](#episode-composer-prepare-for-future-shows) is a perfect place to preview and modify your epsiodes.
**PGM** – The Program Onair
The onair bus is responsible for the final output signal of the Playout’s Output. The Rundown item that you Take Onair is 1:1 visible on this signal. The Program signal is always connected to the activated Onair Episode. When **multiple programs are onair** you can activate the right Episode manually.
When a program reaches **T-5 minutes** before airing, you can start dragging items from the upcoming episode into the current live episode, ensuring a smooth transition between shows.
### Archive
In the **Playout**, you can either **remove** or **archive** items from the rundown. Archiving allows you to temporarily remove an item without permanently deleting it. Unlike removed items, archived items will still be available the next time you edit the same episode in the future. This ensures that any temporarily unused visuals or graphics remain accessible when preparing for the next broadcast of that specific program.
By default, items cannot be archived. To enable this feature, go to the **Playback Settings** under the **Variables** tab and activate archiving.
Additional options include:
* **Manual Archiving** – Select and archive items to temporarily remove them from the rundown while keeping them available for the next time the episode is edited.
* **Auto-Archive** – When enabled, items will be automatically archived after they have been played, making them available again for the next instance of the same episode.
This feature is useful for recurring programs where certain graphics or media elements might not be needed every time but should still be available for future edits of the same episode
## Configure Episode Playouts
In order to use the Episode Playout you should create a Playout Composition in the Composition Editor. The Composition of a Playout contains all the
The Composition is then connected to an Output in Manual mode, see [Output Editor](/output-editor) for more details on Manual Outputs.
### Playout Customization via Preferences
The customization menu, accessible via the preferences button in the top right corner, allows you to adjust the Episode Playout interface to fit your workflow.
* **Disable the PGM Player** – If you’re working in a physical studio where the Program (PGM) output is already visible on external screens, you can disable the PGM player in the interface for a cleaner workspace.
* **Switch Layouts** – You can change from the **Default Layout** to the **Three Column Layout**, which may better suit users who, for example, prefer a split-screen workflow.
* **Adjust Column Sizes** – All columns can be resized within certain limits, giving you control over the interface layout based on your preference.
## Episode Composer: Prepare for future shows
The **Episode Composer**, accessible through the top bar of the Episode Playout interface, allows you to prepare episodes in advance for future programs. While the **Episode Playout** focuses on managing live scheduling for the next five programs, the Episode Composer provides the flexibility to select and configure any scheduled program in the future.
This feature is especially helpful for preparing, enabling you to organize and pre-load rundown items specific to a program. The tool includes a simulated live preview, giving you a clear view of the prepared visuals and ensuring everything is set up correctly before going on air.
# Essentials
Source: https://docs.visualradioassist.live/essentials
Practical how-to guides for common Visual Radio Assist tasks.
Short, practical guides for getting the most out of your Outputs, media, and scheduling.
Upload your own video and play it out on an Output Player.
Use Live Items so Scheduling Media shows only during a live program.
Trigger commandos with a condition when no program is onair.
Connect media to each program and play it out automatically.
# Getting started
Source: https://docs.visualradioassist.live/getting-started
Get up and running with VisualRadioAssist in no time.
Set up the stage where your visual content comes to life.
Build a visual from layers, transitions, and text.
Trigger actions across your broadcast with commandos.
Add Google Fonts or upload your own typefaces.
## Output players
Bring your Output Player into OBS over NDI.
Looking for the guides on how to install and configure your brand new Visual Radio studio? Go to [Set-up](/set-up).
# Lock Resources
Source: https://docs.visualradioassist.live/lock-resources
Within many modules of the VRA Cloud you are able to “Lock” an item for Editing or Updating actions by other users.
Within many modules of the VRA Cloud you are able to “Lock” an item for Editing or Updating actions by other users.
## What is an locked item?
If an item is locked it is not editable or deletable by other users. With the following exception:
**Broadcast- and Station Managers** are always able to edit, delete and manage the lock on a item
The locked item is visible for other users, but editing them is not possible (or the save action is not available) when Locked for editing. When you lock an item for deletion the item does not have any delete actions available in the user’ Cloud.
Because Deleting is essentially updating/editing the resource the Updating Lock also prevents users from deleting the resource.
## Supported items for locking
When the parent of a sub-item (like a Visual Layer) is locked, all sub-item actions are locked as well.
* Outputs
* Rundowns
* Rundown items
* Visuals
* Layers
Coming soon:
* Cameras
* Automations
* Macros
* Audio Triggers
# Machine Specs
Source: https://docs.visualradioassist.live/machine-specs
VisualRadioAssist 4 consists of 3 Server applications you have to install on a Windows or macOS machine in order to make use of the full VisualRadioAssist functionality.
VisualRadioAssist 4 consists of 3 Server applications ([download here](https://cloud.visualradioassist.live/studio/apps/download)) you have to install on a Windows or macOS machine in order to make use of the full VisualRadioAssist functionality.
All apps communicate with the **Core** over the configured HTTP TCP port (by default @ `0.0.0.0:3002`) as a base requirement. To optimize latency please install the apps on machines in the same network as much as possible.
### Apps
🎛 **Core:** Links with VideoSwitchers, Automations and Scheduling.
⏯️ **Output Player:** Plays configured Outputs with local video, HTML or cached content (possibly sharded, as configured in a redundant environment)
🎙️ **Audio Manager:** Audio Level monitoring and commando control, has to access available and configured audio devices.
### 🧰 Hardware requirements
**Core and AudioManager** do not require much processing or graphical power and can easily run on a (virtualized) machine with 3+ CPU Cores and 8 GB+ memory.
Audio must be delivered to the Audio Manager using a appropriate available/installed OS- audio device (for example a Dante Audio WDM Driver which is available in Windows).
Supported OS Audio API’s:
* **Windows** DirectSound, ASIO and WASAPI
* **Macos** CoreAudio and JACK
**Output Player**
The Output story is a little different. A large part of the output content encoding is currently executed more stable with the help of the GPU. To prevent slow Rundown’ Live Content starts (buffering), make sure your machine is equipped with enough RAM.
| Use case: | Minimal – 1 basic output | Scaleable multiple advanced outputs\* |
| -------------- | --------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| CPU | Intel (or similar) i5 10th gen or later
2Ghz Quad-Core Processor
AMD Ryzen 5 - 5000series | Intel (or similar) i7 11th gen or later
Intel Core i7 Processor 3Ghz+
AMD Ryzen 7 - 5000 series or later, 12 cores or more |
| RAM | 4 GB DDR4 | 16 GB to minimal 32 GB |
| GPU\* | ≥ NVIDIA GeForce GTX 1660 | ≥ NVIDIA GeForce RTX 3060 |
| GPU Enterprise | ≥ NVIDIA Quadro RTX A2000 | ≥ NVIDIA RTX A4000 |
For more Machine Specs in combination with vMix check [https://www.vmix.com/products/vmix-reference-systems.aspx](https://www.vmix.com/products/vmix-reference-systems.aspx#obsidian)
\* The amount of Output Players you can start on a single machine is highly dependent on the available output signals.
For NDI you are quickly limited by the capabilities of your Network Device. In the case of SDI the limitation is the amount of available channels of your Decklink PCIe card
**NDI Output**
Running the Output Player in NDI Output mode is the most efficient output option for direct use within vMix or OBS (see obs-ndi) on the same machine. Running the Output Player on a separate machine increases the network bandwidth that is required by the NDI stream between machines in such a network. Note that you maybe have to configure additional network hardware (switchers e.d.) in place to meet these new network bandwidths.
**SDI Output Support**
SDI Support for the Output Player can be accomplished by installing a Blackmagic Decklink PCIe card into your machine (or thunderbolt enclosure). Note that most [BM cards](https://www.blackmagicdesign.com/products/decklink/techspecs/) (Duo, Quad) require an extra PCIe 4,8 or 16 slot on your motherboard.
\***GPU Support**
VRA Output Player does require a bit of graphical power to operate. We are currently investigating exact hardware (gpu) acceleration requirements on the Output Player for more efficient encoding. If your machine has a GPU to utilize, the Output Player will currently automatically make use of this extra encoding power. Running on a beefy CPU (with great integrated graphics) only also works well for the Output Player application.
Do note that running VisualRadioAssist in combination with OpenBroadcastSoftware or vMix Video Switchers introduces new (higher) hardware requirements as documented by these applications.
# Macros
Source: https://docs.visualradioassist.live/macros
The Macro trigger enables you to combine multiple VRA Commando's into one single action: a Macro. When activating this macro (via a commando, dashboard button or button in the list) VRA will execute the configured items sequentially or in instantly in parallel.
**Macro Items**
You can configure two items as part of the Macro: trigger a commando or wait for \{x} milliseconds. Selecting commando's is the same as you know from other modules in VRA.
The wait time enables you to create a sequence with time in between triggers (for example for a fallback scenario; looping over two camera's.
**Conditions**
The macro's can get really advanced by selecting conditions. These will enable or disable a item within the macro, so you can automate the full dynamic item list in the macro configuration.
**Block after**
Sometimes it is important to only continue triggering a section in the macro when a condition applies: “Only when music is playing, trigger the Nowplaying Clip Player, if not stop.”
With Block After execution you can prevent the macro from continuation if a condition is not applicable.
### Studio switching example
Below is one of the many scenario's you can realise with Macro's. When the following Macro is triggered, two actions are instantly executed:
* Activate the selected studio (onair)
* Set Overlay 1 to a specific Input in vMix
# Manual Playout
Source: https://docs.visualradioassist.live/manual-playout
The Visual Radio Assist Playout gives you full control over what is playing/showed on an Output Player via a complete interface in the Cloud.
When producing a radio show to be watched by your online audience you want to create more than just automated graphics and videos by default on top of the cameras in the studio. As a producer of the show you should get in control of the extra dimension Visual Radio could give to the live viewers and postproduction snippets.
The Visual Radio Assist Playout gives you full control over what is playing/showed on an Output Player via a complete interface in the Cloud.
## Manual Playout
The **Manual Output**, also referred to as the Playout, provides a dedicated interface for managing visuals during live broadcasts. Only manual outputs can be controlled through the Playout.
The Playout automatically uses the first rundown assigned to the manual output, as manual outputs are limited to a single rundown.
Visuals can be added in two ways:
* Through the **Output Editor**, where you manage and organize content for the Output.
* Directly within the **Playout**, allowing for quick adjustments and additions during a live show.
### Creating a manual output
To create a **Manual Output**, go to the **Output Overview** and add a new output. When prompted, select the **Advanced Editor**, as the **Standard Editor** is intended for outputs that continuously display a single item, such as a fixed video or visual.
In the mode selection, choose **Manual**, then create a new rundown. Since manual outputs are designed for direct control, they can only have one rundown.
### Controlling an output through the Playout
In the **Playout**, you always have a clear overview of what is in **Preview (PVW)** and what is live in **Program (PGM)**.
Double-clicking a rundown item will instantly place it in **Preview**, allowing you to see and adjust it before going live. Or just click the eye icon. Once you’re ready, you can either press the **Play** button or use the **TAKE** button below the Output Players to transition it to Program.
Below these main controls, you’ll find the **Configuration** section, where you can access:
* **Visual Variables** – Adjust text, images, or other dynamic elements. Variables dedicated to that specific visual.
* **Station Variables** – Manage global station variables
* **Playback Settings** – Modify playback options, including rundown item duration.
[Read more about the Playout in the launch blog](https://visualradioassist.live/nl/blog/visual-radio-playout-live-graphics)
# Media Hub
Source: https://docs.visualradioassist.live/media-hub
To use your own media within VRA, the Cloud environment enables you to easily import, ingest and categorise media to use assets in your Visuals and Output Players
The **VRA Media Hub** functions similarly to popular file management services you already know like Dropbox or Google Drive but is specifically tailored for broadcasting workflows. You can:
* **Upload Media**: Add your media files by **dragging and dropping assets directly into the Media Hub** or uploading them manually through the interface.
* **Organize Media**: Create folders and subfolders to categorize your assets, making them easy to locate and use across VRA tools like **Outputs**, **Scheduling**, and the **Visual Designer**.
* **Integrated Access**: Organized assets are accessible throughout the VRA Cloud platform, streamlining workflows and ensuring your media is readily available for broadcasts.
This streamlined media management system saves time and ensures your assets are always at your fingertips when creating compelling visual radio experiences.
# Image Media
Within Cloud you can upload your Media in the form of images (png, jpg, etc.)
These images can later be used for the media of your [Scheduling](/scheduling) Program, [Presenters](/presenters) information or [Visual Designer](/visual-designer) elements.
### Note on quality
VRA will make sure that uploaded images are always loading as fast as possible in your Cloud (automatic compression). However when used in an Output (Visual Element display) the Media is always loaded in the highest possible quality.
## Supported image formats
You can upload the following image formats to VRA Cloud:
* PNG
* GIF
* JPEG
* WebP (excluding animated WebP files)
* SVG
## Dimensions and sizes
These are the maximum allowed sizes and dimensions VRA supports:
* Maximum image dimension is 12,000 pixels.
* Maximum image area is limited to 100 megapixels (for example, 10,000×10,000 pixels).
* Image metadata is limited to 1024 bytes.
* Images have a 10 megabyte (MB) size limit.
* Animated GIFs, including all frames, are limited to 100 megapixels (MP).
# Video Media
Output Player rundowns support your uploaded media as content, so you are able to play your freshly uploaded video content on a Player.
### Uploading your media
After upload, your media will be processed. When the media has been successfully processed you can see the “**Ready**” label.
### Format & Auto conversion
VRA automatically converts the uploaded video into a suitable Output Player format; currently 1080p in your source framerate (max. 70 FPS). This processing step usually takes a minute or two.
**File formats supported:**
MP4, MKV, MOV, AVI, FLV, MPEG-2 TS, MPEG-2 PS, MXF, LXF, GXF, 3GP, WebM, MPG, QuickTime
Alpha layers in uploaded video files will be converted to fill (black). Use Local Media files in [Output Editor](/output-editor) to play large Alpha-layer videos.
### Limits
The max duration of your uploaded media must not extend 180 minutes / 1.5 hrs
Max. size of 5 GB
Max average bitrate of 200Mbps
Consult your current license specifications for the maximum Cloud Storage you can utilize.
See [How to display an uploaded video on an Output](/essentials/how-to-display-an-uploaded-video-on-an-output)
# Media Meta Data
Source: https://docs.visualradioassist.live/media-meta-data
The Media section in Visual Radio Assist allows using both custom metadata fields and IPTC4 metadata support.
The Media section in Visual Radio Assist allows using both **custom metadata fields** and **IPTC4 metadata support**. These metadata options help with managing large libraries of media within the Visual Radio Cloud platform.
### Custom Metadata Fields
Station managers can define custom metadata fields for consistent tagging across all media assets. These fields appear for every asset in the Media section and can be used for internal organization, automation, and searchability.
Custom metadata fields are:
* Created and managed by station managers
* Uniformly applied to all media assets
* Editable per asset to match your station’s workflow
Examples include fields like “Show Name” or “Event”.
### IPTC4 Metadata Support
Visual Radio Assist reads and displays standard IPTC4 metadata embedded in media files. This includes widely-used fields such as:
* Title
* Creator
* Copyright
* Keywords
IPTC4 metadata is typically generated in external media tools and will soon automatically appears when files are uploaded to the platform.
### Using Metadata in the Media Section
Metadata can be viewed and edited directly in the asset detail view. Users can:
* Edit values for custom fields (if permissions allow)
* View IPTC4 metadata for reference
* Filter and search assets by metadata tags
This metadata structure supports smoother scheduling, visual design selection, and automated playout workflows.
# Network Connectivity
Source: https://docs.visualradioassist.live/network-connectivity
This is the network documentation of VisualRadioAssist 4, follow this doc to make sure VRA is able to access all the right resources via public internet (Cloud) and locally via configured ports (Server applications)
This is the network documentation of VisualRadioAssist 4, follow this doc to make sure VRA is able to access all the right resources via public internet (Cloud) and locally via configured ports (Server applications)
## Cloud connectivity
VRA applications and player-contents have to stay in contact with VisualRadioAssist Cloud (”VRA Cloud”) 24/7 in order to facilitate all data to be up to date time-sync.
The following domains (DNS) have to be accessible over port **443** `TCP` over public internet at all times:
* [visualradio.cloud](https://visualradio.cloud) `[HTTPS]`
* [cloud.visualradioassist.live](https://cloud.visualradioassist.live) `[HTTPS]`
* `loki.cloud.visualradioassist.live [HTTPS]`
* `api.cloud.visualradioassist.live [HTTPS]`
* `socket.api.cloud.visualradioassist.live [HTTPS/WSS]`
If you want to use beta or dev versions of VRA, the following domains should be added to the list;
* `dev.cloud.visualradioassist.live [HTTPS]`
* `dev.api.cloud.visualradioassist.live [HTTPS]`
* `socket.dev.api.cloud.visualradioassist.live [HTTPS/WSS]`
Public (LB) IP for all connectivity: `51.158.210.248`
### Cloud Live connectivity
For low latency Cloud Live Output Players the machines where the Output Player app is running must be able to access the following port range to the outside world (internet);
* `UDP` `50000 - 60000` to `all` destinations
### ⚠️ Proxy Note
Using VRA Cloud behind a strict proxy can cause instabilities. Whitelisting the above domains will work for basic usage of the Cloud Dashboard.
Using VRA Server applications behind a proxy could introduce new challenges. You have to configure your proxy to allow bi-directional `websocket` traffic behind the proxy. `HTTPS` Traffic to the following domains should also be allowed:
* **`customer-k9rjbgcrkvgq9ya1.cloudflarestream.com`**
* **`app-dl.s3.nl-ams.scw.cloud`**
* **`*.ingest.sentry.io`**
### 🐞 Note on error reporting
We make use of the widely known and industry standard application monitoring software Sentry.io. To make sure we can deliver the best support whitelist `*.ingest.sentry.io` as well for use behind a proxy or WAF related security software.
### 🛡️ SSL Note
All communication over `HTTPS` is always done via industry-standard mTLS, providing a even better secure socket layer than a initial SSL set-up. Further mTLS via EV / OV authorized certificates is on the Roadmap.
### API Data Sources (Cloud Proxied)
When using the Cloud Proxied API Data Sources the VRA Cloud will initiate requests to your API from ip’s in the following IPv4 and IPv6 ranges;
* `62.210.0.0/16`
* `195.154.0.0/16`
* `212.129.0.0/18`
* `62.4.0.0/19`
* `212.83.128.0/19`
* `212.83.160.0/19`
* `212.47.224.0/19`
* `163.172.0.0/16`
* `51.15.0.0/16`
* `151.115.0.0/16`
* `51.158.0.0/15`
* `78.232.0.0/16`
***
* `2001:bc8::/32`
## Local Server Applications
The three locally installable applications ([see machine specs](/machine-specs)) have to be able to communicate with each other over LAN and with Cloud (👆)
By default VRA Server Core is configured to host this local `HTTP` server on `TCP` port `3002` with host `0.0.0.0` in order to maximize discoverability at set-up.
Within an constrained environment you can minimize the Server Core’ host availability by making this a specific LAN-range IP (`192.168.` , `10.10.` e.d.)
VisualRadioAssist Server Software should access **local (video/audio) hardware equipmen**t as well besides the Cloud and Server Core API. Be aware that this hardware is usually not configured in the same network as VRA Cloud is accessible.
# Output Editor
Source: https://docs.visualradioassist.live/output-editor
The Output Editor controls what your Station’ Output Players play out on physical studio screens, stream-overlays, or fullscreen in your broadcast signal, learn how to utilize them to let VRA power your Visual Radio station.
## Output Editor
A Player is responsible for playing out the rundowns you’ve configured in the Editor. Visit the Editor in your Cloud :
## Advanced Editor - How rundowns work
> In the Standard Editor you only work with one rundown, so this content is not relevant if you’re not using the Advanced Editor.
[Output Rundowns](/output-editor/output-rundowns)
When you work with music in radiostations, “rundowns” in your automation software usually determine which music is played when, how often and how your final playlist looks.
Visual Radio Assist Outputs work exactly the same, only then with video!
### Output → Rundown lifecycle and queue
When an Output starts, it will loop through all available rundowns, 1 by 1. If the rundown is **enabled** and the **condition** (if supplied) **is active,** the output will play the rundown content. Rundown content can be split up in two kind
### Rundown / Normal Items
Normal rundown items are configured in the “Rundown Items” section at the bottom of the Editor. these items **will always playout in sequential order** if a rundown is played.
These items are perfect for looping videos, always visible overlay text or a picture (Visual) you want to freeze on a output.
### Live Items
The Live Items are not played by default. You can add these items the same way you add Rundown Items, but in this case you need to add a Condition **which activates the Live Item.**
When the configured Condition is applicable/activated, the Live Item is shown directly on the Output for the configured Duration.
For example: When the Onair Scheduling Program changes, play “Scheduling Program Media” for x seconds. Or when the nowplaying changes, show “Nowplaying Visual X” for y seconds.
**After the duration has expired, or the content is played out (local/media videos)** the live item will deactivate:
1. The Output looks at the current active rundown, and at which Normal Rundown Item it left off, this item will be the next visible item after the Live Item.
2. Without any Rundown Items in the current rundown, it will trigger the next available rundown.
**When activating:**
1. If the Rundown containing the live item is not playing, the Live Item Condtion activation will **activate the Rundown as well.** (If the rundown has a active condition itself)
2. If the Rundown containing the Live Item is not enabled / disabled by a condition, the live item will not be triggered.
### Fixed duration
The Fixed duration is a hard duration for the content the Output will play out. This property is required for the Visual-like Content Items, because they do not have a duration by themselfs.
For Local/Cloud Media videos, the duration is known by the player, so you could let it play out by default, or specify the time it should play.
When a video is stopped by the fixed duration, the next time it is played it will start from the position it left off.
When the video file is played out within the specified fixed duration time, the next Rundown Item will be triggered.
### Rundown Properties
| Property | Description |
| -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Name | used to identify your rundown / distinguish it from the other rundowns |
| Looping | After the content in a rundown (Live and Normal) is played out, the rundown by default loops, so it can be started again.
If looping is **disabled**, the rundown will not play another time after it is played out and there is no other rundown to start.
If there is another rundown to start, the rundown with looping disabled will still be started after the other started rundown has completed. (Outputs always loop through Rundowns)
If the rundown with disabled looping has a Condition, the Condition change could also trigger the rundown to be started again. |
| Enabled | Disabled rundowns will not be taken into account in the Output Lifecycle / Queue. |
### Rundown Condition
Rundown conditions are configured the same as any other condition in VRA Cloud (automations, triggers, rundown live items etc.).
1. When a rundown Condition is applicable **on check\*** the rundown will play right away.
2. When a rundown Condition becomes active, the rundown is “enabled”, so after the Output’s rundowns, previous to the condition-rundown, are done, the rundown will be played out.
3. When a playing/active rundown Condition becomes inactive, the rundown is disabled. This will trigger the “next rundown” action **directly** on the Output. This means that the playing content is overridden by the next rundown.
## 🎛️ Output Players
Every Output is technically connected to an Output Player, which is a software application that is “outputting” the content you’ve planned in this Editor.
Contact your technical staff or change your Output Player Configuration yourself to **expand to more Outputs, screens, overlays etc. :**
## 🔒 Locking Outputs for other users
Preventing other users from editing parts of-/the entire Output is possible by using the lock functionality in the Editor. Learn more at [Lock Resources](/lock-resources)
# Output Rundowns
Source: https://docs.visualradioassist.live/output-editor/output-rundowns
This page describes how Output Rundowns function, and how to utilize them to let VRA power your Visual Radio station.
When you work with music in radiostations, “rundowns” in your automation software usually determine which music is played when, how often and how your final playlist looks.
Visual Radio Assist Outputs work exactly the same, only then with video!
### Output → Rundown lifecycle and queue
When an Output starts, it will loop through all available rundowns, 1 by 1. If the rundown is **enabled** and the **condition** (if supplied) **is active,** the output will play the rundown content. Rundown content can be split up in two kind
### Rundown / Normal Items
Normal rundown items are configured in the “Rundown Items” section at the bottom of the Editor. these items **will always playout in sequential order** if a rundown is played.
These items are perfect for looping videos, always visible overlay text or a picture (Visual) you want to freeze on a output.
### Live Items
The Live Items are not played by default. You can add these items the same way you add Rundown Items, but in this case you need to add a Condition **which activates the Live Item.**
When the configured Condition is applicable/activated, the Live Item is shown directly on the Output for the configured Duration.
For example: When the Onair Scheduling Program changes, play “Scheduling Program Media” for x seconds. Or when the nowplaying changes, show “Nowplaying Visual X” for y seconds.
**After the duration has expired, or the content is played out (local/media videos)** the live item will deactivate:
1. The Output looks at the current active rundown, and at which Normal Rundown Item it left off, this item will be the next visible item after the Live Item.
2. Without any Rundown Items in the current rundown, it will trigger the next available rundown.
**When activating:**
1. If the Rundown containing the live item is not playing, the Live Item Condtion activation will **activate the Rundown as well.** (If the rundown has a active condition itself)
2. If the Rundown containing the Live Item is not enabled / disabled by a condition, the live item will not be triggered.
### Fixed duration
The Fixed duration is a hard duration for the content the Output will play out. This property is required for the Visual-like Content Items, because they do not have a duration by themselfs.
For Local/Cloud Media videos, the duration is known by the player, so you could let it play out by default, or specify the time it should play.
When a video is stopped by the fixed duration, the next time it is played it will start from the position it left off.
When the video file is played out within the specified fixed duration time, the next Rundown Item will be triggered.
### Rundown Properties
| Property | Description |
| -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Name | used to identify your rundown / distinguish it from the other rundowns |
| Looping | After the content in a rundown (Live and Normal) is played out, the rundown by default loops, so it can be started again.
If looping is **disabled**, the rundown will not play another time after it is played out and there is no other rundown to start.
If there is another rundown to start, the rundown with looping disabled will still be started after the other started rundown has completed. (Outputs always loop through Rundowns)
If the rundown with disabled looping has a Condition, the Condition change could also trigger the rundown to be started again. |
| Enabled | Disabled rundowns will not be taken into account in the Output Lifecycle / Queue. |
### Rundown Condition
Rundown conditions are configured the same as any other condition in VRA Cloud (automations, triggers, rundown live items etc.).
1. When a rundown Condition is applicable **on check\*** the rundown will play right away.
2. When a rundown Condition becomes active, the rundown is “enabled”, so after the Output’s rundowns, previous to the condition-rundown, are done, the rundown will be played out.
3. When a playing/active rundown Condition becomes inactive, the rundown is disabled. This will trigger the “next rundown” action **directly** on the Output. This means that the playing content is overridden by the next rundown.
# Output Settings
Source: https://docs.visualradioassist.live/output-settings
The Players tab gives you a clear overview of all configured Output Players in your Visual Radio setup.
### Players
The Players tab gives you a clear overview of all configured Output Players in your Visual Radio setup. Each player represents a physical or virtual output destination (such as a studio screen, NDI stream, or SDI connection).
Through the Output Matrix, you can map which Output Player receives which signal. This mapping defines where specific visuals are broadcast.
Connections include:
* NDI: for IP-based studio or network transmission.
* SDI: for integration with professional broadcast infrastructure.
* Cloud Live: for remote monitoring and control directly from the Visual Radio Cloud platform.
### Base Layers
Base Layers are persistent visual elements that appear on every visual layout with a fixed index order. These layers are typically used for static or always-on graphics such as:
* Station logos
* Background gradients
* Channel identity visuals
### Visual Snippets
Snippets are reusable HTML components that can be used in visuals. Examples of snippets could be:
* Lower thirds
* Now Playing graphics
### Item Groups
More information about configuring Item Groups can be found in the AutomationLink docs.
### Develop with VRA
Customize your Output Visual Environment by developing within / with VRA.
# Presenters
Source: https://docs.visualradioassist.live/presenters
Presenters could be used to describe the persons behind the mics in the studio. With linking them to a Station and Scheduling programs (Create a new Program) you give VRA the power to automate the information display about the current speaker.
Presenters could be used to describe the persons behind the mics in the studio. With linking them to a Station and [Scheduling](/scheduling) programs ([Create a new Program](/scheduling/create-a-new-program)) you give VRA the power to automate the information display about the current speaker.
See [Media Hub](/media-hub)
# Radio Automation Data (AutomationLink)
Source: https://docs.visualradioassist.live/radio-automation-data
Providing VRA with Radio Automation Data really elevates the possibilities with functionalities like the Output Player Rundown Conditions, Automations and more places where conditional actions are important.
Providing VRA with Radio Automation Data really elevates the possibilities with functionalities like the Output Player Rundown Conditions, Automations and more places where conditional actions are important.
***
### Link your automation
To use your radio automation data, go to the Set-Up for [Link Radio Automation](/set-up/link-radio-automation) and link one of the following Automations with VRA:
* Power Studio
* AerOn
* mAirList
* Omniplayer
* ZenonMedia
* PlayIt Live
* Audisi GML (HTTP / Realtime XML)
* ProppFrexx
* Caliope OnAir
* RadioDJ
* winMedia
* Text Files
* HTTP API
* Dalet
* RCS Sound Software
* DAVID Systems
* DABiS 800
## Music Track Meta
VisualRadioAssist Music Track Meta functionality automatically fetches Album Covers, Artist images and biographies and more information about the running Music Item in the configured and linked Radio Automations.
### Modes
**BASIC**
* Basic Album cover for playing track
* Correct Artist and Title data
* Expand with basic Album title if available
**FULL ALBUM**
Expand with more album information, like description and more available album-specific covers.
**FULL ARTIST**
Expand with more information about the artist, like description and an artist-specific picture.
**FULL**
All of the above
## Configure Item Groups
Item Groups are an important way for Visual Radio to differentiate between music, station, jingle, commercials and other types of audio you play within your Radio Automation software.
With the powerful Item Group configurator you select one “base-category”; **Music, Station, Track or Unknown** and define the conditions that should be met to make the Item Group active on the linked Automation Data.
When Radio Automation Data is parsed, all conditions will be checked to determine which item groups are active on the items from your radio automation.
## Use Item Groups Conditionally
Item Groups are not limited to the 4 categories, you can define as many as you want, with different, unique identifiers to use them in your Conditions:
Changing your Item Group identifier afterwards will require you to relink conditions referencing this condition
# Resource archival
Source: https://docs.visualradioassist.live/resource-archival
What happens after you delete something in Visual Radio Assist, how long it is kept, and when it is removed for good.
When you delete something in Visual Radio Assist, it is not gone right away. We
archive it first and keep it for a while, so you can get it back if you change
your mind or delete something by mistake. After a set period the item is removed
for good, automatically.
## How deletion works
Deleting a resource moves it out of view but keeps it safe in the background:
It disappears from your workspace and stops being used in your broadcast. It
is not actually erased yet, just archived.
During the keep period you can restore the resource and everything it holds,
including its uploaded files and media.
Once the keep period passes, the resource is deleted for good during a regular
housekeeping run. Any stored media that belongs to it, like videos, images,
recordings, and clip exports, is removed from storage at the same time.
Housekeeping runs throughout the day, so permanent removal happens shortly after
the keep period ends, not at one fixed moment.
Permanent removal cannot be undone. Once a resource passes its keep period and
is cleared, it and its media are gone for good. Restore it before then if you
still need it.
## Restoring an archived resource
As long as a resource is still within its keep period, you can restore it. Restoring
brings back the resource together with its content. If it lived inside a folder that
was also deleted, it is placed back at the top level of your studio so you can find
it again.
## How long things are kept
The keep period depends on the type of resource. Longer for things you are likely
to want back, shorter for large or temporary items.
| What you delete | How long it is kept |
| ------------------------ | ------------------- |
| Scheduling programs | 3 months |
| Studio recordings | 30 days |
| Clips projects | 30 days |
| Audio triggers | 30 days |
| Uploaded files and fonts | 1 week |
| Images | 1 week |
| Videos | 1 week |
| Clip exports | 3 days |
| Machine users | 3 days |
| User accounts | 48 hours |
| Studios | 6 hours |
| Broadcasters | 6 hours |
Resources that are not in this list stay archived and can be restored. They are
cleared when the studio or broadcaster they belong to is removed.
## Deleting a studio or broadcaster
Deleting a whole studio or broadcaster is a big step. It archives everything inside
it, like outputs, visuals, media, schedules, and recordings, and then removes all of
it when the studio or broadcaster is permanently cleared. The keep period here is
short, 6 hours, so restore it quickly if you deleted it by mistake.
# Create a new Program
Source: https://docs.visualradioassist.live/scheduling/create-a-new-program
Add a new Scheduling Program by going to the Calendar and selecting a timeslot or clicking the (+) button.
Add a new Scheduling Program by going to the [Calendar](https://visualradio.cloud/scheduling) and selecting a timeslot or clicking the (+) button.
### Media
You should upload media first, before attaching it to a program. See [Media Hub](/media-hub)
### Recurring options
Programs can be recurring per week or month. When saving a Program with a starttime of 9:00 in your current timezone (daylight saving for example)– VRA makes sure that the program will always start at 9:00, even in another timezone/daylight saving time.
### Presenters
By adding presenters you could expand your Scheduling metadata with information about the live presenters.
After connecting an audio trigger to the live presenter, VRA is able to automate the display of the information about live presenter in a [Content Visual](/visual-designer).
### Disabled programs
You could disable a program in certain scenario’s to remove it from your schedule automation:
1. When a program is saved in a “disabled” state it will not be Scheduled by VRA.
2. When you disable an enabled program, the program will be removed from the scheduling.
3. When a disabled program is enabled, it will be planned again.
When a scheduled program is already onair when disabled (by saving the program), the **onair program will be taken offair.**
# Set-Up
Source: https://docs.visualradioassist.live/set-up
VisualRadioAssist is fully configurable from your Cloud environment. After completing the onboarding and running the Core, Audio Manager and Output Player applications on your Visual Radio Machine, you can start configuring your set-up.
VisualRadioAssist is fully configurable from your Cloud environment. After completing the onboarding and running the Core, Audio Manager and Output Player applications on your Visual Radio Machine, you can start configuring your set-up.
## Steps to set-up VRA apps
Download, install and connect the Core to your studio.
Connect VRA to your hardware or software video switcher.
Map your players to an available NDI or SDI output.
Feed now-playing and scheduling data from your automation system.
Make audio devices available to the Audio Manager.
Add PTZ cameras to trigger presets from Camera Angles.
### Apps
Local Application overview – [⬇️ Download Apps](https://visualradio.cloud/studio/apps/download)
* 🎛 **Core:** Links with VideoSwitchers, Automations and Scheduling.
* ⏯️ **Output Player:** Plays configured Outputs with local video, HTML or cached content (possibly sharded, as configured in a redundant environment)
* 🎙️ **Audio Manager:** Audio Level monitoring and commando control, has to access available and configured audio devices.
# Configure available Audio Device Inputs
Source: https://docs.visualradioassist.live/set-up/configure-available-audio-device-inputs
Check out the Machine Specs for all the details regarding the available devices to the Audio Manager application.
Check out the [Machine Specs](/machine-specs) for all the details regarding the available devices to the Audio Manager application.
# Connect PTZ Camera’s
Source: https://docs.visualradioassist.live/set-up/connect-ptz-cameras
With the help of Camera Angles Commando’s you determine which PTZ position should be triggered in Visual Radio Assist.
With the help of [Camera Angles](/camera-angles) Commando’s you determine which PTZ position should be triggered in Visual Radio Assist. To provide a PTZ preset within a Camera Angle you have to set-up the connection to your PTZ Camera’s
## Manage Connections
At the [Camera Settings](https://cloud.visualradioassist.live/studio/active/advanced/camera) page you can add new connections to PTZ Camera’s of the supported type. Make sure to have the Host and optionally Port number of your camera ready. Follow the steps in the settings to configure the connection to your Camera.
After saving the new connection settings Visual Radio Assist will try to connect to the camera. If the cameras are connected successfully you will see the feedback of the success connection in front of the connection label. To debug connection problems check the verbose logging of the running Core instance for your studio.
## Connect with Cyanview RCP
The Cyanview RCP controller makes it possible to automatically make all RCP’s camera’s available to Visual Radio Assist.
## Supported Devices
| Manufacturer | Device / Models | Preset Control | Smart Feedback |
| ---------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- | ------------------------------ |
| Panasonic | AW-HE2
AW-HE35
AW-HE38
AW-HE40
AW-HE42
AW-HE48
AW-HE50
AW-HE58
AW-HE60
AW-HE65
AW-HE68
AW-HE70
AW-HE75
AW-HE120
AW-HE130
AW-HR140
AW-HN38
AW-HN40
AW-HN65
AW-HN70
AW-UE4
AW-UE63
AW-UE65
AW-UE70
AW-UE100
AW-UE140
AW-UE150
AW-UE155
AW-UE160
AW-UN70
AW-UN145
AW-HEF5
AW-SFU01
AK-UB300 | ✅ | ✅ |
| BirdDog | P110
P120
P200A2A3
P200A4A5
A200GEN1
A200GEN2
A300GEN1
A300GEN2
P240
P400
P4K | ✅ | ✅ |
| Cyanview
See [website](https://www.cyanview.com/) for supported cameras | RCP | ✅ | Currently not supported in RCP |
| Canon | CR-N300
CR-N500
CR-N700
CR-X300
CR-X500
XF-605 | ✅ | ✅ |
| Lumens Visca | VC-A50P
VC-A61P
VC-A71P
VC-BC301P
VC-BC601P/VC-BC701P | ✅ | ✅ |
| Ptzoptics Visca | - | ✅ | ✅ |
| Sony Visca | BRC-H780
BRC-H800
BRC-X400
BRC-X401
BRC-X1000
ILME-FR7
ILME-FR7K
BRC-X1000
SRG-120DH
SRG-201M2
SRG-201SE
SRG-300SE
SRG-301SE
SRG-H40UH
SRG-HD1M2
SRG-X40UH
SRG-X120
SRG-X400
SRG-X402 | ✅ | ✅ |
# Link Radio Automation
Source: https://docs.visualradioassist.live/set-up/link-radio-automation
The AutomationLink makes sure the data from your current Radio Automation rundown is always available in-live-sync within VRA. Learn how to link your Radio Automation software.
The AutomationLink makes sure the data from your current Radio Automation rundown is always available in-live-sync within VRA. Learn how to link your Radio Automation software.
## Connect your radio automation software
After linking your automation to provide VRA with all your radio-playing data, you can integrate it further in Cloud via [Music Track Meta](/radio-automation-data) and [Item Groups](/radio-automation-data)
***
**Radio Automation Software developer, and not listed or deliver extra data?** Check out our generic and custom integration docs to link your software to Visual Radio:
[Generic HTTP Radio Automation Link](/develop-with-vra/generic-http-radio-automation-link)
[Connecting with AutomationLink](/develop-with-vra/connecting-with-automationlink)
# Link AerOn Studio to Visual Radio
Source: https://docs.visualradioassist.live/set-up/link-radio-automation/link-aeron-studio-to-visual-radio
To automate Visual Radio with AerOn Studio you can easily link it to your set-up by following the configuration guide in the AutomationLink installation or the steps described in the documentation.
To automate Visual Radio with AerOn Studio you can easily link it to your set-up by following the configuration guide in the AutomationLink installation or the steps described in the documentation:
***
### Preparation
1. Go to your AutomationLink Settings in the Advanced Studio Settings
Add the AerOn Automation
2. Download the zip containing the template bundle:
3. Extract the ZIP in a location where both AerOn and the VRA Core application could read/write to it (for example an UNC path).
### Configuration
To configure the integration with VisualRadioAssist in Aeron Studio, make sure to set-up the correct template and export file.
1. Open menu Tools -> Instellingen, select tab 'Export HTML/XML/Tekst' in 'Automatisering'
2. Create a new export with the following details:
**Bronsjabloom:** `{template directoy}\VRA_SJABLOOM.txt`
**Doelbestand:** `C:\`
3. Continue on the **VRA Core Machine**, copy the path containing the **VRA\_EXPORT.xml**
4. Test that the path is accessible (for example by running WIN+R and pasting the path)
5. Paste the path within VRA Cloud Automation entry you’ve added in the preparation step 1.
# Link Audisi GML to Visual Radio
Source: https://docs.visualradioassist.live/set-up/link-radio-automation/link-audisi-gml-to-visual-radio
Connect Audisi GML to Visual Radio so your radio automation data flows into Cloud.
This guide is being prepared. In the meantime, see [Link Radio Automation](/set-up/link-radio-automation)
and [Radio Automation Data](/radio-automation-data) for related setup steps.
# Link Caliope OnAir to Visual Radio
Source: https://docs.visualradioassist.live/set-up/link-radio-automation/link-caliope-onair-to-visual-radio
Send now-playing metadata from Caliope OnAir to Visual Radio with the AutomationLink template.
### Template
```javascript theme={null}
{previous.title}
{previous.artist}
{previous.duration}
{previous.type}
{previous.category}
{current.title}
{current.artist}
{current.duration}
{current.type}
{current.category}
{next.title}
{next.artist}
{next.duration}
{next.type}
{next.category}
```
# Link mAirList to Visual Radio
Source: https://docs.visualradioassist.live/set-up/link-radio-automation/link-mairlist-to-visual-radio
Link mAirList to Visual Radio using the AutomationLink template.
### Template
```xml theme={null}
%X%U%b%a%l%e%p%S{dd/mm/yyyy hh:nn:ss.zzz}%I%J%C%+U%+b%+a%+l%+e%+p%+S{dd/mm/yyyy hh:nn:ss.zzz}%+I%+J%+C%++U%++b%++a%++l%++e%++p%++S{dd/mm/yyyy hh:nn:ss.zzz}%++I%++J%++C%+++U%+++b%+++a%+++l%+++e%+++p%+++S{dd/mm/yyyy hh:nn:ss.zzz}%+++I%+++J%+++C%++++U%++++b%++++a%++++l%++++e%++++p%++++S{dd/mm/yyyy hh:nn:ss.zzz}%++++I%++++J%++++C
```
# Link OmniPlayer to Visual Radio
Source: https://docs.visualradioassist.live/set-up/link-radio-automation/link-omniplayer-to-visual-radio
To automate Visual Radio with AerOn Studio you can easily link it to your set-up by following this configuration guide.
To automate Visual Radio with AerOn Studio you can easily link it to your set-up by following this configuration guide.
## Prepare Visual Radio Assist for receiving OmniPlayer Data
1. Login to Cloud and go to [Studio Advanced Settings → Radio Automations](https://cloud.visualradioassist.live/studio/active/advanced/automation)
2. Add OmniPlayer to your Automation Connections and Enable it
3. Click on Generate Dump URL to obtain the URL that OmniPlayer should communicate to
### Configure Omni MultiPlayer Exports
1. Open MultiPlayer Settings and open “Exports”
2. Add a new OmniPlayer JSON http post
3. Configure the copied dump url as URL in the properties window. Make sure to update the hostname to the correct host or IP address of the machine running the VRA Core Application.
4. `OmniPlayerBroadcastJSONRPC format` should be selected
5. Click on Ok (2x) and verify that after starting something in your MultiPlayer VRA receives nowplaying data.
You can now configure VRA to filter with [Item Groups](/radio-automation-data) or trigger video in the [Output Player Conditions](/video-guides/trigger-graphics-with-radio-nowplaying-information)
# Link PlayIt Live data to Visual Radio
Source: https://docs.visualradioassist.live/set-up/link-radio-automation/link-playit-live-data-to-visual-radio
To automate Visual Radio with PlayIt Live you can easily link it to your VRA set-up by following these simple 3 steps:
To automate Visual Radio with PlayIt Live you can easily link it to your VRA set-up by following these simple 3 steps:
***
### Requirements
✅ Make sure you have the Now Playing Plugin installed from [https://www.playitsoftware.com/Plugins/View/NowPlaying](https://www.playitsoftware.com/Plugins/View/NowPlaying)
### Preparation
1. Go to your AutomationLink Settings in the Advanced Studio Settings
Add the PlayIt Live Automation
2. Copy the URL that is generated in the Cloud
### Configuration
1. Configure your Now Playing Plugin
2. Set the Method to POST and Paste the URL from the AutomationLink Settings screen. Make sure to validate if the hostname in the url is accessible by the PlayIt Live machine.
3. Copy & Paste the following Template into the Configure screen:
### Template
```xml theme={null}
{{artist}}
{{title}}
```
# Link Power Studio to Visual Radio
Source: https://docs.visualradioassist.live/set-up/link-radio-automation/link-power-studio-to-visual-radio
To automate Visual Radio with Power Studio you can easily link it to your VRA set-up by following these simple 3 steps.
To automate Visual Radio with Power Studio you can easily link it to your VRA set-up by following these simple 3 steps:
***
1. Open Options and Settings in Power Studio
2. Go to the Plugins section in Options and Settings.
Select the VisualRadioAssist Link Plugin, Enable it and click on Configure.
3. Go to VRA Cloud Advanced Studio Settings. Add the Power Studio Automation
**Generate the Automation Dump URL**
Copy the URL and make sure to verify the host IP / name in the URL.
4. Configure the Power Studio plugin to send data to the Dump URL.
You can even determine how many upcoming rundown-items VRA should process (by default 5).
### Filter Multiple instances
It is also possible to filter for a specific Power Studio Machine identifier (if specified), to connect multiple Power Studio instances to your Visual Radio set-up.
## Data Support
Power Studio belongs to the most advanced radio automation data integrations of VRA, providing millisecond accuracy time data:
`Artist`
`Title`
`Duration`
`Timestamp`
`Content Type (ID + string)`
Configure your [Item Groups](/radio-automation-data#759141ee827f4fd28990441dbf879e18) to categorize your radio data.
# Link ProppFrexx ONAIR to Visual Radio
Source: https://docs.visualradioassist.live/set-up/link-radio-automation/link-proppfrexx-onair-to-visual-radio
In order to link ProppFrexx ONAIR to VRA, you can follow these instructions:
In order to link ProppFrexx ONAIR to VRA, you can follow these instructions:
ProppFrexx ONAIR → Settings → **Events/Commands** → Playlist → **OnTrackPlay** → Edit → **New**
| **Action** | `EXEC_SEND_HTTP_POST` |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Parameter** | Copy Parameter Data from the Cloud: [AutomationLink Settings](https://cloud.visualradioassist.live/studio/active/advanced/automation) → Parameter Data |
The start of the parameter data contains the url to the VRA Core API. Replace the the host/ip with the correct ip of the machine running the VRA Core.
[ProppFrexx Parameters](/set-up/link-radio-automation/link-proppfrexx-onair-to-visual-radio/proppfrexx-parameters)
# ProppFrexx Parameters
Source: https://docs.visualradioassist.live/set-up/link-radio-automation/link-proppfrexx-onair-to-visual-radio/proppfrexx-parameters
Track/Playlist Macros available for playlist events in ProppFrexx ONAIR.
Track/Playlist Macros (available for playlist events):
\$\{event} : the name of the event (eg. ‘TrackPlay’)
\$\{effectiveload} : the event’s load date and time in format ‘yyyy-MM-dd HH:mm:ss’
\$\{effectivestart} : the event’s start date and time in format ‘yyyy-MM-dd HH:mm:ss’
\$\{effectivesec} : the event’s play time (duration) in whole seconds
\$\{effectivems} : the event’s play time (duration) in whole milliseconds
\$\{uniqueid} : an internal unique id of the track event
\$\{playername} : the name of the player (eg. ‘A’, ‘B’, ‘C’ or ‘D’)
\$\{playeroutput} : the name of the mixer output channel used by this player
\$\{playerisplaying} : is the related player playing (1/True, 0/False)
\$\{playerstatus} : the status string of the related player (Empty,Cued,Playing,Loading)
\$\{playerstatusid} : the status of the related player (0,1,2)
\$\{plsname} : the name of the playlist
\$\{plsfilename} : the location of the playlist file
\$\{plstotalsec} : the total length of the playlist in whole seconds
\$\{plsremainsec} : the remaining length of the playlist in whole seconds
\$\{plstotalcount} : the number of tracks in the playlist
\$\{plsremaincount} : the number of remaining (unplayed) tracks in the playlist
\$\{plscurrenttrack} : the index of the track in the playlist
\$\{plstracknamecurrent} : the current track’s meta data track name (i.e. ‘artist – title’)
\$\{plstracknamenext} : the next track’s meta data track name (i.e. ‘artist – title’)
\$\{plstracktitlecurrent} : the current track’s meta data title name
\$\{plstracktitlenext} : the next track’s meta data title name
\$\{plstrackguidcurrent} : the current track’s unique identifier as a string
\$\{plstrackguidnext} : the next track’s unique identifier as a string
\$\{plstrackartistcurrent} : the current track’s meta data artist name
\$\{plstrackartistnext} : the next track’s meta data artist name
\$\{plstrackalbumcurrent} : the current track’s meta data album name
\$\{plstrackalbumnext} : the next track’s meta data album name
\$\{plstrackgenrecurrent} : the current track’s meta data genre string
\$\{plstrackgenrenext} : the next track’s meta data genre string
\$\{plstrackyearcurrent} : the current track’s meta data year string
\$\{plstrackyearnext} : the next track’s meta data year string
\$\{plstrackgroupingcurrent} : the current track’s meta data grouping string
\$\{plstrackgroupingnext} : the next track’s meta data grouping string
\$\{plstrackmoodcurrent} : the current track’s meta data mood string
\$\{plstrackmoodnext} : the next track’s meta data mood string
\$\{plstrackratingcurrent} : the current track’s meta data rating string
\$\{plstrackratingnext} : the next track’s meta data rating string
\$\{plstrackisrccurrent} : the current track’s meta data ISRC
\$\{plstrackisrcnext} : the next track’s meta data ISRC
\$\{plstracktypecurrent} : the current track’s meta data media entry type string
\$\{plstracktypenext} : the next track’s meta data media entry type string
\$\{plstrackbpmcurrent} : the current track’s meta data BPM
\$\{plstrackbpmnext} : the next track’s meta data BPM
\$\{plstrackdurationcurrent} : the current track’s effective duration (CueIn to CueOut)
\$\{plstrackdurationnext} : the next track’s effective duration (CueIn to CueOut)
\$\{plstrackplaytimecurrent} : the current track’s effective play time (CueIn to CueOut)
\$\{plstrackplaytimenext} : the next track’s effective play time (CueIn to CueOut)
\$\{plstrackramptimecurrent} : the current track’s ramp time (CueIn to Ramp/2)
\$\{plstrackramptimenext} : the next track’s ramp time (CueIn to Ramp/2)
\$\{plstrackoutrotimecurrent} : the current track’s outro time (Outro to Next/CueOut)
\$\{plstrackoutrotimenext} : the next track’s outro time (Outro to Next/CueOut)
\$\{plstrackalbumartcurrent} : the current track’s album art picture (base64 encoded)
\$\{plstrackalbumartnext} : the next track’s album art picture (base64 encoded)
\$\{filenameandpath} : the track’s location and file name
\$\{filename} : the track’s filename
\$\{filenamewithoutext} : the track’s filename without the extension
ProppFrexx ONAIR
304 RADIO42 Confidential
\$\{filenameext} : the track’s filename extension only (including the period ‘.’)
\$\{directoryname} : the track’s directory only
\$\{rootdirectoryname} : the track’s root path (e.g. ‘C:\’ or ‘\\\Computer\Folder’)
\$\{guid} : the track’s global unique identifier (e.g ‘F9168C5E-CEB2-4FAA-B6BF-329BF39FA1E4’)
\$\{trackname} : the track’s track name (i.e. ‘artist – title’)
\$\{title} : the track’s meta data title name
\$\{artist} : the track’s meta data artist name
\$\{album} : the track’s meta data album name
\$\{year} : the track’s meta data year string
\$\{genre} : the track’s meta data genre string
\$\{grouping} : the track’s meta data grouping string
\$\{mood} : the track’s meta data mood string
\$\{isrc} : the track’s meta data ISRC string
\$\{rating} : the track’s meta data rating string
\$\{bpm} : the track’s meta data BPM value as a string
\$\{albumartist} : the track’s meta data album artist string
\$\{composer} : the track’s meta data composer string
\$\{copyright} : the track’s meta data copyright string
\$\{encodedby} : the track’s meta data encoded by string
\$\{tracknumber} : the track’s meta data track number string
\$\{discnumber} : the track’s meta data disc number string
\$\{publisher} : the track’s meta data publisher string
\$\{conductor} : the track’s meta data conductor string
\$\{lyricist} : the track’s meta data lyricist string
\$\{remixer} : the track’s meta data remixer string
\$\{producer} : the track’s meta data producer string
\$\{comment} : the track’s meta data comment text
\$\{albumart} : the track’s album art picture (base64 encoded)
\$\{replaygaingain} : the track’s meta data replay gain value in dB (-60.0…60.0)
\$\{replaygainpeak} : the track’s meta data replay gain peak float value (0.0…1.0)
\$\{bitrate} : the track’s audio bit rate string
\$\{format} : the track’s audio format string
\$\{tracktype} : the track’s meta data media entry type as a string
\$\{mixin} : the track’s mixIn option as a string
\$\{options} : the track’s meta data media entry options as a comma-separated string
\$\{trackstartindicator} : the track’s meta data track start indicator character
\$\{trackendindicator} : the track’s meta data track end indicator character
\$\{tempostart} : the track’s meta data tempo start value
\$\{tempoend} : the track’s meta data tempo end value
\$\{moderatortext} : the track’s meta data moderator text
\$\{length} : the track’s total length (duration) as a string (\[HH:]MM:SS)
\$\{lengthsec} : the track’s total length (duration) in seconds (3 decimal places)
\$\{lengthms} : the track’s total length (duration) in whole milliseconds
\$\{duration} : the track’s effective duration (CueIn to CueOut) as a string (\[HH:]MM:SS)
\$\{durationsec} : the track’s effective duration (CueIn to CueOut) in seconds
\$\{durationms} : the track’s effective duration (CueIn to CueOut) in whole milliseconds
\$\{playtime} : the track’s effective play time (CueIn to Next) as a string (\[HH:]MM:SS)
\$\{playtimesec} : the track’s effective play time (CueIn to Next) in seconds
\$\{playtimems} : the track’s effective play time (CueIn to Next) in whole milliseconds
\$\{ramptime} : the track’s ramp time (CueIn to Ramp/2) as a string (\[HH:]MM:SS\[/\[HH:]MM:SS])
\$\{ramptimems} : the track’s ramp time (CueIn to Ramp) in whole milliseconds
\$\{ramp2timems} : the track’s ramp2 time (CueIn to Ramp2) in whole milliseconds
\$\{outrotime} : the track’s outro time (Outro to Next/CueOut) as a string (\[HH:]MM:SS\[/\[HH:]MM:SS])
\$\{outrotimems} : the track’s outro time (Outro to Next/CueOut) in whole milliseconds
\$\{cuein} : the track’s CueIn position as a string (\[HH:]MM:SS)
APPENDIX
RADIO42 Confidential 305
\$\{cueinsec} : the track’s CueIn position in seconds (3 decimal places)
\$\{cueinms} : the track’s CueIn position in whole milliseconds
\$\{cueinoffset} : the track’s CueInOffset position as a string (\[HH:]MM:SS)
\$\{cueinoffsetsec} : the track’s CueInOffset position in seconds (3 decimal places)
\$\{cueinoffsetms} : the track’s CueInOffset position in whole milliseconds
\$\{fulllevel} : the track’s FullLevel position as a string (\[HH:]MM:SS)
\$\{fulllevelsec} : the track’s FullLevel position in seconds (3 decimal places)
\$\{fulllevelms} : the track’s FullLevel position in whole milliseconds
\$\{ramp} : the track’s Ramp position as a string (\[HH:]MM:SS)
\$\{rampsec} : the track’s Ramp position in seconds (3 decimal places)
\$\{rampms} : the track’s Ramp position in whole milliseconds
\$\{ramp2} : the track’s Ramp2 position as a string (\[HH:]MM:SS)
\$\{ramp2sec} : the track’s Ramp2 position in seconds (3 decimal places)
\$\{ramp2ms} : the track’s Ramp2 position in whole milliseconds
\$\{outro} : the track’s Outro position as a string (\[HH:]MM:SS)
\$\{outrosec} : the track’s Outro position in seconds (3 decimal places)
\$\{outroms} : the track’s Outro position in whole milliseconds
\$\{fadeout} : the track’s FadeOut position as a string (\[HH:]MM:SS)
\$\{fadeoutsec} : the track’s FadeOut position in seconds (3 decimal places)
\$\{fadeoutms} : the track’s FadeOut position in whole milliseconds
\$\{next} : the track’s Next position as a string (\[HH:]MM:SS)
\$\{nextsec} : the track’s Next position in seconds (3 decimal places)
\$\{nextms} : the track’s Next position in whole milliseconds
\$\{cueout} : the track’s CueOut position as a string (\[HH:]MM:SS)
\$\{cueoutsec} : the track’s CueOut position in seconds (3 decimal places)
\$\{cueoutms} : the track’s CueOut position in whole milliseconds
\$\{hookcuein} : the track’s Hook-CueIn position as a string (\[HH:]MM:SS)
\$\{hookcueinsec} : the track’s Hook-CueIn position in seconds (3 decimal places)
\$\{hookcueinms} : the track’s Hook-CueIn position in whole milliseconds
\$\{hookfulllevel} : the track’s Hook-FullLevel position as a string (\[HH:]MM:SS)
\$\{hookfulllevelsec} : the track’s Hook-FullLevel position in seconds (3 decimal places)
\$\{hookfulllevelms} : the track’s Hook-FullLevel position in whole milliseconds
\$\{hookramp} : the track’s Hook-Ramp position as a string (\[HH:]MM:SS)
\$\{hookrampsec} : the track’s Hook-Ramp position in seconds (3 decimal places)
\$\{hookrampms} : the track’s Hook-Ramp position in whole milliseconds
\$\{hookramp2} : the track’s Hook-Ramp2 position as a string (\[HH:]MM:SS)
\$\{hookramp2sec} : the track’s Hook-Ramp2 position in seconds (3 decimal places)
\$\{hookramp2ms} : the track’s Hook-Ramp2 position in whole milliseconds
\$\{hookoutro} : the track’s Hook-Outro position as a string (\[HH:]MM:SS)
\$\{hookoutrosec} : the track’s Hook-Outro position in seconds (3 decimal places)
\$\{hookoutroms} : the track’s Hook-Outro position in whole milliseconds
\$\{hookfadeout} : the track’s Hook-FadeOut position as a string (\[HH:]MM:SS)
\$\{hookfadeoutsec} : the track’s Hook-FadeOut position in seconds (3 decimal places)
\$\{hookfadeoutms} : the track’s Hook-FadeOut position in whole milliseconds
\$\{hooknext} : the track’s Hook-Next position as a string (\[HH:]MM:SS)
\$\{hooknextsec} : the track’s Hook-Next position in seconds (3 decimal places)
\$\{hooknextms} : the track’s Hook-Next position in whole milliseconds
\$\{hookcueout} : the track’s Hook-CueOut position as a string (\[HH:]MM:SS)
\$\{hookcueoutsec} : the track’s Hook-CueOut position in seconds (3 decimal places)
\$\{hookcueoutms} : the track’s Hook-CueOut position in whole milliseconds
\$\{TAG:tagid} : will be replaced by the content of the specific TAG identifier.
# Link RCS Zetta to Visual Radio
Source: https://docs.visualradioassist.live/set-up/link-radio-automation/link-rcs-zetta-to-visual-radio
To automate Visual Radio with RCS Sound Software Zetta you can easily link it to your set-up by following the configuration guide in the AutomationLink installation.
To automate Visual Radio with RCS Sound Software Zetta you can easily link it to your set-up by following the configuration guide in the AutomationLink installation.
***
### Preparation
1. Go to your AutomationLink Settings in the Advanced Studio Settings
Add the RCS Zetta Automation
### Configuration
To configure the integration with VisualRadioAssist in RCS Zetta, make sure to set-up the correct URL and Output format
1. Create a new Live Metadata entry in Zetta and configure it to use Device Method-> Device-> HTTP
2. Copy the template from the VRA Cloud and paste it into the Advanced -> "Output" field
3. Copy the url and replace the Host in the URL with the correct host of the VRA machine, relative to the Zetta Machine (for example starting with 192. or 10.1
4. Paste the url into the Device Method -> URL
# Link Text File Now Playing to Visual Radio
Source: https://docs.visualradioassist.live/set-up/link-radio-automation/link-text-file-now-playing-to-visual-radio
To automate Visual Radio now playing content and output players with your local text files you can easily link them in the AutomationLink:
To automate Visual Radio now playing content and output players with your local text files you can easily link them in the AutomationLink:
***
Add your text files in the AutomationLink Connection settings
Provide the path to watch for changes, VRA will automatically read the updated contents of the file when the file has changed.
## File Role
There are 4 different roles you can assign to your text file content/data:
* **Music**: parsed data will be used as **currently playing music**
* **Regular:** parsed data will be used as regular currently playing music
* **Upcoming:** parsed data will be used as the upcoming track
* **History:** parsed data will be used as the last playing track
## Delimiter and format
The Delimiter determines how to parse the contents of the text file.
The Artist, Title, Typeidentifier Format will also provide VRA with data about the type of the item that is playing.
# Link Zenon Media to Visual Radio
Source: https://docs.visualradioassist.live/set-up/link-radio-automation/link-zenon-media-to-visual-radio
To automate Visual Radio with Zenon Media you can easily link it to your set-up by following the steps described in our documentation.
To automate Visual Radio with Zenon Media you can easily link it to your set-up by following the steps described in our documentation.
### Steps to configure Zenon Media to send Nowplaying data to VRA
1. Go to VRA Cloud Advanced Studio Settings. Add the Zenon Media Automation
**Generate the Automation Dump URL**
Copy the URL and make sure to verify the host IP / name of VRA Core in the URL.
2. Configure a new Web \[POST] Destination in Nowplaying Playlist Export
3. POST Content-type: “application/xml”
4. POST Multipart/form-data
5. Use the following template in the “Format String”
### Template
```xml theme={null}
zenon_media%CURRENT.ID%CURRENT.NAME%CURRENT.TITLE%CURRENT.DURATION%CURRENT.START%CURRENT.TYPE_ID%CURRENT.TYPE
```
# Use OmniPlayer Video Files with Visual Radio
Source: https://docs.visualradioassist.live/set-up/link-radio-automation/use-omniplayer-video-files-with-visual-radio
Visual Radio Assist is able to play video files (including alpha layers) in sync with what is played back in OmniPlayer radio automation.
Visual Radio Assist is able to play video files (including alpha layers) in sync with what is played back in OmniPlayer radio automation. [Contact us](https://visualradioassist.live/demo) for more information and a demonstration of the video system.
# Map Output Player Devices
Source: https://docs.visualradioassist.live/set-up/map-output-player-devices
VRA Cloud Provides an Output Mapper to map your Players (rundowns playing your content) to an available output (NDI or SDI).
Create your Output Player(s) first via the [Output Editor](/output-editor) before continuing with the mapping
VRA Cloud Provides an [Output Mapper](https://visualradio.cloud/studio/active/advanced/output) to map your Players (rundowns playing your content) to an available output (NDI or SDI). This mapping process is familiar for people that have used the Dante Audio Controller mapping software.
### NDI Preparation
Install the NDI Runtime 6 before starting/installing the Visual Radio Assist Output Player to make use of NDI outputs.
* Windows: [http://ndi.link/NDIRedistV6](http://ndi.link/NDIRedistV6) or [Alternative link](https://downloads.ndi.tv/SDK/NDI_SDK/NDI%206%20Runtime.exe)
* MacOS: [http://ndi.link/NDIRedistV6Apple](http://ndi.link/NDIRedistV6Apple) or [Alternative link](https://downloads.ndi.tv/SDK/NDI_SDK_Mac/libNDI_for_Mac.pkg)
### SDI Preparation
Install the PCIe Blackmagic Design Decklink Card in your machine or connect the UltraStudio Monitor device to enable output to SDI.
Make sure you have installed the corresponding Blackmagic Video Setup drivers to access the SDI device in VRA.
### Steps to start with the Output Player
1. Follow your Output planning and decide where and how to implement your Output Players
2. Enable the correct Output to NDI- and Output to SDI- mappings to start the players
3. NDI: Open your playout/video software and browse to the initialized NDI Source containing `VRA-{output-name}`
4. SDI: Route the signal from your DeckLink Video card to a target like an ATEM Switcher, SDI Monitor or another viewer to verify your working SDI source.
Start with a **single** test Output containing an sample Visual or videofile you can use to verify the player functionality.
### Mapping from Output Matrix Decklink to SDI Out
Follow this guide on preparing your Decklink Setup for VRA Output Players
## Example Output Player Settings with several mappings
# Set-up a new Core App
Source: https://docs.visualradioassist.live/set-up/set-up-a-new-core-app
To start with Visual Radio Assist you have to download all relevant clients on the Download Page in your Cloud.
To start with Visual Radio Assist you have to download all relevant clients on de Download Page in your Cloud:
In the base essence you need a Core application installed to start with Visual Radio Assist in a new studio.
If you are just starting with Visual Radio Assist, please refer to the Studio Set-up [https://cloud.visualradioassist.live/studio/new](https://cloud.visualradioassist.live/studio/new) to follow the steps to set-up your first Visual Radio Studio.
### Connect Core
After downloading and installing the relevant clients you have to Connect your Core to the Visual Radio Assist Cloud and the new studio.
Check out the video below to set-up your new Core:
# Video Switcher Configuration
Source: https://docs.visualradioassist.live/set-up/video-switcher-configuration
To control your hardware or software Video Switcher with Visual Radio Assist you have to make and maintain a connection. Check the following guides on how to set-up this connection within your Cloud
To control your hardware or software Video Switcher with Visual Radio Assist you have to make and maintain a connection. Check the following guides on how to set-up this connection within your Cloud
Connect a Blackmagic ATEM switcher over the network.
Connect vMix over its Web Controller and TCP API.
Connect OBS over its WebSocket server.
# Use ATEM as Video Switcher for Visual Radio
Source: https://docs.visualradioassist.live/set-up/video-switcher-configuration/use-atem-as-video-switcher-for-visual-radio
To manage your Video Switcher Connections make sure your Core App is running.
To manage your Video Switcher Connections make sure your [Core App is running](/machine-specs)
Go to [visualradio.cloud/studio/active/advanced/switcher](https://visualradio.cloud/studio/active/advanced/switcher) within your Cloud, and add a new Switcher.
## Supported ATEM Switchers
The VRA ATEM Switcher connection currently supports all ATEM Switchers with the following Firmware ranges: v7.2 – v7.5.2 + v8.0 – v8.6. Verify your ATEM firmware/”software” version in the ATEM Setup software.
| Firmware Ranges | |
| --------------- | ------ |
| v7.2 | v7.5.2 |
| v8.0 | v8.6 |
## Connect
Provide the **host** / ip of your ATEM Video Switcher. Open your ATEM Video Setup software to validate your ATEM’ Network settings.
Make sure that the VRA Core is able to access the ip address of the ATEM switcher on the network.
After configuring and **enabling** the new switcher configuration, go to [visualradio.cloud/switcher](https://visualradio.cloud/switcher) to test and validate your connection.
# Use OBS as Video Switcher for Visual Radio
Source: https://docs.visualradioassist.live/set-up/video-switcher-configuration/use-obs-as-video-switcher-for-visual-radio
To manage your Video Switcher Connections make sure your Core App is running.
To manage your Video Switcher Connections make sure your [Core App is running](/machine-specs)
Go to [visualradio.cloud/studio/active/advanced/switcher](https://visualradio.cloud/studio/active/advanced/switcher) within your Cloud, and add a new Switcher.
Only OBS version > 27 and up are supported
Go to OBS → Tools → Websocket Settings to **enable the WebSocket Server**
Match the [Video Switcher Configuration in VRA Cloud](https://visualradio.cloud/studio/active/advanced/switcher) for OBS with your OBS Plugin settings (authentication and port number).
After configuring and **enabling** the new switcher configuration, go to [visualradio.cloud/switcher](https://visualradio.cloud/switcher) to test and validate your connection.
# Use vMix as Video Playout for Visual Radio
Source: https://docs.visualradioassist.live/set-up/video-switcher-configuration/use-vmix-as-video-playout-for-visual-radio
To manage your Video Switcher Connections make sure your Core App is running.
To manage your Video Switcher Connections make sure your [Core App is running](/machine-specs)
Go to [visualradio.cloud/studio/active/advanced/switcher](https://visualradio.cloud/studio/active/advanced/switcher) within your Cloud, and add a new Switcher.
## Supported versions
All vMix versions (Basic – Max) are supported by the VRA Switcher Connection. Do note that to make use of the full Visual Radio Assist product features you maybe need more than one Overlay Channel - HD). To smart automate Camera Angles and make use of script triggers in VRA the vMix 4K version is obviously required.
VRA Supports up to version the latest vMix update v27.
## Connect
Open your vMix Settings and go to Web Controller to **make sure it is enabled together with the TCP API.**
Provide the listed host and ip in the Video Switcher configuration in [VRA Cloud](https://visualradio.cloud/studio/active/advanced/switcher).
After configuring and **enabling** the new switcher configuration, go to [visualradio.cloud/switcher](https://visualradio.cloud/switcher) to test and validate your connection.
# Station Variables (Global)
Source: https://docs.visualradioassist.live/station-variables-global
Make generic data available throughout all Visuals, with station-wide Variables.
Station variables hold data that applies across your whole station: branding, show names, sponsor logos, live event data. Unlike [Visual Variables](/visual-variables), which belong to a single visual, a station variable is defined once and can be used in every visual. Update it in one place and every output follows, live.
## Create a station variable
Go to **Settings → Outputs → Variables** and click **Add new → New variable**.
* **Name** - the display name operators see.
* **Reference** - a unique reference used across all visuals. It is generated from the name, but you can adjust it.
* **Variable Type** - where the value comes from, see below.
* **Data Type** - what kind of value it holds, for user input and database variables.
Two switches finish the setup:
* **Playout Access** - without playout access the variable is hidden in the Output Playout and the Global Variable Controller.
* Media variables can set an **Upload Folder**, so newly uploaded media for this variable lands in a specific [Media Hub](/media-hub) folder instead of the root.
### Variable types
* **User Input** - a value you set manually, in the editor or live from the Global Variable Controller.
* **Database** - like user input, but values are stored and searchable. Useful for recurring data such as reporter names, where you want to pick from earlier entries.
* **Api Data Source** - the value is fed by an [API Data Source](/api-data-sources), like an RSS feed. You link the data source and optionally cap the item count.
* **Music Track Meta** - song details from your radio automation, such as artist and title.
Which types and data types are available depends on your plan and enabled features.
### Data types
User input and database variables pick a data type: **Text**, **Long Text**, **Number**, **Boolean**, **Options** with a predefined list of choices, and the **Media Image** and **Media Video** families for selecting or uploading media. Most types can set a default value.
## Organize with groups
Use **Add new → New group** to organize related variables under a named group, like "Show branding" or "Election night". Drag variables in and out of groups and reorder them; the same order shows up in the Global Variable Controller. Deleting a group never deletes its variables, they just become ungrouped.
## Use a station variable in a visual
In the [Visual Designer](/visual-designer):
* **Text layers** - type **/** in the text field or open the data selector, then pick from the **Station Variables** section.
* **Dynamic media and other layers** - select the variable in the layer's variable dropdown. Station variables are prefixed with **\[ STATION ]** to tell them apart from visual variables.
## Change values live: the Global Variable Controller
The **Global Variable Controller**, under Outputs, is the live control surface for station variables. It lists every variable with playout access, grouped and ordered like the settings page. Select a variable or a whole group, edit the values, and click **Apply to all visuals** to push the changes to every output at once.
The right column shows **live previews** of visuals, so you see the impact of a change before and after applying it. Which visuals appear there is up to you: configure them in the **Visual Previews configuration** section on the Variables settings page.
Station variables can also be defined broadcaster-wide by broadcast
managers. These are marked with a **Broadcaster-wide** badge and are
available to all stations in the broadcaster, but only managers can edit
them.
# Studio Overview
Source: https://docs.visualradioassist.live/studio-overview
VisualRadio.Cloud provides you with an easy and unique overview of the current state of the Visual Radio environment of your Station.
[VisualRadio.Cloud](https://visualradio.cloud) provides you with an easy and unique overview of the current state of the Visual Radio environment of your Station.
***
### Video Switcher PGM status
Realtime status of the [Video Switcher](/set-up/video-switcher-configuration) Program and Preview Input
### Which Microphone is onair?
[Audio Manager](/audio-manager) status, showing the current [Audio Triggers](/audio-manager/audio-triggers) activated
### Check now playing
The live now playing data of the [connected radio automation](/set-up/link-radio-automation)
### Output Players playing Content
Overview of the currently playing rundown items on your [Output Players](/output-editor)
### Control the Core
Activate the power of Visual Radio Assist, by controlling the state of the Core.
**Activated** = Ready to receive and process triggers on your [Video Switcher](/set-up/video-switcher-configuration)
**Deactivated** = Idle mode, ignoring live triggers for Video Switchers, but continuing processing live data and playing Output Rundowns.
# Tagging Resources
Source: https://docs.visualradioassist.live/tagging-resources
By tagging resources, you can group, organize, and locate resources more efficiently, making it easier to manage large sets of visuals, outputs, and images across your studio setup.
By tagging resources, you can group, organize, and locate resources more efficiently, making it easier to manage large sets of visuals, outputs, and images across your studio setup.
***
## Resource Tags
Managing multiple resources, such as visuals, outputs, and images, can sometimes become overwhelming. For instance, if your studio has multiple physical screens set up as outputs, keeping track of each one can be challenging. Making quick adjustments to these screens can become time-consuming, especially when the number of outputs grows.
## Example tagged Output:
## Filtering Tags
Tags not only help you organize resources but also enable quick filtering, ensuring you can locate the exact resource you need, precisely when you need it. Filtering tags allow you to narrow down large sets of resources based on specific criteria, saving time. Filtering is enabled in outputs, visuals and images.
# Try Out
Source: https://docs.visualradioassist.live/try-out
The Fair Use Policy applies when using the Try Out demo environment.
The Fair Use Policy applies when using the Try Out demo environment:
[Try Out – Fair Use Policy](/try-out/try-out-fair-use-policy)
# About the demo environment
The demo environment gives you access to a fully operational automated Visual Radio set-up of **Demo Station.** The station broadcasts a signal containing sample video clips, DJ cams, overlays and a running radio-automation playing music and jingles to simulate a real-world radiostudio.
You have full control over the VRA set-up (please do not break anything) which enables you to fiddle around with running Output Players, making design changes to the Visuals or going onair with your own scheduled broadcast.
Do note that you’re only allowed to make changes to existing resources, creating a new “resource” (such as a Visual) will result in an error message for most modules.
## What is VisualRadioAssist
Visual Radio Assist (VRA) helps automating Visual Radio, by providing tools to control the broadcast, camera's, integrating existing data and playout content.
**Cloud**
You can get access and control your Visual Radio situation via our [**Cloud environment**](https://visualradio.cloud/login?ref=docs), this is a online platform to manage everything Visual Radio.
Multiple users (RBAC) from your radiostation can simultaneously write content, modify scheduling or add a new Dante Audio connection/configure NDI or SDI.
**Apps**
To make VRA work in your specific radiostudio set-up you need to connect VRA with all your existing tools, software and hardware. Therefore VRA has three essential [local applications](https://visualradio.cloud/apps/download); the **Core, Audio Manager and Output Player.**
After installation these apps communicate with Cloud to play-out your Output Rundown, trigger schedule-based items or create the best presenter-shot with the Audio Configuration.
In the end you manage in the Cloud and execute locally in your safe network environment.
**Video signals**
VisualRadioAssist does not try to reinvent the wheel by creating another software processing, streaming or switching your camera video signals and encoding them on the internet (or SDI). Instead VRA delivers the best Visual Radio performance by integrating industry proven hard- and software like vMix, Blackmagic Design ATEM and Hyperdeck and OBS to the Core of VRA. Check out Video Switcher guide for more information on this connection.
When creating new signals containing lip-sync music clips, logo overlays or tickertapes the Output Players create broadcast-ready plug-in-play SDI and/or NDI signals for you to use in your existing video set-up.
# Try Out – Fair Use Policy
Source: https://docs.visualradioassist.live/try-out/try-out-fair-use-policy
Our Fair Use Policy for the Try Out demo environment of VisualRadioAssist is designed to provide users with a seamless and risk-free experience.
Our Fair Use Policy for the Try Out demo environment of VisualRadioAssist is designed to provide users with a seamless and risk-free experience. By accessing the demo environment Cloud, you agree to the following terms:
1. You have access to all software modules, but your usage is restricted to a maximum of one hour per session. The environment resets every hour to its original state at :05 sharp.
2. You are prohibited from creating or spreading any harmful content, including but not limited to defamatory, obscene, or offensive material. You are also prohibited from using the demo environment for any illegal or fraudulent purposes.
3. We reserve the right to contact you using the contact details you provide to us for the purposes of discussing our product solution and any other relevant matters.
4. By accessing the demo environment, you agree to comply with all applicable laws and regulations.
5. We reserve the right to terminate your access to the demo environment at any time, without notice or explanation.
6. You are responsible for maintaining the confidentiality of any login credentials or other access information that we provide to you for the purpose of accessing the demo environment. You agree not to share such information with any third party.
7. You acknowledge that the demo environment may not represent the full functionality or capabilities of our product solution, and that the features or tools available in the demo environment are subject to change at any time, without notice or explanation.
8. We reserve the right to monitor your usage of the demo environment, and to terminate your access if we determine that your usage is in violation of our Fair Use Policy or applicable laws and regulations.
9. You acknowledge and agree that we make no representations or warranties regarding the accuracy, completeness, or reliability of any content or information that you may access or use in the demo environment.
10. We reserve the right to modify or amend this Fair Use Policy at any time, without notice or explanation. Any such modifications or amendments will be effective immediately upon posting on our website.
Please note that by accessing the demo environment, you acknowledge and accept these terms, and agree to comply with all provisions of our Fair Use Policy.
## Description of the Demo Environment
Check out the **About the demo environment** page for the full description of the environment and it’s applicable specs.
# Get Started with Visual Radio Scheduling
Source: https://docs.visualradioassist.live/untitled-page
The scheduling functionality of VRA enables you to control the Visual Radio situation for every unique live program.
The scheduling functionality of VRA enables you to control the Visual Radio situation for every unique live program.
For example a program can trigger an specific Output onair, or a Audio Manager Trigger to be active/disabled.
Scheduling Programs contain certain metadata (title, description, media and [presenter info](/presenters)) which you could integrate automatically while creating Visual Content.
## Calendar
Go to the [Calendar](https://visualradio.cloud/scheduling) in your Cloud, where you could find the overview of all the planned programs by week, month or day.
If you are familiar with Google Calendar, you will recognize the drag/select system of creating and editing programs.
[Create a new Program](/scheduling/create-a-new-program)
See [Media Hub](/media-hub)
# User Management
Source: https://docs.visualradioassist.live/user-management
The VRA Cloud has extremely fine grained user and permissions management, to make sure that only users with the correct permissions are allowed to access sensitive broadcast resources.
The VRA Cloud has extremely fine grained user and permissions management, to make sure that only users with the correct permissions are allowed to access sensitive broadcast resources.
User Management is available for all plans with more than 1 user, fine grained role based access management is available for Pro and all Enterprise Plans.
## RBAC Matrix
| User **Role** | Station Scoped | Default Permissions Set on Resources (Outputs, Visuals, Scheduling…) | User Management | Create / Delete Studio | Update Studio | Connect
Server | Delete Server | Create Station | Delete Stations | Manage Station Licenses |
| --------------------- | --------------- | -------------------------------------------------------------------- | ---------------- | ---------------------- | ------------- | -------------------- | ------------- | --------------- | --------------- | ----------------------- |
| **DJ** | ✅ | None | | | | | | | | |
| **Producer** | ✅ | None | | | | | | | | |
| **Editor** | ✅ | None | | | | | | | | |
| **Station Manager** | ✅ | All Permissions with Station Scope | ✅ Station Scoped | | ✅ | ✅ | | | | |
| **Tech Support** | ♾️ All Stations | All Permissions to all Broadcaster Stations | ✅ | ✅ | ✅ | ✅ | ✅ | | | |
| **Broadcast Manager** | ♾️ All Stations | All Permissions to all Broadcaster Stations | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Initial permissions state, after assigning the role, without modifying permissions on user-basis.
### Note on Locked Resources
The “Lock” status of a resource (output, visual, etc.) could have an impact on the final permission a user has for accessing resources. Check the [Lock Resources](/lock-resources) documentation for more information.
### Station scoped
A station scoped user only has permissions on resources from the station that is assigned to the user.
The stations an user can access are assigned by someone with an Station Manager, or higher, role on [https://cloud.visualradioassist.live/broadcaster/users](https://cloud.visualradioassist.live/broadcaster/users)
### Assigning permissions
When a user has no permissions in the default set (from its role), you have to assign custom permissions. With the help of **packs** you can easily add multiple selective permissions for certain broadcast purposes.
| **Permission packs** | Manage Studios | Edit Outputs | Edit Visuals | Update Scheduling | Media Management | Audio Triggers | Manage Visuals | Manage Outputs |
| -------------------- | -------------- | ------------ | ------------ | ----------------- | ---------------- | -------------- | -------------- | -------------- |
| Producer Output Pack | | ✅ | ✅ | ✅ | ✅ | | | |
# Video guides
Source: https://docs.visualradioassist.live/video-guides
Short video walkthroughs for setting up and running Visual Radio Assist.
Watch short walkthroughs covering set-up, rundowns, conditions, and graphics.
Bring your Output Player into OBS over NDI.
See how rundowns drive what an Output plays.
Connect VRA with Blackmagic ATEM switchers.
Trigger content on an Output when a condition fires.
Play online and uploaded video in your set-up.
Add simple variables to your graphics.
Make Outputs play at the right time.
Connect VRA with vMix.
Drive graphics from your nowplaying data.
Connect VRA with OBS.
Fire graphics on recurring time patterns.
Bring your Output Player into vMix.
Play out your Visual Radio graphics.
Use dynamic data in graphics with variables.
# Get Started with Visual Radio Graphics
Source: https://docs.visualradioassist.live/visual-designer
The Visual Designer is a powerful tool to design animated graphics with dynamic content. This documentation covers everything you need to know to get started with Visuals in Visual Radio Assist.
Visuals are just like graphics you create in Illustrator, Photoshop or animate in After Effects. But instead of developing complex transitions and data integrations yourself, Visual Radio Assist already provides a full radio experience to kickoff your Visual Radio Graphics.
Looking for taking a extra step in a technical direction (working with `CSS` or `JS`)? Check the [Develop Visual Graphics](/develop-with-vra/develop-visual-graphics) docs.
[Visual Templates](/visual-designer/visual-templates)
## Creating your first Visual
You can start your design by creating a new Visual on [https://visualradio.cloud/outputs/designer](https://visualradio.cloud/outputs/designer)
To save a Visual you need to provide a name and add at least one layer to the design. After you’ve saved the Visual, the item is available in the complete VRA Cloud.
**Playback**
In the [Output Editor](/output-editor) you get the option to select the fresh Visual for playback, this requires you to set a fixed duration for the Visual playback time.
## Available Layer Types
Instead of the default plain layers you create in your existing design software, the Visual Designer gives you a lot of power by choosing one of the following Visual Radio specialized layer types:
### `TEXT`
The text layer is one of the most used elements in the Visual Designer. The element gives you the ability to display your own input and style it with all the well-known text properties
Refer to [Using live/dynamic data](/visual-designer#using-livedynamic-data) for the usage of dynamic data in your text elements. With dynamic data you are able to show for example Nowplaying or Scheduling information in the Visual.
Use the Text Sized Box option in the properties panel in combination with setting a background color to create a “text block” which automatically sizes according to the text length
### `SHAPE`
The shape Layer enables you to create a simple creative layer containing a background and/or border
### `MEDIA`
With the Media Layer you can select still-image from your [Media Hub](/media-hub) list. The Visual Player in the Outputs will automatically load the correctly sized version of this image and will make sure that the Visual transition can only be started after the media is loaded.
### `DYNAMIC MEDIA`
Dynamic Media layer allows you to use an external still-image URL in the Visual. This image URL can be fixed or dynamic using data from one of your configured Output Variables or AutomationLink artist information. The Dynamic Media field expects you to use the exact same format as the Text Layer’ dynamic data, instead for the Dynamic Media the content should always resolve to a accessible URL.
Refer to [Using live/dynamic data](/visual-designer#using-livedynamic-data) for the different ways to utilize dynamic data for these urls.
### `VIDEO MEDIA`
To show video like you are used to in the Output Player, but within a Visual (PiP), you can utilize the Video Media Layer. The Visual Player will make sure the video is buffered correctly in the highest available quality. The Video Media Layer properties also gives you options to play back public `HLS` streams or other video files that are available on an external url. These properties also allow you to link a Output Variable value to the Video player in the Visuals.
In a future update `WebM VP9` encoded Alpha videos are supported as well
### `ALBUM COVER`, `ARTIST COVER`,`SCHEDULING MEDIA `
These three layers refer to the respective live data in the VRA system. Album and Artist Cover layers will refer to the selected playing item from the AutomationLink Data.
The Scheduling Media is particularly useful when wanting to display the currently attached media in the Scheduling information.
**Fallback Media**
When one of the previously selected live data items is not available (for example when no now playing is available or scheduling is offair) the fallback media will be used.
### `HTML`
The HTML Layer gives you the ability to embed your own HTML code 1:1 in the designer. The HTML will render in the `div` sized and positioned by the Layer’ properties. Refer to [Develop with VRA](/develop-with-vra) for even more ways to customize your Visuals.
### `VISUAL`
The Visual Layer makes it possible to create PiP links between existing Visuals. The Visual that gets selected is directly embedded in the layer, which makes it easy to re-use certain elements.
**Did you know** that you can also utilize the [Using live/dynamic data](/visual-designer#using-livedynamic-data) in HTML layers? This enables you to automatically populate the custom HTML with all the available dynamic data in the system.
Also check [Base Layers](/output-settings#base-layers) for re-using certain elements (like a station logo) in every Visual automatically.
Because the HTML layer is rendered dynamically on every relevant data change injecting custom `JS` this way is not supported and the code will not be executed. Take a look at the [Output Settings](/output-settings) and [Develop with VRA](/develop-with-vra) for these `Custom JS` use cases.
### `SNIPPET`
Make use of the developed Snippets from [Visual Snippets](/output-settings#visual-snippets). The selected snippet is sized and positioned relatively to the size of the layer.
### `CONTAINER`
Create a “wrapper” to wrap multiple other layers. You can later use this Container Layer to add extra CSS styling or make animations clip from a direction.
### `STACK`
Stack Layers are very useful when you want to
**💡 Tip:** by using percentage based layer sizing the Stacking effect will work the best, because layers will take for example 50% of their parent Stack Layer.
### `BODYMOVIN`
[Bodymovin / Lottie Animation Layer](/visual-designer/bodymovin-lottie-animation-layer)
Missing some graphic functionality or layer in the Visual Designer? Let us know via the Feature Request option on [https://cloud.visualradioassist.live/support](https://cloud.visualradioassist.live/support)
### Resolution and Dimensions
The Visual Designer provides a canvas with the **virtual dimensions 1280x720** to make it easy to calculate sizing and positions of 16:9 graphics. But the output of the Visual is automatically scaled to every 16:9 you want to use. For example, the graphic will look identical on Full HD and 4K outputs.
## Using live/dynamic data
Multiple Layer types support the use of dynamic data to create a display the various data elements that are already available and live-updated in the system. To make use of this data you use “curly brackets” characters to define the data element you want to use.
Every data element starts with `{{` and ends with `}}` . Between these curly brackets you type the data selector: always starting with `vra.` following the **path to the specific** data you want to live-display. Here are a couple examples:
```yaml theme={null}
# NP Music Artist + Title
{{ vra.np.music.artist }}
{{ vra.np.music.title }}
# Scheduling Onair Program Title
{{ vra.schedule.onair.title }}
```
Refer to the **VRA Data** documentation to browse all the fields, available by default in your VRA set-up.
**Lists**
When data is in an array format (list like) you can access the indexed data by the using a number in the data path:
```json theme={null}
# data structure:
{
"vra": {
"variables": {
"field": {
"list": ["item1", "item2", "item3"]
}
}
}
}
```
To get `item2` you should use the following path:
```yaml theme={null}
{{ vra.variables.field.list.[2] }} # outputs: item2
```
**Non-standard fields**
A note on non-standard fields with special characters in the field name, other than `_` (for example `content:encoded`):
```yaml theme={null}
{{ vra.variables.api_x.field.deep-123.1.content:encoded }} # does not work
{{ vra.variables.api_x.field.[deep-123].[1].[content:encoded] }} # works
```
You need to configure / have access to the different modules (Scheduling/AutomationLink) of VRA to use data from them.
All the selected data via the braces is automatically updated and in-sync with your Visual Radio setup.
More on Literal Segments: [https://handlebarsjs.com/guide/expressions.html#literal-segments](https://handlebarsjs.com/guide/expressions.html#literal-segments)
### Link Data in Text Layers
In Text Layers you can type “/” to use a popup to browse the available data elements. You can also press the icon on the Text Editor.
### Output Variables
—
### Display encoded/unserialized HTML
To make sure the HTML from your Variables for example is rendered as HTML and not serialized HTML you must use extra wrapping bars to confirm this dangerous step:
```yaml theme={null}
# Before
{{ vra.variables.html_content }}
# After: renders html content
{{{ vra.variables.html_content }}}
```
### Condition based text and other helpers
To make even more use of the powers of the templating language of the Visuals, you can check the following documentation. For example to create condition based templates with `#if` conditions.
### Auto- height and width
With the Text Sized box option from update **Trick: box with color, text sized with padding** you could get more creative by automatically sizing the background box in text layer.
We’ve added this functionality to a more generic level, enabling more layer types to make use of auto sizing, which wraps the layer size boundaries around the layer’s content. Even if this content changes.
## Transitions
Visuals will automatically transition in when being played in an Output. When the playback is done or the Visual is paused/stopped the Visual is automatically transitioned out.
To learn more about the Visual Transition Lifecycle and customize it to your own liking, check the documentation at [Layer Transition Lifecycle for CSS](/develop-with-vra/develop-visual-graphics/layer-transition-lifecycle-for-css)
## Layer Conditions
## 🔒 Locking Visuals for other users
Preventing other users from **saving** edits of layers of-/the entire Visual is possible by using the lock functionality in the Editor. Learn more at [Lock Resources](/lock-resources)
In a future update the Visual can also be locked for simultaneously editing the same Visual by different users, preventing conflicts.
# Bodymovin / Lottie Animation Layer
Source: https://docs.visualradioassist.live/visual-designer/bodymovin-lottie-animation-layer
Bodymovin is the extension for After Effects we will use to Export our animation as Lottiefile in .json format.
## Installing Bodymovin - the After Effects Extension
Bodymovin is the extension for After Effects we will use to Export our animation as Lottiefile in `.json` format
1. Go to [AEscripts - Bodymovin](https://aescripts.com/bodymovin/) and download Bodymovin Plugin.
Currently you can not get the latest version of Bodymovin in the Adobe Exchange. Therefor we recommend AEScripts for to use the latest features of Bodymovin
2. Execute the installer.
3. You find the extension in `"Window" -> "Extensions" -> Bodymovin`
### Scripts permissions
Check under `"AfterEffects" -> "Preferences" -> "Scripting and Expressions"` - Application Scripting: Make sure to check the box to "Allow Scripts to Write Files and Access Network"
## Example After Effects Project file
This example project contains two Compositions;
**Lower Third**
* In / out markers for transition steps synced with the Visual Player
* Autoscaling textbox with max width text masking
* Background Image with toggle
* Box color
**Loop example**
* Loop markers for syncing loop section with Visual Player
## Bodymovin export settings for VRA Layers
### Fonts bundling
When you leave fonts bundling off; make sure to set the font name mapping to fonts available in the Visuals via [Use your custom font](/getting-started/use-your-custom-font)
# Visual Templates
Source: https://docs.visualradioassist.live/visual-designer/visual-templates
When designing visuals, there are times when you need to use the same graphic elements across multiple visuals.
When [designing visuals](/getting-started/design-your-first-visual), there are times when you need to use the same graphic elements across multiple visuals. Previously, this meant duplicating visuals manually, which could become repetitive and time-consuming. With **Visual Templates**, you can create and save reusable graphics, making it easier to maintain consistency across different programs.
## How to Create a Visual Template
1. **Design a Visual** – Create a new visual in the **Visual Designer** as usual, or create a template in the template tab.
2. **Save as Template** – Instead of saving it as a regular visual, choose the **Save as Template** option.
3. **Name the Template** – Assign a clear name to make it easy to find later.
4. **Access Your Templates** – All saved templates will be available in the **Templates Overview** for future use.
### Template Library (Coming Before Q3 2025)
A **Template Library** with **pre-defined templates** will be added before Q3 of 2025. This will provide a collection of ready-to-use templates that can be applied directly to broadcasts.
# Visual Variables
Source: https://docs.visualradioassist.live/visual-variables
Visual variables enable dynamic visuals for live broadcasts. They allow real-time updates based on external sources or user inputs in the Rundown Editor or Playout.
Visual variables enable dynamic visuals for live broadcasts. They allow real-time updates based on external sources or user inputs in the Rundown Editor or Playout.
The variables are scoped to the Visual and thus great to use in designs of Show-specific Visuals, Lower-thirds and other variable graphics which should be updated regularly.
**⏯️ You can learn everything about Visual Variables in the Video Guide: [How to Use Simple Variables in Visual Radio Graphics](/video-guides/how-to-use-simple-variables-in-visual-radio-graphics)**
## Global Station Variables
Unlike standard Visual Variables that apply to a single visual, Global Station Variables ensure station-wide consistency by allowing commonly used elements—such as branding, event schedules, or real-time data—to be updated in one place and automatically applied across all visuals.
## Create a Visual Variable
### Data Types
* **Boolean**
* **Text** – Single-line text
* **Long Text** – Multi-line text
* **Options** – Predefined list of selectable choices
* **Media Image** – Image selection and upload
* **Media Image Upload** – Image upload
* **Media Video** – Video selection and upload
* **Media Video Upload** – Video upload
**Media Uploads in Visual Variables**
For media-based variables, an **upload directory** can be set. This is a designated folder in the media hub where uploaded files are automatically stored. If not defined, media will be put in the root folder of the station.
### Visual Variable Types
**API Data Source**
Fetches real-time data from external or internal APIs, such as RSS-newsfeeds. Read more about setting up an [API Data Source](/api-data-sources).
**User Input**
Allows manual entry of text or values for on-the-fly updates. The value appears in the visual but is not stored for future use.
**Database**
Stores variable values in a database for future reference. Useful for recurring information, such as reporter details or scheduled event. This enables users of the variable to search through existing historical variable values.
**Music Track Metadata**
Displays song details, including artist, title, and album.
## Use a Visual Variable
Visual variables can be assigned to layers in a visual. Every layer type that accepts dynamic data from a variable has its own way of selecting that variable
* **Text Layers:** Use the **/** in the text field or use the **Data Selector** to link variables to text elements.
* **Image & Video Layers:** Select variables in the **Properties Settings** on the right to dynamically update visuals.
Image Media layers don’t accept visual variables. You should select the **Dynamic Media** layer.
## Linking Visual Variables
Variables from one visual can be linked to another. This creates a duplicate of the variable while keeping the original intact. This ensures that multiple visuals can use the same source without manually recreating data. The values of the variables won’t be synced, so changing them in one visual won’t change the value in the others.