Release date: October 2026
Previous baseline: 1.0.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.
| 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 |
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.
Links/enabled (default off). Name discovery for uniqueness always runsThe Web UI has the same Nearby list, Add as replica / Use as source, and Replicas / Sources grids.
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.
239.192.255.4. The mapping column is the Livewire audio channel. Pick the same AoIP interface as the Livewire meters (empty = system route). OAS joins UDP 2055 and 2060 and asks for the current pin state, so a microphone that is already ON at start lights the LEDLOGIN password. OAS sends ADD GPI / ADD GPO, queries each watched port, and reconnects if the socket dropsUp 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.
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.
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).
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).
0/1/2 = OFF/ON/TOGGLE, AIR 0/1/2/3 = OFF/ON/TOGGLE/RESET, or a raw commandpublic. An empty write community makes v2c read-onlyShop 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.
Formatting/textClockLanguage)H, or right-click / long-press → Hotkeys). Close with H, Esc, or a click outside. Other hotkeys are blocked while it is openCMD:REBOOT / CMD:SHUTDOWN require the Web Settings PIN when one is setFULLSCREEN:ON / OFF / TOGGLE switches the main window from the Web UI and the APIPTP, 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.
| 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 |
OAS_FORCE_UPDATE to offer the newest package again when that version is already installedpython-osc requirement from 1.0.0 is unchanged (>= 1.10.2)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.