# YT Saver — Setup guide

> Save a video in the quality you pick. Runs on your own device.

- Language: English
- Web page: https://www.arvish.xyz/apps/yt-saver
- App code (git clone): https://github.com/Abhishek862009/yt-saver.git
- Source code: https://github.com/Abhishek862009/yt-saver

YT Saver runs on your own device, not on a server. Choose your device below and follow the steps. The first setup takes a while because you install a few free programs; after that, starting the app is one command.

Why an app and not a website? YouTube often blocks the servers that websites run on, so a downloader hosted on a website stops working. On your own device it uses your own internet connection instead. The app only listens on 127.0.0.1, which means only that device can open it; other devices on your Wi-Fi cannot.

## What you need

- A Windows PC, Mac, Linux computer or an Android phone, with internet. iPhone and iPad are not supported.
- Git, which downloads the app from GitHub. The steps below install it.
- Python 3.11 or newer. The steps below install it.
- ffmpeg, which joins the video and the audio into one file. The steps install it.
- A JavaScript engine that YouTube needs: Node.js 22 or newer, or Deno 2.3 or newer. The steps install one of them.

## Windows 10 / 11

Uses PowerShell and winget (built into Windows 10/11).

ℹ️ Written from the official documentation of winget, Python, ffmpeg and Node.js. The author has not run these steps on a Windows PC yet. If one fails, see “If something goes wrong” below.

### Step 1: Open PowerShell

Click the Start button, type PowerShell and press Enter. A window opens. You will paste the commands below into it (Ctrl+V, or right-click).

### Step 2: Install Git, Python, ffmpeg and Node.js

Run these four lines one by one (copy a line, paste it, press Enter, wait until it finishes).

```powershell
winget install -e --id Git.Git
winget install -e --id Python.Python.3.13
winget install -e --id Gyan.FFmpeg
winget install -e --id OpenJS.NodeJS.LTS
```

If it asks you to agree to terms, type Y and press Enter. When all four are done, close PowerShell and open it again. Windows needs this to find the new programs.

### Step 3: Check that they installed

```powershell
git --version
py --version
ffmpeg -version
node --version
```

git should show a version number. py should show Python 3.11 or higher (for example 3.13), and node should show v22 or higher. ffmpeg should print a few lines starting with “ffmpeg version”.

### Step 4: Get the app

This downloads the app from GitHub into a folder called yt-saver in your user folder, and goes into it.

```powershell
cd $HOME
git clone https://github.com/Abhishek862009/yt-saver.git
cd yt-saver
```

### Step 5: Set it up (first time only)

```powershell
py -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements.txt
```

This downloads the libraries the app needs. Wait until the prompt comes back.

### Step 6: Start the app

```powershell
.\.venv\Scripts\python.exe app.py
```

When the window shows “YT Saver is running”, open http://127.0.0.1:5000 in your browser (on the same device). Keep the window open while you use the app.

### Step 7: Next time

You do not need to install anything again. Open PowerShell and run:

```powershell
cd $HOME\yt-saver
.\.venv\Scripts\python.exe app.py
```

To stop the app, click the PowerShell window and press Ctrl+C.

### If something goes wrong

- **“git is not recognized”, “py is not recognized” or “ffmpeg is not recognized”**
  Close PowerShell and open it again. If it still fails, install the program by hand from its official site: git-scm.com, python.org (tick “Add python.exe to PATH” in the installer), ffmpeg.org (Windows builds) and nodejs.org.
- **“winget is not recognized”**
  Update “App Installer” in the Microsoft Store, or install Git, Python, ffmpeg and Node.js by hand from the sites above.
- **The app says port 5000 is already in use**
  Start it on another port, then open that port in the browser (here 5001):
  ```powershell
  $env:PORT=5001
  .\.venv\Scripts\python.exe app.py
  ```

### How to update

YouTube changes often, so an old copy of the app can stop saving videos, and new versions of the app add improvements. Updating takes about a minute: it gets the newest version of the app and of its libraries. The files you already saved stay where they are.

#### Step 1: Stop the app

If the app is running, click its window and press Ctrl+C. The prompt comes back when it has stopped. If the app is not running, skip this step.

#### Step 2: Go to the app folder and get the newest version

git pull downloads the newest version of the app from GitHub into the folder you already have.

```powershell
cd $HOME\yt-saver
git pull
```

If it says “Already up to date.”, you already have the newest version. Otherwise it lists the files that changed.

