# YTDLnis: an Android front end for yt-dlp, and what it actually manages

> YTDLnis wraps yt-dlp in a Material You Android app with playlists, scheduling, cookies and a plugin system. It is a good fit if you want yt-dlp on a phone without a terminal, and the wrong tool if you need a desktop or a server.

**deniscerri/ytdlnis** — Full-featured audio/video downloader for Android using yt-dlp

- Repository: https://github.com/deniscerri/ytdlnis
- Website: https://ytdlnis.org
- Stars: 10,284 · Forks: 471
- Language: Kotlin
- License: GPL-3.0
- Published: 2026-09-21 · Updated: 2026-09-21 · Language: en
- Canonical page: https://hysenlabs.com/projects/deniscerri-ytdlnis

## The gap YTDLnis fills: yt-dlp on a phone without a terminal

yt-dlp is a command line program. Its support list covers more than 1000 websites, and most of its behaviour is controlled by flags that assume a shell, a filesystem you can write to freely, and a desktop operating system. On Android none of those assumptions hold well. You can run yt-dlp in Termux, but then you are managing Python packages, storage permissions and background execution by hand.

YTDLnis is the other approach. It is a Kotlin Android application that ships yt-dlp as a component it orchestrates, and puts the common operations behind a Material You interface: paste or share a link, pick a format, choose a download path, start. The README describes it as a free and open source video/audio downloader using yt-dlp for Android 7.0 and above. The intended user is someone who downloads media on a phone and does not want to type flags, not someone automating a pipeline.

That distinction matters when you evaluate it. The project does not try to expose every yt-dlp flag as a form field. It exposes a curated set (format selection, subtitles, metadata, chapters, SponsorBlock, cuts) and then gives you an escape hatch: custom commands and templates, plus a built-in terminal for yt-dlp itself. The escape hatch is where the power users live, and the README is explicit that suggestions for missing yt-dlp features are welcome.

## How the app is put together: MVVM, WorkManager and swappable plugins

The README states the architecture plainly: MVVM with WorkManager. For an Android downloader that is a meaningful choice rather than a label. WorkManager is the system scheduler for deferrable background work, so queueing downloads, running several at once and scheduling items by date and time map onto a mechanism Android already understands, instead of a foreground service the app has to keep alive itself.

The more interesting design decision is the plugin layer. YTDLnis orchestrates plugins so users can upgrade and downgrade components such as Python, JS runtimes (NodeJS, Deno), FFmpeg and Aria2c. Those are the moving parts that break downloads in practice: yt-dlp needs Python, some extractors need a JavaScript runtime, merging separate audio and video streams needs FFmpeg, and parallel downloading can go through Aria2c. The README points to the ytdlnis-packages repository as the source for these packages, or you can install them through the updating section in the application.

This is the part worth understanding before you install. The app is not a single self-contained binary. It is an orchestrator sitting on top of components that get updated separately, which means a download failure can come from the app, from the yt-dlp build, from a missing JS runtime, or from FFmpeg. The README's answer to that is logging: downloads can be logged, failed and cancelled downloads can be re-downloaded, and there is an incognito mode when you do not want download history or logs saved. Logging is a first-class feature here, which tells you the maintainer expects failures to be diagnosed rather than prevented.

## Installing YTDLnis on Android and running a first download

The README lists four download routes: GitHub Releases, F-Droid, the IzzyOnDroid repository, and Uptodown. It also states that only the links in the README are trusted sources and that everything else is unrelated to the author. That warning is worth taking literally, because Android downloader APKs are a common target for repackaging. The F-Droid package identifier is com.deniscerri.ytdl.

There is no command line install. You side-load an APK or add a repository to your F-Droid client. The minimum is Android 7.0. If you build from source instead, the repository is a standard Gradle project with gradlew at the top level, and the README does not document the resulting output path or the signing setup, so treat the build as a source checkout rather than a recipe the documentation walks you through.

