Skip to main content

CLI tool to upload GIFs to Epomaker RT82 keyboard LCD screen

Project description

RT82 Display CLI

Upload GIFs to your Epomaker RT82 keyboard's LCD screen from the command line.

Installation

Install from PyPI

pip install rt82display

This installs the CLI tool and all Python dependencies. You can immediately use rt82display list, rt82display info, and upload pre-encoded .qgif files.

Linux: udev rules (required for non-root access)

# Download the rules file from the repo
sudo curl -o /etc/udev/rules.d/99-rt82.rules \
  https://raw.githubusercontent.com/guysoft/rt82display/main/udev/99-rt82.rules
sudo udevadm control --reload-rules
sudo udevadm trigger

Then unplug and replug the keyboard.

macOS: No extra setup required.

Optional: Build the native QGIF encoder

The native encoder is needed to upload .gif files directly (auto-converts GIF to QGIF). Without it you can still upload pre-encoded .qgif files.

git clone https://github.com/guysoft/rt82display.git
cd rt82display/wasm2c_runtime
./build.sh

Requirements: A C compiler (gcc/clang). The WABT runtime headers are included in the repository.

Development install

To install from a local checkout instead of PyPI:

git clone https://github.com/guysoft/rt82display.git
cd rt82display
pip install -e .

Usage

Upload a GIF (auto-encodes to QGIF)

rt82display upload my_animation.gif

Upload a pre-encoded QGIF file

rt82display upload my_animation.qgif

Encode a GIF without uploading

rt82display encode input.gif output.qgif

List connected devices

rt82display list

Show device/protocol info

rt82display info

Example

A test GIF is included in the repository to verify your setup works:

rt82display upload capture_test.gif

Example GIF

Limitations

  • 64KB file size limit: The RT82 firmware has a ~64KB buffer. Complex GIFs with many color transitions may exceed this limit and cause display artifacts.
  • Best results: Use simple GIFs with solid colors and minimal patterns.
  • If your GIF exceeds the limit, you'll see a warning but can still attempt the upload.

Alternative: Web Tool Encoding

If the native encoder doesn't work for your GIF, you can capture QGIF from the official web tool:

  1. Open https://image.rdmctmzt.com/ in Chrome
  2. Paste this in DevTools Console (F12):
window._p=[];const _s=HIDDevice.prototype.sendReport;HIDDevice.prototype.sendReport=function(i,d){window._p.push(Array.from(new Uint8Array(d)));return _s.call(this,i,d)};window.dl=()=>{const c=[];window._p.filter(x=>x[1]===0x19).forEach(x=>c.push(...x.slice(8)));if(!c.length){console.log('No data!');return}const a=document.createElement('a');a.href=URL.createObjectURL(new Blob([new Uint8Array(c)]));a.download='animation.qgif';a.click();console.log('Saved',c.length,'bytes')};console.log('Ready! Upload GIF, Download to Device, then run: dl()');
  1. Upload your GIF and click "Download to Device"
  2. Run dl() in console to save the QGIF file
  3. Upload via CLI: rt82display upload animation.qgif

Technical Details

  • Display: 240×135 RGB565
  • Format: Proprietary QGIF (RLE compressed)
  • Protocol: USB HID with two-stage device activation
  • Encoder: wasm2c-compiled from official qgif.wasm

See PROTOCOL.md and QGIF.md for technical documentation.

Troubleshooting

See AGENTS.md for detailed troubleshooting steps.

Quick fixes:

  • Device not found: Unplug and replug keyboard
  • Permission denied (Linux): Install the udev rules (see Prerequisites above) and replug
  • Screen stuck on "Downloading": Unplug and replug
  • Garbled display: GIF likely exceeds 64KB limit, try simpler patterns

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rt82display-0.1.0.tar.gz (158.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rt82display-0.1.0-py3-none-any.whl (35.0 kB view details)

Uploaded Python 3

File details

Details for the file rt82display-0.1.0.tar.gz.

File metadata

  • Download URL: rt82display-0.1.0.tar.gz
  • Upload date:
  • Size: 158.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for rt82display-0.1.0.tar.gz
Algorithm Hash digest
SHA256 ff7bdc4de38597c0ab65c1e7a8c93f1ca201f11398e6febfc768fdc2f1b30951
MD5 fa273db0e4f4c13772cc751be4beec23
BLAKE2b-256 170fed0074766b29e6765910dcbc13fa3a034ad5002642c63a673b53d1ad5883

See more details on using hashes here.

Provenance

The following attestation bundles were made for rt82display-0.1.0.tar.gz:

Publisher: publish.yml on guysoft/rt82display

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rt82display-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: rt82display-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 35.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for rt82display-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 20d93115a35c2fa61df907339b95ba357ceb0fb87cefadafdbe293035a9ef6d3
MD5 a2c7f6829b9586c5b94a5bc6e3c80d97
BLAKE2b-256 8c6aa9b2067902d9f9912cfd37f5d877fcde0ceab37c1345b80e1e98327adba9

See more details on using hashes here.

Provenance

The following attestation bundles were made for rt82display-0.1.0-py3-none-any.whl:

Publisher: publish.yml on guysoft/rt82display

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page