#### Step 3: Update the libraries

```powershell
.\.venv\Scripts\python.exe -m pip install -U -r requirements.txt
```

It may print “Requirement already satisfied”. That is fine. Wait until the prompt comes back.

#### Step 4: Start the app again

```powershell
.\.venv\Scripts\python.exe app.py
```

Open http://127.0.0.1:5000 in your browser and reload the page, so the browser loads the new version.

#### If the update fails

- **git says “fatal: not a git repository”**
  This folder was not made with git clone (for example the app was downloaded as a ZIP file), so it cannot update itself. Do the “Get the app” and “Set it up” steps of the setup guide above once more, then start the app from the new folder.
- **git pull says “Your local changes to the following files would be overwritten”**
  You changed a file inside the app folder. Put your change aside, then pull again:
  ```powershell
  git stash
  git pull
  ```

## Android phone (with Termux)

Termux is a free terminal app for Android. The app runs inside it.

ℹ️ Written from the Termux package lists and documentation. The author has not run these steps on a phone yet, and the pip step builds some parts on the phone, so it is the most likely one to need a fix. See “If something goes wrong” below.

### Step 1: Install Termux from F-Droid or GitHub

Do not use the Google Play version. The Termux team says Google Play is not an official source, and that version is outdated. Download the APK from one of these two places and install it (Android may ask you to allow installs from your browser).

- Termux on F-Droid: https://f-droid.org/packages/com.termux/
- Termux releases on GitHub: https://github.com/termux/termux-app/releases

### Step 2: Open Termux and update it

```bash
pkg update
```

If it asks a question, press Enter (or type Y and press Enter).

### Step 3: Install Python, ffmpeg, Node.js and Git

```bash
pkg install -y python python-pip ffmpeg nodejs git
```

### Step 4: Get the app

```bash
cd ~
git clone https://github.com/Abhishek862009/yt-saver.git
cd yt-saver
```

### Step 5: Set it up (first time only)

```bash
pip install -r requirements.txt
```

This can take several minutes because some parts are built on the phone. Wait until the prompt comes back. If it stops with an error, open “If something goes wrong” below.

### Step 6: Start the app

```bash
python app.py
```

When Termux shows “YT Saver is running”, open Chrome (or any browser) on the same phone and go to http://127.0.0.1:5000. Keep Termux running: pull down the notification area and tap “Acquire wakelock” on the Termux notification, so Android does not put it to sleep.

### Step 7: Next time

```bash
cd ~/yt-saver
python app.py
```

To stop the app, press Ctrl+C in Termux (or swipe Termux away).

### If something goes wrong

- **pip says “externally-managed-environment”**
  Run the install again with one extra word:
  ```bash
  pip install --break-system-packages -r requirements.txt
  ```

- **pip stops with “Failed building wheel” or says clang is missing**
  Install the build tools, then run the pip line again:
  ```bash
  pkg install -y clang make
  pip install -r requirements.txt
  ```

- **The app stops after a while with the screen off**
  Tap “Acquire wakelock” on the Termux notification, and in Android settings set battery usage for Termux to “Unrestricted” (the wording differs by phone).

### How to update

YouTube changes often, so an old copy of the app can stop saving videos, and new versions of the app add improvements. Updating takes about a minute: it gets the newest version of the app and of its libraries. The files you already saved stay where they are.

#### Step 1: Stop the app

If the app is running in Termux, press Ctrl+C in Termux. The prompt comes back when it has stopped. If the app is not running, skip this step.

#### Step 2: Go to the app folder and get the newest version

git pull downloads the newest version of the app from GitHub into the folder you already have.

```bash
cd ~/yt-saver
git pull
```

If it says “Already up to date.”, you already have the newest version. Otherwise it lists the files that changed.

#### Step 3: Update the libraries

```bash
pip install -U -r requirements.txt
```

It may print “Requirement already satisfied”. That is fine. Wait until the prompt comes back.

#### Step 4: Start the app again

```bash
python app.py
```

Open http://127.0.0.1:5000 in your browser and reload the page, so the browser loads the new version.

#### If the update fails

- **git says “fatal: not a git repository”**
  This folder was not made with git clone (for example the app was downloaded as a ZIP file), so it cannot update itself. Do the “Get the app” and “Set it up” steps of the setup guide above once more, then start the app from the new folder.
