uTube is a free, open-source downloader for public videos from YouTube, Facebook, Instagram, and X. It started as a terminal tool I abandoned. Here's what it became and how it's built.
A while ago I built a small terminal tool to download YouTube videos. It worked for a while, then it broke, and I did what many of us do with side projects: I archived the repo and moved on.
Recently I came back to it and rebuilt it properly. Meet uTube.
What is uTube?
uTube is a free, open-source app that downloads public videos from:
- YouTube
- X (formerly Twitter)
You can save a video as MP4 in the quality you choose, or extract just the MP3 audio.
It runs on:
- π± Android
- π₯οΈ Windows, macOS, and Linux (desktop app, currently a preview)
- β¨οΈ Terminal (CLI)
Features
Quality choices
Pick the resolution you want, and see the estimated file size before you download. If that quality can't be downloaded, uTube falls back to the best working lower resolution and tells you which one it saved.
Playlists
Download a whole playlist or select only some items. Files from a playlist stay together in their own folder, and one failed item doesn't stop the rest.
Android workflow
Share a supported link to uTube, choose video or audio, pick a quality, and start the download. Downloads continue in the background and you can follow progress in notifications.
How it's built
The repository is a small monorepo with three parts:
apps/cli/ Terminal interface and command handling
apps/desktop/ Electron, React, and TypeScript desktop app
packages/core/ Shared download engine
The idea was simple: one shared engine, several interfaces. The CLI and the desktop app both sit on top of the same core, so a fix in the engine benefits both.
The engine: recover quietly
Downloaders break when platforms change, so the engine is built around recovery:
-
Requested quality first. It tries matching encodings and alternate clients at your chosen resolution. A
720prequest can use a720p60stream. - Best working fallback. Only when the requested resolution is unavailable or exhausted does it try lower resolutions, from highest to lowest, and it reports the quality that was actually saved.
- Quiet retries. Recovery happens without repeated warnings, and the progress bar doesn't jump back to zero.
- Audio included. Separate video and audio streams are merged into MP4 with FFmpeg. MP3 output uses 192 kbps audio with title metadata.
Try it
Android and Desktop
Download the latest build from the website or the GitHub releases page:
- Website: https://omer73364.github.io/uTube/
- Releases: https://github.com/omer73364/uTube/releases
Android works without extra tools. On desktop, the preview builds are unsigned and macOS builds are not notarized, so your system may show a security prompt. FFmpeg is needed for MP3 audio and for videos that require merging audio and video. You can download it from the app's settings, and the Debian package installs it automatically.
CLI
Requires Node.js 20+.
npm install -g utube-cli@latest
utube
This opens an interactive menu. You can also pass a link and a quality directly:
utube -u "https://youtu.be/jNQXAC9IVRw" -q 360p
utube --audio -u "https://youtu.be/jNQXAC9IVRw"
Contribute
uTube is open source under the MIT license. Bug reports, fixes, translations, and feature ideas are all welcome:
π https://github.com/omer73364/uTube
If you try it, I'd love to hear what you think, and which platform you'd like to see supported next.
Thanks for reading! β





Top comments (0)