RFHN TV Launcher is a fast, minimal home screen for Android TV and Google TV (Android 8.0 or newer), with prayer times, a live system card, Now Playing, a running-apps screen, a phone remote and a live globe screen saver. It was built on a Xiaomi Mi TV, which was also debloated.
Explore the launcher: Landing page · Bahasa Melayu · All features
Install it on your TV: Windows · macOS · Linux · with an AI agent
demo-540p.mp4
Recorded on the TV (2 minutes, no sound): the dock's name and glow following focus, Now Playing, the running-apps screen and its hold-OK menu, Settings with wallpapers previewed as you move, the prayer zone list, and moving an app in the dock.
globe-demo.mp4
The Globe screen saver (21 seconds, no sound): Settings → Screen saver → Start now, then the Earth turning as it is right now, with the Maghrib line passing Malaysia, Makkah and the qibla, the sun's glint on the sea, city lights, the day's earthquakes, map edits as people save them, and the ISS and Tiangong overhead.
![]() |
![]() |
| Home: big clock with the date and Hijri date, today's prayer times with a countdown, your most used apps this week, today's weather and air quality (MET Malaysia, APIMS and Copernicus) with rain, lightning and haze on the glass as the weather is now, a system card (CPU, RAM, storage, network, USB debugging), Now Playing with cover art and controls, and an app dock you arrange yourself. | All apps (Down from the dock): 5 per row (6 or 7 in Settings, the dock follows), most used first (all time), with a glass focus highlight that springs from tile to tile. Hold OK on any app to add it to the dock. |
![]() |
![]() |
| Running apps (Up from the top bar): what's running, how much memory each app uses and what it's doing. OK force-closes; hold OK to hide an app from the list. | Settings (the gear): prayer zone (found from the TV's location, or any of the 60 JAKIM zones), azan and prayer reminders, which cards show, 12/24-hour clock, wallpaper, the Most used week, apps per row, the screen saver, what the bell tells you, the phone remote, and more. Changes apply straight away. |
![]() |
![]() |
| Your dock, your order: hold OK on a dock app for Move (◀ ▶, then OK to place), Remove from dock or Open; hold OK on any app in the grid to add it. The phone remote can edit the dock too. | Hide apps you never close: hold OK on a running app and choose Hide from this list. Hidden apps wait under a "Hidden apps" row at the bottom, and Settings → Running apps brings them back. |
![]() |
![]() |
| Quick actions: hold OK on the Settings gear (or press Menu on it) to Start screen saver, set a Sleep timer (30 to 120 min), Sleep now, Restart or Shut down. Restart and Shut down ask first, with Cancel focused. Sleep and the timer work with USB debugging off; Restart and Shut down need it, and without it open the TV's own power menu. | Settings → Screen saver: switch it on or off, choose Prayer time, Live log, Globe or any other screen saver on the TV, and preview it with Start now. With Globe chosen, each of its layers has a switch. |
![]() |
![]() |
Net traffic (new in 1.15, optional): see where the TV's apps connect. Start capture in Settings → Net traffic and it lists each connection, newest first: "RadioStream → United States", the server's name (27223.live.streamtheworld.com), how often and how much. The routes also arc across the Globe screen saver, from your zone to each country. |
Connection details: OK on a connection shows its app and package, server name, address and port, protocol (HTTPS asking for h2, HTTP, QUIC, DNS…), the request where it's visible, country, when, and data. It works as a local VPN on the TV: no outside server, nothing decrypted, the last 30 minutes kept in memory only. The home screen's IP shows a VPN badge while it runs. |
![]() |
|
| Net traffic on the Globe: each connection arcs from your prayer zone to its country, a glowing dot hopping along the newest ones; older routes fade in steps over 30 minutes. The Globe's Internet connections layer (Settings → Screen saver) turns them on or off. | |
![]() |
![]() |
| Button Mapper (new in 1.16): Settings → Button Mapper → Add a button, press it on the remote, and give it a new single, double or long press. Each button shows its Android key code, e.g. Red (183). On this page every button works normally, so a mistake is always easy to undo; the phone remote's Settings tab can reset them all. | Actions: open an app, Home, Back, Recent apps, Android / Wi-Fi / Sound / App settings, TV Home settings, the power menu, Inputs, the screen saver, sleep, the quick menu, a screenshot, mute, volume up/down, media keys, the info overlay or Net traffic. All work with USB debugging off. The arrows and OK can't be remapped, and a button whose own press Android can't replay (Menu, colour keys) gets a double or long press once its single press has an action. |
![]() Wallpapers: move to preview, OK to set. Add your own from the phone remote: Settings → Wallpaper → Your photo. |
|
![]() |
![]() |
| Screen saver: Prayer time: a big clock with seconds, the date, the Hijri date and today's prayer times, the next one in amber. | Screen saver: Live log: the TV's log as it happens, errors in red and warnings in amber. All the screen savers are on black and keep moving so nothing burns in (more). |
![]() |
|
| Screen saver: Globe: the Earth as it sits in space right now, lit by the real sun, turning once every 2 minutes. On it: where it's Maghrib and Fajr right now, Makkah and the qibla from your zone, city lights, the sun's glint on the sea, snow and sea ice, the aurora, map edits as people save them, the day's earthquakes, and the ISS, Tiangong and Hubble where they are now. Clouds and moving wind can be switched on too. The remote's arrows turn it (more). | |
Also:
|
|
![]() |
![]() |
![]() |
![]() |
![]() |
|
| Phone remote in the phone's browser, no app to install: swipe to move, type into any app, open and manage apps, see what's playing, prayer times and the bell, send a message or a link to the TV, change Settings and the wallpaper, a sleep timer, and send files to the TV. See Phone remote. | ||
You need an Android TV or Google TV running Android 8.0 or newer, and a computer on the same Wi-Fi. The scripts build the launcher, install it over network ADB and make it the home screen; they work with any TV brand.
- Easiest: the setup app (docs/tui.md). One download for Windows, macOS, Linux or an Android phone (in Termux), nothing else to install. It finds your TV on the Wi-Fi, installs TV Home, cleans up the TV, tweaks animations, HDMI-CEC and surround sound, and can undo everything, explaining each step before it runs. It also shows what the TV is, how it's doing (memory, storage, CPU) and what it can play (video formats, Widevine level, Netflix).
- Step by step: Windows · macOS · Linux
- No build tools? Download the ready-made APK from Releases and install it with only adb: Windows · macOS · Linux
- Let an AI coding agent do it: Install with an AI agent
- Debloat the TV too, from scratch: give an AI agent PROMPT.md
| On the remote | Does |
|---|---|
| Left / Right on the dock | Move between your dock apps |
| Down from the dock | All apps, most used first |
| Up from the dock | Now Playing controls (when something plays), then the top bar |
| Up from the top bar | Running apps: OK force-closes, hold OK for options |
| Hold OK on an app | Move, add or remove dock apps, or open |
| The gear | Settings: wallpaper, prayer zone, azan, cards, screen saver, notifications, phone remote |
| Hold OK on the gear | Quick actions: start screen saver, sleep timer, sleep now, restart, shut down |
| Settings → Net traffic | Start or stop the connection monitor; OK on a connection for its details |
| Settings → Speed test | Download speed and latency from Cloudflare, Netflix or Unifi Malaysia, with the last 10 runs |
| Back / Home | Back to the dock |
Phone remote: open http://<TV IP>:8486 in your phone's browser on the same Wi-Fi and pair with the PIN shown on the TV. Settings → Phone remote shows the exact address. Five tabs:
| Tab | What's on it |
|---|---|
| Remote | Swipe for the D-pad, double-tap for OK, Back, Home, Play/Pause, volume; with USB debugging on, a keyboard for any app and a screenshot of the TV |
| TV | Now Playing, prayer times, system info, the bell's notifications, inputs, power and a sleep timer, and Send to TV: a message (a box on the TV until OK) or a link (YouTube and Netflix open in their apps) |
| Apps | Running apps (close or hide), the dock, all apps; hold an app for dock, force close or disable |
| Files | The TV's storage and USB drives: upload, download, open on the TV |
| Settings | The TV's Settings from the phone, including the wallpaper (or upload a photo and set it) and a searchable prayer zone list |
More: how every feature works.
Against the stock Android TV launcher on the Mi TV (2026-11-04, TV Home 1.16.0). Method and notes: development.md.
| TV Home 1.16.0 | Stock Android TV launcher | |
|---|---|---|
| Memory, idle / after navigating (PSS) | 87 / 115 MB | 90 / 178 MB |
| CPU, idle, 60 s | 0.18–0.27 s settled (0.71 s while the weather effects play) | 0.08 s |
| Cold start (process killed → first frame) | 0.76–0.81 s | 1.47–2.34 s |
| Back to home from an app (wait time) | 18–20 ms | 15–17 ms |
| Janky frames while navigating | 4.8 % (59/1240) | 29.4 % (109/371) |
| Frame time p50 / p90 / p99 | 9 / 12 / 38 ms | 7 / 28 / 150 ms |
| APK size | 0.53 MB | 12.7 MB |
This setup is meant for a TV on your own network, and it deliberately makes the TV quite open. Worth knowing before you run it:
- USB debugging stays on (port 5555): anyone on your Wi-Fi can connect with
adband control the TV. The launcher uses the same loopback connection for the remote's D-pad and keyboard inside apps, screenshots, sleep/restart and disabling apps. Turn it off in Developer options when you don't need those — the rest of the phone remote keeps working. - What the launcher is granted over ADB: "draw over other apps" (the pairing PIN and messages over any app), an accessibility service (Back and Home from the phone remote, and the remote's Input button),
DUMP(Now Playing without USB debugging),WRITE_SECURE_SETTINGS(choosing and switching the screen saver from TV Home's Settings),READ_LOGSbelow Android 13 (the Live log screen saver and Play Store updates in the bell; it can read the whole system log, which stays on the TV) and All files access (the Files tab and theWallpapersfolder). The accessibility service could see what's on screen, but doesn't ask to; it sends Back and Home, and filters one key, the Input button, letting every other key through untouched. - Keep accessibility enabled (optional, off by default): Settings → Misc can restore TV Home's accessibility service if firmware clears it, including while another app is open or after TV Home starts at boot. It uses the existing background service and
WRITE_SECURE_SETTINGS, preserves other accessibility services and backs off during repeated resets. While enabled it also undoes a manual disable in Android Settings: turn this option off in TV Home first. Restore tools switch it off before removing access. Emergency opt-out:adb shell settings put secure tvhome_keep_accessibility_enabled 0. It cannot work while TV Home is force-stopped or the permission has been revoked. - The Weather card fetches public data while TV Home is open (and keeps it for offline use): MET Malaysia's forecast and warnings for the place set in Settings (data.gov.my), the DOE's APIMS readings, and ECMWF's feels-like temperature and Copernicus air quality for the chosen station's spot (Open-Meteo). Like the Globe, the requests carry nothing about you beyond the TV's address and the
TvHome/1.0user agent. - The Globe screen saver fetches public data while it's on screen (and keeps it for offline use): NASA's Earth maps (once, from Wikimedia Commons), OpenStreetMap's edits, USGS's earthquakes, CelesTrak's satellite orbits, NOAA's aurora and wind, NASA's snow and ice, the cloud map, and Natural Earth's countries (once) with each country's flag from Flagpedia (the first time it pops up), each only if its layer is switched on. The requests carry nothing about you or the TV beyond what any web request does (its address and a
TvHome/1.0user agent). - Net traffic (optional, off until you start it) is a local VPN. Android asks before it runs, and a "VPN" badge shows on the home screen while it does. It forwards the TV's traffic on the TV itself (no outside VPN server) and reads only each connection's first outgoing bytes, for the server's name (the TLS hello's SNI or HTTP Host), a plain-HTTP request line or a plain-DNS name. Nothing is decrypted or stored beyond a 30-minute, in-memory list. Countries come from an offline IP list downloaded once, so no address is sent to a lookup service. The first start downloads its small engine (checked against fingerprints in the APK) and the country data (about 30 MB).
- The phone remote is plain HTTP on port 8486. Pairing needs a six-digit PIN shown on the TV (five tries, then a lockout that grows to 15 minutes), and the server refuses requests whose
Hostisn't an IP address and any cross-site request, so a web page can't drive the TV. Traffic isn't encrypted though: keep the TV on a trusted WPA2/WPA3 network, never forward the port from your router, and use Settings → Phone remote → Forget all phones if you lose a phone. - Releases are signed with the project's own key, so every GitHub Release updates the last one in place, settings kept. Building it yourself without that key signs with your computer's debug key instead: switching between a self-built and a downloaded APK needs one uninstall, which resets the launcher's settings. See development.md.
scripts/restore.sh undoes the grants and the home-screen change.
scripts/restore.sh # back to the TV's own launcher; re-enables anything this project disabled
scripts/restore.sh --remove-launcher # ...and uninstalls this launcher- How every feature works: prayer times and azan, weather and air quality (with data credits), bell, screen savers (and the Globe's data credits), Now Playing, running apps, Settings, Most used, System card, phone remote, dock, wallpapers (with photo credits)
- Debloating the original Mi TV: what was disabled and kept, speed tweaks, ad-blocking DNS
- Development: folder structure, rebuilding, benchmark method
- PROMPT.md: the prompt to repeat the whole setup on another TV with an AI agent






















