Marquee: an ad-free Android TV launcher

A calm, tvOS-style home screen for Android TV. A 1.4 MB app with no ads or tracking, with your Must or Letterboxd watchlist filtered to what you can stream, and scores from IMDb, Rotten Tomatoes and Letterboxd.

Version e38fcb9 · Updated October 29, 2026 · MIT license

DownloadZIP, source code · 1.6 MB

My Sony Bravia XR-65A90J came with Google TV: a slow home screen full of ads and sponsored rows, run by a launcher that alone takes up 267 MB of the TV's storage. Over a week I redesigned the whole experience. First I stripped the TV of what it didn't need, then I designed and built a launcher of my own. Marquee is the result: a 1.4 MB app, no ads, no trackers, no telemetry, and only what I actually watch, from the platforms I pay for. It started life as Bravia Home; nothing in it is specific to Sony, so it now has a name of its own.

What it does

  • Apps: seven pinned apps and an All apps tile in a 4×2 grid, under a billboard that rotates through the best-rated titles on your watchlist that you can stream right now, each with its scores, a short description and an Open in… button. With fewer than three matches, it shows what's trending on your platforms instead.
  • Watching: continue watching, from the TV's own Watch Next list, as large posters with a progress bar and the minutes left.
  • Watchlist: every title on your Must or Letterboxd watchlist that's streaming on one of your platforms, in one grid of posters, eight per row. Focus a poster and the billboard shows its details.
  • Match days: when your football team plays, the game leads the billboard with its kickoff time, and the button opens the app that's actually showing it.
  • Screensaver: when the TV sits idle, your watchlist becomes ambient art: backdrops of the titles still waiting for you drift slowly across the screen, each with its title, platform and a short meta line.
  • The details: time, date and weather in the top bar, and wallpapers that change every 15 minutes.

What I designed

I wanted the calm of tvOS with the content smarts of Google TV, and every decision came from using it on the sofa:

  • One page, three views. A frosted switch (Apps, Watching, Watchlist) that the remote moves through; pressing down on a tab always opens that tab's section. It began with four views, and folding two of them into the Watchlist grid put the point of the launcher on a single screen.
  • Crisp on a 4K panel. Posters are fetched at the size closest to the card and scaled down once with filtering, and platform logos sit next to the title at a size you can read from the sofa.
  • Clean posters. True 2:3 posters with nothing on top. The grid fades out at its top and bottom edges instead of cutting a row in half, and art that only comes in landscape is letterboxed, never cropped.
  • A focus that fits. On a poster, the highlight is a clean ring that floats an even distance outside the card and follows its corners. App tiles get a frosted glass that hugs the tile.
  • A billboard that holds still. The title has a fixed two-line slot and the description always takes two lines, so the button and the pagination dots never move as titles rotate. The dots sit on the screen's centre line, and the text starts at the same spot on all three views.
  • Scores inline. IMDb, the Tomatometer and Letterboxd sit as small chips right after the rating, year, length and genre, never cut off.
  • A screensaver that stays quiet. The clock and date sit top right; bottom left, the title with its platform's badge and one line: film or series, rating, year, length and genre. No description, no scores. Each backdrop drifts with a slow zoom and a sideways pan for 16 seconds before crossfading to the next, and the text shifts a few pixels with every slide so nothing burns into an OLED panel.
  • One type style, on a grid. Every title uses Inter in normal case with tight spacing, and the margins line the app tiles up with the text on the left and the switch on the right. Over the poster grid, the billboard trims itself to one title line and two lines of description so nothing collides.

