Table of Contents

OnAirScreen 1.1.0 — Release Notes

Release date: October 2026
Previous baseline: 1.0.0


Version 1.1.0

OnAirScreen 1.1.0 is the first feature release after 1.0.0. What 1.0.0 put on one screen — meters, AoIP, clock faces, mixer GPI, Stream Deck — 1.1.0 carries across the studio: other OnAirScreens on the LAN, Axia GPIO and MIDI, combined logic, and SNMP. Shop builds activate a hardware-bound license and can install the update from the dialog.

These are the changes shipped after 1.0.0 (the 1.0.1–1.0.15 updates). If you are already on 1.0.15, the behaviour is the same; 1.1.0 is the version those changes ship under.


Highlights at a Glance

Area What's new
Studio Links Replicas (1→n status) and mapped sources (hallway tallies)
Livewire GPIO Follow console GPO/GPI: multicast, or LWRP over TCP 93
MIDI Note and CC from one interface, with Learn
GPIO Logic AND / OR across Raspberry Pi, Livewire, and MIDI On/Off
SNMP v2c/v3 agent on port 1161, IANA PEN 66873, optional traps
License One seat per computer; 14 days full use, then restricted mode
Updates Download, SHA-256 check, install and restart
Clock & weather Spanish text clock; photographic weather backgrounds

New Features

Several OnAirScreens on the LAN can follow each other. Configure under Settings → Links. Discovery uses the instance name (multicast 239.194.0.2 UDP 3311). There is no exclusive master: one screen can publish replicas and subscribe to sources at the same time.

Replicas copy the full runtime status to other screens: LED1–4 (state, caption, autoflash/timedflash), AIR1–4 (state, seconds, top-of-hour / countdown), and NOW / NEXT / WARN. Clock, meters, GPIO wiring, network ports, and the instance name stay local. Set 1→n once on the source. You do not walk to each replica.

Sources map individual signals for a hallway tally, for example Studio-1 / LED1 → LED1 and Studio-2 / LED1 → LED2. Signals are LED1–4, AIR1–4, NOW, NEXT, WARN, silence, or Follow all. Invert applies to boolean signals. Custom is extra API commands (semicolon-separated) that run when the source is active. Local target Custom only runs those commands without driving a local LED, AIR, or text field.

The Web UI has the same Nearby list, Add as replica / Use as source, and Replicas / Sources grids.

Axia Livewire GPIO

Axia consoles can drive the same LED and AIR actions as Raspberry Pi GPIO. OnAirScreen only reads GPIO. It does not write GPI back to the console. Available on all platforms, under Settings → GPIO → Axia Livewire. Default off.

Up to eight rows. Each row maps one or more of LED1–4, AIR1–4, AIR3/AIR4 Reset, plus semicolon-separated custom commands. Direction is GPO (from the console) or GPI. Modes: level, rising, falling, or both. Factory rows (master enable stays off): channel/port 1 GPO pin 1 → LED1, channel/port 2 GPO pin 1 → AIR3.

A row with no action stays without an action, so the input can feed a Logic rule without also sending the default LED or AIR command. The same multi-action mapping is on Raspberry Pi GPIO.

MIDI

Settings → GPIO → MIDI reads one input and maps Note or CC messages to LEDs and AIR timers. Learn waits up to 10 seconds and fills channel, type, and number. Clock, Active Sensing, and SysEx are ignored. Default off.

Only On/Off rows appear in Logic. Oneshot and Toggle do not hold a level, so they stay out of the Logic input menu.

GPIO Logic

Settings → GPIO → Logic combines Raspberry Pi, Livewire, and MIDI On/Off inputs. Eight rules. Each rule has one operator, one or more inputs, and one or more outputs. A command is sent only when the combined level changes.

Operator Outputs turn on Outputs turn off
OR any selected input is active every selected input is inactive
AND every selected input is active any selected input is inactive

Example: name two microphone inputs MIC1 and MIC2. An OR rule with those inputs and outputs LED1 and AIR1 stays on while either microphone is open, and turns both off only when both are closed.

Disabled, missing, or not-yet-seen inputs count as off. Resets and custom commands fire when the rule becomes true, not when it becomes false. Direct row actions keep working beside the rules. If the same LED or AIR timer is also set on a row or on another rule, that Logic row shows a warning.

Settings reopen the last GPIO sub-tab (Raspberry Pi, Axia Livewire, MIDI, or Logic).

SNMP

An SNMPv2c/v3 agent for the same status an NMS already walks elsewhere. Enable under Settings → Network (default off). Listen port 1161 so the app does not need privileges for UDP 161. MIB: onairscreen:mib-en, enterprise OID .1.3.6.1.4.1.66873 (IANA PEN 66873).

