Installing Waybeam on the camera
This guide describes how to install Waybeam on a SigmaStar (Infinity6E / Infinity6C) camera and configure it to work with WFB-ng instead of Majestic.
What is Waybeam?
Waybeam is a standalone H.265 (HEVC) video encoder that fully replaces Majestic. It provides lower latency, a full HTTP API for real-time tuning, and native WFB-ng integration via a Unix socket. The binary, config (/etc/waybeam.json) and init script are named waybeam.
This guide is verified against version v0.40.1 (July 2026).
Requirements
| Component | Details |
|---|---|
| Camera (VTX) | Star6E (SSC30KQ / SSC338Q, Infinity6E) or Maruko (SSC378QE, Infinity6C) with OpenIPC firmware |
| Sensor | IMX335, IMX415, GC4653 or another supported sensor |
| Firmware | OpenIPC (Lite or FPV) |
| Access | SSH to the camera (root / 12345) |
| Network | Ethernet or WiFi for file transfer |
Step 1: Connect to the camera via SSH
Connect to the camera over SSH. The camera's IP address is usually 192.168.1.10 or can be found via the router.
ssh [email protected]
# password: 12345ssh [email protected]
# password: 12345GUI client for Windows
Instead of the command line you can use PuTTY: "Host Name" — the camera IP, port 22, type SSH, login root, password 12345.
Step 2: Stop Majestic
Before installing Waybeam you must stop and disable Majestic:
# Stop Majestic
killall majestic 2>/dev/null
# Disable Majestic autostart
# (if it starts via an init script)
if [ -f /etc/init.d/S95majestic ]; then
chmod -x /etc/init.d/S95majestic
fiImportant
Majestic and Waybeam cannot run at the same time — they both use the chip's ISP and video encoder.
Step 3: Download Waybeam
Releases ship as tarballs that contain the waybeam binary, a waybeam.json config template, and (for Maruko) the required SigmaStar libraries. Pick the tarball for your chip.
cd /tmp
curl -L -o waybeam-star6e.tar.gz \
https://github.com/OpenIPC/waybeam_venc/releases/latest/download/waybeam-star6e.tar.gz
tar xzf waybeam-star6e.tar.gz
# Install the binary
cp waybeam /usr/bin/waybeam
chmod +x /usr/bin/waybeamcd /tmp
curl -L -o waybeam-maruko.tar.gz \
https://github.com/OpenIPC/waybeam_venc/releases/latest/download/waybeam-maruko.tar.gz
tar xzf waybeam-maruko.tar.gz
cp waybeam /usr/bin/waybeam
chmod +x /usr/bin/waybeamMaruko needs libraries
Stock OpenIPC firmware for Infinity6C does not ship SigmaStar (MI) vendor libraries. The libraries from the tarball must be copied to /usr/lib/, and sensor .ko modules and ISP .bin files may also be required. See the repository README for details and provisioning scripts.
Alternative — SCP from a self-built binary
If you build Waybeam yourself (make build SOC_BUILD=star6e):
scp out/star6e/waybeam [email protected]:/usr/bin/waybeamStep 4: Create the configuration
Create the configuration file /etc/waybeam.json (the tarball includes a ready-made waybeam.json template you can just copy to /etc/):
cat > /etc/waybeam.json << 'EOF'
{
"system": { "webPort": 80, "overclockLevel": 1, "verbose": false },
"sensor": { "index": -1, "mode": -1 },
"isp": {
"sensorBin": "",
"aeEngine": "sdk",
"aeFps": 15,
"gainMax": 0,
"awbMode": "auto",
"awbCt": 5500,
"keepAspect": true
},
"image": { "mirror": false, "flip": false, "rotate": 0 },
"video0": {
"rcMode": "cbr",
"fps": 60,
"size": "1920x1080",
"bitrate": 8192,
"gopSize": 1.0,
"qpDelta": -4,
"sceneThreshold": 0,
"sceneHoldoff": 2,
"resilience": "off",
"framing": "off",
"zoomX": 0.5,
"zoomY": 0.5
},
"outgoing": {
"enabled": true,
"server": "unix://wfb_tx",
"streamMode": "rtp",
"maxPayloadSize": 1400,
"connectedUdp": true,
"audioPort": 0,
"sidecarPort": 0
},
"discovery": {
"enabled": true,
"serviceType": "_waybeam-venc._tcp",
"name": "",
"bareAlias": true
},
"fpv": { "roiEnabled": true, "roiQp": 0, "roiSteps": 2, "roiCenter": 0.4, "noiseLevel": 0 },
"audio": {
"enabled": false,
"sampleRate": 48000,
"channels": 1,
"codec": "opus",
"volume": 80,
"mute": false
},
"imu": {
"enabled": false,
"i2cDevice": "/dev/i2c-1",
"i2cAddr": "0x68",
"sampleRateHz": 200,
"gyroRangeDps": 1000,
"calFile": "/etc/imu.cal",
"calSamples": 400
},
"attitude": {
"enabled": false,
"mountDeg": 0,
"invertRoll": false,
"invertPitch": false
},
"record": {
"enabled": false,
"mode": "mirror",
"dir": "/mnt/mmcblk0p1",
"format": "ts",
"maxSeconds": 300,
"maxMB": 500,
"bitrate": 0,
"fps": 0,
"gopSize": 0,
"server": ""
},
"snapshot": { "enabled": true, "quality": 80, "channel": 7, "width": 0, "height": 0 },
"debug": { "showOsd": false }
}
EOFAll fields are optional
Any omitted field uses its compiled-in default. The default video0.size is "auto" (the sensor's native resolution).
The codec is always H.265
There is no video0.codec field anymore — Waybeam encodes only H.265 (HEVC). Old configs containing "codec": "h264" or "h265" load without errors, but the key is ignored.
For versions before v0.19 — the video0.frameLost field
Older versions had an SDK frame-drop strategy in the video0 section:
"video0": {
"...": "...",
"frameLost": true
}In v0.19 this strategy was removed entirely — the frameLost field no longer exists in the config or the API; a 1000 kbps bitrate floor applies instead. If the key is still in your old config, delete that line.
Step 5: Key configuration parameters
Video (video0)
| Parameter | Description | Typical values |
|---|---|---|
rcMode | Rate-control mode | "cbr", "vbr", "avbr", "fixqp" |
fps | Frame rate (max depends on the sensor mode) | 30, 60, 90, 100, up to 144 |
size | Resolution | "auto", "1920x1080", "1280x720" |
bitrate | Bitrate (kbps), 1000 minimum | 4096 — 16384 |
gopSize | GOP size in seconds (only effective when resilience: "off") | 0.5 — 4.0 |
qpDelta | I/P QP delta | -12 — 12 |
resilience | Loss-resilience preset (requires a reboot) | "off", "racing", "fpv", … |
framing | Stabilization / digital zoom | "off", "stab", "zoom-2x", … |
More on framing, resilience and attitude
The stabilization/zoom modes (framing), resilience presets and the IMU-driven artificial horizon (the attitude section, v0.39+) are documented in detail in Web panel and HTTP API.
Streaming (outgoing)
| Parameter | Description | Examples |
|---|---|---|
enabled | Enable streaming | true / false |
server | Receiver address | "unix://wfb_tx", "udp://192.168.1.1:5600", "shm://venc_ring" |
streamMode | Stream mode | "rtp" or "compact" |
maxPayloadSize | Max RTP packet size | 1400 (default) |
connectedUdp | Connected UDP socket (connect()) | true (default); false — unconnected, used in the apfpv WiFi mode |
audioPort | Audio channel | 0 — together with video; >0 — separate UDP port; <0 — audio to the recording only, never on air |
Network discovery (discovery)
The camera announces itself via mDNS — you can open it as http://waybeam.local without hunting for the IP:
| Parameter | Description | Default |
|---|---|---|
enabled | mDNS announcement on the LAN | true |
serviceType | Service type | "_waybeam-venc._tcp" |
name | Custom name; empty — waybeam-<suffix>, where the suffix is the tail of the chip's die ID | "" |
bareAlias | Also announce the short waybeam.local name (conflicts between cameras are resolved per RFC 6762) | true |
The full 12-hex serial (die ID) is readable from GET /api/v1/config → data.device.serial.
FPV ROI encoding (fpv)
| Parameter | Description | Values |
|---|---|---|
roiEnabled | Frame-center priority | true — center in higher quality |
roiQp | ROI QP delta (-30…30) | -18 — maximum center quality |
roiSteps | Number of bands | 1 — 4 |
roiCenter | Center band size | 0.1 — 0.9 |
Step 6: Run Waybeam
Manual run (for testing)
# Run with logs printed to the console
waybeamThe web panel will be available at http://<camera-ip>/ or simply http://waybeam.local — the camera announces itself via mDNS (the discovery section, enabled by default).
Check operation
# Check the version
curl http://localhost/api/v1/version
# Check the configuration
curl http://localhost/api/v1/config
# Check which parameters can be changed in real time
curl http://localhost/api/v1/capabilitiesStep 7: Autostart Waybeam
Create an init script to start Waybeam automatically when the camera boots:
cat > /etc/init.d/S96waybeam << 'INITEOF'
#!/bin/sh
case "$1" in
start)
echo "Starting waybeam..."
# Make sure Majestic is not running
killall majestic 2>/dev/null
# Start waybeam in the background
start-stop-daemon -S -b -x /usr/bin/waybeam -- 2>&1 | tee /tmp/waybeam.log &
;;
stop)
echo "Stopping waybeam..."
killall waybeam 2>/dev/null
;;
restart)
$0 stop
sleep 1
$0 start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac
exit 0
INITEOF
chmod +x /etc/init.d/S96waybeamStartup order
The script is numbered S96, meaning it starts after most system services, but you need to make sure the WiFi drivers and WFB-ng are already loaded by then (especially for unix://wfb_tx, where wfb_tx must be listening on the socket first).
audioPort and sidecarPort
In the config above audioPort: 0 and sidecarPort: 0. This means:
audioPort: 0— audio is sent together with video over the same channel (optimal for WFB-ng)audioPort < 0(e.g.-1) — record-only mode: audio goes to the SD recording but is never transmitted on airsidecarPort: 0— the diagnostics sidecar channel is disabled (no overhead)
The default template has audioPort: 5601 and sidecarPort: 5602 — if you need separate audio or per-frame telemetry over UDP, set the corresponding values.
Step 8: Change parameters in real time
After starting Waybeam you can change parameters without restarting:
# Change the bitrate (live)
curl "http://localhost/api/v1/set?video0.bitrate=4096"
# Change the resolution (requires reinit)
curl "http://localhost/api/v1/set?video0.size=1280x720"
# Change FPS (live)
curl "http://localhost/api/v1/set?video0.fps=90"
# Enable ROI for FPV (live)
curl "http://localhost/api/v1/set?fpv.roiEnabled=true"
curl "http://localhost/api/v1/set?fpv.roiQp=-18"
# Request an IDR keyframe (useful after connecting)
curl http://localhost/request/idrCommon problems
Waybeam won't start — library error
Make sure all SigmaStar libraries are available in /usr/lib. On Maruko they must be installed from the tarball manually. If you use a staged build, set the variable:
export LD_LIBRARY_PATH=/path/to/libNo video after start
- Check that
outgoing.enabledis set totrue - Check that the
outgoing.serveraddress is correct - Check that Majestic is fully stopped:
ps | grep majestic - Check the logs:
cat /tmp/waybeam.log
Black screen or artifacts
Check sensor compatibility:
# Current sensor and available modes
curl http://localhost/api/v1/modesMake sure sensor.index and sensor.mode are set to -1 (auto-detect).
Upgrading from an older version? The sensor mode lineups were rebuilt several times: v0.21/v0.23 (Maruko), v0.25–v0.34 (Star6E, in-tree IMX335/IMX415 drivers). The sensor.mode indices were renumbered and some modes were hidden — a persisted index outside the new range keeps waybeam from starting (mode-select error at boot). Check your old config against the /api/v1/modes list or set it back to -1.
H.264 codec doesn't work
Waybeam encodes only H.265 (HEVC) on both chips. There is no video0.codec field; H.264 is not supported. Make sure your receiver (PixelPilot, ffplay, QGroundControl, GStreamer) is configured for H.265.
Next steps
- WFB-ng integration — configuring Waybeam + WFB-ng on the camera and ground station
- Web panel and HTTP API — detailed description of all API endpoints
- Waybeam overview — the full feature list

