Bevy is a self hosted alternative to Popcorntime that aims to improve file availability and increase control over the files being downloaded. With this added control we can:
Torrents are grabbed from indexers by hitting Jackett (no need to reinvent the wheel here) and then sent to the torrent client. There they are served via HTTP and the file pieces are downloaded as they are needed/streamed. A media player then sits in front of this web server and transcodes the media files in real time (rather than downloading different versions) for the web client.
This means you can grab a single release at the highest quality/size you are willing, and transcode to meet your current internet speed wherever you are. No need for VPNs on your clients, all torrenting happens on your server/seedbox.
If you are still confused about why this project was started, check out the motivation section at the bottom... but also, I just had some free time and wanted to see how far I could take it :)
Bevy includes a fully featured torrent client so you can decide how you want the files to be downloaded and seeded (which helps solve issue 1 I mentioned above). We don't use existing clients because we specifically need the ability to serve files via HTTP and prioritize those streams over downloading the entire torrent.
Features:
Bevy also includes a layer on top of the raw files that aims to make your files as available as possible.
Features:
The web client is fairly independent of the backend and aims to make it easy to select movies and then provide the backend the info it needs to go find a torrent for that movie.
Features:
Building (optional)
make docker
Running on x86
docker run -it \
-v $(pwd)/downloads:/downloads \
-v $(pwd)/config.toml:/config.toml \
-e CONFIG_FILE=/config.toml \
-p 8080:8080 \
zolland/bevy:latest
Running on ARM64 (tested on Pi 4 Model B)
docker run -it \
-v $(pwd)/downloads:/downloads \
-v $(pwd)/config.toml:/config.toml \
-e CONFIG_FILE=/config.toml \
-p 8080:8080 \
--entrypoint "/linux-arm64" \
zolland/bevy:latest
Docker Compose
jackett:
image: linuxserver/jackett
container_name: jackett
environment:
- PUID=1000
- PGID=1000
- TZ=America/Los_Angeles
volumes:
- jackett:/config
- /downloads:/downloads
ports:
- 9117:9117
restart: unless-stopped
bevy:
container_name: bevy
image: zolland/bevy:latest
user: 1000:1000
restart: unless-stopped
ports:
- 8086:8080
environment:
- CONFIG_FILE=/etc/bevy/config.toml
volumes:
- /etc/bevy/config.toml:/etc/bevy/config.toml
- /mnt/media/bevy/downloads:/downloads
When developing you need to run the frontend and backend as sepperate services.
CONFIG_FILE=config.toml go run cmd/main.go
Available on localhost:8080
Install deps
pushd frontend && yarn
Start
pushd frontend && yarn start
Available on localhost:3000
Popcorntime is awesome for torrent usability, but has a few problems that make it a bit hard to use (for me). I think the easiest way to understand the motivation behind this project is to look at the problems I have with Popcorntime.
Remember that this isn't meant to bash their appliction! These are two completely different projects that tackle the problem of torrent streaming in totally different ways.
PT has very little emphasis on seeding. You seed while you watch, but stops seeding when you close the app. This means there's no way you could use a private tracker, and in general you're just being a leech!
Because each of the apps are actively torrenting, you end up needing to have a VPN on all of your devices you want to watch on. I don't usually like to have a VPN active on all my devices at all times and think it's a bit annoying to keep switching them on and off when I want to watch some shows.
A smaller issue I noticed is that PTs solution to poor internet connectivity is to select a lower quality torrent rather than adjust the file you are downloading.