diff --git a/.env.example b/.env.example index 730f4c562..b33cd6ba6 100644 --- a/.env.example +++ b/.env.example @@ -1,299 +1,409 @@ # Example Environment Variables for Riven (backend only!) +# +# HOW TO USE THIS FILE: +# 1. Copy this file to .env in the same directory +# 2. Most settings have sensible defaults - only uncomment lines you want to override +# 3. You MUST define the variables in the "Required Settings" section +# 4. Env vars are used to create settings.json on first run. After that, settings.json +# takes precedence unless RIVEN_FORCE_ENV=true (env vars override on every restart) +# 5. The docker-compose.yml uses `env_file: .env` to pass all variables to the container. #------------------------------------- -# Non settings file variables +# Required Settings +#------------------------------------- + +# Backend Postgres database settings +RIVEN_BACKEND_DB_USER=postgres +RIVEN_BACKEND_DB_PASSWORD="change-to-secure-password" +RIVEN_BACKEND_DB_NAME=riven +RIVEN_BACKEND_DB_HOST=riven-db +RIVEN_BACKEND_DB_PORT=5432 + +# Host mount path (where Riven FUSE filesystem is accessible to Plex/Jellyfin on the host) +# IMPORTANT: docker-compose will fail until this is uncommented and set! +# +# Create and configure the mount point on the host before starting: +# RIVEN_HOST_MOUNT_PATH=/mnt/riven +# sudo mkdir -p $RIVEN_HOST_MOUNT_PATH +# sudo mount --bind $RIVEN_HOST_MOUNT_PATH $RIVEN_HOST_MOUNT_PATH +# sudo mount --make-rshared $RIVEN_HOST_MOUNT_PATH +# # If not running docker as root, also run: +# sudo chown 1000:1000 $RIVEN_HOST_MOUNT_PATH +# # Verify mount propagation (should show "shared" or "rshared"): +# findmnt -T $RIVEN_HOST_MOUNT_PATH -o TARGET,PROPAGATION +# +# RIVEN_HOST_MOUNT_PATH=/mnt/riven + +# Container-internal mount path (don't change unless you know what you're doing) +RIVEN_FILESYSTEM_MOUNT_PATH=/mount + +# PUID and PGID for running Riven process (default to 1000:1000) +PUID=1000 +PGID=1000 + +# TZ timezone for Riven process (default to UTC) +TZ=UTC + +# Container Data paths (required, but docker-compose defaults are provided) +# App data (defaults to ./data) +# RIVEN_APP_DATA=/path/to/riven/data + +# Postgres data (defaults to ./db) +# RIVEN_DB_DATA=/path/to/postgres/data + +#------------------------------------- +# Advanced / Non application settings file variables #------------------------------------- # This is used to specify settings filename. By default it's settings.json. -SETTINGS_FILENAME="settings.json" +# SETTINGS_FILENAME="settings.json" # This will reset the database and recreate all tables, and then exit after running! -HARD_RESET=false +# HARD_RESET=false -# Manual api key, must be 32 characters long -API_KEY=1234567890qwertyuiopas +# Force environment variables to override settings.json on every restart +# RIVEN_FORCE_ENV=true + +# API key for Riven access, must be 32 characters long (automatically generated if not set) +# RIVEN_API_KEY= #------------------------------------- -# Riven Settings +# Logging and Debug Settings #------------------------------------- -RIVEN_DEBUG="INFO" -RIVEN_TRACEMALLOC=false +# File logging settings +# RIVEN_LOGGING_ENABLED=true +# RIVEN_LOGGING_RETENTION_HOURS=24 +# RIVEN_LOGGING_ROTATION_MB=10 + +# RIVEN_LOG_LEVEL="INFO" +# RIVEN_TRACEMALLOC=false +# RIVEN_ENABLE_NETWORK_TRACING=false +# RIVEN_ENABLE_STREAM_TRACING=false #------------------------------------- # Filesystem (VFS) Settings #------------------------------------- # Symlink settings have been removed. Configure the Filesystem/VFS settings in your settings file. -# VFS host mount path (where Riven mounts the FUSE filesystem on the host) -RIVEN_FILESYSTEM_MOUNT_PATH=/path/to/riven/mount -# Place anime under separate top-level dirs (/anime_movies, /anime_shows) -RIVEN_FILESYSTEM_SEPARATE_ANIME_DIRS=false # VFS cache settings -RIVEN_FILESYSTEM_CACHE_DIR=/dev/shm/riven-cache -RIVEN_FILESYSTEM_CACHE_MAX_SIZE_MB=1024 -RIVEN_FILESYSTEM_CACHE_TTL_SECONDS=7200 -RIVEN_FILESYSTEM_CACHE_EVICTION=LRU # LRU | TTL -RIVEN_FILESYSTEM_CACHE_METRICS=true -RIVEN_FILESYSTEM_CHUNK_SIZE_MB=8 -RIVEN_FILESYSTEM_FETCH_AHEAD_CHUNKS=1 +# RIVEN_FILESYSTEM_CACHE_DIR=/dev/shm/riven-cache +# RIVEN_FILESYSTEM_CACHE_MAX_SIZE_MB=1024 +# RIVEN_FILESYSTEM_CACHE_TTL_SECONDS=7200 +# RIVEN_FILESYSTEM_CACHE_EVICTION=LRU # LRU | TTL +# RIVEN_FILESYSTEM_CACHE_METRICS=true + +#------------------------------------- +# Stream Settings +#------------------------------------- + +# RIVEN_STREAM_CHUNK_SIZE_MB=8 +# RIVEN_STREAM_CONNECT_TIMEOUT_SECONDS=10 +# RIVEN_STREAM_CHUNK_WAIT_TIMEOUT_SECONDS=10 +# RIVEN_STREAM_ACTIVITY_TIMEOUT_SECONDS=60 #------------------------------------- # Updaters #------------------------------------- -RIVEN_UPDATER_INTERVAL=120 -# VFS library path inside containers/clients (what Plex/players see, must map to the mount) -RIVEN_LIBRARY_PATH=/path/to/library/mount -RIVEN_PLEX_ENABLED=false -RIVEN_PLEX_TOKEN= -RIVEN_PLEX_URL=http://localhost:32400 -RIVEN_JELLYFIN_ENABLED=false -RIVEN_JELLYFIN_API_KEY= -RIVEN_JELLYFIN_URL=http://localhost:8096 -RIVEN_EMBY_ENABLED=false -RIVEN_EMBY_API_KEY= -RIVEN_EMBY_URL=http://localhost:8096 +# RIVEN_UPDATERS_UPDATER_INTERVAL=120 +# # VFS library path inside containers/clients (what Plex/players see, must map to the mount) +# RIVEN_UPDATERS_LIBRARY_PATH=/path/to/library/mount +# RIVEN_UPDATERS_PLEX_ENABLED=false +# RIVEN_UPDATERS_PLEX_TOKEN= +# RIVEN_UPDATERS_PLEX_URL=http://localhost:32400 +# RIVEN_UPDATERS_JELLYFIN_ENABLED=false +# RIVEN_UPDATERS_JELLYFIN_API_KEY= +# RIVEN_UPDATERS_JELLYFIN_URL=http://localhost:8096 +# RIVEN_UPDATERS_EMBY_ENABLED=false +# RIVEN_UPDATERS_EMBY_API_KEY= +# RIVEN_UPDATERS_EMBY_URL=http://localhost:8096 #------------------------------------- # Downloaders #------------------------------------- -RIVEN_DOWNLOADERS_VIDEO_EXTENSIONS=["mp4","mkv","avi"] -RIVEN_DOWNLOADERS_PROXY_URL= -RIVEN_DOWNLOADERS_REAL_DEBRID_ENABLED=false -RIVEN_DOWNLOADERS_REAL_DEBRID_API_KEY= -RIVEN_DOWNLOADERS_ALL_DEBRID_ENABLED=false -RIVEN_DOWNLOADERS_ALL_DEBRID_API_KEY= +# RIVEN_DOWNLOADERS_VIDEO_EXTENSIONS=["mp4","mkv","avi"] +# # Filesize limits in MB (-1 for no limit) +# RIVEN_DOWNLOADERS_MOVIE_FILESIZE_MB_MIN=700 +# RIVEN_DOWNLOADERS_MOVIE_FILESIZE_MB_MAX=-1 +# RIVEN_DOWNLOADERS_EPISODE_FILESIZE_MB_MIN=100 +# RIVEN_DOWNLOADERS_EPISODE_FILESIZE_MB_MAX=-1 +# RIVEN_DOWNLOADERS_PROXY_URL= +# RIVEN_DOWNLOADERS_REAL_DEBRID_ENABLED=false +# RIVEN_DOWNLOADERS_REAL_DEBRID_API_KEY= +# RIVEN_DOWNLOADERS_ALL_DEBRID_ENABLED=false +# RIVEN_DOWNLOADERS_ALL_DEBRID_API_KEY= +# RIVEN_DOWNLOADERS_DEBRID_LINK_ENABLED=false +# RIVEN_DOWNLOADERS_DEBRID_LINK_API_KEY= #------------------------------------- # Content #------------------------------------- -RIVEN_CONTENT_OVERSEERR_ENABLED=false -RIVEN_CONTENT_OVERSEERR_API_KEY= -RIVEN_CONTENT_OVERSEERR_URL=http://localhost:5055 -RIVEN_CONTENT_OVERSEERR_USE_WEBHOOK=false -RIVEN_CONTENT_OVERSEERR_UPDATE_INTERVAL=60 -RIVEN_CONTENT_PLEX_WATCHLIST_ENABLED=false -RIVEN_CONTENT_PLEX_WATCHLIST_RSS=[] -RIVEN_CONTENT_PLEX_WATCHLIST_UPDATE_INTERVAL=60 -RIVEN_CONTENT_MDBLIST_ENABLED=false -RIVEN_CONTENT_MDBLIST_API_KEY= -RIVEN_CONTENT_MDBLIST_UPDATE_INTERVAL=300 -RIVEN_CONTENT_MDBLIST_LISTS=[] -RIVEN_CONTENT_LISTRR_ENABLED=false -RIVEN_CONTENT_LISTRR_API_KEY= -RIVEN_CONTENT_LISTRR_UPDATE_INTERVAL=300 -RIVEN_CONTENT_LISTRR_MOVIE_LISTS=[] -RIVEN_CONTENT_LISTRR_SHOW_LISTS=[] -RIVEN_CONTENT_TRAKT_ENABLED=false -RIVEN_CONTENT_TRAKT_API_KEY= -RIVEN_CONTENT_TRAKT_UPDATE_INTERVAL=300 +# RIVEN_CONTENT_OVERSEERR_ENABLED=false +# RIVEN_CONTENT_OVERSEERR_API_KEY= +# RIVEN_CONTENT_OVERSEERR_URL=http://localhost:5055 +# RIVEN_CONTENT_OVERSEERR_USE_WEBHOOK=false +# RIVEN_CONTENT_OVERSEERR_UPDATE_INTERVAL=60 +# RIVEN_CONTENT_PLEX_WATCHLIST_ENABLED=false +# RIVEN_CONTENT_PLEX_WATCHLIST_RSS=[] +# RIVEN_CONTENT_PLEX_WATCHLIST_UPDATE_INTERVAL=60 +# RIVEN_CONTENT_MDBLIST_ENABLED=false +# RIVEN_CONTENT_MDBLIST_API_KEY= +# RIVEN_CONTENT_MDBLIST_UPDATE_INTERVAL=300 +# RIVEN_CONTENT_MDBLIST_LISTS=[] +# RIVEN_CONTENT_LISTRR_ENABLED=false +# RIVEN_CONTENT_LISTRR_API_KEY= +# RIVEN_CONTENT_LISTRR_UPDATE_INTERVAL=300 +# RIVEN_CONTENT_LISTRR_MOVIE_LISTS=[] +# RIVEN_CONTENT_LISTRR_SHOW_LISTS=[] +# RIVEN_CONTENT_TRAKT_ENABLED=false +# RIVEN_CONTENT_TRAKT_API_KEY= +# RIVEN_CONTENT_TRAKT_UPDATE_INTERVAL=300 + +#------------------------------------- +# Indexer +#------------------------------------- + +# Offset in minutes after aired_at time to schedule scraping for episodes and movies +# RIVEN_INDEXER_SCHEDULE_OFFSET_MINUTES=30 #------------------------------------- # Scrapers #------------------------------------- -# The interval to retry scraping an item after it's failed, in hours. -RIVEN_SCRAPING_AFTER_2=2.0 -RIVEN_SCRAPING_AFTER_5=6 -RIVEN_SCRAPING_AFTER_10=24 - -# This will enable aliases for the scraper, which will allow for more accurate scraping. -# This can sometimes cause issues if there are alias titles that aren't exactly the same as the title in the library. -RIVEN_SCRAPING_ENABLE_ALIASES=true - -RIVEN_SCRAPING_TORRENTIO_ENABLED=false -RIVEN_SCRAPING_TORRENTIO_FILTER=sort=qualitysize%7Cqualityfilter=480p,scr,cam -RIVEN_SCRAPING_TORRENTIO_URL=http://torrentio.strem.fun -RIVEN_SCRAPING_TORRENTIO_TIMEOUT=30 -RIVEN_SCRAPING_TORRENTIO_RATELIMIT=true -RIVEN_SCRAPING_TORRENTIO_PROXY_URL= -RIVEN_SCRAPING_JACKETT_ENABLED=false -RIVEN_SCRAPING_JACKETT_URL=http://localhost:9117 -RIVEN_SCRAPING_JACKETT_API_KEY= -RIVEN_SCRAPING_JACKETT_TIMEOUT=30 -RIVEN_SCRAPING_JACKETT_RATELIMIT=true -RIVEN_SCRAPING_PROWLARR_ENABLED=false -RIVEN_SCRAPING_PROWLARR_URL=http://localhost:9696 -RIVEN_SCRAPING_PROWLARR_API_KEY= -RIVEN_SCRAPING_PROWLARR_TIMEOUT=30 -RIVEN_SCRAPING_PROWLARR_RATELIMIT=true -RIVEN_SCRAPING_PROWLARR_LIMITER_SECONDS=60 -RIVEN_SCRAPING_ORIONOID_ENABLED=false -RIVEN_SCRAPING_ORIONOID_API_KEY= -RIVEN_SCRAPING_ORIONOID_CACHED_RESULTS_ONLY=false -RIVEN_SCRAPING_ORIONOID_PARAMETERS_VIDEO3D=false # See the Orionoid API docs for more information on these parameters. -RIVEN_SCRAPING_ORIONOID_PARAMETERS_VIDEOQUALITY=sd_hd8k # See the Orionoid API docs for more information on these parameters. -RIVEN_SCRAPING_ORIONOID_PARAMETERS_LIMITCOUNT=5 # See the Orionoid API docs for more information on these parameters. -RIVEN_SCRAPING_ORIONOID_TIMEOUT=30 -RIVEN_SCRAPING_ORIONOID_RATELIMIT=true -RIVEN_SCRAPING_MEDIAFUSION_ENABLED=false -RIVEN_SCRAPING_MEDIAFUSION_URL=https://mediafusion.elfhosted.com -RIVEN_SCRAPING_MEDIAFUSION_TIMEOUT=30 -RIVEN_SCRAPING_MEDIAFUSION_RATELIMIT=true -RIVEN_SCRAPING_MEDIAFUSION_CATALOGS=prowlarr_streams,torrentio_streams -RIVEN_SCRAPING_ZILEAN_ENABLED=false -RIVEN_SCRAPING_ZILEAN_URL=http://localhost:8181 -RIVEN_SCRAPING_ZILEAN_TIMEOUT=30 -RIVEN_SCRAPING_ZILEAN_RATELIMIT=true -RIVEN_SCRAPING_COMET_ENABLED=false -RIVEN_SCRAPING_COMET_URL=http://localhost:8000 -RIVEN_SCRAPING_COMET_INDEXERS=bitsearch,eztv,thepiratebay,therarbg,yts -RIVEN_SCRAPING_COMET_TIMEOUT=30 -RIVEN_SCRAPING_COMET_RATELIMIT=true +# # Interval in seconds to retry failed library items (0 to disable) +# RIVEN_RETRY_INTERVAL=86400 + +# # The interval to retry scraping an item after it's failed, in hours. +# RIVEN_SCRAPING_AFTER_2=2.0 +# RIVEN_SCRAPING_AFTER_5=6 +# RIVEN_SCRAPING_AFTER_10=24 + +# # This will enable aliases for the scraper, which will allow for more accurate scraping. +# # This can sometimes cause issues if there are alias titles that aren't exactly the same as the title in the library. +# RIVEN_SCRAPING_ENABLE_ALIASES=true +# # Maximum results per quality bucket +# RIVEN_SCRAPING_BUCKET_LIMIT=5 +# # Maximum failed scrape attempts before giving up (0 = unlimited) +# RIVEN_SCRAPING_MAX_FAILED_ATTEMPTS=0 +# # Only scrape dubbed anime content +# RIVEN_SCRAPING_DUBBED_ANIME_ONLY=false + +# RIVEN_SCRAPING_TORRENTIO_ENABLED=false +# RIVEN_SCRAPING_TORRENTIO_FILTER=sort=qualitysize%7Cqualityfilter=480p,scr,cam +# RIVEN_SCRAPING_TORRENTIO_URL=http://torrentio.strem.fun +# RIVEN_SCRAPING_TORRENTIO_TIMEOUT=30 +# RIVEN_SCRAPING_TORRENTIO_RATELIMIT=true +# RIVEN_SCRAPING_TORRENTIO_PROXY_URL= +# RIVEN_SCRAPING_JACKETT_ENABLED=false +# RIVEN_SCRAPING_JACKETT_URL=http://localhost:9117 +# RIVEN_SCRAPING_JACKETT_API_KEY= +# RIVEN_SCRAPING_JACKETT_TIMEOUT=30 +# RIVEN_SCRAPING_JACKETT_RATELIMIT=true +# RIVEN_SCRAPING_PROWLARR_ENABLED=false +# RIVEN_SCRAPING_PROWLARR_URL=http://localhost:9696 +# RIVEN_SCRAPING_PROWLARR_API_KEY= +# RIVEN_SCRAPING_PROWLARR_TIMEOUT=30 +# RIVEN_SCRAPING_PROWLARR_RATELIMIT=true +# RIVEN_SCRAPING_PROWLARR_LIMITER_SECONDS=60 +# RIVEN_SCRAPING_ORIONOID_ENABLED=false +# RIVEN_SCRAPING_ORIONOID_API_KEY= +# RIVEN_SCRAPING_ORIONOID_CACHED_RESULTS_ONLY=false +# RIVEN_SCRAPING_ORIONOID_PARAMETERS_VIDEO3D=false # See the Orionoid API docs for more information on these parameters. +# RIVEN_SCRAPING_ORIONOID_PARAMETERS_VIDEOQUALITY=sd_hd8k # See the Orionoid API docs for more information on these parameters. +# RIVEN_SCRAPING_ORIONOID_PARAMETERS_LIMITCOUNT=5 # See the Orionoid API docs for more information on these parameters. +# RIVEN_SCRAPING_ORIONOID_TIMEOUT=30 +# RIVEN_SCRAPING_ORIONOID_RATELIMIT=true +# RIVEN_SCRAPING_MEDIAFUSION_ENABLED=false +# RIVEN_SCRAPING_MEDIAFUSION_URL=https://mediafusion.elfhosted.com +# RIVEN_SCRAPING_MEDIAFUSION_TIMEOUT=30 +# RIVEN_SCRAPING_MEDIAFUSION_RATELIMIT=true +# RIVEN_SCRAPING_MEDIAFUSION_CATALOGS=prowlarr_streams,torrentio_streams +# RIVEN_SCRAPING_ZILEAN_ENABLED=false +# RIVEN_SCRAPING_ZILEAN_URL=http://localhost:8181 +# RIVEN_SCRAPING_ZILEAN_TIMEOUT=30 +# RIVEN_SCRAPING_ZILEAN_RATELIMIT=true +# RIVEN_SCRAPING_COMET_ENABLED=false +# RIVEN_SCRAPING_COMET_URL=http://localhost:8000 +# RIVEN_SCRAPING_COMET_INDEXERS=bitsearch,eztv,thepiratebay,therarbg,yts +# RIVEN_SCRAPING_COMET_TIMEOUT=30 +# RIVEN_SCRAPING_COMET_RATELIMIT=true +# RIVEN_SCRAPING_RARBG_ENABLED=false +# RIVEN_SCRAPING_RARBG_URL=https://therarbg.to +# RIVEN_SCRAPING_RARBG_TIMEOUT=30 +# RIVEN_SCRAPING_RARBG_RATELIMIT=true #------------------------------------- # Ranking #------------------------------------- -RIVEN_RANKING_PROFILE=default -RIVEN_RANKING_REQUIRE=[] -RIVEN_RANKING_EXCLUDE=[] -RIVEN_RANKING_PREFERRED=[] -RIVEN_RANKING_RESOLUTIONS_2160P=false -RIVEN_RANKING_RESOLUTIONS_1080P=true -RIVEN_RANKING_RESOLUTIONS_720P=true -RIVEN_RANKING_RESOLUTIONS_480P=false -RIVEN_RANKING_RESOLUTIONS_360P=false -RIVEN_RANKING_RESOLUTIONS_UNKNOWN=true -RIVEN_RANKING_OPTIONS_TITLE_SIMILARITY=0.85 -RIVEN_RANKING_OPTIONS_REMOVE_ALL_TRASH=true -RIVEN_RANKING_OPTIONS_REMOVE_RANKS_UNDER=-10000 -RIVEN_RANKING_OPTIONS_REMOVE_UNKNOWN_LANGUAGES=false -RIVEN_RANKING_OPTIONS_ALLOW_ENGLISH_IN_LANGUAGES=false -RIVEN_RANKING_LANGUAGES_REQUIRED=[] -RIVEN_RANKING_LANGUAGES_EXCLUDE=["common"] -RIVEN_RANKING_LANGUAGES_PREFERRED=[] -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_AV1_FETCH=false -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_AV1_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_AV1_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_AVC_FETCH=true -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_AVC_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_AVC_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_BLURAY_FETCH=true -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_BLURAY_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_BLURAY_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_DVD_FETCH=false -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_DVD_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_DVD_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_HDTV_FETCH=true -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_HDTV_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_HDTV_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_HEVC_FETCH=true -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_HEVC_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_HEVC_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_MPEG_FETCH=false -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_MPEG_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_MPEG_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_REMUX_FETCH=false -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_REMUX_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_REMUX_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_VHS_FETCH=false -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_VHS_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_VHS_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_WEB_FETCH=true -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_WEB_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_WEB_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_WEBDL_FETCH=true -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_WEBDL_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_WEBDL_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_WEBMUX_FETCH=false -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_WEBMUX_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_WEBMUX_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_XVID_FETCH=false -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_XVID_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_QUALITY_XVID_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_RIPS_BDRIP_FETCH=false -RIVEN_RANKING_CUSTOM_RANKS_RIPS_BDRIP_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_RIPS_BDRIP_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_RIPS_BRRIP_FETCH=false -RIVEN_RANKING_CUSTOM_RANKS_RIPS_BRRIP_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_RIPS_BRRIP_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_RIPS_DVDRIP_FETCH=false -RIVEN_RANKING_CUSTOM_RANKS_RIPS_DVDRIP_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_RIPS_DVDRIP_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_RIPS_HDRIP_FETCH=false -RIVEN_RANKING_CUSTOM_RANKS_RIPS_HDRIP_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_RIPS_HDRIP_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_RIPS_PPVRIP_FETCH=false -RIVEN_RANKING_CUSTOM_RANKS_RIPS_PPVRIP_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_RIPS_PPVRIP_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_RIPS_SATRIP_FETCH=false -RIVEN_RANKING_CUSTOM_RANKS_RIPS_SATRIP_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_RIPS_SATRIP_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_RIPS_TVRIP_FETCH=false -RIVEN_RANKING_CUSTOM_RANKS_RIPS_TVRIP_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_RIPS_TVRIP_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_RIPS_UHDRIP_FETCH=false -RIVEN_RANKING_CUSTOM_RANKS_RIPS_UHDRIP_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_RIPS_UHDRIP_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_RIPS_VHSRIP_FETCH=false -RIVEN_RANKING_CUSTOM_RANKS_RIPS_VHSRIP_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_RIPS_VHSRIP_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_RIPS_WEBDLRIP_FETCH=false -RIVEN_RANKING_CUSTOM_RANKS_RIPS_WEBDLRIP_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_RIPS_WEBDLRIP_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_RIPS_WEBRIP_FETCH=true -RIVEN_RANKING_CUSTOM_RANKS_RIPS_WEBRIP_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_RIPS_WEBRIP_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_HDR_10BIT_FETCH=true -RIVEN_RANKING_CUSTOM_RANKS_HDR_10BIT_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_HDR_10BIT_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_HDR_DOLBY_VISION_FETCH=true -RIVEN_RANKING_CUSTOM_RANKS_HDR_DOLBY_VISION_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_HDR_DOLBY_VISION_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_HDR_HDR_FETCH=true -RIVEN_RANKING_CUSTOM_RANKS_HDR_HDR_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_HDR_HDR_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_HDR_HDR10PLUS_FETCH=true -RIVEN_RANKING_CUSTOM_RANKS_HDR_HDR10PLUS_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_HDR_HDR10PLUS_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_HDR_SDR_FETCH=true -RIVEN_RANKING_CUSTOM_RANKS_HDR_SDR_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_HDR_SDR_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_AAC_FETCH=true -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_AAC_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_AAC_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_AC3_FETCH=true -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_AC3_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_AC3_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_ATMOS_FETCH=true -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_ATMOS_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_ATMOS_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_DOLBY_DIGITAL_FETCH=true -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_DOLBY_DIGITAL_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_DOLBY_DIGITAL_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_DOLBY_DIGITAL_PLUS_FETCH=true -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_DOLBY_DIGITAL_PLUS_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_DOLBY_DIGITAL_PLUS_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_DTS_LOSSY_FETCH=true -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_DTS_LOSSY_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_DTS_LOSSY_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_DTS_LOSSLESS_FETCH=true -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_DTS_LOSSLESS_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_DTS_LOSSLESS_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_EAC3_FETCH=true -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_EAC3_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_EAC3_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_FLAC_FETCH=true -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_FLAC_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_FLAC_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_MONO_FETCH=false -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_MONO_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_MONO_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_MP3_FETCH=false -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_MP3_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_MP3_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_STEREO_FETCH=true -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_STEREO_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_STEREO_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_SURROUND_FETCH=true -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_SURROUND_USE_CUSTOM_RANK=false -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_SURROUND_RANK=0 -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_TRUEHD_FETCH=true -RIVEN_RANKING_CUSTOM_RANKS_AUDIO_TRUEHD_USE_CUSTOM_RANK=false +# RIVEN_RANKING_PROFILE=default +# RIVEN_RANKING_REQUIRE=[] +# RIVEN_RANKING_EXCLUDE=[] +# RIVEN_RANKING_PREFERRED=[] +# RIVEN_RANKING_RESOLUTIONS_2160P=false +# RIVEN_RANKING_RESOLUTIONS_1080P=true +# RIVEN_RANKING_RESOLUTIONS_720P=true +# RIVEN_RANKING_RESOLUTIONS_480P=false +# RIVEN_RANKING_RESOLUTIONS_360P=false +# RIVEN_RANKING_RESOLUTIONS_UNKNOWN=true +# RIVEN_RANKING_OPTIONS_TITLE_SIMILARITY=0.85 +# RIVEN_RANKING_OPTIONS_REMOVE_ALL_TRASH=true +# RIVEN_RANKING_OPTIONS_REMOVE_RANKS_UNDER=-10000 +# RIVEN_RANKING_OPTIONS_REMOVE_UNKNOWN_LANGUAGES=false +# RIVEN_RANKING_OPTIONS_ALLOW_ENGLISH_IN_LANGUAGES=false +# RIVEN_RANKING_LANGUAGES_REQUIRED=[] +# RIVEN_RANKING_LANGUAGES_EXCLUDE=["common"] +# RIVEN_RANKING_LANGUAGES_PREFERRED=[] +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_AV1_FETCH=false +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_AV1_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_AV1_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_AVC_FETCH=true +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_AVC_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_AVC_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_BLURAY_FETCH=true +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_BLURAY_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_BLURAY_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_DVD_FETCH=false +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_DVD_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_DVD_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_HDTV_FETCH=true +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_HDTV_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_HDTV_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_HEVC_FETCH=true +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_HEVC_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_HEVC_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_MPEG_FETCH=false +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_MPEG_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_MPEG_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_REMUX_FETCH=false +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_REMUX_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_REMUX_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_VHS_FETCH=false +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_VHS_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_VHS_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_WEB_FETCH=true +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_WEB_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_WEB_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_WEBDL_FETCH=true +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_WEBDL_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_WEBDL_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_WEBMUX_FETCH=false +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_WEBMUX_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_WEBMUX_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_XVID_FETCH=false +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_XVID_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_QUALITY_XVID_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_RIPS_BDRIP_FETCH=false +# RIVEN_RANKING_CUSTOM_RANKS_RIPS_BDRIP_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_RIPS_BDRIP_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_RIPS_BRRIP_FETCH=false +# RIVEN_RANKING_CUSTOM_RANKS_RIPS_BRRIP_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_RIPS_BRRIP_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_RIPS_DVDRIP_FETCH=false +# RIVEN_RANKING_CUSTOM_RANKS_RIPS_DVDRIP_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_RIPS_DVDRIP_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_RIPS_HDRIP_FETCH=false +# RIVEN_RANKING_CUSTOM_RANKS_RIPS_HDRIP_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_RIPS_HDRIP_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_RIPS_PPVRIP_FETCH=false +# RIVEN_RANKING_CUSTOM_RANKS_RIPS_PPVRIP_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_RIPS_PPVRIP_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_RIPS_SATRIP_FETCH=false +# RIVEN_RANKING_CUSTOM_RANKS_RIPS_SATRIP_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_RIPS_SATRIP_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_RIPS_TVRIP_FETCH=false +# RIVEN_RANKING_CUSTOM_RANKS_RIPS_TVRIP_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_RIPS_TVRIP_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_RIPS_UHDRIP_FETCH=false +# RIVEN_RANKING_CUSTOM_RANKS_RIPS_UHDRIP_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_RIPS_UHDRIP_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_RIPS_VHSRIP_FETCH=false +# RIVEN_RANKING_CUSTOM_RANKS_RIPS_VHSRIP_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_RIPS_VHSRIP_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_RIPS_WEBDLRIP_FETCH=false +# RIVEN_RANKING_CUSTOM_RANKS_RIPS_WEBDLRIP_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_RIPS_WEBDLRIP_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_RIPS_WEBRIP_FETCH=true +# RIVEN_RANKING_CUSTOM_RANKS_RIPS_WEBRIP_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_RIPS_WEBRIP_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_HDR_10BIT_FETCH=true +# RIVEN_RANKING_CUSTOM_RANKS_HDR_10BIT_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_HDR_10BIT_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_HDR_DOLBY_VISION_FETCH=true +# RIVEN_RANKING_CUSTOM_RANKS_HDR_DOLBY_VISION_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_HDR_DOLBY_VISION_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_HDR_HDR_FETCH=true +# RIVEN_RANKING_CUSTOM_RANKS_HDR_HDR_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_HDR_HDR_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_HDR_HDR10PLUS_FETCH=true +# RIVEN_RANKING_CUSTOM_RANKS_HDR_HDR10PLUS_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_HDR_HDR10PLUS_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_HDR_SDR_FETCH=true +# RIVEN_RANKING_CUSTOM_RANKS_HDR_SDR_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_HDR_SDR_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_AAC_FETCH=true +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_AAC_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_AAC_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_AC3_FETCH=true +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_AC3_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_AC3_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_ATMOS_FETCH=true +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_ATMOS_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_ATMOS_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_DOLBY_DIGITAL_FETCH=true +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_DOLBY_DIGITAL_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_DOLBY_DIGITAL_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_DOLBY_DIGITAL_PLUS_FETCH=true +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_DOLBY_DIGITAL_PLUS_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_DOLBY_DIGITAL_PLUS_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_DTS_LOSSY_FETCH=true +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_DTS_LOSSY_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_DTS_LOSSY_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_DTS_LOSSLESS_FETCH=true +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_DTS_LOSSLESS_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_DTS_LOSSLESS_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_EAC3_FETCH=true +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_EAC3_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_EAC3_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_FLAC_FETCH=true +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_FLAC_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_FLAC_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_MONO_FETCH=false +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_MONO_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_MONO_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_MP3_FETCH=false +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_MP3_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_MP3_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_STEREO_FETCH=true +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_STEREO_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_STEREO_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_SURROUND_FETCH=true +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_SURROUND_USE_CUSTOM_RANK=false +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_SURROUND_RANK=0 +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_TRUEHD_FETCH=true +# RIVEN_RANKING_CUSTOM_RANKS_AUDIO_TRUEHD_USE_CUSTOM_RANK=false + +#------------------------------------- +# Notifications +#------------------------------------- + +# RIVEN_NOTIFICATIONS_ENABLED=false +# # Item types to send notifications for +# RIVEN_NOTIFICATIONS_ON_ITEM_TYPE=["movie","show","season","episode"] +# # Notification service URLs (e.g., Discord webhooks) +# RIVEN_NOTIFICATIONS_SERVICE_URLS=[] + +#------------------------------------- +# Post Processing +#------------------------------------- + +# # Subtitle downloading +# RIVEN_POST_PROCESSING_SUBTITLE_ENABLED=false +# # Subtitle languages (ISO 639-2 codes) +# RIVEN_POST_PROCESSING_SUBTITLE_LANGUAGES=["eng"] #------------------------------------- # Logger personalisation @@ -304,43 +414,43 @@ RIVEN_RANKING_CUSTOM_RANKS_AUDIO_TRUEHD_USE_CUSTOM_RANK=false # The format is RIVEN_LOGGER__FG= and RIVEN_LOGGER__ICON= # You can find color names here: https://rich.readthedocs.io/en/stable/appendix/colors.html -RIVEN_LOGGER_PROGRAM_FG=cc6600 -RIVEN_LOGGER_PROGRAM_ICON=🤖 -RIVEN_LOGGER_DATABASE_FG=d834eb -RIVEN_LOGGER_DATABASE_ICON=🛢️ -RIVEN_LOGGER_DEBRID_FG=cc3333 -RIVEN_LOGGER_DEBRID_ICON=🔗 -RIVEN_LOGGER_FILESYSTEM_FG=F9E79F -RIVEN_LOGGER_FILESYSTEM_ICON=🔗 -RIVEN_LOGGER_VFS_FG=9B59B6 -RIVEN_LOGGER_VFS_ICON=🧲 -RIVEN_LOGGER_FUSE_FG=999999 -RIVEN_LOGGER_FUSE_ICON=⚙️ -RIVEN_LOGGER_SCRAPER_FG=3D5A80 -RIVEN_LOGGER_SCRAPER_ICON=👻 -RIVEN_LOGGER_COMPLETED_FG=FFFFFF -RIVEN_LOGGER_COMPLETED_ICON=🟢 -RIVEN_LOGGER_CACHE_FG=527826 -RIVEN_LOGGER_CACHE_ICON=📜 -RIVEN_LOGGER_NOT_FOUND_FG=818589 -RIVEN_LOGGER_NOT_FOUND_ICON=🤷‍ -RIVEN_LOGGER_NEW_FG=ce7fab -RIVEN_LOGGER_NEW_ICON=✨ -RIVEN_LOGGER_FILES_FG=FFFFE0 -RIVEN_LOGGER_FILES_ICON=🗃️ -RIVEN_LOGGER_ITEM_FG=92a1cf -RIVEN_LOGGER_ITEM_ICON=🗃️ -RIVEN_LOGGER_DISCOVERY_FG=e56c49 -RIVEN_LOGGER_DISCOVERY_ICON=🔍 -RIVEN_LOGGER_API_FG=006989 -RIVEN_LOGGER_API_ICON=👾 -RIVEN_LOGGER_PLEX_FG=DAD3BE -RIVEN_LOGGER_PLEX_ICON=📽️ -RIVEN_LOGGER_LOCAL_FG=DAD3BE -RIVEN_LOGGER_LOCAL_ICON=📽️ -RIVEN_LOGGER_JELLYFIN_FG=DAD3BE -RIVEN_LOGGER_JELLYFIN_ICON=📽️ -RIVEN_LOGGER_EMBY_FG=DAD3BE -RIVEN_LOGGER_EMBY_ICON=📽️ -RIVEN_LOGGER_TRAKT_FG=006989 -RIVEN_LOGGER_TRAKT_ICON=🍿 +# RIVEN_LOGGER_PROGRAM_FG=cc6600 +# RIVEN_LOGGER_PROGRAM_ICON=🤖 +# RIVEN_LOGGER_DATABASE_FG=d834eb +# RIVEN_LOGGER_DATABASE_ICON=🛢️ +# RIVEN_LOGGER_DEBRID_FG=cc3333 +# RIVEN_LOGGER_DEBRID_ICON=🔗 +# RIVEN_LOGGER_FILESYSTEM_FG=F9E79F +# RIVEN_LOGGER_FILESYSTEM_ICON=🔗 +# RIVEN_LOGGER_VFS_FG=9B59B6 +# RIVEN_LOGGER_VFS_ICON=🧲 +# RIVEN_LOGGER_FUSE_FG=999999 +# RIVEN_LOGGER_FUSE_ICON=⚙️ +# RIVEN_LOGGER_SCRAPER_FG=3D5A80 +# RIVEN_LOGGER_SCRAPER_ICON=👻 +# RIVEN_LOGGER_COMPLETED_FG=FFFFFF +# RIVEN_LOGGER_COMPLETED_ICON=🟢 +# RIVEN_LOGGER_CACHE_FG=527826 +# RIVEN_LOGGER_CACHE_ICON=📜 +# RIVEN_LOGGER_NOT_FOUND_FG=818589 +# RIVEN_LOGGER_NOT_FOUND_ICON=🤷‍ +# RIVEN_LOGGER_NEW_FG=ce7fab +# RIVEN_LOGGER_NEW_ICON=✨ +# RIVEN_LOGGER_FILES_FG=FFFFE0 +# RIVEN_LOGGER_FILES_ICON=🗃️ +# RIVEN_LOGGER_ITEM_FG=92a1cf +# RIVEN_LOGGER_ITEM_ICON=🗃️ +# RIVEN_LOGGER_DISCOVERY_FG=e56c49 +# RIVEN_LOGGER_DISCOVERY_ICON=🔍 +# RIVEN_LOGGER_API_FG=006989 +# RIVEN_LOGGER_API_ICON=👾 +# RIVEN_LOGGER_PLEX_FG=DAD3BE +# RIVEN_LOGGER_PLEX_ICON=📽️ +# RIVEN_LOGGER_LOCAL_FG=DAD3BE +# RIVEN_LOGGER_LOCAL_ICON=📽️ +# RIVEN_LOGGER_JELLYFIN_FG=DAD3BE +# RIVEN_LOGGER_JELLYFIN_ICON=📽️ +# RIVEN_LOGGER_EMBY_FG=DAD3BE +# RIVEN_LOGGER_EMBY_ICON=📽️ +# RIVEN_LOGGER_TRAKT_FG=006989 +# RIVEN_LOGGER_TRAKT_ICON=🍿 diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index 19d3be110..01b8d719c 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -1,5 +1,5 @@ -#docker compose -f docker-compose-dev.yml up -d --build --no-deps -#docker compose -f docker-compose-dev.yml down +# docker compose -f docker-compose-dev.yml up -d --build --no-deps +# docker compose -f docker-compose-dev.yml down services: riven: build: @@ -13,26 +13,32 @@ services: ports: - "8080:8080" environment: - - PUID=1000 - - PGID=1000 - - TZ=UTC - - ORIGIN=${RIVEN_ORIGIN:-http://localhost:8080} + PUID: 1000 + PGID: 1000 + TZ: UTC + ORIGIN: ${RIVEN_ORIGIN:-http://localhost:8080} + RIVEN_DATABASE_HOST: postgresql+psycopg2://postgres:postgres@riven-db:5432/riven devices: - /dev/fuse cap_add: - SYS_ADMIN security_opt: - apparmor:unconfined + healthcheck: + test: curl -s http://localhost:8080 >/dev/null || exit 1 + interval: 30s + timeout: 10s + retries: 10 volumes: - ./container_data/riven:/riven/data - ./container_data/mount:/mount:rshared,z depends_on: - riven_postgres: + riven-db: condition: service_healthy - riven_postgres: + riven-db: image: postgres:17-alpine - container_name: postgres + container_name: riven-postgres ports: - "5432:5432" restart: unless-stopped @@ -48,14 +54,3 @@ services: interval: 10s timeout: 5s retries: 5 - - # jellyfin: - # image: jellyfin/jellyfin - # container_name: jellyfin - # user: 1000:1000 - # restart: unless-stopped - # ports: - # - "8096:8096" - # volumes: - # - ./container_data/jellyfin:/config - # - ./container_data/mount:/mount:rslave,z diff --git a/docker-compose.yml b/docker-compose.yml index cb38e2dce..46960fc4d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,23 +1,34 @@ -services: - # riven-frontend: - # image: spoked/riven-frontend:latest - # container_name: riven-frontend - # restart: unless-stopped - # tty: true - # environment: - # - TZ=Etc/UTC - # ports: - # - 3000:3000 - # volumes: - # - /path/to/riven/frontend:/riven/config # You need to mount a config directory here (different from riven) - # depends_on: - # riven: - # condition: service_started +# ------------------------------------------------------------ +# Docker Compose Profiles +# +# This compose file uses "profiles" to control which optional +# services are started. +# +# Services without a profile always start when running `docker compose up` +# +# Services with a profile only start when that profile is explicitly enabled +# +# Examples: +# docker compose up +# - Starts the core services only +# +# docker compose --profile updaters up +# - Starts core services + Jellyfin +# +# docker compose --profile updaters --profile content up +# - Starts multiple optional service groups +# +# You can also enable profiles via environment variable: +# COMPOSE_PROFILES=updaters,content docker compose up +# +# ------------------------------------------------------------ +services: riven: - image: spoked/riven:latest + image: spoked/riven:dev container_name: riven restart: unless-stopped + env_file: .env ports: - "8080:8080" tty: true @@ -29,46 +40,115 @@ services: devices: - /dev/fuse environment: - - PUID=1000 - - PGID=1000 - - TZ=America/New_York - - RIVEN_FORCE_ENV=true - - RIVEN_DATABASE_HOST=postgresql+psycopg2://postgres:postgres@riven-db/riven + PUID: ${PUID:-1000} + PGID: ${PGID:-1000} + TZ: ${TZ:-America/New_York} + RIVEN_DATABASE_HOST: >- + postgresql+psycopg2://${RIVEN_BACKEND_DB_USER:?set in .env}:${RIVEN_BACKEND_DB_PASSWORD:?set in .env}@${RIVEN_BACKEND_DB_HOST:?set in .env}:${RIVEN_BACKEND_DB_PORT:?set in .env}/${RIVEN_BACKEND_DB_NAME:?set in .env} healthcheck: test: curl -s http://localhost:8080 >/dev/null || exit 1 interval: 30s timeout: 10s retries: 10 - volumes: - - /path/to/riven/data:/riven/data - - /path/to/riven/mount:/mount:rshared,z + volumes: + # NOTE: Make sure RIVEN_APP_DATA and RIVEN_HOST_MOUNT_PATH are created and owned by PUID:PGID + # sudo chown -R 1000:1000 + - ${RIVEN_APP_DATA:-./data}:/riven/data # default to ./data if not set in .env + - ${RIVEN_HOST_MOUNT_PATH:?set in .env}:/mount:rshared,z depends_on: - riven_postgres: + riven-db: condition: service_healthy - riven_postgres: + riven-db: image: postgres:17-alpine - container_name: riven-db + container_name: riven-postgres environment: - PGDATA=/var/lib/postgresql/data/pgdata - - POSTGRES_USER=postgres - - POSTGRES_PASSWORD=postgres - - POSTGRES_DB=riven + - POSTGRES_USER=${RIVEN_BACKEND_DB_USER:?set in .env} + - POSTGRES_PASSWORD=${RIVEN_BACKEND_DB_PASSWORD:?set in .env} + - POSTGRES_DB=${RIVEN_BACKEND_DB_NAME:?set in .env} volumes: - - /path/to/riven/db:/var/lib/postgresql/data/pgdata + # NOTE: Make sure RIVEN_DB_DATA is created and owned by PUID:PGID + # mkdir -p ./db && sudo chown -R 1000:1000 ./db + - ${RIVEN_DB_DATA:-./db}:/var/lib/postgresql/data/pgdata healthcheck: - test: ["CMD-SHELL", "pg_isready -U postgres"] + test: ["CMD-SHELL", "pg_isready"] interval: 10s timeout: 5s retries: 5 + # riven-frontend: (see https://github.com/rivenmedia/riven-frontend/blob/main/docker-compose.yml) + + # Updaters jellyfin: image: jellyfin/jellyfin container_name: jellyfin - user: 1000:1000 + user: ${PUID:-1000}:${PGID:-1000} restart: unless-stopped ports: - - "8096:8096" + - "8096:8096" + volumes: + - ./jellyfin/config:/config + - ${RIVEN_HOST_MOUNT_PATH:?set in .env}:/mount:rslave,z + profiles: + - updaters + + # Content + overseerr: + image: sctx/overseerr:latest + container_name: overseerr + environment: + PUID: ${PUID:-1000} + PGID: ${PGID:-1000} + TZ: ${TZ:-America/New_York} + LOG_LEVEL: debug volumes: - - /path/to/jellyfin/config:/config - - /path/to/riven/mount:/mount:rslave,z + - ./overseerr/config:/app/config + ports: + - 5055:5055 + restart: unless-stopped + profiles: + - content + + # Scrapers + zilean: + image: ipromknight/zilean:latest + restart: unless-stopped + container_name: zilean + tty: true + environment: + POSTGRES_PASSWORD: ${ZILEAN_POSTGRES_PASSWORD:?set in .env} + ports: + - "8181:8181" + volumes: + - ./zilean/data:/app/data + - ./zilean/tmp:/tmp + healthcheck: + test: curl --connect-timeout 10 --silent --show-error --fail http://localhost:8181/healthchecks/ping + timeout: 60s + interval: 30s + retries: 10 + depends_on: + zilean-postgres: + condition: service_healthy + profiles: + - scrapers + zilean-postgres: + image: postgres:17.2-alpine + container_name: zilean-postgres + restart: unless-stopped + shm_size: 2G + environment: + PGDATA: /var/lib/postgresql/data/pgdata + POSTGRES_USER: postgres + POSTGRES_PASSWORD: ${ZILEAN_POSTGRES_PASSWORD:?set in .env} + POSTGRES_DB: zilean + volumes: + - ./zilean/db:/var/lib/postgresql/data/pgdata + healthcheck: + test: [ "CMD-SHELL", "pg_isready -U postgres" ] + interval: 10s + timeout: 5s + retries: 5 + profiles: + - scrapers \ No newline at end of file diff --git a/src/program/utils/__init__.py b/src/program/utils/__init__.py index fab49df85..1907cf511 100644 --- a/src/program/utils/__init__.py +++ b/src/program/utils/__init__.py @@ -29,9 +29,9 @@ def get_version() -> str: def generate_api_key(): """Generate a secure API key of the specified length.""" - API_KEY = os.getenv("API_KEY", "") + API_KEY = os.getenv("RIVEN_API_KEY", "") if len(API_KEY) != 32: - logger.warning("env.API_KEY is not 32 characters long, generating a new one...") + logger.warning("RIVEN_API_KEY is not 32 characters long, generating a new one...") characters = string.ascii_letters + string.digits # Generate the API key