How it works

  • Your watchlist. With a Must username, Marquee reads everything you've marked as want to watch, films and series; mark something as watched in Must and it leaves the TV within the hour. Without one, it reads your public Letterboxd watchlist (films only) and your watched log, so a film you've seen never comes back.
  • Matched to your platforms. TMDB finds each title by type and year, so same-named titles don't mix, and supplies posters and descriptions in your language. When a title streams on several of your platforms, the card goes to the one with the fewest matches so far, so every subscription gets its share.
  • Only what you can watch. TMDB's availability data can lag, so every match is re-checked against JustWatch's live data for your country. No confirmed offer on one of your platforms, no card. Plex's free-with-ads titles count; Prime add-on channels that need their own subscription don't.
  • Scores. IMDb ratings come from OMDb. The Tomatometer is read from each title's Rotten Tomatoes page and, for series, averaged across every season. Films add their Letterboxd average. The billboard ranks titles by the average of the three.
  • Match days. Fixtures come from TheSportsDB. The card turns live at kickoff and leaves after the match. Its button opens the app that holds the rights in your country, and for La Liga, where rights change every matchday, it reads the real channel for each match from futbolenlatele.com.
  • Continue watching. Marquee remembers when it first saw each item in Watch Next and drops it a week later, even if an app keeps bumping it to stay visible.
  • Straight to the title. When JustWatch confirms an offer, it comes with the title's own link, and Marquee hands each app the form it actually accepts, checked against each app's intent filters on the TV: Prime Video, HBO Max, Apple TV and Plex take the link as is, while Movistar Plus+ and SkyShowtime get it rewritten into their own private formats. Netflix only lets partner launchers open a title, so Netflix cards open the app at its home; in Watching, Netflix's own resume links still play the episode. Without a link, Prime Video and HBO Max open a search for the title, and any other app opens fresh at its home, as do titles redirected to another app, like Apple TV+ to Movistar Plus+.
  • Light and sturdy. A native Android app written in Java. A background lookup that fails is contained instead of crashing the home screen, and nothing leaves the TV except the lookups above, made with your own free keys.

Install it

