# ============================== # General Application Settings # ============================== # Where downloads are saved (relative from home or absolute path). # Example: Downloads ANIWORLD_DOWNLOAD_PATH=Downloads # Folder used for app data/cache/config (relative paths are resolved from home). # Example: .aniworld ANIWORLD_INSTALL_FOLDER=.aniworld # Debug logging # 0 = off, 1 = on ANIWORLD_DEBUG_MODE=0 # Skip the CLI menu; URLs or an episode file must be supplied. ANIWORLD_NO_MENU=0 # Separate downloads into language subfolders (e.g. german-dub/, english-sub/) # 0 = off, 1 = on ANIWORLD_LANG_SEPARATION=0 # Language of the web interface. # Options: en | de ANIWORLD_UI_LANGUAGE=en # Wrap movies in their own folder (e.g. "Movie (2024)/Movie (2024).mkv"). # 0 = save the file directly into the download path, 1 = use a folder ANIWORLD_MOVIE_FOLDER=1 # Never download or install dependencies on its own. # By default the app fetches what it needs at startup/on demand: the patchright # Chromium, portable mpv/ffmpeg/Syncplay builds, and on headless Linux it even # runs "sudo apt-get install xvfb" (which is why you may get a sudo password # prompt on a server). Turn this on to disable all of that - already installed # binaries are still found and used, missing ones just log a warning. # 0 = off (auto-install), 1 = on (never install anything) ANIWORLD_NO_AUTO_INSTALL=0 # ============================== # Anime & Language Preferences # ============================== # Disable English Sub downloads entirely # 0 = off, 1 = on ANIWORLD_DISABLE_ENGLISH_SUB=0 # Offer every language in the Web UI download dialog instead of only the ones # the title's first episode has. Useful when later episodes add a language. # 0 = off, 1 = on ANIWORLD_SHOW_ALL_LANGUAGES=0 # Preferred audio/sub language preset. # Options: German Dub | English Sub | German Sub | English Dub ANIWORLD_LANGUAGE="German Dub" # Output file naming template. # Common placeholders: {title} {year} {imdbid} {season} {episode} {resolution} {language} # {resolution} is read from the finished file (e.g. 720p), or `unknown` unless # the container has exactly one video stream. # Example filename template: `{title}.S{season}E{episode}.{resolution}.{language}.mp4` # Example: groups by show + year, then season, then uses SxxExx naming # (e.g. `Highschool DxD (2012) [imdbid-tt1759761]/Season 1/Highschool DxD S01E01.mkv`). ANIWORLD_NAMING_TEMPLATE="{title} ({year}) [imdbid-{imdbid}]/Season {season}/{title} S{season}E{episode}.mkv" # MangaFire download format. # Options: jpg (loose images) | cbz (one archive per chapter) ANIWORLD_MANGAFIRE_FORMAT=jpg # ============================== # Provider & Streaming Options # ============================== # Streaming provider to use. # Look at SUPPORTED_PROVIDERS in config.py for options. ANIWORLD_PROVIDER=VOE # Provider fallback order used after the selected provider fails. # The selected provider is always tried first, then the remaining providers follow this order. ANIWORLD_PROVIDER_FALLBACK_ORDER=VOE,Vidmoly,Vidoza,Doodstream # How many HLS segments to fetch at once when downloading without ffmpeg. # Higher is faster until the host starts refusing connections. ANIWORLD_HLS_CONCURRENCY=8 # Override the Kinox domain, e.g. when the default one is blocked for you. # Leave empty to use kinox.to. ANIWORLD_KINOX_DOMAIN= # Pick a random anime instead of the one you pass in. # 0 = off, 1 = on ANIWORLD_RANDOM_ANIME=0 # Prefer serienstream.to for interactive search() by default. # 1 = serienstream.to, 0 = aniworld.to ANIWORLD_USE_STO_SEARCH=0 # Enable AniSkip (auto skip intro/outro) if skip times are available. # 0 = off, 1 = on ANIWORLD_ANISKIP=0 # CLI Watch/Syncplay: continue from an episode through the rest of its season. ANIWORLD_KEEP_WATCHING=0 # Sites on the home page. Switching one off takes its tab away along with the # rows it fills there; nothing already downloaded is touched. At least one site # has to stay on. The three below this block start off and say why. # 0 = off, 1 = on ANIWORLD_ENABLE_ANIWORLD=1 ANIWORLD_ENABLE_STO=1 ANIWORLD_ENABLE_MEGAKINO=1 ANIWORLD_ENABLE_MOFLIX=1 ANIWORLD_ENABLE_FILMPALAST=1 ANIWORLD_ENABLE_FILMO=1 ANIWORLD_ENABLE_MANGAFIRE=1 # Show the hanime.tv Web UI tab (adult content). # 0 = off, 1 = on ANIWORLD_ENABLE_HTV=0 # Show the hentai.tv Web UI tab (adult content). # 0 = off, 1 = on ANIWORLD_ENABLE_HENTAITV=0 # Show the hentaihaven.xxx Web UI tab (adult content). # 0 = off, 1 = on ANIWORLD_ENABLE_HENTAIHAVEN=0 # Enable the Library tab in the Web UI (browse and delete downloaded files). # 0 = off, 1 = on ANIWORLD_ENABLE_LIBRARY=1 # Enable Auto-Sync. On a schedule it checks the newest episodes on aniworld.to # and queues what is missing for series you already have on disk. Off by default # because it downloads on its own. The schedule is set further down. # 0 = off, 1 = on ANIWORLD_ENABLE_AUTOSYNC=0 # Auto-Sync: queue only the episodes the feed just announced instead of also # filling in every earlier episode you are missing for that series. # 0 = off (fill the gaps), 1 = on (only the new ones) ANIWORLD_AUTOSYNC_NEW_ONLY=0 # How Auto-Sync decides when to run. # interval = every so often, see ANIWORLD_AUTOSYNC_INTERVAL # cron = at fixed times, see ANIWORLD_AUTOSYNC_CRON # Options: interval | cron ANIWORLD_AUTOSYNC_MODE=interval # Time between two runs in interval mode, counted from the last run. # Examples: 24h | 6h | 90m | 1h30m | 2d (a bare number means hours). # Five minutes is the shortest it will take. ANIWORLD_AUTOSYNC_INTERVAL=24h # Fixed times in cron mode: minute hour day-of-month month day-of-week. # Plain language is accepted too and is stored as cron: # every day at 10pm -> 0 22 * * * # every monday, friday at 8am -> 0 8 * * 1,5 # weekdays at 07:30 -> 30 7 * * 1,2,3,4,5 # every 6 hours -> 0 */6 * * * # Times are the local time of the machine. Cron cannot put 08:00 and 22:30 on # one line, so several schedules can be separated by ";" and all of them run. ANIWORLD_AUTOSYNC_CRON="0 3 * * *" # Enable the BurningSeries tab. # Disabled by default: BurningSeries is behind a geo-block and additionally # protected by Google reCAPTCHA, which we currently have no way to bypass. # Turn this on only if you can reach it yourself (e.g. correct region / VPN). # 0 = off, 1 = on ANIWORLD_ENABLE_BURNINGSERIES=0 # Enable the Kinox tab. # Disabled by default: Kinox demands a captcha for every download, which we # currently have no way to bypass automatically. # 0 = off, 1 = on ANIWORLD_ENABLE_KINOX=0 # ============================== # CAPTCHA Browser # ============================== # auto = visible for CLI solves, off-screen for the Web UI and background helpers # 1 = always visible, 0 = always off-screen (headed Chromium in every mode) ANIWORLD_CAPTCHA_VISIBLE=auto # Positive seconds, or empty to keep each flow's default: # 300 for CAPTCHA/Hanime, 90 for S.to, 30 for Moflix. ANIWORLD_CAPTCHA_TIMEOUT= # 1 = click CAPTCHA widgets yourself; completed forms still submit automatically. # 0 = automatic widget solving. ANIWORLD_CAPTCHA_MANUAL=0 # 1 = log browser console warnings/errors, page errors and failed requests. ANIWORLD_CAPTCHA_DEBUG_LOG=0 # ============================== # Player Integration # ============================== # Player for ordinary watching. Syncplay always uses mpv. # 0 = mpv (cross-platform) # 1 = IINA (macOS only; requires IINA installed) ANIWORLD_USE_IINA=1 # ============================== # Syncplay Settings (auto-generated if left empty) # ============================== # Syncplay server host:port # Default: syncplay.pl:8998 # Other ports: syncplay.pl:8995 / :8996 / :8997 / :8999 ANIWORLD_SYNCPLAY_HOST= # Room to join. If empty, generate it from the episode filename. # When a password is set, hash the filename and password to derive the room. # A manually specified room ignores the password. ANIWORLD_SYNCPLAY_ROOM= # Your name shown in Syncplay. # If empty, it will use your system username. # Example: phoenixthrush ANIWORLD_SYNCPLAY_USERNAME= # Optional. Used only when ANIWORLD_SYNCPLAY_ROOM is empty (see above). # Setting this WILL change the generated room name. ANIWORLD_SYNCPLAY_PASSWORD= # ============================== # Web UI Authentication # ============================== # Turn the login on without passing the -wa / -wS / -wFS flags. Handy in Docker, # where the start command is baked into the image. # 0 = off, 1 = on ANIWORLD_WEB_AUTH=0 ANIWORLD_WEB_SSO=0 ANIWORLD_WEB_FORCE_SSO=0 # Set both to auto-create an admin on first run with -wA (skips setup page) ANIWORLD_WEB_ADMIN_USER= ANIWORLD_WEB_ADMIN_PASS= # Public base URL when behind a reverse proxy (e.g. https://example.com). # Leave empty when not using a reverse proxy. ANIWORLD_WEB_BASE_URL= # IP address of your reverse proxy. Requests from it may pass the real client # IP in X-Forwarded-For, which the login rate limit counts per IP. Without it # every visitor looks like the proxy. "*" trusts any address, only use it when # AniWorld is reachable exclusively through the proxy (port not published). # Leave empty when not using a reverse proxy. ANIWORLD_WEB_TRUSTED_PROXY= # ============================== # OIDC Single Sign-On (optional) # ============================== # Required when using -wS or -wFS flags. ANIWORLD_OIDC_ISSUER_URL= ANIWORLD_OIDC_CLIENT_ID= ANIWORLD_OIDC_CLIENT_SECRET= ANIWORLD_OIDC_DISPLAY_NAME=SSO # When using -wFS (force SSO), this SSO username is auto-promoted to admin. # Using ANIWORLD_OIDC_ADMIN_SUBJECT is preferred !!! ANIWORLD_OIDC_ADMIN_USER= # SSO subject (sub claim) for the admin user - more secure than username matching. # If set, this takes precedence over ANIWORLD_OIDC_ADMIN_USER for admin promotion. # Tip: the subject is logged on every SSO login - check the server logs to find it. # In Keycloak: Admin Console -> Users -> click user -> the "ID" field is the sub claim. ANIWORLD_OIDC_ADMIN_SUBJECT= # ============================== # FFmpeg & Encoding Settings # ============================== # Video codec behavior. # copy = no re-encode (fastest, keeps original) # h264 / h265 / av1 = re-encode using FFmpeg (slower, smaller files depending on settings) # h264_nvenc / hevc_nvenc = NVIDIA GPU encoding (requires a compatible GPU, driver, and NVENC-enabled FFmpeg) # h264_amf / hevc_amf / av1_amf = AMD GPU encoding (requires a GPU supporting the chosen codec, AMF runtime/driver, and AMF-enabled FFmpeg) # h264_qsv / hevc_qsv / av1_qsv = Intel GPU encoding (requires a compatible GPU/IGPU, driver, and QSV-enabled FFmpeg) ANIWORLD_VIDEO_CODEC=copy # ============================== # Discord Request Bot (optional) # ============================== # Let users request movies and series from Discord. # 0 = off, 1 = on ANIWORLD_DISCORD_BOT_ENABLED=0 # Bot token from https://discord.com/developers/applications ANIWORLD_DISCORD_TOKEN= # Your Discord user ID. Requests are sent here for approval. ANIWORLD_DISCORD_OWNER_ID= # standard = every request needs your approval via DM # advanced = requests are queued immediately ANIWORLD_DISCORD_MODE=standard # Only members with this role may request. Leave empty to allow everyone. ANIWORLD_DISCORD_REQUEST_ROLE_ID= # Register the slash commands in this server only (instant). # Leave empty to register globally (can take up to an hour to appear). ANIWORLD_DISCORD_GUILD_ID= # Bot language: command names, descriptions and messages. # Options: en | de ANIWORLD_DISCORD_LANGUAGE=en # Optional channel ID. When a requested download finishes, a "now available" # message is posted here (the requester is always DM'd regardless). ANIWORLD_DISCORD_ANNOUNCE_CHANNEL_ID=