Back to blog

tv-vibehack in 2026: How to Remove Ads From Your Android TV With ADB

Hello HaWkers, you turn on the TV to watch a movie and the first thing you see is a row of sponsored trailers, a banner for a streaming service you don't even subscribe to, and a manufacturer's preinstalled app asking for an update. That is the default home screen on a lot of Android TV and Google TV sets today. This week, an open source project called tv-vibehack passed 3.1k stars on GitHub promising exactly the opposite: "your TV, without the ads".

The question is: can you clean up a TV you bought without root, without cables and without flashing new firmware, and still undo everything if something goes wrong? In this article you will understand how tv-vibehack works under the hood, which TVs it supports, what the real risks are and, most importantly, what this project teaches anyone who builds digital products.

What Is tv-vibehack

tv-vibehack is an open source kit, under the MIT license, maintained by the user Gathin23 on GitHub. It does three things, in this order:

  1. Backs up the list of installed packages and the TV settings.
  2. Disables telemetry, ad services, sponsored content rows and preinstalled apps using the pm disable-user command. Nothing is uninstalled.
  3. Installs a native launcher of about 250 KB (the com.gathin.tvhome package) and sets it as the default home screen.

The launcher's look is inspired by Apple TV: pure black background, a dock with four favorite apps, a top shelf, an app grid and three translucent buttons for Inputs, Wi-Fi and Settings. It was designed to run on TVs with 1 GB of RAM, so it has no blur, no video, no network access and no background services.

A curious detail: the repository itself says the project was built with Claude Code, and the PROMPT.md file contains the prompt you paste into a coding assistant with terminal access to drive the installation on your TV. That is the "vibe" in the name.

Which TVs work

According to the project documentation, support breaks down like this:

  • Works: Android TV and Google TV sets from Xiaomi/Redmi, TCL, Hisense, Sony, OnePlus, Realme and the NVIDIA Shield. The examples folder lists about 25 tested models.
  • Partial: Amazon Fire TV only gets the debloat part, because Fire OS does not let a third-party launcher take over the Home button. Some TCL firmwares for the Chinese market (Android TV 9) reject launchers that are not signed by TCL itself.
  • Does not work: Samsung (Tizen) and LG (webOS), because they are not Android.

Why Your TV Home Screen Became a Storefront

Home screen ads are nothing new. In 2019, Google confirmed a pilot program that added a sponsored content row to some Android TV devices, and users of Sony TVs, Xiaomi's Mi Box 3 and the NVIDIA Shield reported the change after an update. Back then, Sony support even said the only way to hide the sponsored channel was to create a restricted profile.

Since then, the model has only become more entrenched. 2026 marketing guides describe Google TV as a selectable ad network inside Google Ads video campaigns, with units that show up in the home screen feed and play muted until the user focuses on them. In other words: the home screen stopped being just a menu and became ad inventory.

From a product perspective, the math makes sense for whoever is selling: TV hardware has thin margins, and the home screen is seen every day by millions of people. From the user's perspective, the cost shows up in loading time, memory usage on devices with 1 GB or 2 GB of RAM, and a constant feeling that the TV is not really yours.

That friction is where projects like tv-vibehack come from, and the fact that it passed 3k stars so quickly shows how big the frustration is.

How It Works Under the Hood: ADB Over Wi-Fi

The heart of the project is ADB (Android Debug Bridge), the same tool Android developers use to install apps and debug on their phones. On Android TVs, when you enable developer options and debugging, the TV starts listening for ADB connections on the local network. On the first connection, it shows a dialog asking you to authorize that computer.

The manual flow to enable it looks like this on most TVs:

  1. Open Settings, go to About and press OK seven times on "Build" to unlock developer options.
  2. Enable USB debugging (some TVs have a separate network or ADB debugging option).
  3. Keep your computer on the same Wi-Fi network as the TV.

With that, a basic ADB command is enough to talk to the TV. Here is an example using the official adb from the Android SDK:

# Connect to the TV over the local network (replace with your TV's IP)
adb connect 192.168.1.50:5555

# Confirm the TV showed up as an authorized device
adb devices

# List only system packages, which is where the bloatware lives
adb -s 192.168.1.50:5555 shell pm list packages -s

