200 lines
8.1 KiB
YAML
200 lines
8.1 KiB
YAML
# yaml-language-server: $schema=./values.schema.json
|
|
image:
|
|
repository: ghcr.io/geek-cookbook/zurg
|
|
pullPolicy: IfNotPresent
|
|
tag: v0.9.3-hotfix.11@sha256:f3110e087387d0584700d43708121135f6b2880290711c682d9f817a0637a3f6
|
|
|
|
service:
|
|
main:
|
|
ports:
|
|
main:
|
|
port: 9999
|
|
targetPort: 9999
|
|
|
|
workload:
|
|
main:
|
|
podSpec:
|
|
containers:
|
|
main:
|
|
probes:
|
|
liveness:
|
|
type: tcp
|
|
readiness:
|
|
type: tcp
|
|
startup:
|
|
type: tcp
|
|
env:
|
|
# forces the use of env vars to be always used!
|
|
zurg_FORCE_ENV: "true"
|
|
# Set this to your rclone's mount `__all__` dir if using Zurg
|
|
LOG_LEVEL: DEBUG
|
|
|
|
zurg:
|
|
token: YOURTOKEN
|
|
|
|
persistence:
|
|
config:
|
|
enabled: true
|
|
mountPath: "/config"
|
|
data:
|
|
enabled: true
|
|
mountPath: "/app/data"
|
|
config-file:
|
|
enabled: true
|
|
type: configmap
|
|
objectName: config-file
|
|
mountPath: /config/config.yml
|
|
subPath: config.yml
|
|
items:
|
|
- key: config.yml
|
|
path: config.yml
|
|
plexupdate-file:
|
|
enabled: true
|
|
type: configmap
|
|
objectName: plexupdate-file
|
|
mountPath: /config/plex_update.sh
|
|
subPath: plex_update.sh
|
|
items:
|
|
- key: plex_update.sh
|
|
path: plex_update.sh
|
|
|
|
configmap:
|
|
config-file:
|
|
enabled: true
|
|
data:
|
|
config.yml: |
|
|
# Zurg configuration version
|
|
zurg: v1
|
|
token: {{ .Values.zurg.token }} # https://real-debrid.com/apitoken
|
|
|
|
# basic functionality
|
|
host: "[::]" # do not change this if you are running it inside a docker container
|
|
port: 9999 # do not change this if you are running it inside a docker container
|
|
concurrent_workers: 32
|
|
check_for_changes_every_secs: 10
|
|
|
|
# misc configs
|
|
retain_folder_name_extension: false # if true, zurg won't modify the filenames from real-debrid
|
|
retain_rd_torrent_name: true # if true, it will strictly follow RD API torrent name property w/c should make this more compatible with rdt-client
|
|
auto_delete_rar_torrents: true # if true, zurg will delete unstreamable rar files (these torrents will always be compressed in a rar archive no matter what files you select)
|
|
use_download_cache: false # if true, during zurg initialization, it will fetch all downloads to unrestrict links faster
|
|
# Disabled by default, causes Plex scanning to get stuck on in-progress files
|
|
enable_repair: false # Don't change this, we run a separate zurg for doing repairs without blocking i/o
|
|
on_library_update: sh plex_update.sh "$@"
|
|
ignore_renames: true
|
|
|
|
# advanced alternative for Jellyfin/Emby support
|
|
# on_library_update: |-
|
|
# # Log the updated directories and send refresh request to autoscan
|
|
# for arg in "$@"
|
|
# do
|
|
# echo "Detected update on: $arg"
|
|
# # URL encode the directory path
|
|
# encoded_arg=$(python -c "import urllib.parse; print(urllib.parse.quote_plus('$arg'))")
|
|
# curl -s -X GET "http://autoscan:3030/triggers/manual?dir=/storage/realdebrid-zurg/$encoded_arg"
|
|
# done
|
|
# echo "All updated sections refreshed."
|
|
|
|
# network configs
|
|
network_buffer_size: 1048576 # 1 MiB
|
|
serve_from_rclone: false # serve file data from rclone, not from zurg (zurg will only provide rclone the link to download)
|
|
verify_download_link: true # if true, zurg will check if the link is truly streamable; only relevant if serve_from_rclone is set to true (as it already does this all the time if serve_from_rclone is false)
|
|
force_ipv6: false # force connect to real-debrid ipv6 addresses
|
|
rate_limit_sleep_secs: 6 # wait time after getting a 429 from Real-Debrid API
|
|
realdebrid_timeout_secs: 60 # api timeout
|
|
retries_until_failed: 5 # api failures until considered failed
|
|
# preferred_hosts: # Run ./zurg network-test
|
|
# - 20.download.real-debrid.com
|
|
# - 21.download.real-debrid.com
|
|
# - 22.download.real-debrid.com
|
|
# - 23.download.real-debrid.com
|
|
# - 30.download.real-debrid.com
|
|
# - 31.download.real-debrid.com
|
|
# - 32.download.real-debrid.com
|
|
# - 34.download.real-debrid.com
|
|
# - 40.download.real-debrid.com
|
|
|
|
# List of directory definitions and their filtering rules
|
|
directories:
|
|
# Configuration for anime shows
|
|
anime:
|
|
group: media # directories on different groups have duplicates of the same torrent
|
|
group_order: 10 # group order = priority, it defines who eats first on a group
|
|
filters:
|
|
- and: # you can use nested 'and' & 'or' conditions
|
|
- has_episodes: true # intelligent detection of episode files inside a torrent
|
|
- any_file_inside_regex: /^\[/ # usually anime starts with [ e.g. [SubsPlease]
|
|
- any_file_inside_not_regex: /s\d\de\d\d/i # and usually anime doesn't use SxxExx
|
|
|
|
shows:
|
|
group: media
|
|
group_order: 20
|
|
filters:
|
|
- has_episodes: true # intelligent detection of episode files inside a torrent
|
|
|
|
movies:
|
|
group: media # because anime, shows and movies are in the same group,
|
|
group_order: 30 # and anime and shows has a lower group_order number than movies, all torrents that doesn't fall into the previous 2 will fall into movies
|
|
only_show_the_biggest_file: true # let's not show the other files besides the movie itself
|
|
filters:
|
|
- regex: /.*/ # you cannot leave a directory without filters because it will not have any torrents in it
|
|
|
|
plexupdate-file:
|
|
enabled: true
|
|
data:
|
|
plex_update.sh: |
|
|
#!/bin/bash
|
|
|
|
# PLEX PARTIAL SCAN script or PLEX UPDATE script
|
|
# When zurg detects changes, it can trigger this script IF your config.yml contains
|
|
# on_library_update: sh plex_update.sh "$@"
|
|
# Modified from https://github.com/debridmediamanager/zurg-testing/blob/main/plex_update.sh
|
|
|
|
plex_url="http://plex:32400" # If you're using zurg inside a Docker container, by default it is 172.17.0.1:32400
|
|
token="yourplextoken" # open Plex in a browser, open dev console and copy-paste this: window.localStorage.getItem("myPlexAccessToken")
|
|
zurg_mount="/storage/realdebrid-zurg" # replace with your zurg mount path, ensure this is what Plex sees
|
|
|
|
# Get the list of section IDs
|
|
section_ids=$(curl -sLX GET "$plex_url/library/sections" -H "X-Plex-Token: $token" | xmllint --xpath "//Directory/@key" - | sed 's/key="//g' | tr '"' '\n')
|
|
|
|
for arg in "$@"
|
|
do
|
|
modified_arg="$zurg_mount/$arg"
|
|
echo "Detected update on: $arg"
|
|
echo "Absolute path: $modified_arg"
|
|
|
|
##### START Added by ElfHosted for auto DMM symlinking ###
|
|
echo "Symlinking $modified_arg to /storage/symlinks/real-debrid-blackhole/$arg"
|
|
|
|
# Ensure blackhole exists
|
|
mkdir -p /storage/symlinks/real-debrid-blackhole/movies
|
|
mkdir -p /storage/symlinks/real-debrid-blackhole/shows
|
|
|
|
# Copy to the RD blackhole, preserving the directory structure
|
|
cp -rs "$modified_arg/"* "/storage/symlinks/real-debrid-blackhole/$(echo $arg | cut -f1 -d/)/"
|
|
##### END Added by ElfHosted for auto DMM symlinking ###
|
|
|
|
encoded_arg=$(echo -n "$modified_arg" | python3 -c "import sys, urllib.parse as ul; print (ul.quote_plus(sys.stdin.read()))")
|
|
|
|
if [ -z "$encoded_arg" ]; then
|
|
echo "Error: Encoded argument is empty. Check the input or encoding process."
|
|
continue
|
|
fi
|
|
|
|
for section_id in $section_ids
|
|
do
|
|
final_url="${plex_url}/library/sections/${section_id}/refresh?path=${encoded_arg}&X-Plex-Token=${token}"
|
|
|
|
echo "Encoded argument: $encoded_arg"
|
|
echo "Section ID: $section_id"
|
|
echo "Final URL: $final_url"
|
|
|
|
curl -s "$final_url"
|
|
done
|
|
|
|
done
|
|
|
|
echo "All updated sections refreshed"
|
|
|
|
# credits to godver3
|