MCPcopy Index your code
hub / github.com/JerwuQu/ggoled

github.com/JerwuQu/ggoled @v0.3.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.3.0 ↗ · + Follow
128 symbols 213 edges 11 files 16 documented · 12%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

ggoled

Put custom graphics on your SteelSeries Arctis Nova Pro Base Station 128x64 OLED screen.

This utility implements the USB protocol, so you don't need SteelSeries GG/Engine Apps/GameSense, and it works on linux.

There is also a desktop application available for Windows, Linux, and MacOS that shows the current time and currently playing media, along with some other features.

Animation showcase

Bad Apple at 60 fps. This also showcases the burn-in you will get if not careful with OLEDs. The flickering is due to bad camera settings and not actually shown on the display.

Bad Apple on the Base Station

Supported Devices

Device Supported
SteelSeries Arctis Nova Pro Wired
SteelSeries Arctis Nova Pro Wired (Xbox)
SteelSeries Arctis Nova Pro Wireless
SteelSeries Arctis Nova Pro Wireless (Xbox)
SteelSeries Arctis Pro Wired 🧐 #12
SteelSeries Arctis Pro Wireless 🧐 #12
SteelSeries Arctis Nova Elite 🧐 #26

PRs and issues for similar devices are welcome!

Install

Pre-built binaries for released versions are available as GitHub Releases. There are also GitHub Actions for developer builds.

Windows

  1. Download:
  2. ggoled_app.exe for the app.
  3. ggoled.exe for the CLI.
  4. Run ggoled_app.exe.

Linux (Flatpak)

  1. Download ggoled-x86_64.flatpak.
  2. Install: flatpak install ggoled-x86_64.flatpak
  3. Install the udev rules so the device is accessible without root:
  4. Copy 11-steelseries-arctis-nova.rules into /etc/udev/rules.d/
  5. Run sudo udevadm control --reload && sudo udevadm trigger.
  6. Launch via your application menu or via flatpak run se.ramse.ggoled.

The CLI is also available: flatpak run --command=ggoled se.ramse.ggoled text Hello!.

From source

  1. Install the Rust toolchain.
  2. Build directly from git, either:
  3. A: Using installed SDL3: cargo install --locked --git https://github.com/JerwuQu/ggoled.git ggoled ggoled_app
  4. B: Building SDL3 from source: cargo install --locked --git https://github.com/JerwuQu/ggoled.git --features sdl3-static ggoled ggoled_app
  5. C: CLI only: cargo install --locked --git https://github.com/JerwuQu/ggoled.git ggoled
  6. (Linux only) Install the udev rules as described in the flatpak section above to run without root.
  7. (Linux only, optional) Install the systemd service: see below.

CLI usage examples

See ggoled --help for all commands and flags.

  • ggoled brightness 1: set the brightness to low.
  • ggoled text "Hello, World!": draw some text onto the display.
  • ggoled img cool_image.png: draw an image onto the display.
  • ggoled anim -r 10 -l 20 frame1.png frame2.png frame3.png: play an animation at 10 fps, looped 20 times.
  • ggoled anim animation.gif: play a gif animation.

You also can play video animations by first extracting frames with ffmpeg:

ffmpeg -i YOURVIDEO.mp4 -r 20 -vf "scale=w=128:h=64:force_original_aspect_ratio=1" frames/%05d.png
ggoled anim -r 20 frames/*  # bash
ggoled anim -r 20 $(Get-ChildItem frames | % { $_.FullName })  # powershell

Desktop application

The application puts itself as an icon in the system tray that you can right-click to configure.

For Windows, it gets media information from the Windows API which makes it work with almost all applications (with some limitations).

There are also features to avoid OLED burn-in that is otherwise unavoidable when using the official software, such as the screensaver function which will turn off the OLED display when away from the computer, or the OLED shifter which will infrequently move things around slightly. To extend the lifespan of your display, both of these are strongly recommended to use, along with using a low screen brightness.

systemd service

mkdir -p ~/.config/systemd/user/
cp ggoled_app.service ~/.config/systemd/user/
systemctl --user daemon-reload
systemctl --user enable --now ggoled_app.service

Custom font

It's recommended to use bitmap fonts to avoid weird artifacting, but any TTF or OTF font should work.

Modify the config file (%appdata%\ggoled_app.toml on Windows, ~/.config/ggoled_app.toml on Linux) and add:

[font]
path = 'C:\Path\To\Font.ttf'
size = 16.0

Then restart the application.

Extension points exported contracts — how you extend this code

OSFeatures (Interface)
(no doc) [3 implementers]
ggoled_app/src/os/mod.rs

Core symbols most depended-on inside this repo

to_option
called by 10
ggoled_cli/src/main.rs
draw
called by 8
ggoled_lib/src/lib.rs
info
called by 6
ggoled_lib/src/lib.rs
add_text
called by 5
ggoled_draw/src/lib.rs
blit
called by 5
ggoled_lib/src/bitmap.rs
play
called by 4
ggoled_draw/src/lib.rs
bind_menu_event
called by 4
ggoled_app/src/main.rs
bitmap_from_memory
called by 3
ggoled_draw/src/lib.rs

Shape

Method 74
Class 22
Function 17
Enum 14
Interface 1

Languages

Rust100%

Modules by API surface

ggoled_draw/src/lib.rs43 symbols
ggoled_app/src/main.rs22 symbols
ggoled_lib/src/lib.rs19 symbols
ggoled_cli/src/main.rs9 symbols
ggoled_app/src/os/linux/wayland.rs9 symbols
ggoled_app/src/os/windows.rs6 symbols
ggoled_app/src/os/macos.rs6 symbols
ggoled_app/src/os/linux.rs6 symbols
ggoled_lib/src/bitmap.rs5 symbols
ggoled_app/src/os/mod.rs2 symbols
ggoled_app/build.rs1 symbols

For agents

$ claude mcp add ggoled \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact