The Raspberry Pi HDMI-CEC bridge
Turn the TV on from your phone — even when your PC can't · updated July 8, 2026
Most TVs can be powered on and off over their HDMI cable using a protocol called HDMI-CEC — but most gaming PCs (almost all Windows rigs, and many graphics cards) can't speak it. The bridge is a tiny service you install on a Raspberry Pi plugged into a spare HDMI input on the TV. Your Couchside box quietly hands TV commands to the Pi, the Pi speaks CEC to the TV, and your phone's TV power, volume, and mute buttons just work.
How it works
When you press TV power in the app, the app talks to the service on your box like always. The service sees it has a cec_bridge configured and forwards the command to the Pi over your home network. The bridge runs the matching CEC command out its HDMI port, and the TV reacts exactly as if a remote had told it to. Supported commands: power on, power off (standby), volume up/down, and mute — and on TVs with an ARC soundbar or receiver, volume is forwarded there automatically.
Everything stays on your LAN. The bridge accepts commands only with a secret token generated at install time, and it should never be exposed to the internet.
What you need
- Any Raspberry Pi with an HDMI port. This is a great retirement job for an old one — even a decade-old Pi 2B is plenty (it only relays tiny commands). Older Pis have no Wi-Fi, so plan on Ethernet.
- A spare HDMI input on the TV. The Pi's HDMI is how CEC reaches the TV — it just occupies an input; you never have to switch to it.
- CEC enabled on the TV. It's off by default on many sets, hidden under a vendor name: Anynet+ (Samsung), Bravia Sync (Sony), SimpLink (LG), or plain HDMI-CEC (Vizio and others).
- The Pi on the same network as your Couchside box.
Set it up
1Flash Raspberry Pi OS Lite onto a microSD card. The official Raspberry Pi Imager does everything — pick Raspberry Pi OS Lite (choose the 32-bit build for a Pi 2B or older), and use the Imager's settings gear to enable SSH and set a username and password before you flash.
2Plug it in. HDMI into a spare input on the TV, Ethernet into your router or switch, then power. Give it a couple of minutes on first boot.
3Install the bridge. From any computer on your network, SSH into the Pi (ssh you@raspberrypi.local, using the name you set in the Imager) and run:
curl -fsSL https://couchside.tv/install-cec-bridge.sh | sudo bash
The installer sets up the CEC tools, installs the bridge as a service that starts on boot, and generates the secret token. At the end it prints the exact config block for the next step.
4Tell your box about it. Paste the printed cec_bridge block into the Couchside service's config on your gaming PC, then restart the service:
// Windows: %ProgramData%\Couchside\config.json
"cec_bridge": {
"host": "raspberrypi.local",
"port": 8799,
"token": "<the token the installer printed>"
}
The cec_bridge block is for the Windows service (0.2.0-win or newer) — the boxes that need it. A Linux box (SteamOS, Bazzite, Steam Deck, most mini PCs) drives the TV over its own HDMI-CEC or RS-232 directly, so it doesn't use the bridge and ignores the block; install and pair the Pi, and TV control just appears. If your box can already send CEC from its own HDMI port, you don't need the bridge at all.
5That's it. Open the Couchside app — TV power (and TV volume, if you select the TV as your volume target) now appears and works through the Pi. To sanity-check the bridge itself, run curl -s localhost:8799/api/ping on the Pi.
Good to know
- It's a relay, not a hub. If your box controls the TV over RS-232 (commercial panels like Newline), the service prefers that direct path; the bridge is for boxes with no TV path of their own.
- Security: bearer-token auth on every command, plain HTTP intended for your LAN only — don't port-forward it. The token lives root-owned on the Pi.
- Open source: the bridge is a single pure-Python file, MIT-licensed like the rest of the service tooling. Read every line in cec-bridge on GitHub.
- Uninstall:
sudo systemctl disable --now couchside-cec-bridge, thensudo rm /etc/systemd/system/couchside-cec-bridge.service,sudo systemctl daemon-reload, and delete/opt/couchside-cecand/etc/couchside-cec.
Questions?
Open an issue on GitHub or email support@couchside.tv.