Once installed, the first real use is a normal download. The README describes the flow in terms of the bottom card: share a link to YTDLnis and a card appears at the bottom of the screen so you do not have to open the app. In that card you select the download type and format, then start. If you turn the bottom card off, quick download mode starts immediately without waiting for the data to process.

The other entry point is a text file. The README says you can create a txt file filled with links, playlists or search queries separated by a new line, and the app will process them. That is the closest thing to batch mode the app offers, and it is a reasonable way to move a list of URLs from a desktop to the phone.

For private or premium content, cookies are the mechanism the README names: log in with your accounts to download private or unavailable videos and unlock premium formats. The README does not describe how the cookies are imported, so check the in-app options rather than assuming a browser extension workflow.

## Playlists, scheduling and cuts: where the Android UI earns its place

Playlist handling is the feature that separates YTDLnis from a share-sheet downloader. According to the README, you can edit every playlist item separately just like a normal download item, select a common format for all items, or select multiple audio formats when downloading them as video, set one download path and one filename template for the whole list, and batch update the download type to audio, video or custom command in one click. Anyone who has tried to download a 200-item playlist on a phone knows the default alternative is doing it one item at a time.

Scheduling is the second differentiator. Downloads can be queued and scheduled by date and time, and multiple items can be scheduled for the same moment. Combined with WorkManager this is a real queue rather than a timer, and it is the feature that makes the app usable on a metered or slow connection.

The editing features are more experimental and the README says so. Cutting videos by timestamps and by video chapters is marked as an experimental yt-dlp feature, and unlimited cuts are allowed. SponsorBlock elements can be removed from downloaded items or embedded as chapters in the video. Subtitles, metadata and chapters can be embedded, metadata such as title and author can be modified, and an item can be split into separate files depending on its chapters. These all depend on FFmpeg being present, which loops back to the plugin system: a cut that fails is more likely to be a missing or outdated FFmpeg package than an app bug.

## Where YTDLnis is the wrong tool

The clearest limitation is the platform. YTDLnis is an Android application, and the README frames it that way throughout. People searching for a PC version will not find one here. If your downloads happen on a laptop or a home server, yt-dlp itself or a desktop front end is the correct layer, and running an Android app through an emulator to get a queue is more work than writing a shell script.

The second limitation is the dependency chain. Because Python, JS runtimes, FFmpeg and Aria2c are installed and updated as separate packages, the app's reliability is partly the reliability of those packages on your device and your Android version. The README does not promise that any given yt-dlp feature works out of the box; it says most yt-dlp features are implemented. That is an honest phrasing and also a warning: when a site changes its extractor, the fix arrives through the yt-dlp package, not through an app update.

The third is scope. The README does not document rollback of a plugin update, and it does not document what happens to in-progress downloads when a component is upgraded underneath them. If you are the kind of user who updates everything the moment an update appears, you are taking a risk the documentation does not quantify. For a phone downloader that is usually acceptable. For anything you would call a pipeline, it is not.

Finally, the licence. YTDLnis is GPL-3.0. That is fine for personal use and it is the same family of licence as much of the ecosystem, but it matters if you intend to fork the app, ship it inside a product, or bundle it with proprietary code. The repository also carries a SECURITY.md, which is where you should look for how the maintainer wants vulnerabilities reported rather than opening a public issue.

## YTDLnis compared with Seal and with plain yt-dlp

The obvious comparison, and the one people search for, is Seal. Both are Android front ends for yt-dlp with a Material interface and both target the same user. The difference in approach is in what sits on top. YTDLnis treats the underlying components as plugins you can upgrade and downgrade independently (Python, NodeJS or Deno, FFmpeg, Aria2c) and exposes a plugin repository for them; it also ships a built-in yt-dlp terminal and a template system you can back up and share. That pushes YTDLnis toward the power-user end: more knobs, more ways to fix a broken extractor without waiting for an app release.

Seal is the lighter option in that framing. If you want to paste a link and get a file, the extra machinery in YTDLnis is surface area you will not use. If you want to control which yt-dlp build runs, or you need custom commands for a site the UI does not cover, the plugin layer is the reason to pick YTDLnis.

