Rhema
Features

Remote Control

Drive Rhema from Stream Deck, TouchOSC, or any HTTP client via OSC and a REST API.

Live operators rarely have a free hand on a keyboard. Rhema exposes its controls over OSC and an HTTP API so you can wire them into hardware controllers, automation scripts, and stage-management software. Both protocols can run simultaneously and share the same command set.

In-depth guide

This page is a high-level overview. The full protocol reference, authentication notes, and example payloads live in the remote control guide in the repository.

Protocols at a glance

ProtocolDefault portTransportBest for
OSC8000UDPStream Deck (via Companion), TouchOSC, QLab, hardware
HTTP8080TCPREST clients, dashboards, scripting, status polling

Both default to binding 0.0.0.0 so a phone, a staff laptop, or a hardware controller on the LAN can reach them. Bind to 127.0.0.1 in Settings → Remote for local-only access.

What you can do remotely

ActionOSC addressHTTP body (POST /api/v1/control)
Next verse in queue/rhema/next{ "command": "next" }
Previous verse/rhema/prev{ "command": "prev" }
Show / hide overlay/rhema/show, /rhema/hide{ "command": "show" }
Switch theme/rhema/theme "Classic Dark"{ "command": "theme", "value": "Classic Dark" }
Set opacity/rhema/opacity 0.75{ "command": "opacity", "value": 0.75 }
Set confidence threshold/rhema/confidence 0.8{ "command": "confidence", "value": 0.8 }
Toggle on-air/rhema/on_air true{ "command": "on_air", "value": true }

All eight commands work identically across both protocols, so any controller you already own (or build) talks the same dialect.

Opacity is a stub today

The opacity command is wired through the dispatcher but currently a placeholder — it'll take effect when the broadcast store gains opacity support. The other seven commands are fully live.

OSC

OSC runs on UDP port 8000. Configure the listening port in Settings → Remote, and send messages from your favorite controller:

  • TouchOSC templates with verse-show/hide pads, opacity sliders, and theme buttons drop right onto a tablet.

  • Stream Deck + Bitfocus Companion's Generic OSC module maps each pad to one of the addresses above.

  • A simple test from the command line:

    oscsend localhost 8000 /rhema/next

The Settings panel shows a live command log with timestamps so you can debug controller setups without leaving the app.

Settings → Remote tab with OSC and HTTP toggles, port inputs, and a live command log

Settings → Remote: OSC and HTTP listeners with their port and host fields, connection status indicators, and a live command log that shows incoming OSC/HTTP traffic with timestamps. Click to expand.

HTTP API

For scripts and web automations, the HTTP API exposes the same controls under /api/v1/:

EndpointMethodPurpose
/api/v1/healthGETLiveness check — returns service name and version
/api/v1/statusGETCurrent state snapshot — on-air, active theme, live verse, queue length, confidence threshold
/api/v1/controlPOSTDispatch a command (table above)
curl -X POST http://localhost:8080/api/v1/control \
  -H 'Content-Type: application/json' \
  -d '{"command":"theme","value":"Classic Dark"}'

The status endpoint returns an authoritative view from a Rust-side state cache that the frontend refreshes once a second:

curl http://localhost:8080/api/v1/status
{
  "on_air": true,
  "active_theme": "Classic Dark",
  "live_verse": "John 3:16",
  "queue_length": 12,
  "confidence_threshold": 0.75
}

Persistence and shutdown

OSC and HTTP listeners can be started and stopped without restarting the app. Port-bind failures surface as visible errors in the Settings panel rather than as silent listener crashes, and both listeners shut down cleanly on app exit (no zombie threads, no orphaned ports).

Security

By default, both protocols bind to 0.0.0.0 and the HTTP server attaches a permissive CORS layer, so any origin on the network can call the API. Before exposing Rhema beyond a trusted local network, bind to 127.0.0.1 in Settings, or front it with a reverse proxy that adds authentication and TLS. The repo's remote control guide covers the threat model in more depth.

On this page