Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/sentriz/betanin
beets based mitm of your torrent client and music player
https://github.com/sentriz/betanin
automation beets docker flask htpc plex self-hosted torrent transmission vue
Last synced: 6 days ago
JSON representation
beets based mitm of your torrent client and music player
- Host: GitHub
- URL: https://github.com/sentriz/betanin
- Owner: sentriz
- License: gpl-3.0
- Created: 2018-07-30T17:10:02.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2024-10-29T23:40:51.000Z (about 1 month ago)
- Last Synced: 2024-11-29T08:02:55.909Z (13 days ago)
- Topics: automation, beets, docker, flask, htpc, plex, self-hosted, torrent, transmission, vue
- Language: Python
- Homepage:
- Size: 4.5 MB
- Stars: 344
- Watchers: 6
- Forks: 16
- Open Issues: 16
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
- Self-Hosting-Guide - betanin - Music organization man-in-the-middle of your torrent client and music player. Based on beets.io, similar to Sonarr and Radarr. (Tools for Self-Hosting / Automation)
- awesome-pt - Betanin
README
beets.io based man-in-the-middle of your
torrent client and music player
### workflow
### notifiers
betanin uses [apprise](https://github.com/caronc/apprise) for
notifications. so anything supported there will work. but some include
- discord
- telegram
- emby
### installation
```shell
pip install --user betanin
```
### usage
```shell
# start server
betanin
# a config file will be created, add your credentials to it
# start again
betanin [--host=] [--port=]
# ui will be available at port
# you may also use env vars instead, eg
BETANIN_HOST=0.0.0.0 betanin
BETANIN_PORT=4030 betanin# optionally start cli (for db operations, debugging)
betanin-shell
# or if docker
docker exec -it betanin-shell
```
### screenshots
### docker
###### image
`docker pull sentriz/betanin`
###### volumes `/b/.local/share/betanin/` for a persistent database
`/b/.config/betanin/` for a persistent betanin config
`/b/.config/beets/` for a persistent beets home (point this to your
current beets home if you have one)
`/music/` so beets can access your music
`/downloads/` so beets can access your downloads###### compose
```yml
betanin:
image: sentriz/betanin
ports:
- 9393:9393
restart: unless-stopped
environment:
- UID=1000 # (optionally) set user id
- GID=1000 # (optionally) set group id
volumes:
- ${DATA}/betanin/data:/b/.local/share/betanin/
- ${DATA}/betanin/config:/b/.config/betanin/
- ${DATA}/betanin/beets:/b/.config/beets/
- ${MEDIA}/music:/music/
- ${MEDIA}/downloads:/downloads/
```
### transmission
create a script named `done.sh` or anything you like, and make it
executable:
`chmod +x done.sh`###### settings.json (example excerpt)
```json
...
"script-torrent-done-enabled": true,
"script-torrent-done-filename": "/scripts/done.sh",
...
```###### done script
```bash
#!/bin/shcurl \
--request POST \
--data-urlencode "path=" \
--data-urlencode "name=$TR_TORRENT_NAME" \
--header "X-API-Key: " \
"https://betanin.example.com/api/torrents"
```###### transmission docker compose (excerpt)
```yaml
volumes:
- ${DATA}/transmission/config:/config
- ${DATA}/transmission/scripts:/scripts
- ${MEDIA}/download:/downloads
```
### deluge
create a script named `done.sh` or anything you like, and make it
executable:
`chmod +x done.sh`
you must also be using the
[Execute](https://dev.deluge-torrent.org/wiki/Plugins/Execute) plugin,
set to the `Torrent Complete` event###### done script
```bash
#!/bin/shcurl \
--request POST \
--data-urlencode "path=" \
--data-urlencode "name=$2" \
--header "X-API-Key: " \
"https://betanin.example.com/api/torrents"
```
### qbittorrent
create a script named `done.sh` or anything you like, and make it
executable:
`chmod +x done.sh`open qbittorrent `Tools` > `Options` > check `Run external program on torrent completion`
set the path to the above `done.sh` and arguments such as
```
/path/to/done.sh "%L" "%R"
```###### done script
```bash
#!/bin/shecho "category: $1"
echo "path: $2"[ "$1" != "music" ] && exit
curl \
--request POST \
--data-urlencode "both=$2" \
--header "X-API-Key: " \
"https://betanin.example.com/api/torrents"
```now any music downloaded to the **music** category will be imported by betanin
### developing
###### working on the backend
there is not much else to do, write your code,
`python -m betanin.entry.betanin`, kill it, write your code, etc. the
webserver will be available at __. the static
frontend is served at `/`, and the api is served at `/api`. (there is a
swagger ui there too) also see `python -m betanin.entry.shell`.
if you need to do a manual migration do
`env FLASK_APP='betanin.application:create' flask db migrate --directory betanin_migrations/`
(then upgrades are automatically done on betanin start)###### working on the frontend
start the backend with `python -m betanin.entry.betanin`, but don’t use
the static frontend served at __. Instead, in a
new shell, do `npm --prefix betanin_client/ run serve` and use the
frontend served at __. it will look for a backend
listening on port 9393 locally. after that you can edit anything in
`betanin_client/src`, it will be linted and automatically reflected in
your web browser.