YTPro: A WebView YouTube Client for Old Android Phones
Youtube client with older Android version support, background player, Google Gemini ✨ and many more features.
At a glance
- What is it?
- YTPro is an MIT-licensed Android app that injects JavaScript into a YouTube WebView to add ad blocking, downloads, background audio and Gemini summaries. It is a personal project with a narrow maintenance surface, and its own README calls it educational.
- Who is it for?
- YTPro fits users stuck on older Android versions who want background audio, downloads and ad blocking in one APK, and who accept that the app depends on YouTube's internal web responses. It does not fit anyone who needs a stable, audited client for daily use on a modern phone, because the README positions the project as educational and the release history shows fixes landing months apart.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 53 days ago.
- What is it written in?
- Mainly JavaScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
The Problem YTPro Targets: Old Android, No Background Audio
The repository description names the first constraint directly: a YouTube client with older Android version support. That is the whole reason the project exists in the form it does. The official YouTube app sets a minimum Android version that leaves older hardware behind, and the mobile web player does not give you background playback or downloads without a subscription. YTPro answers both by wrapping the web experience in a WebView and injecting JavaScript into it. The README's disclaimer states the intent plainly: this is an educational project aimed at showcasing javascript injection into a webview to enhance productivity. That sentence should be read as the project's own description of its scope, not as marketing hedging. The audience follows from it: people with devices that still run, who want Picture in Picture mode, a background audio player, gesture control for volume and brightness, and a custom Heart feature to save videos without logging into an account. The feature list reads like a checklist of everything the mobile web player refuses to do, which is a coherent design position rather than a random collection.
How the Injection Model Works and What It Depends On
The architecture implied by the README is a thin Android shell around a WebView, with JavaScript doing the real work. The feature list supports this reading: ads blocker, skip sponsors, hide shorts, shows number of dislikes, force zoom, up to 10x video speed, enable or disable media codecs. None of those are native Android capabilities. They are page-level changes, which means the app's behaviour is tied to the structure of YouTube's web pages and internal responses. The credits section confirms the dependency chain. Sponsor Block supplies sponsor skipping, return-youtube-dislike supplies the dislike count, and YouTube.js is the client library. The topics list adds node-ytdl-core and yt-dlp alongside ytdl-core, so downloads are handled by JavaScript download libraries rather than by an Android download manager. That combination explains the release history. v3.98 is titled Fixed Downloader and other minor bugs, and v3.95 is titled Fixed CSP issue and other minor bugs. A Content Security Policy fix is exactly the kind of breakage you get when your product is injected script running inside someone else's page. When YouTube changes headers or page structure, the injection stops working, and the fix has to ship as a new APK.
Gemini Summaries and the Prompt Variable Contract
The Gemini integration is the most documented feature in the README, which is unusual for a project of this shape. The README lists three available variables for a Gemini prompt: {url} for the URL of the video, {title} for the title, and {videoId} for the video ID. The feature description adds that prompts and models are customisable. So the data flow is: the app knows which video is open, substitutes those three values into a user-supplied prompt template, and sends the result to a Gemini model the user selects. The scope of the variables is worth noting. There is no {transcript} and no {captions} variable in the documented set, even though the app has a captions downloader. Anyone expecting the summarise videos feature to work by feeding a transcript into the model should check the actual prompt behaviour on their device, because the README does not state that a transcript is substituted. What the three variables do support is a prompt that asks the model about the video by reference, which puts the retrieval burden on the model side rather than on the app.
Getting an APK: Nightly Link, npm Package, No Build Instructions
The README does not document a build from source. The download section points at a nightly.link URL that resolves to a YTPRO.zip artifact produced by the project's Gradle workflow: https://nightly.link/prateek-chaubey/YTPro/workflows/gradle/main/YTPRO.zip. The Gradle badge at the top of the README links to .github/workflows/gradle.yml, so the build is CI-produced rather than something the README walks you through. There is also a jsDelivr badge for the npm package ytpro, which suggests the JavaScript side is published separately from the APK. The README does not explain how the npm package relates to the Android artifact, and I cannot confirm that relationship from the supplied material. What can be confirmed is the licence: MIT. That permits reuse and redistribution of the source, and it also means the project comes with no warranty. The disclaimer reinforces this: the project describes itself as educational. If you redistribute a build, the MIT terms travel with it, but nothing in the repository suggests the author has vetted the app for distribution outside personal use. Treat the licence as permission to read and reuse code, not as a statement about the app's fitness for any particular store or region.
Where YTPro Breaks: Injection Targets and the Downloader
The clearest failure mode is visible in the release notes rather than in the feature list. Two of the three listed releases are bug-fix releases, and one of them is a CSP fix. When YouTube tightens its Content Security Policy or renames a page element, the injected script loses its hook, and features stop silently. The ads blocker, the dislike count and skip sponsors are all in that category. The downloader is the other fragile surface. v3.98 exists because the downloader needed fixing, and the download path runs through ytdl-style libraries, which are themselves sensitive to changes in how YouTube serves media. The gap between v3.98 in May 2026 and v3.95 in November 2025 is roughly six months, so a break in between could sit unfixed for a long stretch. There is also a category question the README raises on its own. The topics list includes yt-views-bot, which is not a feature described in the README's feature list. That topic is worth flagging rather than ignoring, because a views bot and a viewer client imply different intents, and the README does not reconcile them. If you need a client that keeps working without intervention, YTPro is the wrong tool, because its correctness depends on a third party's page remaining stable.
How YTPro Differs from NewPipe and ReVanced
The obvious comparison is NewPipe, which extracts video data directly through its own parser rather than injecting script into a WebView. That is a real architectural difference. NewPipe's approach does not depend on a rendered YouTube page, so a page redesign does not break it, though an API or stream format change still can. YTPro's WebView approach inherits the page, which is why it can offer things a pure extractor finds awkward: gesture control over the rendered player, force zoom, and a Gemini prompt that receives the current URL and video ID straight from the open page. ReVanced takes a third path, patching the official YouTube APK rather than shipping a separate client. That keeps the official player and its codec handling, but it requires patching a specific APK version and is tied to that version's structure. YTPro sits between them: less coupled to YouTube's app internals than ReVanced, more coupled to YouTube's web page than NewPipe. The README's credits to Sponsor Block, return-youtube-dislike and YouTube.js show the project is assembling existing components rather than reimplementing extraction from scratch, which is a reasonable choice for a small project but means every upstream breakage lands on this repository.
Maintenance Cost and What the MIT Licence Does Not Cover
The maintenance picture from the supplied material is a single-maintainer project with infrequent releases and a sponsor link at the top of the README. The README's ToDo list has two items, Enhance Audio and Skip Silence, neither of which is a stability fix, which suggests the author is working on features rather than hardening. That is fine for a personal project and a problem for anyone treating it as infrastructure. The upgrade path is the nightly ZIP, which means the artifact is whatever the Gradle workflow last produced on main, not a tagged release. If you want the v3.98 state specifically, the nightly link will not give you that; it gives you current main. On licensing, MIT is permissive and short, and it disclaims warranty. It does not grant rights to YouTube's content or to the Gemini API, both of which are governed by their own terms. The README's disclaimer about educational purpose is a statement by the author, not a legal shield for users, and I am not in a position to give legal advice on how downloading or ad blocking interacts with YouTube's terms in any jurisdiction. Read the disclaimer, read the MIT text, and make your own call.
Editorial conclusion
YTPro fits users stuck on older Android versions who want background audio, downloads and ad blocking in one APK, and who accept that the app depends on YouTube's internal web responses. It does not fit anyone who needs a stable, audited client for daily use on a modern phone, because the README positions the project as educational and the release history shows fixes landing months apart. Before installing the nightly ZIP, read the disclaimer, check the Gemini prompt variables against your own model choice, and confirm that the downloader still works on your device, since the v3.98 release notes are specifically about a downloader fix.
Community notes