License and In-App Updates

Shop builds must be activated. One license covers one PC or one Raspberry Pi. Self-built source checkouts are not activated this way.

Install and restart (paid installs): OnAirScreen downloads the package, checks the SHA-256 sum, quits, and lets the system installer finish. Windows shows the MSI. macOS replaces the app folder, so a Finder label on the old app does not stay behind. Linux and Raspberry Pi install the .deb or .rpm, including an SD-card image, and show a window while apt or dnf is running. The update dialog stays open, shows Update Available, a progress bar, and how much of the package has been downloaded, then closes on its own after 20 seconds if you do not install. A source checkout only offers the download.

macOS shop builds are signed with an Apple Developer ID and notarized. Gatekeeper no longer blocks the first launch.

The Raspberry Pi SD-card image allows passwordless host reboot and shutdown from OnAirScreen.

Clock, Weather, and the Main Screen

Network Interfaces and PTP

PTP, AoIP, and Livewire GPIO remember the interface name. A new IPv4 address on that interface is used automatically. A former address is not listed as unavailable.

On Linux and Raspberry Pi, PTP binds UDP 319/320 through a small helper so the app can run as a desktop user. If the ports are in use or permission is denied, OnAirScreen retries, logs the cause, and the lock LED and WARN show PTP ERROR until the bind succeeds.

A listen port that is already in use (HTTP, WebSocket, UDP, OSC, SNMP) is reported in a dialog. The Network warning names the ports that could not be opened.


Bug Fixes

Issue Fix
English text clock said "a quarter to 13" at 00:45 and 12:45 Says "a quarter to 1"
Weather temperature clipped on a narrow display Temperature scales down
Weather widget pushed the clock or showed the station name Stays on the AIR column; shows the searched city; °C / °F / K keeps that city
Weather labels unreadable on bright photos Soft shadow and overlay
PTP, AoIP, or Livewire kept a former address The interface name is stored; the current IPv4 is used
Linux PTP could not bind 319/320 as a desktop user A helper receives the socket; the log says whether the helper is missing or failed
A listen port already in use only left a traceback A dialog names the ports. On macOS the Network warning is no longer an empty window
SNMP GET for NOW/NEXT/WARN read an empty cache GET reads the live screen
SNMP logged an asyncio error on quit The agent stops cleanly
Timer dialog rejected 2:10 Accepts 2:10, 2,10, and 2.10, and selects the existing value when opened with Enter
GPIO row fields stayed active when the row was off Desktop and Web Settings disable the row unless that input is enabled. Custom command stays disabled unless Action is Custom
A GPI with no action still sent the default LED or AIR command An empty action stays empty, so the input can feed Logic only
Closing the main window while Settings was open left the app running The app exits
Web UI Instance Name accepted more than 32 characters Capped at 32, same as the desktop field
HTTP stalled for seconds on bind or request logging No reverse DNS
Link replicas copied quit, reboot, shutdown, and NTP warnings Host-local WARN stays on that screen
Link replicas waited on a 400 ms poll Runtime status is pushed on change. A stored host is only a fallback if discovery misses the instance name
Apply accepted an instance name already used on the LAN Settings and the Web UI reject the collision
Links layout shoved fields or showed Studio-1 / Studio-2 as the empty placeholder Nearby dropdowns, wrapping hints, no blank gap, no horizontal scrollbar. Add as replica / Use as source fills the next empty row
Changing the LUFS reference preset in the Web UI left the old value The reference value follows the preset
Web Settings Updates tab rendered empty The license panel stays when switching tabs
Returning a license left the computer activated The next check removes the local license and switches to restricted mode. An invalid key does the same at startup
After a new activation the window size was wrong The window keeps the last size that fit the screen
Update dialog on macOS dropped its buttons or crashed Download, Install, and Close stay. The dialog no longer crashes when a newer version is available
Update dialog closed as soon as Install was clicked It stays open and shows download progress, then OnAirScreen quits so the installer can replace the app
Windows installer never started The MSI is launched after the download. The helper is no longer started without a console
macOS update left the old app folder The downloaded DMG replaces the app folder
Web Settings PIN prompt did not take the cursor The PIN field is focused when the prompt appears
The empty "no other OnAirScreens" line was unreadable in dark mode The line stays readable

Under the Hood


Upgrade Notes


Thank You

OnAirScreen 1.1.0 is for the studios that put 1.0.0 on air and then asked for the next room: another screen in the hallway, the console's own lamp, a MIDI pad, and an update that installs itself.

Happy broadcasting!

— Sascha Ludwig / astrastudio.de


OnAirScreen is source-available under OASL 1.0. Official builds are in the shop. Support the project via a shop license, PayPal, Buy Me a Coffee, or Ko-fi.