- **git pull says “Your local changes to the following files would be overwritten”**
  You changed a file inside the app folder. Put your change aside, then pull again:
  ```bash
  git stash
  git pull
  ```

- **pip says “externally-managed-environment”**
  Run the library update again with one extra word:
  ```bash
  pip install --break-system-packages -U -r requirements.txt
  ```

## Linux (Ubuntu, Debian, Fedora, Arch)

Uses the terminal. The commands for Ubuntu and Debian are shown first.

✅ The git clone, set-up and start steps were run on Ubuntu 24.04. The package-install lines (apt, dnf, pacman) and the Deno / nvm installers were not run by the author; they are the official ones from each project.

### Step 1: Open a terminal

On most systems the shortcut is Ctrl+Alt+T. Otherwise search for “Terminal” in your applications.

### Step 2: Install Git, Python, ffmpeg and curl

Use the lines for your Linux:

Ubuntu / Debian / Linux Mint:
```bash
sudo apt update
sudo apt install -y python3 python3-venv ffmpeg curl git
```

Fedora:
```bash
sudo dnf install -y python3 ffmpeg-free curl git
```

Arch / Manjaro:
```bash
sudo pacman -S --needed python ffmpeg curl git
```

### Step 3: Check the Python version

```bash
python3 --version
```

It must say 3.11 or higher. If it says 3.10 or lower, your Linux is too old for this app: update it (for example to Ubuntu 24.04) or install a newer Python from python.org.

### Step 4: Install a JavaScript engine (Deno)

YouTube needs one. Deno is the one yt-dlp recommends. This is the official installer line from docs.deno.com:

```bash
curl -fsSL https://deno.land/install.sh | sh
```

Alternative: Node.js 22 with nvm (use this instead of Deno if you prefer):
```bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.6/install.sh | bash
nvm install 22
```

If the installer asks questions, answer yes (y). Then close the terminal and open a new one, and check with “deno --version” (it must be 2.3 or higher) or “node --version” (22 or higher).

### Step 5: Get the app

```bash
cd ~
git clone https://github.com/Abhishek862009/yt-saver.git
cd yt-saver
```

### Step 6: Set it up (first time only)

```bash
python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
```

This downloads the libraries the app needs. Wait until the prompt comes back.

### Step 7: Start the app

```bash
.venv/bin/python app.py
```

When the window shows “YT Saver is running”, open http://127.0.0.1:5000 in your browser (on the same device). Keep the window open while you use the app.

### Step 8: Next time

```bash
cd ~/yt-saver
.venv/bin/python app.py
```

To stop the app, click the terminal and press Ctrl+C.

### If something goes wrong

- **“ensurepip is not available” or “python3-venv” when creating the environment**
  On Ubuntu / Debian install the missing package, then run the “python3 -m venv .venv” line again:
  ```bash
  sudo apt install -y python3-venv
  ```

- **“deno: command not found” after installing it**
  Open a new terminal. If it still fails, add Deno to the path for this terminal:
  ```bash
  export PATH="$HOME/.deno/bin:$PATH"
  ```

- **The app says port 5000 is already in use**
  Start it on another port, then open that port in the browser (here 5001):
  ```bash
  PORT=5001 .venv/bin/python app.py
  ```

### How to update

YouTube changes often, so an old copy of the app can stop saving videos, and new versions of the app add improvements. Updating takes about a minute: it gets the newest version of the app and of its libraries. The files you already saved stay where they are.

#### Step 1: Stop the app

If the app is running, click its terminal and press Ctrl+C. The prompt comes back when it has stopped. If the app is not running, skip this step.

#### Step 2: Go to the app folder and get the newest version

git pull downloads the newest version of the app from GitHub into the folder you already have.

```bash
cd ~/yt-saver
git pull
```

If it says “Already up to date.”, you already have the newest version. Otherwise it lists the files that changed.

#### Step 3: Update the libraries

```bash
.venv/bin/python -m pip install -U -r requirements.txt
```

It may print “Requirement already satisfied”. That is fine. Wait until the prompt comes back.

#### Step 4: Start the app again

```bash
.venv/bin/python app.py
```

Open http://127.0.0.1:5000 in your browser and reload the page, so the browser loads the new version.

#### If the update fails

- **git says “fatal: not a git repository”**
  This folder was not made with git clone (for example the app was downloaded as a ZIP file), so it cannot update itself. Do the “Get the app” and “Set it up” steps of the setup guide above once more, then start the app from the new folder.
