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
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:
- Open https://image.rdmctmzt.com/ in Chrome
- 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()');
- Upload your GIF and click "Download to Device"
- Run
dl()in console to save the QGIF file - 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
Release files for rt82display 0.6.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| rt82display-0.6.1.tar.gz | 147.0 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| rt82display-0.6.1-py3-none-win_amd64.whl | Python 3 | none | Windows x86-64 | Details |
| rt82display-0.6.1-py3-none-musllinux_1_2_x86_64.whl | Python 3 | none | Linux musl 1.2+ x86-64 | Details |
| rt82display-0.6.1-py3-none-musllinux_1_2_aarch64.whl | Python 3 | none | Linux musl 1.2+ ARM64 | Details |
| rt82display-0.6.1-py3-none-manylinux_2_28_x86_64.whl | Python 3 | none | Linux glibc 2.28+ x86-64 | Details |
| rt82display-0.6.1-py3-none-manylinux_2_28_aarch64.whl | Python 3 | none | Linux glibc 2.28+ ARM64 | Details |
| rt82display-0.6.1-py3-none-macosx_11_0_arm64.whl | Python 3 | none | macOS 11.0+ ARM64 | Details |
| rt82display-0.6.1-py3-none-macosx_10_9_x86_64.whl | Python 3 | none | macOS 10.9+ x86-64 | Details |
Total release size: 1.3 MB
Release files / rt82display-0.6.1.tar.gz
| Download URL | rt82display-0.6.1.tar.gz |
|---|---|
| Size | 147.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
aacf1388b3a3ffef689a6bb72ef763abdc7822434a2b2525a17655af58e746a5
|
|
BLAKE2b-256 checksum How to use checksums |
e2a658f23db4a5e4b43e87f7a2a8bceeb4f646cd14e53ee750b7b6117b61cdb9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 24, 2026.
Transparency logRelease files / rt82display-0.6.1-py3-none-win_amd64.whl
| Download URL | rt82display-0.6.1-py3-none-win_amd64.whl |
|---|---|
| Size | 212.5 kB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
11c14f9279df3c38c3a301ad54be5e7eb1e17092442cec16414a7befdd34c18c
|
|
BLAKE2b-256 checksum How to use checksums |
d1fbe40f3ee608fb0847ce58ca48c83d9b513706c5afd8a8ef2dbc1688050b63
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 24, 2026.
Transparency logRelease files / rt82display-0.6.1-py3-none-musllinux_1_2_x86_64.whl
| Download URL | rt82display-0.6.1-py3-none-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 153.7 kB |
| Tags | Linux musl 1.2+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
a3f01df4664113a082c2a70478f2db388512cbc7d9675e8c2aa75b0477633716
|
|
BLAKE2b-256 checksum How to use checksums |
04331fca244ba83a229c0f099d19bdf4427f8fd6f146396009306713745a5764
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 24, 2026.
Transparency logRelease files / rt82display-0.6.1-py3-none-musllinux_1_2_aarch64.whl
| Download URL | rt82display-0.6.1-py3-none-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 159.1 kB |
| Tags | Linux musl 1.2+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
746ef07b29bba1b7d71b5af8d7519d9e66bea0bc969f622f759cecf86d6a1c24
|
|
BLAKE2b-256 checksum How to use checksums |
a46ca838e057bbaf1152738f9a8c7b285cd524cba386d2e1a112787512656aa4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 24, 2026.
Transparency logRelease files / rt82display-0.6.1-py3-none-manylinux_2_28_x86_64.whl
| Download URL | rt82display-0.6.1-py3-none-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 152.7 kB |
| Tags | Linux glibc 2.28+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
e47ec11d2db4ecdc7eedbe3e8dbc86fe68aff6d45c151477154164d5af8e8f70
|
|
BLAKE2b-256 checksum How to use checksums |
b87eb95c99ca3da245fd9de70780ddc3d82628d56456f97d6b09e340985cc338
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 24, 2026.
Transparency logRelease files / rt82display-0.6.1-py3-none-manylinux_2_28_aarch64.whl
| Download URL | rt82display-0.6.1-py3-none-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 158.4 kB |
| Tags | Linux glibc 2.28+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
688d085965564b57805e749b4b033f481a777830bcfd70299a135b667f0634a0
|
|
BLAKE2b-256 checksum How to use checksums |
ee222a2b67703f60e5b7b700d7e6691107d58997d999bdfcfbfde49d28c10aec
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 24, 2026.
Transparency logRelease files / rt82display-0.6.1-py3-none-macosx_11_0_arm64.whl
| Download URL | rt82display-0.6.1-py3-none-macosx_11_0_arm64.whl |
|---|---|
| Size | 175.0 kB |
| Tags | Python 3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
e8f819be2f254b3982585e29540daac1e51ae0d84be8ee7a0032fe0e9e07f4b6
|
|
BLAKE2b-256 checksum How to use checksums |
66f7b5cdabe4a709846209dfe46276318bff6f86012486e2dea2e25f5fc0c736
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 24, 2026.
Transparency logRelease files / rt82display-0.6.1-py3-none-macosx_10_9_x86_64.whl
| Download URL | rt82display-0.6.1-py3-none-macosx_10_9_x86_64.whl |
|---|---|
| Size | 173.1 kB |
| Tags | Python 3 macOS 10.9+ x86-64 |
|
SHA-256 checksum How to use checksums |
9907de7e0b6fbdca1fe408f02c2bc0510b6330e90d4bde6e7a99c4e77764016a
|
|
BLAKE2b-256 checksum How to use checksums |
bb30741462745822d173a916d9ce2a8a6a8288784c22c6bae4eb4fe1c0dbfad9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 24, 2026.
Transparency log