Skip to content

Repository files navigation

WDownloader

Offload slow file-host downloads to a cloud server, then grab the finished file at full speed.

tests License: MIT Python 3.12 FastAPI LazyCat app


The problem

Free tiers of many file hosts throttle downloads to a crawl — often ~50 KB/s. A single multi-gigabyte file can take 10–12 hours, during which you have to keep your home computer on and your connection tied up. If the download drops, you start over.

The idea

Don't download on your slow, always-on-only-if-you-leave-it-on home machine. Download on a cloud server instead:

  • the server has fast, unmetered bandwidth and is always on, so a 12-hour trickle runs unattended;
  • when it's done, you pull the finished file to your browser at full speed whenever you like — minutes instead of hours;
  • you can even resume or use a multi-segment download manager (IDM, aria2, …) for the final hop.

WDownloader is a small web app that orchestrates exactly this. You paste a download command, it runs on one of your remote servers, shows you live progress, and hands the file back to you when it's ready.

How it works

  ┌────────────┐   paste wget cmd    ┌──────────────┐   SSH + screen   ┌───────────────┐
  │  Browser   │ ──────────────────▶ │  WDownloader │ ───────────────▶ │  Cloud server │
  │  (you)     │ ◀────────────────── │  (this app)  │ ◀─────────────── │  runs wget    │
  └────────────┘   pull finished     └──────────────┘   live progress  └───────────────┘
       ▲   file at full speed                                                  │
       └──────────────────────────────────────────────────────────────────────┘
                         file streamed back over SSH, on demand
  1. Paste a command. Grab a ready-made wget command from your browser with cliget (it captures the cookies and headers a logged-in file host needs), paste it, and the download starts by itself.
  2. It runs remotely. The command is launched inside a screen session on the first available server over SSH, with failover to the next one if a server is down. The app is stateless — the truth lives in the remote screen sessions, not in a database.
  3. Watch progress. The dashboard polls every few seconds and shows the state of each download: percentage, size, speed, ETA.
  4. Get your file. When it's done, click download and the file is streamed from the server straight to your browser — optionally deleting it from the server afterwards.

Features

  • Paste-and-go — paste a wget command and it starts automatically; optional failover across multiple servers.
  • Live dashboard — percentage, size, speed, ETA, updated in place (no flicker).
  • Pull to your device — stream a finished file from the server to your browser over SSH. Supports HTTP Range, so resuming and multi-segment download managers (IDM, aria2) work.
  • Free disk per server — a strip shows how much room each server has left; it turns amber, then red, before a disk fills up and a download fails silently.
  • Retry a failed download — one button relaunches it (the original command is remembered), no need to paste anything again.
  • Completion notifications — optional browser notifications when a download finishes or fails.
  • Bulk actions — delete all completed downloads, or pull them all, in one click.
  • Concurrency limit & queue — cap how many downloads run per server; extra ones wait in a queue and start on their own as slots free up.
  • Rename on the fly — give the file a different name; it keeps the real extension from the original command.
  • Auto-delete after transfer (optional) — remove the file from the server once it has been fully delivered to you.
  • English & Italian UI — auto-detected from the browser (English by default), switchable any time in Settings.
  • Self-updating UI — an open tab notices a new deploy and reloads itself.

Screenshots

WDownloader dashboard

Dashboard: live downloads, free disk per server, queue, and one-click retry / pull.

WDownloader settings

Settings: SSH key, servers, per-server concurrency limit, auto-delete.

Requirements

  • One or more servers you can reach over SSH (any cheap VPS works), each with wget, screen, and standard coreutils.
  • An SSH private key whose public half is in each server's authorized_keys.
  • A host to run the app: a LazyCat NAS (packaged as an .lpk), or any machine with Docker.

Install

On a LazyCat NAS

cd wdownloader-lzc
lzc-cli project build
lzc-cli app install cloud.lazycat.app.wdownloader-v*.lpk

With Docker (any host)

docker run -d --name wdownloader \
  -p 8000:8000 \
  -e WD_VAR_DIR=/data \
  -v wdownloader-data:/data \
  fliva/wdownloader:latest

Then open http://localhost:8000.

Configure

  1. Open Settings.
  2. Paste your SSH private key (it is never sent back to the browser after saving, and is stored 0600 on disk).
  3. Add your servers (name, host, user, port, download directory).
  4. Optionally set the max downloads per server (0 = unlimited) and whether to auto-delete files after they've been pulled.

Use it with cliget

Downloading from a file host that requires a login is easiest with cliget (Firefox/Chrome extension):

  1. Start the download in your browser and cancel it.
  2. cliget gives you a full wget/curl command including the session cookies and headers.
  3. Paste it into WDownloader. Done.

Development

pip3 install --user -r requirements.txt
WD_VAR_DIR=/tmp/wd-dev python3 -m uvicorn app.main:app --reload --port 8099

Run the tests (plain assert, no framework — they monkeypatch SSH, so no servers are needed). httpx is only required by fastapi.testclient:

pip3 install --user httpx
for t in tests/test_*.py; do python3 "$t"; done

The stack is FastAPI + uvicorn, a single self-contained HTML page (no build step, no external assets), and SSH/screen on the remote side.

A note on responsible use

WDownloader is a bandwidth-offloading tool. Use it only to download files you are entitled to — your own backups, legitimately purchased media, public datasets, Linux ISOs, and the like. You are responsible for what you download and for complying with the terms of the services you use.

License

MIT © 2026 Federico Liva

About

Offload slow file-host downloads to a cloud server, then pull the finished file to your browser at full speed. FastAPI + SSH/screen, LazyCat NAS or Docker.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages