Skip to content

Latest commit

 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Oura Balance Maze

Oura Balance Maze — rolling a ball through a procedurally-generated maze by tilting your hand

A tilt-controlled marble-maze you play on your desktop with your Oura ring — hold your hand palm-up and tilt to roll a ball through procedurally-generated mazes to the goal. The mazes grow and pit-holes start appearing as you clear levels.

It talks to the ring directly over Bluetooth LE with no Oura account and no cloud — it only reads live motion (the accelerometer). The ring connection is built on the cloud-free Oura BLE client from open_oura (see Credits).

Unofficial — not affiliated with or endorsed by Oura. Works with Ring 3/4/5.

The story behind this project

Watch the story behind Oura Balance Maze

▶ Watch the story behind this project

How it plays

  • Put the ring on, hold your hand palm-up, and press Use Ring. A quick three-step calibration — hold still in a comfortable pose, tilt left, then tilt down — lines the board's controls up with your hand.
  • Tilt to roll the ball to the glowing green goal. Reaching it loads the next, bigger maze.
  • Level 1 is walls-only; later levels add pit-holes — fall in and you restart the level. Holes only sit in dead-ends, never on the solution path.
  • No ring handy? Use Mouse tilts the board with the pointer.

Requirements

  • Bluetooth and the Rust toolchain. Built and tested on macOS; Linux should work too (same btleplug BLE stack), though it's untested.
  • An Oura Ring 3, 4, or 5 you can factory-reset (pairing installs a fresh key — see below).

Build

cargo build --release   # binary at target/release/oura

Setup & play

The ring authenticates each BLE session with a 16-byte key. You get one by pairing with a factory-reset ring; pairing installs the key and saves it to key.hex:

./target/release/oura scan                        # find your ring
./target/release/oura --key-file key.hex pair     # on a FACTORY-RESET ring
./target/release/oura --key-file key.hex info     # battery reads = key works
./target/release/oura --key-file key.hex maze     # then open http://127.0.0.1:8090

On macOS, grant Bluetooth permission to your terminal when prompted.

Pairing re-keys the ring, so the official Oura app won't recognize it again until you re-onboard there (which re-keys it once more). Treat the ring as dedicated to one or the other.

key.hex is your ring's secret key — it is gitignored; never commit or share it.

Commands

  • scan — list nearby rings
  • pair — install + save an auth key (factory-reset ring)
  • info — firmware / serial / battery
  • maze — serve the game on 127.0.0.1:8090

Architecture

A small Rust workspace:

  • oura-protocol — BLE packet framing, app-auth (AES), request builders, and device parsers.
  • oura-link — the btleplug BLE transport and the high-level OuraClient.
  • oura-cli — the oura binary. maze.rs is the self-contained game page, served over a loopback HTTP/SSE server (motion_server.rs) that streams the ring's accelerometer to the browser. The page is a single HTML/JS file with no external scripts or CDNs.

Credits

Built on open_oura by Th0rgal — the cloud-free Oura BLE client and protocol work this game's ring connection is based on. Huge thanks for the reverse-engineering that makes it possible. Licensed under MIT (see LICENSE); open_oura is distributed under MIT per its Cargo.toml.

License

MIT — see LICENSE.

About

A desktop balance-maze played with your Oura ring.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Sponsor this project

Packages

Contributors

Languages