harmony-650
With Logitech's Harmony service shut down, this turns the remote into a USB display and 54-button input device for a computer.
- Custom firmware
- Alpha
- Medium brick risk
- Reversible
This project hasn't been claimed by its maintainer yet, so its details come from the community. Is it yours? Claim it
First proof-of-concept release of custom firmware for the Logitech Harmony 650.
The remote becomes a USB display and 54-button input device: it enumerates as "Harmony 650 Status Monitor" (vendor HID, 1209:0001), reports every button, and shows whatever the computer draws on its 128×128 colour screen. tools/sysmon.py is a 7-page system monitor demo.
Files
fw.bin— the firmware image (0x1AB4 bytes), built from this tag with SDCC 4.6.0 + gputils 1.5.2. Identical to the image tested on the remote.fw.bin.sha256— checksum.
Flashing (see the README for the full steps, including backing up first):
- Build Concordance with the patches in
concordance-patches/. - Put the remote in Safe mode: hold OK while plugging in USB (battery out) or while inserting the battery.
concordance --write-arch14-fw=fw.bin(dry run), then add--commit.
Recovery: Safe mode, then flash the official firmware extracted with tools/hfw2bin.py harmony_650_firmware_0_4.hfw region2.bin. The bootloader is never written.
Tested on one remote (firmware 0.3/0.4, bootloader 0.2.0) with macOS. Not affiliated with Logitech. Use at your own risk.
Before you start
- How hard is it?
- EasyCopy a file or use a web page. No extra software.
- What you need
- A USB or MIDI cable
- Comfort with the command line
- A computer
- Can it break my device?
- Small chance of trouble, with a way to recover.
- Can I undo it?
- Yes. You can go back to the official software.
Did it work for you?
Did harmony-650 v0.1.0 work on your Logitech Harmony 650?
No reports yet for v0.1.0.
One-tap reports from owners. Bricked reports are checked before they count.
Compatibility
Devices: Logitech Harmony 650.
No compatibility information yet.
Getting started
From the project's README ("4. Use it"):
.venv/bin/python tools/sysmon.py # system monitor .venv/bin/python tools/displaytest.py # alignment pattern + speed benchmark .venv/bin/python tools/keyreader.py # print raw button events .venv/bin/python tools/packettest.py # check no display packets are lost
Monitor controls:
Button Action D-pad ◀ ▶ Change page: overview, CPU, network, colour bars, spectrum, buttons, about All Off (power) Screen backlight on/off (the display keeps running) Red Button backlight on/off No remote button quits the monitor (so it can't stop by accident); stop it with Ctrl-C. It reconnects by itself if the remote is unplugged.
From your own code:
from harmony import Remote from PIL import Image, ImageDraw r = Remote() img = Image.new('RGB', (128, 128)) ImageDraw.Draw(img).text((10, 10), 'hello', fill='white') r.show(img) for name, pressed in r.events(): print(name, pressed)
Risk and recovery
- Brick risk
- Medium
- Reversible
- Yes
- Requires opening the device
- No
From the project's README ("Safety and recovery"):
The bootloader (0x0000–0x8FFF) is never written: images are limited to the app area, and the bootloader only copies a new image after it is fully written and verified. If anything goes wrong:
Enter Safe mode: hold OK while inserting the battery, or while plugging in USB with the battery out. The bootloader stays in control and Concordance can talk to it (it reports firmware 0.2).
Flash the official firmware (you need Logitech's update file, harmony650firmware04.hfw, which is not included here):
tools/hfw2bin.py harmony650firmware04.hfw region2.bin concordance --write-arch14-fw=region2.bin --commitBack up your remote first (see below). Your config is not touched by firmware updates, but keep a copy anyway. Use at your own risk.
Releases
| Version | Name | Released |
|---|---|---|
| v0.1.0 | v0.1.0 — proof of conceptLatest | 27 October 2026 |
Credits, license and support
- License
- GPL-3.0