Skip to content

GitFlowLink/ironpride-display

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Iron Pride Display

Native Linux client and visual editor for the built-in IPS screen of the Iron Pride Invader Q9MX PC case. The stock software (APEXSTORM) is Windows-only — this is a from-scratch reimplementation built by reverse-engineering its USB serial protocol.

status python license

Download

→ Latest release (v1.1)

Pre-built binary for Linux x86-64 — no Python required, just ffmpeg on the system.

Features

  • Layers: images, GIFs, looping videos, animated text, system sensor gauges
  • Manipulate: move, resize from edges/corners (Photoshop-style), free rotation per layer
  • Text: custom color or animated flowing rainbow gradient
  • Effects: per-layer opacity, auto-spin with speed control, GIF/video playback speed
  • Sensors: CPU / GPU / RAM load and CPU / GPU temperature ring gauges (live, 1 s refresh)
  • Color filters over the whole composition (mono / red / pink / green / blue tint)
  • Themes: save named layouts and switch between them
  • Tray + autostart: minimizes to system tray, can launch on login and auto-resume the last layout
  • Drag & drop files straight from the file manager onto the canvas

How it works — reverse-engineered protocol

The display enumerates as a CDC ACM serial device (33c3:8001) on /dev/ttyACM0. Commands use a simple framed format:

5A A5 | CMD 00 | SIZE (uint32 LE) | PAYLOAD
CMD Meaning Payload
0x90 Hello 01
0x80 Brightness one byte 00..FF
0x81 Orientation one byte
0x85 Frame H.264 Annex B NAL

The panel contains a hardware H.264 decoder. Frames are encoded at 462×1920 (Constrained Baseline, level 3.1) and the panel rotates them to its native landscape orientation. A persistent ffmpeg pipe encodes the composed canvas and each emitted keyframe is wrapped in a 0x85 command — the firmware blanks the screen if the stream stops.

The protocol was recovered from USB captures (usbmon + tcpdump) of the official software running in a Windows VM with USB passthrough.

Requirements

# Fedora / RHEL
sudo dnf install ffmpeg
sudo usermod -aG dialout "$USER"   # re-login afterwards

Run from source

pip install -r requirements.txt
python3 ironpride_editor.py

# headless / login mode (tray only, starts streaming automatically):
python3 ironpride_editor.py --background

Build a standalone binary

pip install pyinstaller
pyinstaller --onefile --windowed --name ironpride-display \
            --collect-all PyQt6 ironpride_editor.py
# result: dist/ironpride-display

Notes

  • Tested on Fedora 44, KDE Plasma 6 (Wayland), AMD Ryzen 7 8700G / Radeon 780M.
  • GPU load/temp are read from amdgpu sysfs; on other GPUs the sensor paths may differ.
  • This is an unofficial project, not affiliated with Iron Pride or APEXSTORM.

License

MIT — see LICENSE.

Desktop integration (application menu icon)

Create a .desktop launcher so the app appears in your application menu:

cat > ~/.local/share/applications/ironpride.desktop << 'DESKTOP'
[Desktop Entry]
Type=Application
Name=Iron Pride Display
Comment=Case display editor for Iron Pride Invader Q9MX
Exec=/home/YOUR_USERNAME/ironpride-display/dist/ironpride-display
Icon=video-display
Categories=Utility;
Terminal=false
DESKTOP

update-desktop-database ~/.local/share/applications/

Replace YOUR_USERNAME with your actual Linux username (e.g. whoami to check).

To enable autostart on login, launch the app and tick "Launch on startup" in the settings panel — it will write the correct path automatically.

About

Native Linux display client for Iron Pride Invader Q9MX case screen - reverse-engineered USB/H.264 protocol, PyQt6 editor

Topics

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Packages

 
 
 

Contributors

Languages