You'll need JDK 17, the Android SDK (platform 34) and a TV with ADB debugging switched on. The download is the source code, a 1.6 MB ZIP; the app you build from it is 1.4 MB as a signed release or 3 MB as a debug build. Nothing on the TV is deleted, so everything can be undone.

  1. Your accounts, region and team. Unzip the download and copy launcher/secrets.properties.example to launcher/secrets.properties. Fill in your MUST_USER (or LETTERBOXD_USER), WATCH_REGION (the country whose catalogs count, ES by default), CONTENT_LANG (en-US by default), the free TMDB and OMDb keys, and your teams' TheSportsDB ids in SPORTS_TEAM_IDS. Leave anything empty and that feature switches off. The file is never committed, so your keys stay yours.
  2. Your platforms. In launcher/app/src/main/res/values/config.xml, set the apps pinned to the home row (dock_apps), the platforms behind the trending fallback (rec_apps), redirects such as Apple TV+ titles opening in Movistar Plus+ (launch_redirects), and which app shows each competition in your country (sports_league_apps, plus sports_tv_guide_teams and sports_channel_apps for La Liga's per-match guide). The defaults are Spain's.
  3. Build and install. In launcher, run ./gradlew assembleDebug. For the smaller signed build, create a key with keytool -genkeypair -keystore release.keystore -alias tvhome, put its password in RELEASE_STORE_PASSWORD and run ./gradlew assembleRelease. Then connect with adb connect <tv-ip>:5555, install the APK with adb install -r, grant android.permission.READ_TV_LISTINGS, make Marquee the home screen with cmd package set-home-activity and switch off the stock launcher with pm disable-user.

The README in the download has every command in full.

Changelog

29 October: straight to the title, and a screensaver from your watchlist
  • Cards open the title itself on every platform: Movistar Plus+ and SkyShowtime, which used to land on the app's home, now get links rewritten into their own formats.
  • Netflix only lets partner launchers open titles, so Netflix cards now open the app cleanly at its home instead of stalling on a sign-in screen. Watching still resumes Netflix titles.
  • An app opened without a title link starts at its home, instead of showing whatever page an earlier link left open.
  • The screensaver is now your watchlist as ambient art: drifting backdrops with the title, its platform and a short meta line, and the clock top right. With nothing cached yet, it falls back to the landscape gallery.
  • Fixed the Open button and pagination dots staying on screen over Watching and Watchlist when the TV is used with touch input, such as a remote's touchpad.
28 October: a steadier billboard (version 2.3)
  • The billboard on Apps holds still as it rotates: the title keeps a two-line slot and the description always takes two lines, so the button and dots no longer bob up and down.
  • The Open button sits on the left, the pagination dots on the screen's centre line, and the whole block is centred between the clock and the app tiles.
  • The billboard text starts at the same spot on Apps, Watching and Watchlist, so nothing jumps when you switch.
  • Watchlist rows scroll to a fixed centre line, and the focus ring stays on its poster while scrolling.
  • If the TV loses its connection during a watchlist sync, Marquee keeps the previous matches instead of emptying the Watchlist for hours.
24 October: Marquee
  • Renamed from Bravia Home to Marquee: no hardware brand in the name, the app label or the docs.
  • Everything personal now lives in one file, including your football teams, which used to sit in the app's config.
  • Titles and descriptions come in the language you choose (CONTENT_LANG, English by default).
  • The README is now a three-step quickstart.
22 October: the Watchlist grid
  • What's On Now and For You make way for one Watchlist grid: every streamable title on your watchlist, eight posters per row, with the whole list scanned.
  • Must becomes the watchlist source, with series as well as films. Letterboxd stays as the films-only fallback, and its watched log now keeps films you've seen out.
  • Sharper posters on a 4K panel, and a grid that fades at its edges instead of cutting a row in half.
  • A new focus ring for posters, which now keep their edges when focused.
  • The match-day card refreshes every 15 minutes, so it turns live at kickoff and leaves after the match.
  • An audit build: no lint errors, background crashes contained, and a 1.4 MB signed release build instead of the 3.1 MB debug build.
  • The README rewritten to match.
20 October: Plex, HBO Max and match days
  • Plex joins the platforms, free-with-ads titles included, and HBO Max finally gets its share of matches. The whole watchlist is scanned instead of the first 40 films.
  • Match days: your teams' games lead the billboard with kickoff time and event art.
  • The right broadcaster for each competition in your country, then for each La Liga match, read from futbolenlatele.com.
  • Pressing down on a tab now opens that tab's section.
  • Cleaner Watching backdrops, without promo overlays like TOP 10 badges.
  • Fixed a crash loop on Android 12, which lacks a date function the sports card used.
19 October, evening: the first release
  • Rebuilt as Bravia Home and published here: one page with Apps, Watching, What's On Now and For You.
  • The billboard puts your own watchlist first, best-rated first, and falls back to trending.
  • Continue watching goes poster-first, with progress bars and the minutes left, and drops anything a week after it first appears.
  • Your country is a setting (WATCH_REGION).
  • Every recommendation is verified against JustWatch's live data, and cards open the title's own page.
19 October: the design takes shape
  • A Trending this week billboard with scores and an Open in… button, rotating through titles.
  • A frosted segmented switch for Apps, Watching and For You.
  • The All apps tile moves into the grid, which becomes 4×2.
  • For You in genre rows, then with portrait posters instead of wide thumbnails.
  • Platform logos next to the title, scores right after the meta line, and titles in normal case instead of spaced capitals.
  • Time, date and weather on one line in the top bar.
18 October: clearing the TV
  • Stripped the TV of bloatware over ADB, then switched off the Google TV launcher, which kept serving sponsored rows.
  • Started from the open-source tv-vibehack launcher: a single row of apps under a big clock.
  • First IMDb and Rotten Tomatoes scores on recommendations, and a sports filter so only my teams' games get through.
  • A 4×2 app grid, tabs for Apps, Continue Watching and Recommended, and a detail page for each title.

License

Free to use and change under the MIT license. Marquee started from tv-vibehack by Gathin23 (MIT), whose license is included in the download. It uses the TMDB API but isn't endorsed or certified by TMDB. Streaming availability data comes from JustWatch.

Frequently asked questions

Why is it called Marquee now?

It started as Bravia Home, built for my Sony Bravia. Nothing in it is specific to Sony, so on 24 October it got a name of its own. Same launcher, same features.

Does it work on other TVs?

It was designed and tested on a Sony Bravia XR-65A90J, but it's a standard launcher for Android TV 8 or newer, so other Android TV and Google TV sets should run it. The download also includes clean-up lists for several other TVs.

Does it work outside Spain?

Yes. Set WATCH_REGION to your country and CONTENT_LANG to your language. The sports broadcasters in config.xml default to Spain's, so map yours there.

Do I need API keys?

Only for the extras. Without the free TMDB and OMDb keys and a watchlist username, the app grid and Watching still work; scores and the Watchlist simply switch off.

Debug or release build?

Release, for everyday use: 1.4 MB, minified and signed with your own key. The debug build (3 MB) needs no key, so it's the quickest way to try it. The two are signed differently, so to switch from one to the other, run adb uninstall com.gathin.tvhome first.

Can I go back to the original home screen?

Yes. Nothing is deleted: re-enable the stock launcher with pm enable or run tools/restore.sh.

Prime Video says a title is unavailable. Why?

Check your Amazon account's country. Prime decides availability by the account's marketplace, not where you are, so an account registered in another country can refuse titles that are included with Prime in your WATCH_REGION.

Is there a ready-made APK?

Not yet: you build it from the source with your own keys, so they stay yours.

The file

Format
ZIP, source code
Size
1.6 MB
Version
e38fcb9
Updated
October 29, 2026
License
MIT
Download1.6 MB