Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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

Awesome Lists containing this project

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

- email
- 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/sh

curl \
--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/sh

curl \
--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/sh

echo "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.