# HeapLeach **Paste a heap of links. Download them together.** A bulk download manager for **180+ sites**, with a web UI and a command-line mode. Expand albums, folders and playlists into a queue, download files in parallel, and resume interrupted transfers. Runs on **Linux, macOS, Windows and Docker**; the web UI is built into the executable. [![CI](https://github.com/JohanLindvall/HeapLeach/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/JohanLindvall/HeapLeach/actions/workflows/ci.yml) [![Release](https://img.shields.io/github/v/release/JohanLindvall/HeapLeach)](https://github.com/JohanLindvall/HeapLeach/releases/latest) [![License: MIT](https://img.shields.io/github/license/JohanLindvall/HeapLeach)](LICENSE) [**Download**](https://github.com/JohanLindvall/HeapLeach/releases/latest) · [Quick start](#quick-start) · [Documentation](docs/README.md) · [Supported sites](#supported-links) · [Contribute](CONTRIBUTING.md) · [Get help](SUPPORT.md)

HeapLeach download queue with per-file progress, transfer speeds, pause controls and search.

## Why HeapLeach? - **Batch downloads:** paste one link per line; supported albums, folders and playlists expand automatically. - **Resumable transfers:** keep partial files, retry failures, and continue after an interruption. - **Control your bandwidth:** adjust parallel downloads, connections per file and the native download speed limit while the queue runs. - **A queue you can navigate:** search, filter, pause, retry individual files, and inspect logs from the browser. Light, dark and mobile layouts included. - **Desktop or automation:** open the local web UI, pass URLs to the CLI, or run the Docker image on your server. - **One application:** Go backend and embedded React UI. Releases include local CAPTCHA model data; Docker also includes the media helpers. ## Quick start ### Download and run 1. Open the [latest release](https://github.com/JohanLindvall/HeapLeach/releases/latest) and choose the archive for your system: | System | Archive ending | | --- | --- | | Linux, Intel / AMD 64-bit | `linux_amd64.tar.gz` | | Linux, ARM64 | `linux_arm64.tar.gz` | | macOS, Apple silicon | `darwin_arm64.tar.gz` | | macOS, Intel | `darwin_amd64.tar.gz` | | Windows, Intel / AMD 64-bit | `windows_amd64.zip` | 2. Extract the **whole archive** into a folder. Keep `ocr/` beside the executable. No Go or Node.js installation is needed. 3. Run `heapleach` (`heapleach.exe` on Windows). It opens your browser and saves to your Downloads folder. 4. Paste your links, one per line, and click **Add to queue**.
Terminal commands for Linux, macOS and Windows Run these from a folder containing only the archive version you want to use. ```bash # Linux x86-64; use linux_arm64 for an ARM64 machine. tar -xzf heapleach_*_linux_amd64.tar.gz ./heapleach ``` ```bash # macOS Apple silicon; use darwin_amd64 for an Intel Mac. tar -xzf heapleach_*_darwin_arm64.tar.gz ./heapleach ``` ```powershell # Windows PowerShell Expand-Archive -Path .\heapleach_*_windows_amd64.zip -DestinationPath .\heapleach .\heapleach\heapleach.exe ```
An argument-free launch uses a free local port. After you close the browser, it exits once downloads are idle and no tab has connected for a minute. Unfinished jobs return **held** after a restart; click **Resume** to continue. See [installation and updates](docs/installation.md) for checksums, Docker persistence, source builds and platform notes. ### Docker On Linux or macOS with Docker, run: ```bash mkdir -p "$HOME/Downloads" docker run --rm -it --name heapleach \ -p 127.0.0.1:8080:8080 \ --user "$(id -u):$(id -g)" \ -e HEAPLEACH_STATE=/downloads/.heapleach-state/queue.json.zst \ -v "$HOME/Downloads:/downloads" \ ghcr.io/johanlindvall/heapleach:latest ``` Open **[localhost:8080](http://localhost:8080)**. Downloads and queue state stay in your Downloads folder when the container stops. The image supports amd64 and arm64 and includes yt-dlp, ffmpeg, ffprobe, deno and local OCR. `latest` follows successful main builds; use a [versioned image](docs/installation.md#docker-and-persistent-state) to pin a manual release. The web UI has no login. The command above publishes it only on your computer; see [network access](#network-access-and-trust) for remote deployments. ## Usage ```bash # Open the UI on a free local port and choose the destination. ./heapleach -addr 127.0.0.1:0 -open ~/Downloads # Download a list of URLs, then exit. Blank lines and # comments are ignored. ./heapleach - ~/Downloads < urls.txt # Limit native download speed and parallel transfers. ./heapleach -addr 127.0.0.1:8080 -concurrency 4 -max-speed 10MB ~/Downloads # Show every command-line option. ./heapleach -help ``` `urls.txt` contains your own URLs, one per line. On PowerShell, use `Get-Content .\urls.txt | .\heapleach.exe -` to feed a list to the CLI. To pass URLs directly, quote each one, especially links containing `&` or `#`. The CLI exits `0` on success, `1` if any input or download fails, and `130` after Ctrl-C. Partial files remain available for resume. Native transfers honor the shared speed limit; external helpers use their own controls. [Full usage guide](docs/usage.md) · [Configuration](#configuration) · [Troubleshooting](SUPPORT.md) ## Supported links File hosts, image galleries, video sites, broadcasters, image boards and compatible platforms are supported, including: | Content | Examples | | --- | --- | | Files and folders | gofile, bunkr, MEGA, pixeldrain, MediaFire, Dropbox | | Video and playlists | YouTube through yt-dlp, Vimeo, PeerTube | | Broadcasts | SVT Play and other supported broadcasters | | Galleries and collections | Chevereto, image boards, Internet Archive | | Direct and embedded media | File URLs, HLS playlists (a DASH `.mpd` is refused with the reason), open directories, supported links embedded in webpages | Some workflows need [optional helpers](#optional-helpers). Support depends on what a host makes available; see [accepted URL formats and limitations](docs/supported-links.md). Sites change, so fixture tests alone cannot guarantee current live support. ### Every supported site
Expand the complete site inventory, generated from the extractor registry 98 extractors, each chosen by what a page serves rather than by its domain, so a site that moves, or an install nobody listed, is still recognised. | Extractor | Recognises | |---|---| | `4chan` | 4chan threads (`//thread/`) whose page renders the thread's own `t` container on the board and names the site | | `abclisten` | episodes and programmes (`/listen/programs/…`) of ABC listen, by the page props its `__NEXT_DATA__` island carries | | `alohatube` | Aloha Tube view pages (`/ktm/view.cgi?gid=`) that frame another site's player (an off-site `