# Show which activity currently responds to the Home button
adb -s 192.168.1.50:5555 shell cmd package resolve-activity \
  -a android.intent.action.MAIN -c android.intent.category.HOME

An interesting point: tv-vibehack ships tools/tv.py, an ADB client written in pure Python. The reason, according to the README, is that recent versions of macOS can block Google's adb binary because of local network privacy. Writing its own client removes that dependency.

Reversible Debloat: Disabling Is Not Uninstalling

The most important technical decision in the project is using pm disable-user instead of pm uninstall. The difference looks small, but it changes everything:

  • pm uninstall --user 0 removes the app for the user. If you need it back, you may have to reinstall the APK manually or even factory reset the TV.
  • pm disable-user --user 0 just turns the package off. It stays on the system and comes back with a single pm enable.

tv-vibehack organizes this into debloat lists per TV model, applied with tools/disable.sh and undone with tools/restore.sh. You can reproduce the same idea with a simple script that records everything before touching anything:

#!/usr/bin/env bash
# Disable packages from a list and keep a log so you can undo it later
set -euo pipefail

TV="${TV_HOST:?defina TV_HOST com o IP da TV}:5555"
LISTA="$1"                      # file with one package name per line
LOG="desativados-$(date +%Y%m%d-%H%M).txt"

# Full backup of the package list before any change
adb -s "$TV" shell pm list packages > "backup-pacotes.txt"

