Wave Open Firmware

Your Wave.
Your recordings.
Nobody else listening.

waved is open firmware for the Insta360 Wave speakerphone. One Rust program replaces the stock software: no telemetry, meetings that go only where you send them, and a one-script way back to stock.

Home: the dial reads Mic on, with Quieter, Louder and RecordRecording: a timer at 42 minutes, with Mark, Stop and PauseAudio mode: six round buttons around a preview of the pickup patternA phone call over Bluetooth, with the hang-up buttonFiles: recordings newest first, with length and upload state

What changes when you install it

Stock firmwarewaved
Telemetry

Sends more than 35 kinds of usage event to ByteDance's DataFinder service, tagged with the Wave's serial number.

See the evidence

The stock app and its telemetry library never run. waved asks your time servers for the time, and talks to the webhook and update servers only once you set them.

How waved is built
Your meetings

Routes meeting audio, transcripts and voiceprints to Insta360's cloud.

See the evidence

Recordings stay on the Wave, or go to a webhook you choose, with retries that survive a restart.

Recording webhooks
Updates

Signed with a 512-bit RSA key, small enough to factor on ordinary hardware.

See the evidence

Signed with your own key and served from your own server, with a trial boot and an automatic way back.

Tested on the host so far

Updates
Shell access

Releases up to 1.0.13.6 opened a root shell over telnet, with the password 123456.

See the evidence

No network shell. You reach the Wave over USB with ADB, and one script puts stock back.

Revert to stock

What it does

A neural network on the Wave's own NPU

Next to its CPU, the Wave has a neural accelerator that the stock software uses for its speech models. Through this project's own native backend, NVIDIA's MarbleNet voice-activity model now runs on it in full, and all 800 of its test decisions match the original model.

A research milestone: it runs on fixed four-second windows, and waved doesn't use it yet.

Time to run MarbleNet on one four-second window
  • NPUnative backend0.83 ms
  • CPUone Cortex-A55 core8.66 ms

10.4× faster. Median of 32 paired runs on the same Wave; feature extraction and setup are not included.

Install it in three steps

  1. Turn on ADB

    With the Wave on stock firmware and plugged in over USB-C. This lasts until the next reboot, which is all the installer needs.

    pip3 install pyusb
    sudo python3 waved/scripts/enable_adb.py
  2. Build waved

    Needs Rust, Docker and cross. The first build downloads its toolchain image and takes a while.

    cd waved
    WAVED_BUILD_ID=$(git rev-parse --short HEAD) \
      cross build --release --target aarch64-unknown-linux-gnu \
      --features "ui,capture-alsa" -p waved
  3. Install and reboot

    The installer checks everything before it changes anything, and makes sure ADB comes back after the reboot.

    ./deploy/install.sh && adb reboot

Requirements, what each step does, and what to do if one fails are in the install guide. Changed your mind? ./deploy/revert.sh && adb reboot puts stock back (how revert works).