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.6.0.tar.gz (146.4 kB view details)

Uploaded Source

Built Distributions

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

rt82display-0.6.0-py3-none-win_amd64.whl (211.8 kB view details)

Uploaded Python 3Windows x86-64

rt82display-0.6.0-py3-none-musllinux_1_2_x86_64.whl (153.0 kB view details)

Uploaded Python 3musllinux: musl 1.2+ x86-64

rt82display-0.6.0-py3-none-musllinux_1_2_aarch64.whl (158.3 kB view details)

Uploaded Python 3musllinux: musl 1.2+ ARM64

rt82display-0.6.0-py3-none-manylinux_2_28_x86_64.whl (152.0 kB view details)

Uploaded Python 3manylinux: glibc 2.28+ x86-64

rt82display-0.6.0-py3-none-manylinux_2_28_aarch64.whl (157.7 kB view details)

Uploaded Python 3manylinux: glibc 2.28+ ARM64

rt82display-0.6.0-py3-none-macosx_11_0_arm64.whl (174.3 kB view details)

Uploaded Python 3macOS 11.0+ ARM64

rt82display-0.6.0-py3-none-macosx_10_9_x86_64.whl (172.4 kB view details)

Uploaded Python 3macOS 10.9+ x86-64

File details

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

File metadata

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

File hashes

Hashes for rt82display-0.6.0.tar.gz
Algorithm Hash digest
SHA256 015732d9ea4a3b7529dba4b4b236d5ec54dbeb52af22dc19c27f5bddf63a489d
MD5 7f2725221142d89afd3b250f53438f76
BLAKE2b-256 70d20f819b63eb4bd5eb175ecc4672bb7441f5f94c1882713349d9cfcfa8eabe

See more details on using hashes here.

Provenance

The following attestation bundles were made for rt82display-0.6.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.6.0-py3-none-win_amd64.whl.

File metadata

  • Download URL: rt82display-0.6.0-py3-none-win_amd64.whl
  • Upload date:
  • Size: 211.8 kB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for rt82display-0.6.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 a6fb1a75588cb6d2cd39d57672edaeb11c0261be9fb17b3817002986af35065b
MD5 ffb247f3d3f4e5dd7c05ebc3cf2be0f2
BLAKE2b-256 ee786320025ea6e1f89e3ebbc8b3c1c9c1358d44405e6d0d35c51c71ae0adaae

See more details on using hashes here.

Provenance

The following attestation bundles were made for rt82display-0.6.0-py3-none-win_amd64.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.

File details

Details for the file rt82display-0.6.0-py3-none-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for rt82display-0.6.0-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 801a352afa6cdf64956c970cf5ad8e579a3aecc77f4be2761fdfdf97a806aa8e
MD5 f7a44bb521097327fca21ebee6a438d2
BLAKE2b-256 309af6dbac5f2a607fbc095755c36be27a2d307245451805a8afc7b366ed539b

See more details on using hashes here.

Provenance

The following attestation bundles were made for rt82display-0.6.0-py3-none-musllinux_1_2_x86_64.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.

File details

Details for the file rt82display-0.6.0-py3-none-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for rt82display-0.6.0-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 06cb97f29e69db8c3a40d43fea3a62b1cc91ef47ca32c7432a992d324e54896b
MD5 106b871c29b4fe690c90557e15c23bcb
BLAKE2b-256 0d9096793392beae79d6675ec42d38fe408747a5931a88d2f1cc226abdb9f720

See more details on using hashes here.

Provenance

The following attestation bundles were made for rt82display-0.6.0-py3-none-musllinux_1_2_aarch64.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.

File details

Details for the file rt82display-0.6.0-py3-none-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for rt82display-0.6.0-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b5618effa22b9d9f753973f60eeba5ed116d935f6ef23110a96b0806cef34bf1
MD5 dd6286b441c75f7cf9d1da03f8bf3e50
BLAKE2b-256 8939cda7d892766417ffce99f21f929a38d60d57409c19ddadf8160f5c64a4b1

See more details on using hashes here.

Provenance

The following attestation bundles were made for rt82display-0.6.0-py3-none-manylinux_2_28_x86_64.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.

File details

Details for the file rt82display-0.6.0-py3-none-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for rt82display-0.6.0-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a43f56e7c54c7b12073b8d515782d673d3a2c6e6697c10eba49a72f36161c39b
MD5 34f1e11e9676c5ba0f3c78614810b03f
BLAKE2b-256 420ce1ab9d86f398380cbba853d0225c36a35d39b5f530ba3766fdc0e8dcfcdc

See more details on using hashes here.

Provenance

The following attestation bundles were made for rt82display-0.6.0-py3-none-manylinux_2_28_aarch64.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.

File details

Details for the file rt82display-0.6.0-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rt82display-0.6.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1390f8b4c3dbe75619e6429dab87239efa562225c510f30f2f9189ea3ce48433
MD5 69f6571268051b5298ad0fbd4c289f1a
BLAKE2b-256 ef95c6ad44bddd33bbe05cb8defa1547e643c745a6abf544617d543583202271

See more details on using hashes here.

Provenance

The following attestation bundles were made for rt82display-0.6.0-py3-none-macosx_11_0_arm64.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.

File details

Details for the file rt82display-0.6.0-py3-none-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for rt82display-0.6.0-py3-none-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 5ecac5ce88e72c9968f1aa135a1beb24cee430cc8227b655f76e466a574853ee
MD5 33eb08bededcb469b5e469277781a18f
BLAKE2b-256 8820a499eff803fb9abfbb5c06308dc28ec65d06c27ca3c8b70a9d897636dfa6

See more details on using hashes here.

Provenance

The following attestation bundles were made for rt82display-0.6.0-py3-none-macosx_10_9_x86_64.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