# Webtor, self-hosted This is the self-hosted version of [webtor.io](https://webtor.io), implemented as an all-in-one Docker image. ## Features - **Direct Download Link (DDL):** Select any file inside a torrent and download it directly. - **Instant Video and Audio Streaming:** Choose a video or audio file inside a torrent and start streaming immediately without needing to download it first. **Supported Formats:** - **Video:** `avi`, `mkv`, `mp4`, `webm`, `m4v`, `ts`, `vob` - **Audio:** `mp3`, `wav`, `ogg`, `flac`, `m4a` - **Download Entire Torrent as a ZIP Archive:** Download your torrent as a ZIP archive on-the-fly while preserving the original directory structure, without requiring a torrent client. - **Personal Library:** Organize your own collection by adding torrents to your account. Movies and series will be detected automatically! - **Subtitles from OpenSubtitles:** Matching subtitle tracks are found and offered in the player automatically (needs a free OpenSubtitles API key, see "Configuring OpenSubtitles"). - **AI subtitles:** Translate subtitle tracks -- embedded, uploaded or found on OpenSubtitles -- into your language on the fly, right in the player (needs an Anthropic API key, see "Configuring AI features"). - **Stremio integration** Just install the addon using the link from profile and start watching your library on TV with Stremio. - **Developer-friendly** With the [SDK](https://github.com/webtor-io/embed-sdk-js) you can provide your users with the ability to watch torrent-videos online on your website. ## Quick Setup 1. [Install Docker](https://docs.docker.com/get-docker/). 2. Start your Webtor instance with the following command: ```bash docker run -d -p 8080:8080 -v data:/data -v pgdata:/pgdata -v storage:/storage --name webtor --restart=always ghcr.io/webtor-io/self-hosted:latest ``` 3. Access the UI at . 4. You're all set! You can run your Webtor instance on [ElfHosted](https://store.elfhosted.com/product/webtor/elf/10433/)! ## Supported Platforms The image is published for `linux/amd64` and `linux/arm64`, so it runs on x86 servers as well as Apple Silicon, 64-bit ARM boards and ARM NAS devices. Docker picks the right variant automatically — the command above is the same on every platform. 32-bit ARM (`armv7`) is not supported. ## Administrator Password By default the instance is open: anyone who can reach it has full access. Set a password from the profile page, or start the container with one: ```bash docker run -e ADMIN_PASSWORD=your-password -d -p 8080:8080 -v data:/data -v pgdata:/pgdata -v storage:/storage \ --name webtor --restart=always ghcr.io/webtor-io/self-hosted:latest ``` `ADMIN_PASSWORD` overrides whatever password was set from the profile, which also makes it the way back in if you forget it. To change the password without putting it on the command line, source the environment the container's own services run with first — `web-ui` isn't started under it by `docker exec`, so a bare invocation connects to Postgres with the wrong defaults (`PG_USER=webhook`, `PG_DATABASE=webhook`, no password) instead of the `app`/`app` role the embedded database actually created: ```bash docker exec webtor sh -c 'set -a; . /etc/webtor/common.env; cd /app/web-ui && ./web-ui admin set-password ' ``` Once a password is set, the web interface requires authentication for every page (`ONLY_AUTHORIZED=true`, the default) — a visitor without a valid session is redirected to `/login` instead of getting read access. Set `ONLY_AUTHORIZED=false` to turn that off and fall back to the old behavior: pages stay reachable without logging in, and only actions that were already password-gated (e.g. changing settings) still prompt for one. Embedding is handled separately, because a third-party `