The other alternative is yt-dlp itself. On a desktop or a server it is strictly more capable, because every flag is available and nothing is mediated by a UI. The trade is convenience: no share-sheet integration, no queue you can inspect on a phone, no scheduling UI. The honest way to choose is by where the file needs to end up. If it needs to end up on your phone, YTDLnis removes real friction. If it needs to end up anywhere else, the app is an unnecessary layer.

## Maintenance, releases and what the GPL-3.0 licence means in practice

The repository is not archived and the last push was on 2026-09-20. Recent releases are v1.9.0 on 2026-09-07, v1.8.9.1 on 2026-06-14 and v1.8.9 on 2026-06-13. The cadence is not fixed: roughly a three-month gap between the June and September releases, after a pair of releases one day apart in June. That pattern is typical of a project that ships when an extractor or a dependency needs it rather than on a schedule.

Upgrade cost is where the plugin design shows its teeth. There are two things to update: the app, and the packages it orchestrates. The README points to the ytdlnis-packages repository or to the updating section inside the application. Keeping yt-dlp current is the part that matters most, because site changes are what break downloads, and the app itself does not contain the extractors. If you install from F-Droid or IzzyOnDroid, the app update path is managed for you; the packages are still something you should check.

On licensing: YTDLnis is GPL-3.0. The practical consequence is that if you distribute a modified version, the source has to come with it under the same licence. Using the app on your own phone does not trigger anything. Forking it into a closed product does. That is a summary of the licence's intent, not legal advice; read the LICENSE file in the repository for the actual terms. The README also states that only the links it lists are trusted sources for YTDLnis, which is a distribution-integrity statement as much as a security one.

## Conclusion

Adopt YTDLnis if you download media on an Android phone and want yt-dlp's site coverage with a queue, a share-sheet card and cookie support. Skip it if your workflow lives on a desktop or a server, or if you cannot accept a GPL-3.0 app whose downloads depend on external yt-dlp, FFmpeg and runtime packages. Before relying on it, check the version of the yt-dlp package the app installs, confirm your Android version is 7.0 or above, and open the plugin updating section once to see which components are actually present.

## FAQ

### What is YTDLnis and what does it do?

YTDLnis is a free and open source video and audio downloader for Android 7.0 and above that uses yt-dlp. It downloads from more than 1000 websites, handles playlists, queues and schedules downloads, and supports cookies for private or premium content.

### How do I install YTDLnis on Android?

The README lists GitHub Releases, F-Droid, the IzzyOnDroid repository and Uptodown as the download routes, and states that only those links are trusted sources. The F-Droid package identifier is com.deniscerri.ytdl.

### How do I use YTDLnis?

Share a link to the app and a bottom card appears so you do not have to open it; there you pick the download type and format and start. You can also paste a link or a search inside the app, or point it at a txt file containing one link, playlist or search query per line.

### How do cookies work in YTDLnis?

The README says the app supports cookies so you can log in with your accounts, download private or unavailable videos and unlock premium formats. It does not document the import mechanism, so check the in-app options.

### Is YTDLnis still being updated?

The repository is not archived and the last push was on 2026-09-20. The most recent release listed is v1.9.0 on 2026-09-07.

### What is an alternative to YTDLnis for Android?

YTDLnis and Seal are both Android front ends for yt-dlp, but YTDLnis exposes the underlying Python, JS runtime, FFmpeg and Aria2c components as separately upgradeable plugins and ships a built-in yt-dlp terminal plus shareable templates. That makes it the heavier, more configurable option of the two.

## Sources

- [deniscerri/ytdlnis on GitHub](https://github.com/deniscerri/ytdlnis)
- [License: GPL-3.0](https://github.com/deniscerri/ytdlnis/blob/main/LICENSE)
- [Project website](https://ytdlnis.org)
- [README](https://github.com/deniscerri/ytdlnis/blob/main/README.md)
- [Releases](https://github.com/deniscerri/ytdlnis/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/deniscerri-ytdlnis
