Skip to content

Releases: xantipater/GTV2STREAM

GTV2STREAM v1.2.0

Choose a tag to compare

@xantipater xantipater released this 10 Sep 22:38

GTV2STREAM is a small, independent Android TV companion that redirects a selected Google TV launcher recommendation to your chosen app. Film and series titles open in Nuvio, Stremio or WuPlay. YouTube cards open as a title search in SmartTube or TizenTube Cobalt. It does not host, stream, or provide media.

I have been working hard to bring the features the community asked for, and v1.2 is the biggest update so far. Details below, including exactly what changed under the hood, because a couple of these were not the simple fixes they looked like.

Download: GTV2STREAM-v1.2.0.apk is attached to this release. Install over your existing version and your settings and TMDB key are kept:

adb install -r GTV2STREAM-v1.2.0.apk

Full instructions, including the new in-app update route, are in UPDATE.md.


TizenTube Cobalt is now supported for YouTube links

Selectable in Settings as your YouTube target, alongside SmartTube. It has been an absolute pig to get working, and the reason is worth writing down.

The launcher does not hand you a YouTube click in a form you can forward. Cobalt has no reliable external VIEW contract either, so the redirect goes through android.media.action.MEDIA_PLAY_FROM_SEARCH, addressed at Cobalt's explicit component. The subtlety is the flags: NEW_TASK|CLEAR_TASK (what you would normally use for a fresh launch) loses the query on a warm Cobalt, because the app only honours the search on its live instance. NEW_TASK|MULTIPLE_TASK|EXCLUDE_FROM_RECENTS delivers the search to that live instance, verified both warm and cold.

If Cobalt is not installed, the redirect fails visibly with a status message. It will not quietly open SmartTube instead, because you picked Cobalt.

One thing that is inherent and not a bug: clicking a YouTube card may show a brief flash of the stock YouTube app. The launcher starts it itself with a package-targeted intent that cannot be intercepted, and GTV2STREAM diverts from there.

Stress tested on my TCL where it is now working well. Your mileage may vary by TV build, and I would like to hear about it if it does.

WuPlay support

A third choice for TV and movies, selectable in the settings menu. WuPlay accepts wuplay://movie/<imdb-id> and wuplay://series/<imdb-id>, verified against WuPlay 0.9.0-beta. Nuvio is still the default, and Stremio is unchanged.

Whitelist toggles for 26 streaming providers

Netflix, Prime Video, Disney+, ITVX, BBC iPlayer, Hulu, Max, HBO Max, Paramount+, Apple TV+, YouTube, Google TV, Peacock, Channel 4, My5, Starz, Showtime, AMC+, Discovery+, MGM+, Britbox, Shudder, Tubi, Pluto TV, Freevee and Crunchyroll.

  • Every provider is off by default, so nothing changes on an existing install unless you ask for it.
  • A whitelisted provider keeps normal Google TV behaviour. Its cards skip GTV2STREAM as if the app were not installed.
  • Provider identity is read from the card's provider edge or watch action, never from the title text, and aliases collapse to one identity: "disney plus" and "Disney+" are the same switch. A toggle can never be matched against a film whose name happens to look like a brand.
  • The summary line in Settings always shows what is currently being skipped.

Update in place, and in-app update prompts

GTV2STREAM now checks for a newer stable release and can update itself without a PC.

  • The check runs at most once every 24 hours, ignores drafts and prereleases, and only offers a release newer than your installed version.
  • Opening the app shows a prompt once per release: Download & install, Open release page, or Later. Later silences the prompt for that version while leaving the notice and buttons on the Settings screen, so it never becomes a nag.
  • The download is verified before the installer sees it: file size is checked against the release metadata and the file has to be a valid APK archive. A file that fails either check is discarded, not installed.
  • Android's Install unknown apps permission is checked before the download rather than after it, and if it is off you get a button that opens that exact setting page for GTV2STREAM. Previously you would have downloaded the whole APK and only then been told to go and find a toggle.
  • Nothing is ever installed silently. The Android system installer always asks, and a cancelled or failed install leaves your version untouched.

Two limits, stated plainly: the prompt only appears when you open the app, and the app's only screen is Settings, so there is no background updater and no notification. And an in-place update needs the release to be signed with the same key as your installed build, which it is if you installed from a release page APK. If you built GTV2STREAM yourself with your own key, Android will refuse the update and you will need to reinstall.

Fixed: titles over 7 words would not be redirected

YouTube card titles now accept up to 15 words. Video titles genuinely run long ("Gemini 3.8 Flash Is HERE – Testing Google's BEST Model Yet!"), and a YouTube card is only ever routed to a search rather than to TMDB, so the longer bound is safe there.

This one turned out to be the root cause of the Disney and Paramount+ problem too, so see below.

Fixed: some Disney and Paramount+ titles would fail to redivert

