Universal USB IR Blaster — Web Interface
Control any TV, AC, fan, or IR device from your browser.
Features • Devices • Quick Start • Screenshots • How It Works • Credits
iRemote is a web-based universal IR blaster interface powered by a Python backend. Plug in a USB IR blaster, run the server, and control any infrared device from any browser — no WebUSB or special browser extensions required.
Works with cheap USB IR blasters you can find on AliExpress for $3–8:
- Tiqiaa (uses the ZaZa Remote app on mobile)
- Ocrustar / ElkSmart (uses the Smart IR Blaster app on mobile)
| Feature | Description |
|---|---|
| 🎮 Universal Remote | TV remote with multi-blast (Samsung + LG + Sony + Philips simultaneously) |
| 🏨 Hotel TV Toolkit | Pre-built macros for hotel/hospitality TV menus — Samsung, LG, Sony, Philips |
| 📚 IR Database Browser | Browse 300,000+ IR codes from Flipper-IRDB and irdb |
| 📂 File Import | Flipper Zero .ir, IRDB .csv, Pronto hex, raw pulse data, iRemote Android .json |
| 🔴 IR Learning | Capture signals from physical remotes (point and press) |
| ⚡ Batch Learn | Pre-define button names, learn them one-by-one — fast full remote capture |
| ❄️ AC / Fan Remotes | Temperature control, mode switching, fan speed |
| 📡 Protocol Sender | Manual NEC / Samsung32 / RC5 / Sony SIRC with hex address + command |
| 💾 Saved Remotes | Persist custom remotes, export/import as JSON |
| 🔧 Custom Macros | Build your own IR button sequences with delays |
| 📋 Full Logging | See every USB frame, protocol encode, and device response |
| Device | VID:PID | Interface | Buy |
|---|---|---|---|
| Tiqiaa | 10C4:8468 |
pyusb (bulk transfers) | AliExpress ~$5 |
| Ocrustar / ElkSmart | 045C:02AA + 10 others |
pyusb (libusb) | AliExpress ~$3 |
Both devices support transmit and receive (learn mode).
# 1. Clone
git clone https://github.com/deadboy18/iRemote.git
cd iRemote
# 2. Install dependencies
pip install -r requirements.txt
# 3. Run
python server.py
# 4. Open any browser
# http://localhost:7890For Ocrustar: install Zadig, select your device (SMART), and replace the driver with WinUSB.
For Tiqiaa: also needs WinUSB via Zadig (despite being HID — it uses bulk transfers internally).
# Allow non-root USB access
sudo cp 99-irblaster.rules /etc/udev/rules.d/
sudo udevadm control --reload-rulesExample udev rules (99-irblaster.rules)
# Tiqiaa
SUBSYSTEM=="usb", ATTR{idVendor}=="10c4", ATTR{idProduct}=="8468", MODE="0666"
# Ocrustar
SUBSYSTEM=="usb", ATTR{idVendor}=="045c", MODE="0666"
| Remote | Hotel TV | IR Database |
|---|---|---|
![]() |
![]() |
![]() |
| File Import | Learn Mode | Log |
|---|---|---|
![]() |
![]() |
![]() |
┌──────────────────┐ WebSocket/Socket.IO ┌──────────────────┐ USB ┌──────────┐
│ Browser (any) │ ◄──────────────────────────► │ Python Server │ ◄──────────► │ IR Blaster│
│ │ │ server.py │ │ │
│ • UI / Remote │ │ • pyusb │ │ Tiqiaa │
│ • IR encoders │ │ • Pulse compress │ │ or │
│ • IRDB browser │ │ • Huffman encode │ │ Ocrustar │
│ • File import │ │ • Learn mode │ │ │
└──────────────────┘ └──────────────────┘ └──────────┘
Frontend (index.html): All UI, IR protocol encoders (NEC, Samsung32, Sony SIRC, RC5), file parsers, IRDB GitHub API integration, hotel macros, saved remotes.
Backend (server.py): USB device management via pyusb, Ocrustar protocol engine (pulse compression, Huffman coding, LEB128 with ÷16 prescaling, byte mangling, FC/FA handshake), Tiqiaa HID-over-bulk protocol, learn/capture mode.
WebUSB and WebHID are Chrome-only and have significant limitations with these devices. The Python backend works with any browser (Firefox, Safari, mobile browsers) and gives full control over USB communication, including the complex Ocrustar encoding pipeline.
The UI is hosted on GitHub Pages so you can use it without downloading anything — just run python server.py locally and the hosted page connects to localhost:7890. You can also download index.html and open it directly as a file.
Built-in sequences for accessing hospitality TV service menus:
| Brand | Macros |
|---|---|
| Samsung | Hotel Menu, Hotel Menu (Alt), Smart Remote Unlock, Service Menu, Factory Service, PIN Reset |
| LG | Installer Menu (9876), Installer Menu (1105), Service Menu |
| Philips | Hotel Mode (BDS), Service Menu (SAM) |
| Sony | Service Menu |
| Universal | Power Off All (6 brands at once) |
You can also build and save custom macros with the macro builder.
| Format | Source | Extension |
|---|---|---|
| Flipper Zero IR | Flipper-IRDB | .ir |
| IRDB CSV | probonopd/irdb | .csv |
| iRemote Android JSON | iRemote Android app | .json |
| Pronto Hex | Various | .txt |
| Raw Pulse Data | Any | .txt |
flask>=3.0
flask-socketio>=5.3
pyusb>=1.2.1
libusb-package>=1.0.26
iRemote/
├── index.html # Frontend — full UI (single file, no build step)
├── server.py # Python backend — USB communication
├── requirements.txt # Python dependencies
├── screenshots/ # App screenshots
└── README.md
- Ocrustar-USB-IR — Ocrustar/ElkSmart reverse engineering & driver
- Tiqiaa-USB-IR-Windows — Tiqiaa reverse engineering & driver
- Flipper-IRDB — Flipper Zero IR database
- probonopd/irdb — Community IR database
MIT
Made by deadboy18
Protocol reverse engineering, USB drivers, and web interface