- **git pull says “Your local changes to the following files would be overwritten”**
  You changed a file inside the app folder. Put your change aside, then pull again:
  ```bash
  git stash
  git pull
  ```

## Mac (macOS)

Uses Terminal and Homebrew, the standard way to install programs on a Mac.

ℹ️ Written from the official Homebrew documentation and package pages. The author has not run these steps on a Mac yet. If one fails, see “If something goes wrong” below.

### Step 1: Open Terminal

Press Command+Space, type Terminal and press Enter.

### Step 2: Install Homebrew (if you do not have it)

First check whether you already have it. If it prints a version number, skip the second line.

```bash
brew --version
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```

The second line is the official installer from brew.sh. It explains what it will do and asks for your Mac password. When it finishes it prints “Next steps”: copy and run those lines too, so that the brew command works.

- Homebrew: https://brew.sh/

### Step 3: Install Git, Python, ffmpeg and Node.js

```bash
brew install git python@3.13 ffmpeg node
```

### Step 4: Get the app

```bash
cd ~
git clone https://github.com/Abhishek862009/yt-saver.git
cd yt-saver
```

### Step 5: Set it up (first time only)

```bash
python3.13 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
```

This downloads the libraries the app needs. Wait until the prompt comes back.

### Step 6: Start the app

```bash
.venv/bin/python app.py
```

When the window shows “YT Saver is running”, open http://127.0.0.1:5000 in your browser (on the same device). Keep the window open while you use the app.

### Step 7: Next time

```bash
cd ~/yt-saver
.venv/bin/python app.py
```

To stop the app, click the Terminal window and press Control+C.

### If something goes wrong

- **“brew: command not found” right after installing Homebrew**
  Run the “Next steps” lines that the Homebrew installer printed at the end, then open a new Terminal window.
- **“python3.13: command not found”**
  Open a new Terminal window and try again. If it still fails, run the install line again:
  ```bash
  brew install python@3.13
  ```

- **The app says port 5000 is already in use**
  Start it on another port, then open that port in the browser (here 5001):
  ```bash
  PORT=5001 .venv/bin/python app.py
  ```

### How to update

YouTube changes often, so an old copy of the app can stop saving videos, and new versions of the app add improvements. Updating takes about a minute: it gets the newest version of the app and of its libraries. The files you already saved stay where they are.

#### Step 1: Stop the app

If the app is running, click its Terminal window and press Control+C. The prompt comes back when it has stopped. If the app is not running, skip this step.

#### Step 2: Go to the app folder and get the newest version

git pull downloads the newest version of the app from GitHub into the folder you already have.

```bash
cd ~/yt-saver
git pull
```

If it says “Already up to date.”, you already have the newest version. Otherwise it lists the files that changed.

#### Step 3: Update the libraries

```bash
.venv/bin/python -m pip install -U -r requirements.txt
```

It may print “Requirement already satisfied”. That is fine. Wait until the prompt comes back.

#### Step 4: Start the app again

```bash
.venv/bin/python app.py
```

Open http://127.0.0.1:5000 in your browser and reload the page, so the browser loads the new version.

#### If the update fails

- **git says “fatal: not a git repository”**
  This folder was not made with git clone (for example the app was downloaded as a ZIP file), so it cannot update itself. Do the “Get the app” and “Set it up” steps of the setup guide above once more, then start the app from the new folder.
- **git pull says “Your local changes to the following files would be overwritten”**
  You changed a file inside the app folder. Put your change aside, then pull again:
  ```bash
  git stash
  git pull
  ```

## Using the app

1. Open http://127.0.0.1:5000 in your browser.
2. Paste a YouTube video link and press “Find qualities”.
3. Pick a quality from the list (highest first) and press “Save video”.
4. When it reaches 100%, the file is saved to your browser’s Downloads folder.

## Good to know

- Only save videos you own, that are licensed for reuse, or that you have permission to download. Downloading other people’s videos may break YouTube’s Terms of Service or copyright law.
- If YouTube says it needs proof you are not a bot, wait a few minutes and try again, or switch network (for example your phone’s hotspot instead of shared Wi-Fi). Shared hostel or college Wi-Fi is more likely to be limited.
- Nothing about your downloads goes through arvish.xyz. You get the app’s code from GitHub once; after that the app talks to YouTube directly from your device.
- The app is open source. The code is in its own repository on GitHub: Abhishek862009/yt-saver.