while read -r pacote; do
  # Skip empty lines and comments
  [[ -z "$pacote" || "$pacote" == \#* ]] && continue

  if adb -s "$TV" shell pm disable-user --user 0 "$pacote" | grep -q "disabled"; then
    echo "$pacote" >> "$LOG"
    echo "desativado: $pacote"
  else
    echo "falhou (mantido como está): $pacote"
  fi
done < "$LISTA"

echo "Pronto. Para desfazer: ./restaurar.sh $LOG"

And the way back, which is what makes it safe to experiment:

#!/usr/bin/env bash
# Re-enable every package recorded in the log generated by the previous script
set -euo pipefail

TV="${TV_HOST:?defina TV_HOST com o IP da TV}:5555"

while read -r pacote; do
  adb -s "$TV" shell pm enable "$pacote" && echo "reativado: $pacote"
done < "$1"

This pattern (backup, logged change, rollback in one command) is the same one you would use in a database migration. The TV is just a small server in your living room.

The risk nobody tells you about: the home screen loop

The project README is honest about what can go wrong, and it is worth reading before you try. The most serious case: if you disable the original launcher without dealing with the initial setup wizard, some Google TV devices get stuck in a Home screen crash loop. On the MiTV-MOOR2 and MZTU0 models, the documented fix is to also disable the com.google.android.tungsten.setupwraith package, which is the first-run wizard and tries to bring the default launcher back. Users on forums report the same behavior on TCL TVs.

Other warnings listed by the project:

  • A Hisense unit dropped into Android recovery mode until someone picked "Try again".
  • On the Xiaomi Mi Box S, leaving USB debugging on can cut power to the USB ports. Turn it off when you are done.
  • Most lists disable the manufacturer's update service, so updates have to be re-enabled on purpose.
  • A Google TV 14 set lost Wi-Fi after installation because of the same setupwraith issue.

A practical rule: re-enable setupwraith before any factory reset, and never disable the original launcher before confirming the new one responds to the Home button.

The Launcher: How an App Becomes the Home Screen

For Android, the home screen is just an Activity that declares a specific intent filter. When you press Home on the remote, the system looks for whoever responds to the HOME category. On TVs, the LEANBACK_LAUNCHER category also matters, because that is what makes the app show up in the app list.

A minimal TV launcher manifest looks like this:

<!-- AndroidManifest.xml: declares the Activity as the TV home screen -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.exemplo.minhahome">

    <!-- Tells the system the app is built for TV and does not require a touchscreen -->
    <uses-feature android:name="android.software.leanback" android:required="true" />
    <uses-feature android:name="android.hardware.touchscreen" android:required="false" />

    <application android:label="Minha Home" android:banner="@drawable/banner">
        <activity
            android:name=".HomeActivity"
            android:exported="true"
            android:launchMode="singleTask">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <!-- HOME: responds to the remote's Home button -->
                <category android:name="android.intent.category.HOME" />
                <category android:name="android.intent.category.DEFAULT" />
                <!-- LEANBACK_LAUNCHER: shows up in the TV app grid -->
                <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

After installing the APK, you can set the new launcher as the default through ADB itself:

# Install the launcher and set it as the default Home activity
adb -s 192.168.1.50:5555 install minhahome.apk
adb -s 192.168.1.50:5555 shell cmd package set-home-activity \
  com.exemplo.minhahome/.HomeActivity

That is exactly why Fire TV is only partially supported: Fire OS ignores other launchers on the Home button. And that is why some TCL firmwares reject the APK: the manufacturer started requiring its own signature for apps with the HOME category.

tv-vibehack, by the way, does not publish prebuilt APKs. You build the launcher on your own machine (with JDK 17 and Android SDK platform 34) and install it straight onto the TV. That reduces the risk of someone distributing a tampered APK under the project's name.

What This Teaches Anyone Building Products

Even if you never touch your TV, tv-vibehack is a good case study in digital product.

1. Users notice when the interface works against them. Nobody installs a GitHub project and turns on developer mode on their TV for fun. The 3k+ stars and 370 forks on a brand new repository measure the accumulated frustration with the default home screen.

2. Reversibility sells trust. The project's core pitch is not "remove everything", it is "nothing is uninstalled, everything comes back". In any product, a well-built undo button reduces the fear of experimenting. The same goes for feature flags, migrations and user settings.

3. Lightweight is a feature. A 250 KB launcher with no background services runs better on a 1 GB RAM TV than the official launcher full of videos. Often the most requested feature is the absence of features.

4. AI became an installation interface. Instead of a graphical wizard, the project ships a prompt for a coding agent to drive the process, ask for the TV model and apply the right list. It is a new way to distribute technical tools to people who don't want to memorize commands. I wrote about another side of this relationship with assistants in the post about what a Florida case teaches about AI privacy.

This "let me turn off what I didn't ask for" movement also shows up in browsers, as I showed in the article about Firefox's button to disable AI and protect your privacy.

Is It Worth Doing on Your TV?

It depends on how much risk you accept. An honest checklist before you start:

  • Is your TV on the tested models list? If so, the chance of success is much higher, because the debloat list has already been validated by someone.
  • Are you comfortable with the terminal? The AI assistant path helps, but if something hangs, you will need to understand what is running.
  • Do you have a plan B? Learn how to enter recovery mode on your model before you start.
  • Do you use AirPlay or mirroring of DRM apps? The launcher does not offer native AirPlay, and apps like Netflix and Apple TV+ won't mirror.
  • Will you remember to re-enable updates? Security updates turned off for months is a real problem on a TV connected to your network.

If the answer is yes to almost everything, the payoff is a faster TV, without sponsored rows and with less telemetry. If not, a more conservative alternative is to just swap the default launcher for another one from the store, without disabling system packages.

Outlook: The Fight for the Home Screen Is Just Getting Started

The TV home screen has become one of the most contested ad spaces in the house, and there is no sign that manufacturers or platforms will back off. At the same time, tools like tv-vibehack show that as long as Android TV allows network ADB and third-party launchers, technical users will keep having a way out.

The risk going forward is the path TCL and Amazon have already taken: requiring manufacturer signatures for launchers or blocking changes to the Home button. If that spreads, projects like this will be limited to debloat. For anyone building products, the lesson stands: when users start installing tools to turn off parts of your product, the problem is not the user.

Let's go! 🦅

📚 Want to Keep Up With What Is Coming?

This article covered how tv-vibehack removes ads from Android TV with ADB and a lightweight launcher, but the ecosystem changes every week and not everything becomes an article here.

On X I share what I am testing, behind the scenes of my projects and the news that shows up before it turns into a post.

Follow Me There

👉 Follow @jeffbruchado on X

💡 Daily content about development, career and the tools I actually use

Comments (0)

This article has no comments yet 😢. Be the first! 🚀🦅

Add comments