Skip to content

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

ComponentDetails
Camera (VTX)Star6E (SSC30KQ / SSC338Q, Infinity6E) or Maruko (SSC378QE, Infinity6C) with OpenIPC firmware
SensorIMX335, IMX415, GC4653 or another supported sensor
FirmwareOpenIPC (Lite or FPV)
AccessSSH to the camera (root / 12345)
NetworkEthernet 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.

powershell
ssh [email protected]
# password: 12345
bash
ssh [email protected]
# password: 12345

GUI 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:

bash
# 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
fi

Important

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.

bash
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/waybeam
bash
cd /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/waybeam

Maruko 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):

bash
scp out/star6e/waybeam [email protected]:/usr/bin/waybeam

Step 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/):

bash
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 }
}
EOF

All 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:

json
"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)

ParameterDescriptionTypical values
rcModeRate-control mode"cbr", "vbr", "avbr", "fixqp"
fpsFrame rate (max depends on the sensor mode)30, 60, 90, 100, up to 144
sizeResolution"auto", "1920x1080", "1280x720"
bitrateBitrate (kbps), 1000 minimum409616384
gopSizeGOP size in seconds (only effective when resilience: "off")0.54.0
qpDeltaI/P QP delta-1212
resilienceLoss-resilience preset (requires a reboot)"off", "racing", "fpv", …
framingStabilization / 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)

ParameterDescriptionExamples
enabledEnable streamingtrue / false
serverReceiver address"unix://wfb_tx", "udp://192.168.1.1:5600", "shm://venc_ring"
streamModeStream mode"rtp" or "compact"
maxPayloadSizeMax RTP packet size1400 (default)
connectedUdpConnected UDP socket (connect())true (default); false — unconnected, used in the apfpv WiFi mode
audioPortAudio channel0 — 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:

ParameterDescriptionDefault
enabledmDNS announcement on the LANtrue
serviceTypeService type"_waybeam-venc._tcp"
nameCustom name; empty — waybeam-<suffix>, where the suffix is the tail of the chip's die ID""
bareAliasAlso 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/configdata.device.serial.

FPV ROI encoding (fpv)

ParameterDescriptionValues
roiEnabledFrame-center prioritytrue — center in higher quality
roiQpROI QP delta (-3030)-18 — maximum center quality
roiStepsNumber of bands14
roiCenterCenter band size0.10.9

Step 6: Run Waybeam

Manual run (for testing)

bash
# Run with logs printed to the console
waybeam

The 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

bash
# 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/capabilities

Step 7: Autostart Waybeam

Create an init script to start Waybeam automatically when the camera boots:

bash
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/S96waybeam

Startup 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 air
  • sidecarPort: 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:

bash
# 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/idr

Common 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:

bash
export LD_LIBRARY_PATH=/path/to/lib
No video after start
  1. Check that outgoing.enabled is set to true
  2. Check that the outgoing.server address is correct
  3. Check that Majestic is fully stopped: ps | grep majestic
  4. Check the logs: cat /tmp/waybeam.log
Black screen or artifacts

Check sensor compatibility:

bash
# Current sensor and available modes
curl http://localhost/api/v1/modes

Make 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

Was this page helpful?