Skip to content

About

Community-driven Android TV 9 optimization and lightweight launcher for TCL televisions: tested device profiles, reversible debloating and measured benchmarks.

Topics

Resources

Contributing

Stars

18 stars

Watchers

0 watching

Forks

Repository files navigation

CleanMyTCL-Android9

Community-driven Android TV 9 optimization and lightweight launcher project for TCL televisions, with tested device profiles, reversible debloating and performance benchmarks.

🇧🇷 Leia em português

Fork of CleanYourTV (formerly tv-vibehack) by Gathin, MIT.
CleanYourTV targets any Android/Google TV. This fork narrows the scope to TCL televisions running Android TV 9, and adds what we needed to make one of them fast and stay reversible: per-model profiles, a measured launcher, test/benchmark scripts and recovery procedures.
See NOTICE.md for credits and docs/PROVENANCE.md for what came from where.


📸 Screenshots

Captured on the real device (TCL BeyondTV2, R851T02 V660). The weather location in the options screenshot is blurred for privacy; the rest are the original PNGs.

Stock Android TV Home Eddy TV Home (v0.5.4)
Stock Home Eddy TV Home
Sponsored and recommendation rows, network content fetched on every open, permanent animation at 60 fps Greeting by time of day, weather line, no sponsored row, no feed, 0 fps while idle
App grid (D-pad) Tile menu
App grid Tile menu
Rows of installed apps; in ultralight mode the grid jumps instead of scrolling Long-press a tile: pin it to the dock, open its info, hide it
On-TV options Idle cost of the launcher itself
Options Idle chart
Everything is set on the TV itself: user name, message, accent colour, motion, weather, hidden apps, reset Same TV, same session, apps closed: the stock Home costs 10.5% of one core and redraws at 3.8 fps; Eddy TV costs 0.0–0.9% and redraws at 0.03–0.17 fps. Full method and results.
Inputs menu (HDMI / Live TV) Ultralight mode
Inputs Ultralight
The HDMI inputs and Live TV, straight from the Home: keys 1–3 open the three HDMI inputs this unit lists, in the same order as the Inputs menu (the launcher maps keys 1–4 to the inputs the system reports; there is no fourth input entry here) Smooth motion off: the focus jumps instead of gliding, 1 frame drawn per move instead of 38

Aurora wallpaper (v0.5.6)

Eddy TV Home with the optional aurora wallpaper

Static 1920×1080 asset, decoded off the main thread at RGB_565; ultralight always uses black. The wallpaper keeps the key response and spring duration, but adds ~9 MB PSS and a measured jank cost during the spring — see the wallpaper A/B.

Every number in benchmarks/results/ is tagged with the exact launcher version and the conditions it was measured in. Charts are generated from the measured data by scripts/tcl-make-charts.py; no number is typed into a drawing tool.

Add your own screenshots: run scripts/tcl-screencap.sh <file.png> (or the PowerShell scripts\tcl-capture-screenshot.ps1). Both write real binary PNGs — see docs/SCREENSHOTS.md for why the obvious one-liner does not work — and check the result before committing.


News row (v0.6.0)

The news row on Home

Headlines from four Brazilian feeds sit between the greeting and the grid: photo, source, category, summary and time, rotating on their own when nobody is choosing. OK opens the article in a WebView inside the launcher, Back returns to Home, and Up/Down scroll the page.

It is off by default. Turn it on in Settings → News; sources are toggled one by one there, so a regional feed is not drowned by the big ones. Measured on the V660 with the same APK, only the preference changed: delayed frames 0.0-0.8% with it off and 0.0-2.5% with it on, PSS 28.3 → 34.4 MB and cold start 440 → 513 ms. Full method and the seven causes, v0.6.0 notes.

HDMI/AV cards (v0.5.9)

Cards on the grid Card settings
Cards on the grid Card settings
Every passthrough HDMI/AV port becomes a card with its own name and icon, and opens the input Rename it ("Xbox"), pick one of five icons and show or hide it, all from the remote

The passthrough inputs the TV reports sit in the same grid as the apps. Each one can be renamed, given an icon (live TV, game, movie, music, computer) and shown or hidden. Holding OK on a card does nothing, because there is no app behind it. Measured cost: neutral — five paired A/B runs against v0.5.8 gave cold start 447 → 446 ms, key response 18 ms on both sides and PSS 31 MB on both. Details.

Is my TV supported?

Only one model is validated so far. Do not assume your TCL works because it also runs Android 9: firmware, chipset and regional app sets differ. Check the compatibility matrix.

Device profile Chipset Firmware Status
TCL BeyondTV2 Realtek RTD2851 R851T02 V660 (Android 9, API 28, 32-bit, 2 GB) Partially validated (see matrix)
TCL L32S6500 (UnionTV) Realtek RTD284x R41KT01 V391 (Android 9, API 28, 32-bit, ~1.4 GB) Reported by a contributor (see matrix)