Reported as the Disney film Shang-Chi, and it took a proper investigation to pin down.

Shang-Chi and the Legend of the Ten Rings is an eight-word title. A card payload that named a recognised provider edge or watch action was capped at 7 words, so the eight-word title was rejected outright in every shape a real card uses: Title. Watch on Disney+., Title, Disney+, Disney+. Title., Title • Disney+, Title. Available on Disney+. Only one internal shape worked, because that path alone allowed 10 words, which is exactly why it looked like a Disney-specific bug and why an earlier fixture passed while the card on the TV did not.

Card payloads that name a provider or a watch action now use the 15-word bound that the entity-detail row and the YouTube path already used. Payloads with no card evidence at all, such as node text and ambient panel values, keep the strict 7-word bound, so a bare long title with no provider attached is still refused. The sentence-case, internal-period, advertisement and rating-metadata guards are untouched and still do the actual prose rejection. All the real card shapes are now covered by regression fixtures, along with Netflix and Prime controls and negatives for prose and for titles over 15 words.

Improved parsing, and faster clicks

  • The title is now taken from the card you actually focused, remembered when it is seen and reused when the click arrives, instead of relying on whatever the ambient panel happened to hold. On rows like "Top picks for you" the launcher exposes position labels rather than card text, which is what made clicks land with no title at all.
  • Launcher grid position labels ("Column 3") can no longer be searched as a title.
  • A poll that came back empty can no longer discard a title that was just captured, which was causing missed diverts.
  • Fewer rejected payloads means fewer retries, which is where the click-to-divert latency improvement comes from.

Verified, and not yet verified

Verified on my TCL Smart TV Pro: the Cobalt divert against a real Google TV YouTube card, the WuPlay deep-link contract, the provider whitelist toggles, and a 423-assertion regression suite. The signed release APK itself was installed over the previous build and the accessibility service reconnected.

Not yet verified on a TV: the update prompt and the one-tap install have not been exercised end to end, because no published release has been newer than the build on my TV until this one. The Disney+ fix is reproduced and pinned by fixtures, but I have not yet watched a Shang-Chi card redirect interactively.

This is a one person project and I only have one TV to test with. I will do my best to fix issues promptly.

PS: Firestick

Firestick is on the cards. I am starting a fork at the weekend and will keep you updated on progress here as FTV2STREAM. v1 will focus on stable Nuvio directs and fan out from there. No ETA as yet, because I do not know how much of the work done on GTV2STREAM will be transferable.


Issues and feedback

Please open an issue if something does not work. The most useful reports say what you clicked, what you expected, and what actually happened. If the problem is a redirect that went to the wrong place, tell me the exact title too, because that is what turns a report into a regression fixture.

v1.1.0

Choose a tag to compare

@xantipater xantipater released this 06 Sep 01:04

GTV2STREAM redirects a selected Google TV launcher recommendation to your chosen app: film and series titles open in Nuvio or Stremio, YouTube cards open as a title search in SmartTube.

What's new in v1.1.0

  • Stremio joins Nuvio as a selectable TV & movies target
  • SmartTube redirects for YouTube recommendations — no TMDB key needed
  • Faster redirects: warm launches (no more process kills), staged title retry, and a 24-hour in-memory match cache so repeat selections skip the network
  • New branded app icon, TV banner, and optional redirect confirmation badge
  • Auto-start block detection (TCL and similar) with a one-tap fix in-app
  • Hardened title parsing: more provider name variants and action suffixes, expanded launcher-UI vocabulary so buttons never misfire as titles
  • In-app setup help and ADB-only installation guides

Install (ADB required)

See INSTALL_ADB.md for the complete Windows guide, then:

adb install -r GTV2STREAM-v1.1.0.apk

Notes

  • Bring your own key: create a free TMDB v3 API key and enter it in the app. The key stays on your device and is only sent to TMDB. No accounts, analytics, telemetry, or backend.
  • If your target app isn't installed, GTV2STREAM tells you instead of launching blindly.

GTV2STREAM v1.0.0

Choose a tag to compare

@xantipater xantipater released this 05 Sep 00:26

First release.

Install: sideload the APK (Downloader app or USB stick), open GTV2STREAM, add your free TMDB v3 API key, enable the accessibility service, and turn on Nuvio's Remember last profile if you use multiple profiles. Full guide: INSTALL.md

What it does: clicking a recommendation card on the Google TV home screen opens that exact title fresh in Nuvio (movies via nuvio://movie/<imdb>, shows via nuvio://detail/tv/<imdb>). Ads, sponsored cards, and YouTube items are ignored.

Requires: Android 8.0+ (Oreo, API 26), Nuvio installed, TMDB v3 key.

SHA-256: a90782a0528a3edde83b7859aa89b5aa3ed86bdd7640960d9275f82dbecdd54a