Principles

  1. Performance by default. Personalization by choice. Transparency about cost. New installs start in Performance: instant navigation, black background, no continuous graphics. Balanced and Visual are optional presets built from the same components. They may use more GPU/RAM and add measured jank; each one is reversible and states its measured cost, or says it has not been measured on this device. Stability, remote/HDMI/audio/app compatibility and recovery are never optional.
  2. Reversible. System apps are only pm disable-user'd, one at a time, with a smoke test and an undo command. Nothing is uninstalled from /system. No root, no firmware flashing.
  3. Evidence over claims. Speed numbers come with method, device and raw-data location (benchmarks/). Untested means untested; old measurements are never presented as results for a new build.
  4. The stock launcher is never disabled before the new Home is installed and verified, and the way back is documented (docs/RECOVERY.md).

Current code status (2026-10-21): main contains v0.6.0 / versionCode 32, with the news row off by default. The APK is published with the release and its base.apk hash is recorded in COMPATIBILITY.md and v0.6.0 change notes. Still pending on the device: the physical remote path for the HDMI cards, a real picture on the HDMI ports, standby, cold boot and the 8-hour soak. See compatibility status.

Experience presets

The same Home has three presets, not three launchers. Individual options remain adjustable; changing one marks the experience as Custom.

Preset Motion Background Known cost
Performance (default on a new install) Instant focus; no spring Black No wallpaper decode, no continuous effects
Balanced Smooth focus; current spring Black No wallpaper; uses the same spring as Visual
Visual Smooth focus; current spring Aurora wallpaper Measured on the TCL BeyondTV2 with v0.5.6: +9 MB PSS, delayed frames 0.19% → 6.89%; median key response stayed at 17 ms

Other backgrounds (solid colours, Earth at night, BlurHash blurs) are optional and reversible in the same menu. Only Aurora has a measured cost on this TV; the others are labelled not measured here, and the launcher says so before enabling them.

The v0.5.6 A/B and its method are in benchmarks/results/2026-10-19-v0.5.6-wallpaper.md. Those numbers belong to v0.5.6, not to future builds; they will be re-measured before being attributed to v0.5.7. Upgrades keep the existing motion/wallpaper values and show Custom until the viewer chooses a preset. Details: docs/EXPERIENCE-PRESETS.md.


Repository layout

Path What
launcher/ Lightweight Home (com.gathin.tvhome code from upstream + TCL features: Performance/Balanced/Visual presets, D-pad menus, HDMI shortcuts, voice button, on-TV settings, configurable greeting, 4/5/6 columns, family profiles, optional backgrounds: solid colours, static Aurora, Earth at night and BlurHash blurs)
scripts/ Windows PowerShell + Git Bash tools: backup, restore, safe disable, smoke test, reboot test, benchmarks
tools/ Upstream CleanYourTV tools (tv.py, disable.*, restore.*) — with the upstream Home guard ported in
devices/ Per-model profiles: debloat list, protected packages, what was tested
benchmarks/ Methodology and curated results
docs/ Setup on Windows 11, ADB, backup/restore, recovery, personalization, known issues, provenance
examples/ Upstream debloat lists from other brands (reference only)
private/ Your local data. Ignored by git, never published

Quick start (Windows 11)

Full guide: docs/GETTING-STARTED.md.

$env:TCL_TV_HOST = "<tv-ip>"                                              # your TV's IP
powershell -ExecutionPolicy Bypass -File scripts\tcl-backup.ps1           # 1. snapshot current state
bash scripts/tcl-smoke.sh                                                 # 2. check essential functions
bash scripts/tcl-try-disable.sh com.tcl.bi                                # 3. disable ONE package, test, auto-revert on failure
powershell -ExecutionPolicy Bypass -File scripts\tcl-restore.ps1          # dry-run of going back to the baseline

Relationship with upstream

This repo keeps CleanYourTV's history up to commit 9ef40c1 and branches from there. Upstream has moved on (v2.4.0, themes, Home-key service). We track it as the upstream remote and cherry-pick fixes after reviewing conflicts, behavior changes and measured performance impact (docs/BRANCHING.md). The 2026-10-20 reviews — the first round of ports and the second round, which audited upstream v2.4.0, the fork network, and prepared two contributions to send back — are in docs/UPSTREAM-AUDIT-2026-10-20.md and docs/UPSTREAM-AUDIT-2026-10-20-ROUND2.md. Improvements that are not TCL-specific should be offered back to CleanYourTV.


Disclaimer

Use at your own risk. Disabling the wrong package can break HDMI, the remote, voice or the Play Store. Always back up first and change one thing at a time. Not affiliated with TCL or Google.

License: MIT (LICENSE). Third-party components: NOTICE.md.

About

Community-driven Android TV 9 optimization and lightweight launcher for TCL televisions: tested device profiles, reversible debloating and measured benchmarks.

Topics

Resources

Contributing

Stars

18 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages