# Environment Variables This document lists all configuration options that can be set via environment variables. > **Auto-generated** - Do not edit manually. Run `python scripts/generate_env_docs.py` to regenerate. ## Table of Contents - [Bootstrap Configuration](#bootstrap-configuration) - [General](#general) - [Search Mode](#search-mode) - [Downloads](#downloads) - [Security](#security) - [Network](#network) - [Advanced](#advanced) - [Prowlarr](#prowlarr) - [AudiobookBay](#audiobookbay) - [IRC](#irc) - [Download Clients](#download-clients) - [Metadata Providers](#metadata-providers) - [Hardcover](#metadata-providers-hardcover) - [Open Library](#metadata-providers-open-library) - [Google Books](#metadata-providers-google-books) - [Direct Download](#direct-download) - [Download Sources](#direct-download-download-sources) - [Cloudflare Bypass](#direct-download-cloudflare-bypass) - [Mirrors](#direct-download-mirrors) --- ## Bootstrap Configuration These environment variables are used at startup before the settings system loads. They typically configure paths and server settings. | Variable | Description | Type | Default | |----------|-------------|------|---------| | `CONFIG_DIR` | Directory for storing configuration files and plugin settings. | string (path) | `/config` | | `LOG_ROOT` | Root directory for log files. | string (path) | `/var/log/` | | `TMP_DIR` | Staging directory for downloads before moving to destination. | string (path) | `/tmp/shelfmark` | | `ENABLE_LOGGING` | Enable file logging under LOG_ROOT/shelfmark/ (including shelfmark.log and startup logs). | boolean | `true` | | `FLASK_HOST` | Host address for the Flask web server. | string | `0.0.0.0` | | `FLASK_PORT` | Port number for the Flask web server. | number | `8084` | | `SESSION_COOKIE_SECURE` | Enable secure cookies (requires HTTPS). | boolean | `false` | | `CWA_DB_PATH` | Path to the Calibre-Web database for authentication integration. | string (path) | `/auth/app.db` | | `DOCKERMODE` | Indicates the application is running inside a Docker container. | boolean | `false` | | `ONBOARDING` | Show the onboarding wizard on first run. Set to false to skip (useful for ephemeral storage). | boolean | `true` |
Detailed descriptions #### `CONFIG_DIR` Directory for storing configuration files and plugin settings. - **Type:** string (path) - **Default:** `/config` #### `LOG_ROOT` Root directory for log files. - **Type:** string (path) - **Default:** `/var/log/` #### `TMP_DIR` Staging directory for downloads before moving to destination. - **Type:** string (path) - **Default:** `/tmp/shelfmark` #### `ENABLE_LOGGING` Enable file logging under LOG_ROOT/shelfmark/ (including shelfmark.log and startup logs). - **Type:** boolean - **Default:** `true` #### `FLASK_HOST` Host address for the Flask web server. - **Type:** string - **Default:** `0.0.0.0` #### `FLASK_PORT` Port number for the Flask web server. - **Type:** number - **Default:** `8084` #### `SESSION_COOKIE_SECURE` Enable secure cookies (requires HTTPS). - **Type:** boolean - **Default:** `false` #### `CWA_DB_PATH` Path to the Calibre-Web database for authentication integration. - **Type:** string (path) - **Default:** `/auth/app.db` #### `DOCKERMODE` Indicates the application is running inside a Docker container. - **Type:** boolean - **Default:** `false` #### `ONBOARDING` Show the onboarding wizard on first run. Set to false to skip (useful for ephemeral storage). - **Type:** boolean - **Default:** `true`
## General | Variable | Description | Type | Default | |----------|-------------|------|---------| | `CALIBRE_WEB_URL` | Adds a navigation button to your book library (Calibre-Web Automated, Booklore, etc). | string | _none_ | | `AUDIOBOOK_LIBRARY_URL` | Adds a separate navigation button for your audiobook library (Audiobookshelf, Plex, etc). When both URLs are set, icons are shown instead of text. | string | _none_ | | `SUPPORTED_FORMATS` | Book formats to include in search results. ZIP/RAR archives are extracted automatically and book files are used if found. | string (comma-separated) | `epub,mobi,azw3,fb2,djvu,cbz,cbr` | | `SUPPORTED_AUDIOBOOK_FORMATS` | Audiobook formats to include in search results. ZIP/RAR archives are extracted automatically and audiobook files are used if found. | string (comma-separated) | `m4b,mp3` | | `BOOK_LANGUAGE` | Default language filter for searches. | string (comma-separated) | `en` |
Detailed descriptions #### `CALIBRE_WEB_URL` **Library URL** Adds a navigation button to your book library (Calibre-Web Automated, Booklore, etc). - **Type:** string - **Default:** _none_ #### `AUDIOBOOK_LIBRARY_URL` **Audiobook Library URL** Adds a separate navigation button for your audiobook library (Audiobookshelf, Plex, etc). When both URLs are set, icons are shown instead of text. - **Type:** string - **Default:** _none_ #### `SUPPORTED_FORMATS` **Supported Book Formats** Book formats to include in search results. ZIP/RAR archives are extracted automatically and book files are used if found. - **Type:** string (comma-separated) - **Default:** `epub,mobi,azw3,fb2,djvu,cbz,cbr` #### `SUPPORTED_AUDIOBOOK_FORMATS` **Supported Audiobook Formats** Audiobook formats to include in search results. ZIP/RAR archives are extracted automatically and audiobook files are used if found. - **Type:** string (comma-separated) - **Default:** `m4b,mp3` #### `BOOK_LANGUAGE` **Default Book Languages** Default language filter for searches. - **Type:** string (comma-separated) - **Default:** `en`
## Search Mode | Variable | Description | Type | Default | |----------|-------------|------|---------| | `SEARCH_MODE` | How you want to search for and download books. | string (choice) | `direct` | | `AA_DEFAULT_SORT` | Default sort order for search results. | string (choice) | `relevance` | | `SHOW_RELEASE_SOURCE_LINKS` | Show clickable release-source links in release and details modals. Metadata provider links stay enabled. | boolean | `true` | | `METADATA_PROVIDER` | Choose which metadata provider to use for book searches. | string (choice) | `openlibrary` | | `METADATA_PROVIDER_AUDIOBOOK` | Metadata provider for audiobook searches. Uses the book provider if not set. | string (choice) | _empty string_ | | `DEFAULT_RELEASE_SOURCE` | The release source tab to open by default in the release modal for books. | string (choice) | `direct_download` | | `DEFAULT_RELEASE_SOURCE_AUDIOBOOK` | The release source tab to open by default in the release modal for audiobooks. Uses the book release source if not set. | string (choice) | _empty string_ |
Detailed descriptions #### `SEARCH_MODE` **Search Mode** How you want to search for and download books. - **Type:** string (choice) - **Default:** `direct` - **Options:** `direct` (Direct), `universal` (Universal) #### `AA_DEFAULT_SORT` **Default Sort Order** Default sort order for search results. - **Type:** string (choice) - **Default:** `relevance` - **Options:** `relevance` (Most relevant), `newest` (Newest (publication year)), `oldest` (Oldest (publication year)), `largest` (Largest (filesize)), `smallest` (Smallest (filesize)), `newest_added` (Newest (open sourced)), `oldest_added` (Oldest (open sourced)) #### `SHOW_RELEASE_SOURCE_LINKS` **Show Release Source Links** Show clickable release-source links in release and details modals. Metadata provider links stay enabled. - **Type:** boolean - **Default:** `true` #### `METADATA_PROVIDER` **Book Metadata Provider** Choose which metadata provider to use for book searches. - **Type:** string (choice) - **Default:** `openlibrary` - **Options:** `hardcover` (Hardcover), `openlibrary` (Open Library), `googlebooks` (Google Books) #### `METADATA_PROVIDER_AUDIOBOOK` **Audiobook Metadata Provider** Metadata provider for audiobook searches. Uses the book provider if not set. - **Type:** string (choice) - **Default:** _empty string_ - **Options:** `""` (Use book provider), `hardcover` (Hardcover), `openlibrary` (Open Library), `googlebooks` (Google Books) #### `DEFAULT_RELEASE_SOURCE` **Default Book Release Source** The release source tab to open by default in the release modal for books. - **Type:** string (choice) - **Default:** `direct_download` - **Options:** `direct_download` (Direct Download), `prowlarr` (Prowlarr) #### `DEFAULT_RELEASE_SOURCE_AUDIOBOOK` **Default Audiobook Release Source** The release source tab to open by default in the release modal for audiobooks. Uses the book release source if not set. - **Type:** string (choice) - **Default:** _empty string_ - **Options:** `""` (Use book release source), `prowlarr` (Prowlarr), `audiobookbay` (AudiobookBay)
## Downloads | Variable | Description | Type | Default | |----------|-------------|------|---------| | `BOOKS_OUTPUT_MODE` | Choose where completed book files are sent. | string (choice) | `folder` | | `INGEST_DIR` | Directory where downloaded files are saved. Use {User} for per-user folders (e.g. /books/{User}). | string | `/books` | | `FILE_ORGANIZATION` | Choose how downloaded book files are named and organized. | string (choice) | `rename` | | `TEMPLATE_RENAME` | Variables: {Author}, {Title}, {Year}, {User}, {OriginalName} (source filename without extension). Universal adds: {Series}, {SeriesPosition}, {Subtitle}. Use arbitrary prefix/suffix: {Vol. SeriesPosition - } outputs 'Vol. 2 - ' when set, nothing when empty. Rename templates are filename-only (no '/' or '\'); use Organize for folders. Applies to single-file downloads. | string | `{Author} - {Title} ({Year})` | | `TEMPLATE_ORGANIZE` | Use / to create folders. Variables: {Author}, {Title}, {Year}, {User}, {OriginalName} (source filename without extension). Universal adds: {Series}, {SeriesPosition}, {Subtitle}. Use arbitrary prefix/suffix: {Vol. SeriesPosition - } outputs 'Vol. 2 - ' when set, nothing when empty. | string | `{Author}/{Title} ({Year})` | | `HARDLINK_TORRENTS` | Create hardlinks instead of copying. Preserves seeding but archives won't be extracted. Don't use if destination is a library ingest folder. | boolean | `false` | | `BOOKLORE_HOST` | Base URL of your Booklore instance | string | _none_ | | `BOOKLORE_USERNAME` | Booklore account username | string | _none_ | | `BOOKLORE_PASSWORD` | Booklore account password | string (secret) | _none_ | | `BOOKLORE_DESTINATION` | Choose whether uploads go directly to a specific library path or to Bookdrop for review. | string (choice) | `library` | | `BOOKLORE_LIBRARY_ID` | Booklore library to upload into. | string (choice) | _none_ | | `BOOKLORE_PATH_ID` | Booklore library path for uploads. | string (choice) | _none_ | | `EMAIL_RECIPIENT` | Optional fallback email address when no per-user email recipient override is configured. | string | _none_ | | `EMAIL_ATTACHMENT_SIZE_LIMIT_MB` | Maximum total attachment size per email. Email encoding adds overhead; keep this below your provider's limit. | number | `25` | | `EMAIL_SMTP_HOST` | SMTP server hostname or IP (e.g., smtp.gmail.com). | string | _none_ | | `EMAIL_SMTP_PORT` | SMTP server port (587 is typical for STARTTLS, 465 for SSL). | number | `587` | | `EMAIL_SMTP_SECURITY` | Transport security mode for SMTP. | string (choice) | `starttls` | | `EMAIL_SMTP_USERNAME` | SMTP username (leave empty for no authentication). | string | _none_ | | `EMAIL_SMTP_PASSWORD` | SMTP password (required if Username is set). | string (secret) | _none_ | | `EMAIL_FROM` | From address used for the email. You can include a display name (e.g., Shelfmark ). Leave blank to default to the SMTP username (when it is an email address). | string | _none_ | | `EMAIL_SUBJECT_TEMPLATE` | Email subject. Variables: {Author}, {Title}, {Year}, {Series}, {SeriesPosition}, {Subtitle}, {Format}. | string | `{Title}` | | `EMAIL_SMTP_TIMEOUT_SECONDS` | How long to wait for SMTP operations before failing. | number | `60` | | `EMAIL_ALLOW_UNVERIFIED_TLS` | Disable TLS certificate verification (not recommended). | boolean | `false` | | `DESTINATION_AUDIOBOOK` | Directory where downloaded audiobook files are saved. Leave empty to use the Books destination. | string | _none_ | | `FILE_ORGANIZATION_AUDIOBOOK` | Choose how downloaded audiobook files are named and organized. | string (choice) | `rename` | | `TEMPLATE_AUDIOBOOK_RENAME` | Variables: {Author}, {Title}, {Year}, {User}, {OriginalName} (source filename without extension), {Series}, {SeriesPosition}, {Subtitle}, {PartNumber}. Use arbitrary prefix/suffix: {Vol. SeriesPosition - } outputs 'Vol. 2 - ' when set, nothing when empty. Rename templates are filename-only (no '/' or '\'); use Organize for folders. Applies to single-file downloads. | string | `{Author} - {Title}` | | `TEMPLATE_AUDIOBOOK_ORGANIZE` | Use / to create folders. Variables: {Author}, {Title}, {Year}, {User}, {OriginalName} (source filename without extension), {Series}, {SeriesPosition}, {Subtitle}, {PartNumber}. Use arbitrary prefix/suffix: {Vol. SeriesPosition - } outputs 'Vol. 2 - ' when set, nothing when empty. | string | `{Author}/{Title}` | | `HARDLINK_TORRENTS_AUDIOBOOK` | Create hardlinks instead of copying. Preserves seeding but archives won't be extracted. Don't use if destination is a library ingest folder. | boolean | `true` | | `AUTO_OPEN_DOWNLOADS_SIDEBAR` | Automatically open the downloads sidebar when a new download is queued. | boolean | `false` | | `DOWNLOAD_TO_BROWSER_CONTENT_TYPES` | Automatically download completed files to your browser for the selected content types. | string (comma-separated) | _empty list_ | | `MAX_CONCURRENT_DOWNLOADS` | Maximum number of simultaneous downloads. | number | `3` | | `STATUS_TIMEOUT` | How long to keep completed/failed downloads in the queue display. | number | `3600` |
Detailed descriptions #### `BOOKS_OUTPUT_MODE` **Output Mode** Choose where completed book files are sent. - **Type:** string (choice) - **Default:** `folder` - **Options:** `folder` (Folder), `email` (Email (SMTP)), `booklore` (Booklore (API)) #### `INGEST_DIR` **Destination** Directory where downloaded files are saved. Use {User} for per-user folders (e.g. /books/{User}). - **Type:** string - **Default:** `/books` - **Required:** Yes #### `FILE_ORGANIZATION` **File Organization** Choose how downloaded book files are named and organized. - **Type:** string (choice) - **Default:** `rename` - **Options:** `none` (None), `rename` (Rename Only), `organize` (Rename and Organize) #### `TEMPLATE_RENAME` **Naming Template** Variables: {Author}, {Title}, {Year}, {User}, {OriginalName} (source filename without extension). Universal adds: {Series}, {SeriesPosition}, {Subtitle}. Use arbitrary prefix/suffix: {Vol. SeriesPosition - } outputs 'Vol. 2 - ' when set, nothing when empty. Rename templates are filename-only (no '/' or '\'); use Organize for folders. Applies to single-file downloads. - **Type:** string - **Default:** `{Author} - {Title} ({Year})` #### `TEMPLATE_ORGANIZE` **Path Template** Use / to create folders. Variables: {Author}, {Title}, {Year}, {User}, {OriginalName} (source filename without extension). Universal adds: {Series}, {SeriesPosition}, {Subtitle}. Use arbitrary prefix/suffix: {Vol. SeriesPosition - } outputs 'Vol. 2 - ' when set, nothing when empty. - **Type:** string - **Default:** `{Author}/{Title} ({Year})` #### `HARDLINK_TORRENTS` **Hardlink Book Torrents** Create hardlinks instead of copying. Preserves seeding but archives won't be extracted. Don't use if destination is a library ingest folder. - **Type:** boolean - **Default:** `false` #### `BOOKLORE_HOST` **Booklore URL** Base URL of your Booklore instance - **Type:** string - **Default:** _none_ - **Required:** Yes #### `BOOKLORE_USERNAME` **Username** Booklore account username - **Type:** string - **Default:** _none_ - **Required:** Yes #### `BOOKLORE_PASSWORD` **Password** Booklore account password - **Type:** string (secret) - **Default:** _none_ - **Required:** Yes #### `BOOKLORE_DESTINATION` **Upload Destination** Choose whether uploads go directly to a specific library path or to Bookdrop for review. - **Type:** string (choice) - **Default:** `library` - **Options:** `library` (Specific Library), `bookdrop` (Bookdrop) #### `BOOKLORE_LIBRARY_ID` **Library** Booklore library to upload into. - **Type:** string (choice) - **Default:** _none_ - **Required:** Yes #### `BOOKLORE_PATH_ID` **Path** Booklore library path for uploads. - **Type:** string (choice) - **Default:** _none_ - **Required:** Yes #### `EMAIL_RECIPIENT` **Default Email Recipient** Optional fallback email address when no per-user email recipient override is configured. - **Type:** string - **Default:** _none_ #### `EMAIL_ATTACHMENT_SIZE_LIMIT_MB` **Attachment Size Limit (MB)** Maximum total attachment size per email. Email encoding adds overhead; keep this below your provider's limit. - **Type:** number - **Default:** `25` - **Constraints:** min: 1, max: 600 #### `EMAIL_SMTP_HOST` **SMTP Host** SMTP server hostname or IP (e.g., smtp.gmail.com). - **Type:** string - **Default:** _none_ - **Required:** Yes #### `EMAIL_SMTP_PORT` **SMTP Port** SMTP server port (587 is typical for STARTTLS, 465 for SSL). - **Type:** number - **Default:** `587` - **Constraints:** min: 1, max: 65535 #### `EMAIL_SMTP_SECURITY` **SMTP Security** Transport security mode for SMTP. - **Type:** string (choice) - **Default:** `starttls` - **Options:** `none` (None), `starttls` (STARTTLS), `ssl` (SSL/TLS) #### `EMAIL_SMTP_USERNAME` **Username** SMTP username (leave empty for no authentication). - **Type:** string - **Default:** _none_ #### `EMAIL_SMTP_PASSWORD` **Password** SMTP password (required if Username is set). - **Type:** string (secret) - **Default:** _none_ #### `EMAIL_FROM` **From Address** From address used for the email. You can include a display name (e.g., Shelfmark ). Leave blank to default to the SMTP username (when it is an email address). - **Type:** string - **Default:** _none_ #### `EMAIL_SUBJECT_TEMPLATE` **Subject Template** Email subject. Variables: {Author}, {Title}, {Year}, {Series}, {SeriesPosition}, {Subtitle}, {Format}. - **Type:** string - **Default:** `{Title}` #### `EMAIL_SMTP_TIMEOUT_SECONDS` **SMTP Timeout (seconds)** How long to wait for SMTP operations before failing. - **Type:** number - **Default:** `60` - **Constraints:** min: 1, max: 600 #### `EMAIL_ALLOW_UNVERIFIED_TLS` **Allow Unverified TLS** Disable TLS certificate verification (not recommended). - **Type:** boolean - **Default:** `false` #### `DESTINATION_AUDIOBOOK` **Destination** Directory where downloaded audiobook files are saved. Leave empty to use the Books destination. - **Type:** string - **Default:** _none_ #### `FILE_ORGANIZATION_AUDIOBOOK` **File Organization** Choose how downloaded audiobook files are named and organized. - **Type:** string (choice) - **Default:** `rename` - **Options:** `none` (None), `rename` (Rename Only), `organize` (Rename and Organize) #### `TEMPLATE_AUDIOBOOK_RENAME` **Naming Template** Variables: {Author}, {Title}, {Year}, {User}, {OriginalName} (source filename without extension), {Series}, {SeriesPosition}, {Subtitle}, {PartNumber}. Use arbitrary prefix/suffix: {Vol. SeriesPosition - } outputs 'Vol. 2 - ' when set, nothing when empty. Rename templates are filename-only (no '/' or '\'); use Organize for folders. Applies to single-file downloads. - **Type:** string - **Default:** `{Author} - {Title}` #### `TEMPLATE_AUDIOBOOK_ORGANIZE` **Path Template** Use / to create folders. Variables: {Author}, {Title}, {Year}, {User}, {OriginalName} (source filename without extension), {Series}, {SeriesPosition}, {Subtitle}, {PartNumber}. Use arbitrary prefix/suffix: {Vol. SeriesPosition - } outputs 'Vol. 2 - ' when set, nothing when empty. - **Type:** string - **Default:** `{Author}/{Title}` #### `HARDLINK_TORRENTS_AUDIOBOOK` **Hardlink Audiobook Torrents** Create hardlinks instead of copying. Preserves seeding but archives won't be extracted. Don't use if destination is a library ingest folder. - **Type:** boolean - **Default:** `true` #### `AUTO_OPEN_DOWNLOADS_SIDEBAR` **Auto-Open Downloads Sidebar** Automatically open the downloads sidebar when a new download is queued. - **Type:** boolean - **Default:** `false` #### `DOWNLOAD_TO_BROWSER_CONTENT_TYPES` **Download to Browser** Automatically download completed files to your browser for the selected content types. - **Type:** string (comma-separated) - **Default:** _empty list_ #### `MAX_CONCURRENT_DOWNLOADS` **Max Concurrent Downloads** Maximum number of simultaneous downloads. - **Type:** number - **Default:** `3` - **Requires restart:** Yes - **Constraints:** min: 1, max: 10 #### `STATUS_TIMEOUT` **Status Timeout (seconds)** How long to keep completed/failed downloads in the queue display. - **Type:** number - **Default:** `3600` - **Constraints:** min: 60, max: 86400
## Security | Variable | Description | Type | Default | |----------|-------------|------|---------| | `AUTH_METHOD` | Select the authentication method for accessing Shelfmark. | string (choice) | `none` | | `PROXY_AUTH_USER_HEADER` | The HTTP header your proxy uses to pass the authenticated username. | string | `X-Auth-User` | | `PROXY_AUTH_LOGOUT_URL` | The URL to redirect users to for logging out. Leave empty to disable logout functionality. | string | _empty string_ | | `PROXY_AUTH_ADMIN_GROUP_HEADER` | Optional: header your proxy uses to pass user groups/roles. | string | `X-Auth-Groups` | | `PROXY_AUTH_ADMIN_GROUP_NAME` | Optional: users in this group are treated as admins. Leave blank to skip group-based admin detection. | string | _empty string_ | | `OIDC_DISCOVERY_URL` | OpenID Connect discovery endpoint URL. Usually ends with /.well-known/openid-configuration. | string | _none_ | | `OIDC_CLIENT_ID` | OAuth2 client ID from your identity provider. | string | _none_ | | `OIDC_CLIENT_SECRET` | OAuth2 client secret from your identity provider. | string (secret) | _none_ | | `OIDC_SCOPES` | OAuth2 scopes to request from the identity provider. Managed automatically: includes essential scopes and the group claim when using admin group authorization. | string | `openid,email,profile` | | `OIDC_GROUP_CLAIM` | The name of the claim in the ID token that contains user groups. | string | `groups` | | `OIDC_ADMIN_GROUP` | Users in this group will be given admin access (if enabled below). Leave empty to use database roles only. | string | _empty string_ | | `OIDC_USE_ADMIN_GROUP` | When enabled, users in the Admin Group are granted admin access. When disabled, admin access is determined solely by database roles. | boolean | `true` | | `OIDC_AUTO_PROVISION` | Automatically create a user account on first OIDC login. When disabled, users must be pre-created by an admin. | boolean | `true` | | `OIDC_BUTTON_LABEL` | Custom label for the OIDC sign-in button on the login page. | string | _empty string_ |
Detailed descriptions #### `AUTH_METHOD` **Authentication Method** Select the authentication method for accessing Shelfmark. - **Type:** string (choice) - **Default:** `none` - **Options:** `none` (No Authentication), `builtin` (Local), `proxy` (Proxy Authentication), `oidc` (OIDC (OpenID Connect)), `cwa` (Calibre-Web Database) #### `PROXY_AUTH_USER_HEADER` **Proxy Auth User Header** The HTTP header your proxy uses to pass the authenticated username. - **Type:** string - **Default:** `X-Auth-User` #### `PROXY_AUTH_LOGOUT_URL` **Proxy Auth Logout URL** The URL to redirect users to for logging out. Leave empty to disable logout functionality. - **Type:** string - **Default:** _empty string_ #### `PROXY_AUTH_ADMIN_GROUP_HEADER` **Proxy Auth Admin Group Header** Optional: header your proxy uses to pass user groups/roles. - **Type:** string - **Default:** `X-Auth-Groups` #### `PROXY_AUTH_ADMIN_GROUP_NAME` **Proxy Auth Admin Group** Optional: users in this group are treated as admins. Leave blank to skip group-based admin detection. - **Type:** string - **Default:** _empty string_ #### `OIDC_DISCOVERY_URL` **Discovery URL** OpenID Connect discovery endpoint URL. Usually ends with /.well-known/openid-configuration. - **Type:** string - **Default:** _none_ - **Required:** Yes #### `OIDC_CLIENT_ID` **Client ID** OAuth2 client ID from your identity provider. - **Type:** string - **Default:** _none_ - **Required:** Yes #### `OIDC_CLIENT_SECRET` **Client Secret** OAuth2 client secret from your identity provider. - **Type:** string (secret) - **Default:** _none_ - **Required:** Yes #### `OIDC_SCOPES` **Scopes** OAuth2 scopes to request from the identity provider. Managed automatically: includes essential scopes and the group claim when using admin group authorization. - **Type:** string - **Default:** `openid,email,profile` #### `OIDC_GROUP_CLAIM` **Group Claim Name** The name of the claim in the ID token that contains user groups. - **Type:** string - **Default:** `groups` #### `OIDC_ADMIN_GROUP` **Admin Group Name** Users in this group will be given admin access (if enabled below). Leave empty to use database roles only. - **Type:** string - **Default:** _empty string_ #### `OIDC_USE_ADMIN_GROUP` **Use Admin Group for Authorization** When enabled, users in the Admin Group are granted admin access. When disabled, admin access is determined solely by database roles. - **Type:** boolean - **Default:** `true` #### `OIDC_AUTO_PROVISION` **Auto-Provision Users** Automatically create a user account on first OIDC login. When disabled, users must be pre-created by an admin. - **Type:** boolean - **Default:** `true` #### `OIDC_BUTTON_LABEL` **Login Button Label** Custom label for the OIDC sign-in button on the login page. - **Type:** string - **Default:** _empty string_
## Network | Variable | Description | Type | Default | |----------|-------------|------|---------| | `CERTIFICATE_VALIDATION` | Controls SSL/TLS certificate verification for outbound connections. Disable for self-signed certificates on internal services (e.g. OIDC providers, Prowlarr). | string (choice) | `enabled` | | `CUSTOM_DNS` | DNS provider for domain resolution. 'Auto' rotates through providers on failure. | string (choice) | `auto` | | `CUSTOM_DNS_MANUAL` | Comma-separated list of DNS server IP addresses (e.g., 8.8.8.8, 1.1.1.1). | string | _none_ | | `USE_DOH` | Use encrypted DNS queries for improved reliability and privacy. | boolean | `true` | | `USING_TOR` | Route all traffic through Tor for enhanced privacy. | boolean | `false` | | `PROXY_MODE` | Choose proxy type. SOCKS5 handles all traffic through a single proxy. | string (choice) | `none` | | `HTTP_PROXY` | HTTP proxy URL (e.g., http://proxy:8080) | string | _none_ | | `HTTPS_PROXY` | HTTPS proxy URL (leave empty to use HTTP proxy for HTTPS) | string | _none_ | | `SOCKS5_PROXY` | SOCKS5 proxy URL. Supports auth: socks5://user:pass@host:port | string | _none_ | | `NO_PROXY` | Comma-separated hosts to bypass proxy (e.g., localhost,127.0.0.1,10.*,*.local) | string | _none_ |
Detailed descriptions #### `CERTIFICATE_VALIDATION` **Certificate Validation** Controls SSL/TLS certificate verification for outbound connections. Disable for self-signed certificates on internal services (e.g. OIDC providers, Prowlarr). - **Type:** string (choice) - **Default:** `enabled` - **Options:** `enabled` (Enabled (Recommended)), `disabled_local` (Disabled for Local Addresses), `disabled` (Disabled) #### `CUSTOM_DNS` **DNS Provider** DNS provider for domain resolution. 'Auto' rotates through providers on failure. - **Type:** string (choice) - **Default:** `auto` - **Options:** `auto` (Auto (Recommended)), `system` (System), `google` (Google), `cloudflare` (Cloudflare), `quad9` (Quad9), `opendns` (OpenDNS), `manual` (Manual) #### `CUSTOM_DNS_MANUAL` **Manual DNS Servers** Comma-separated list of DNS server IP addresses (e.g., 8.8.8.8, 1.1.1.1). - **Type:** string - **Default:** _none_ #### `USE_DOH` **Use DNS over HTTPS** Use encrypted DNS queries for improved reliability and privacy. - **Type:** boolean - **Default:** `true` #### `USING_TOR` **Tor Routing** Route all traffic through Tor for enhanced privacy. - **Type:** boolean - **Default:** `false` #### `PROXY_MODE` **Proxy Mode** Choose proxy type. SOCKS5 handles all traffic through a single proxy. - **Type:** string (choice) - **Default:** `none` - **Options:** `none` (None (Direct Connection)), `http` (HTTP/HTTPS Proxy), `socks5` (SOCKS5 Proxy) #### `HTTP_PROXY` **HTTP Proxy** HTTP proxy URL (e.g., http://proxy:8080) - **Type:** string - **Default:** _none_ #### `HTTPS_PROXY` **HTTPS Proxy** HTTPS proxy URL (leave empty to use HTTP proxy for HTTPS) - **Type:** string - **Default:** _none_ #### `SOCKS5_PROXY` **SOCKS5 Proxy** SOCKS5 proxy URL. Supports auth: socks5://user:pass@host:port - **Type:** string - **Default:** _none_ #### `NO_PROXY` **No Proxy** Comma-separated hosts to bypass proxy (e.g., localhost,127.0.0.1,10.*,*.local) - **Type:** string - **Default:** _none_
## Advanced | Variable | Description | Type | Default | |----------|-------------|------|---------| | `URL_BASE` | Optional URL path prefix. Use a path like /shelfmark (no hostname). Leave blank for root. | string | _none_ | | `DEBUG` | Enable verbose logging to console and file. Not recommended for normal use. | boolean | `false` | | `MAIN_LOOP_SLEEP_TIME` | How often the download queue is checked for new items. | number | `5` | | `DOWNLOAD_PROGRESS_UPDATE_INTERVAL` | How often download progress is broadcast to the UI. | number | `1` | | `CUSTOM_SCRIPT` | Path to a script to run after each successful download. Must be executable. | string | _none_ | | `CUSTOM_SCRIPT_PATH_MODE` | Pass the path to the custom script as an absolute path or relative to the destination folder. | string (choice) | `absolute` | | `CUSTOM_SCRIPT_JSON_PAYLOAD` | Send a JSON payload to the script via stdin. Useful for multi-file imports (audiobooks) or richer metadata without relying on path parsing. | boolean | `false` | | `COVERS_CACHE_ENABLED` | Cache book covers on the server for faster loading. | boolean | `true` | | `COVERS_CACHE_TTL` | How long to keep cached covers. Set to 0 to keep forever (recommended for static artwork). | number | `0` | | `COVERS_CACHE_MAX_SIZE_MB` | Maximum disk space for cached covers. Oldest images are removed when limit is reached. | number | `500` | | `METADATA_CACHE_ENABLED` | When disabled, all metadata searches hit the provider API directly. | boolean | `true` | | `METADATA_CACHE_SEARCH_TTL` | How long to cache search results. Default: 300 (5 minutes). Max: 604800 (7 days). | number | `300` | | `METADATA_CACHE_BOOK_TTL` | How long to cache individual book details. Default: 600 (10 minutes). Max: 604800 (7 days). | number | `600` |
Detailed descriptions #### `URL_BASE` **Base Path** Optional URL path prefix. Use a path like /shelfmark (no hostname). Leave blank for root. - **Type:** string - **Default:** _none_ - **Requires restart:** Yes #### `DEBUG` **Debug Mode** Enable verbose logging to console and file. Not recommended for normal use. - **Type:** boolean - **Default:** `false` - **Requires restart:** Yes #### `MAIN_LOOP_SLEEP_TIME` **Queue Check Interval (seconds)** How often the download queue is checked for new items. - **Type:** number - **Default:** `5` - **Requires restart:** Yes - **Constraints:** min: 1, max: 60 #### `DOWNLOAD_PROGRESS_UPDATE_INTERVAL` **Progress Update Interval (seconds)** How often download progress is broadcast to the UI. - **Type:** number - **Default:** `1` - **Requires restart:** Yes - **Constraints:** min: 1, max: 10 #### `CUSTOM_SCRIPT` **Custom Script Path** Path to a script to run after each successful download. Must be executable. - **Type:** string - **Default:** _none_ #### `CUSTOM_SCRIPT_PATH_MODE` **Custom Script Path Mode** Pass the path to the custom script as an absolute path or relative to the destination folder. - **Type:** string (choice) - **Default:** `absolute` - **Options:** `absolute` (Absolute), `relative` (Relative) #### `CUSTOM_SCRIPT_JSON_PAYLOAD` **Custom Script JSON Payload** Send a JSON payload to the script via stdin. Useful for multi-file imports (audiobooks) or richer metadata without relying on path parsing. - **Type:** boolean - **Default:** `false` #### `COVERS_CACHE_ENABLED` **Enable Cover Cache** Cache book covers on the server for faster loading. - **Type:** boolean - **Default:** `true` #### `COVERS_CACHE_TTL` **Cache TTL (days)** How long to keep cached covers. Set to 0 to keep forever (recommended for static artwork). - **Type:** number - **Default:** `0` - **Constraints:** min: 0, max: 365 #### `COVERS_CACHE_MAX_SIZE_MB` **Max Cache Size (MB)** Maximum disk space for cached covers. Oldest images are removed when limit is reached. - **Type:** number - **Default:** `500` - **Constraints:** min: 50, max: 5000 #### `METADATA_CACHE_ENABLED` **Enable Metadata Caching** When disabled, all metadata searches hit the provider API directly. - **Type:** boolean - **Default:** `true` #### `METADATA_CACHE_SEARCH_TTL` **Search Results Cache (seconds)** How long to cache search results. Default: 300 (5 minutes). Max: 604800 (7 days). - **Type:** number - **Default:** `300` - **Constraints:** min: 60, max: 604800 #### `METADATA_CACHE_BOOK_TTL` **Book Details Cache (seconds)** How long to cache individual book details. Default: 600 (10 minutes). Max: 604800 (7 days). - **Type:** number - **Default:** `600` - **Constraints:** min: 60, max: 604800
## Prowlarr | Variable | Description | Type | Default | |----------|-------------|------|---------| | `PROWLARR_ENABLED` | Enable searching for books via Prowlarr indexers | boolean | `false` | | `PROWLARR_URL` | Base URL of your Prowlarr instance | string | _none_ | | `PROWLARR_API_KEY` | Found in Prowlarr: Settings > General > API Key | string (secret) | _none_ | | `PROWLARR_INDEXERS` | Select which indexers to search. 📚 = has book categories. Leave empty to search all. | string (comma-separated) | _empty list_ | | `PROWLARR_AUTO_EXPAND` | Automatically retry search without category filtering if no results are found | boolean | `false` |
Detailed descriptions #### `PROWLARR_ENABLED` **Enable Prowlarr source** Enable searching for books via Prowlarr indexers - **Type:** boolean - **Default:** `false` #### `PROWLARR_URL` **Prowlarr URL** Base URL of your Prowlarr instance - **Type:** string - **Default:** _none_ - **Required:** Yes #### `PROWLARR_API_KEY` **API Key** Found in Prowlarr: Settings > General > API Key - **Type:** string (secret) - **Default:** _none_ - **Required:** Yes #### `PROWLARR_INDEXERS` **Indexers to Search** Select which indexers to search. 📚 = has book categories. Leave empty to search all. - **Type:** string (comma-separated) - **Default:** _empty list_ #### `PROWLARR_AUTO_EXPAND` **Auto-expand search on no results** Automatically retry search without category filtering if no results are found - **Type:** boolean - **Default:** `false`
## AudiobookBay | Variable | Description | Type | Default | |----------|-------------|------|---------| | `ABB_ENABLED` | Enable AudiobookBay as a release source for audiobooks. | boolean | `false` | | `ABB_HOSTNAME` | AudiobookBay domain (e.g., audiobookbay.lu, audiobookbay.is). Required to enable searches. | string | _empty string_ | | `ABB_PAGE_LIMIT` | Maximum number of search result pages to fetch (1-10). | number | `1` | | `ABB_EXACT_PHRASE` | Wrap generated queries in quotes for stricter matching. If no results are found, Shelfmark retries without quotes. | boolean | `false` | | `ABB_RATE_LIMIT_DELAY` | Delay between requests in seconds to avoid rate limiting (0-10). | number | `1.0` |
Detailed descriptions #### `ABB_ENABLED` **Enable AudiobookBay** Enable AudiobookBay as a release source for audiobooks. - **Type:** boolean - **Default:** `false` #### `ABB_HOSTNAME` **Hostname** AudiobookBay domain (e.g., audiobookbay.lu, audiobookbay.is). Required to enable searches. - **Type:** string - **Default:** _empty string_ - **Required:** Yes #### `ABB_PAGE_LIMIT` **Max Pages to Search** Maximum number of search result pages to fetch (1-10). - **Type:** number - **Default:** `1` - **Constraints:** min: 1, max: 10 #### `ABB_EXACT_PHRASE` **Prefer Exact-Phrase Search** Wrap generated queries in quotes for stricter matching. If no results are found, Shelfmark retries without quotes. - **Type:** boolean - **Default:** `false` #### `ABB_RATE_LIMIT_DELAY` **Rate Limit Delay (seconds)** Delay between requests in seconds to avoid rate limiting (0-10). - **Type:** number - **Default:** `1.0` - **Constraints:** min: 0.0, max: 10.0
## IRC | Variable | Description | Type | Default | |----------|-------------|------|---------| | `IRC_SERVER` | IRC server hostname | string | _none_ | | `IRC_PORT` | IRC server port (usually 6697 for TLS, 6667 for plain) | number | `6697` | | `IRC_USE_TLS` | Enable TLS/SSL encryption for the IRC connection. Disable for servers that don't support TLS. | boolean | `true` | | `IRC_CHANNEL` | Channel name without the # prefix | string | _none_ | | `IRC_NICK` | Your IRC nickname (required). Must be unique on the IRC network. | string | _none_ | | `IRC_SEARCH_BOT` | The search bot to query for results | string | _none_ | | `IRC_CACHE_TTL` | How long to keep cached search results before they expire. | string (choice) | `2592000` |
Detailed descriptions #### `IRC_SERVER` **Server** IRC server hostname - **Type:** string - **Default:** _none_ - **Required:** Yes #### `IRC_PORT` **Port** IRC server port (usually 6697 for TLS, 6667 for plain) - **Type:** number - **Default:** `6697` #### `IRC_USE_TLS` **Use TLS** Enable TLS/SSL encryption for the IRC connection. Disable for servers that don't support TLS. - **Type:** boolean - **Default:** `true` #### `IRC_CHANNEL` **Channel** Channel name without the # prefix - **Type:** string - **Default:** _none_ - **Required:** Yes #### `IRC_NICK` **Nickname** Your IRC nickname (required). Must be unique on the IRC network. - **Type:** string - **Default:** _none_ - **Required:** Yes #### `IRC_SEARCH_BOT` **Search bot** The search bot to query for results - **Type:** string - **Default:** _none_ #### `IRC_CACHE_TTL` **Cache Duration** How long to keep cached search results before they expire. - **Type:** string (choice) - **Default:** `2592000` - **Options:** `2592000` (30 days), `0` (Forever (until manually cleared))
## Download Clients | Variable | Description | Type | Default | |----------|-------------|------|---------| | `PROWLARR_TORRENT_CLIENT` | Choose which torrent client to use | string (choice) | _empty string_ | | `QBITTORRENT_URL` | Web UI URL of your qBittorrent instance | string | _none_ | | `QBITTORRENT_USERNAME` | qBittorrent Web UI username | string | _none_ | | `QBITTORRENT_PASSWORD` | qBittorrent Web UI password | string (secret) | _none_ | | `QBITTORRENT_CATEGORY` | Category to assign to book downloads in qBittorrent | string | `books` | | `QBITTORRENT_CATEGORY_AUDIOBOOK` | Category for audiobook downloads. Leave empty to use the book category. | string | _empty string_ | | `QBITTORRENT_DOWNLOAD_DIR` | Server-side directory where torrents are downloaded (optional, uses qBittorrent default if not specified) | string | _none_ | | `QBITTORRENT_TAG` | Tag(s) to assign to qBittorrent downloads. Leave empty for no tags. | string | _empty list_ | | `TRANSMISSION_URL` | URL of your Transmission instance (use https:// for TLS) | string | _none_ | | `TRANSMISSION_USERNAME` | Transmission RPC username (if authentication enabled) | string | _none_ | | `TRANSMISSION_PASSWORD` | Transmission RPC password | string (secret) | _none_ | | `TRANSMISSION_CATEGORY` | Label to assign to book downloads in Transmission | string | `books` | | `TRANSMISSION_CATEGORY_AUDIOBOOK` | Label for audiobook downloads. Leave empty to use the book label. | string | _empty string_ | | `TRANSMISSION_DOWNLOAD_DIR` | Server-side directory where torrents are downloaded (optional, uses Transmission default if not specified) | string | _none_ | | `DELUGE_HOST` | Hostname/IP or full URL of your Deluge Web UI (deluge-web) | string | `localhost` | | `DELUGE_PORT` | Deluge Web UI port (default: 8112) | string | `8112` | | `DELUGE_PASSWORD` | Deluge Web UI password (default: deluge) | string (secret) | _none_ | | `DELUGE_CATEGORY` | Label to assign to book downloads in Deluge | string | `books` | | `DELUGE_CATEGORY_AUDIOBOOK` | Label for audiobook downloads. Leave empty to use the book label. | string | _empty string_ | | `DELUGE_DOWNLOAD_DIR` | Server-side directory where torrents are downloaded (optional, uses Deluge default if not specified) | string | _none_ | | `RTORRENT_URL` | XML-RPC URL of your rTorrent instance | string | _none_ | | `RTORRENT_USERNAME` | HTTP Basic auth username (if authentication enabled) | string | _none_ | | `RTORRENT_PASSWORD` | HTTP Basic auth password | string (secret) | _none_ | | `RTORRENT_LABEL` | Label to assign to book downloads in rTorrent | string | `cwabd` | | `RTORRENT_DOWNLOAD_DIR` | Server-side directory where torrents are downloaded (optional, uses rTorrent default if not specified) | string | _none_ | | `PROWLARR_TORRENT_ACTION` | Remove deletes the torrent from your client immediately after import (stops seeding, files are kept); Keep leaves it in the client to continue seeding | string (choice) | `keep` | | `PROWLARR_USENET_CLIENT` | Choose which usenet client to use | string (choice) | _empty string_ | | `NZBGET_URL` | URL of your NZBGet instance | string | _none_ | | `NZBGET_USERNAME` | NZBGet control username | string | `nzbget` | | `NZBGET_PASSWORD` | NZBGet control password | string (secret) | _none_ | | `NZBGET_CATEGORY` | Category to assign to book downloads in NZBGet | string | `Books` | | `NZBGET_CATEGORY_AUDIOBOOK` | Category for audiobook downloads. Leave empty to use the book category. | string | _empty string_ | | `SABNZBD_URL` | URL of your SABnzbd instance | string | _none_ | | `SABNZBD_API_KEY` | Found in SABnzbd: Config > General > API Key | string (secret) | _none_ | | `SABNZBD_CATEGORY` | Category to assign to book downloads in SABnzbd | string | `books` | | `SABNZBD_CATEGORY_AUDIOBOOK` | Category for audiobook downloads. Leave empty to use the book category. | string | _empty string_ | | `PROWLARR_USENET_ACTION` | Move deletes the job from your usenet client after import; Copy keeps it in the client | string (choice) | `move` |
Detailed descriptions #### `PROWLARR_TORRENT_CLIENT` **Torrent Client** Choose which torrent client to use - **Type:** string (choice) - **Default:** _empty string_ - **Options:** `""` (None), `qbittorrent` (qBittorrent), `transmission` (Transmission), `deluge` (Deluge), `rtorrent` (rTorrent) #### `QBITTORRENT_URL` **qBittorrent URL** Web UI URL of your qBittorrent instance - **Type:** string - **Default:** _none_ #### `QBITTORRENT_USERNAME` **Username** qBittorrent Web UI username - **Type:** string - **Default:** _none_ #### `QBITTORRENT_PASSWORD` **Password** qBittorrent Web UI password - **Type:** string (secret) - **Default:** _none_ #### `QBITTORRENT_CATEGORY` **Book Category** Category to assign to book downloads in qBittorrent - **Type:** string - **Default:** `books` #### `QBITTORRENT_CATEGORY_AUDIOBOOK` **Audiobook Category** Category for audiobook downloads. Leave empty to use the book category. - **Type:** string - **Default:** _empty string_ #### `QBITTORRENT_DOWNLOAD_DIR` **Download Directory** Server-side directory where torrents are downloaded (optional, uses qBittorrent default if not specified) - **Type:** string - **Default:** _none_ #### `QBITTORRENT_TAG` **Tags** Tag(s) to assign to qBittorrent downloads. Leave empty for no tags. - **Type:** string - **Default:** _empty list_ #### `TRANSMISSION_URL` **Transmission URL** URL of your Transmission instance (use https:// for TLS) - **Type:** string - **Default:** _none_ #### `TRANSMISSION_USERNAME` **Username** Transmission RPC username (if authentication enabled) - **Type:** string - **Default:** _none_ #### `TRANSMISSION_PASSWORD` **Password** Transmission RPC password - **Type:** string (secret) - **Default:** _none_ #### `TRANSMISSION_CATEGORY` **Book Label** Label to assign to book downloads in Transmission - **Type:** string - **Default:** `books` #### `TRANSMISSION_CATEGORY_AUDIOBOOK` **Audiobook Label** Label for audiobook downloads. Leave empty to use the book label. - **Type:** string - **Default:** _empty string_ #### `TRANSMISSION_DOWNLOAD_DIR` **Download Directory** Server-side directory where torrents are downloaded (optional, uses Transmission default if not specified) - **Type:** string - **Default:** _none_ #### `DELUGE_HOST` **Deluge Web UI Host/URL** Hostname/IP or full URL of your Deluge Web UI (deluge-web) - **Type:** string - **Default:** `localhost` #### `DELUGE_PORT` **Deluge Web UI Port** Deluge Web UI port (default: 8112) - **Type:** string - **Default:** `8112` #### `DELUGE_PASSWORD` **Password** Deluge Web UI password (default: deluge) - **Type:** string (secret) - **Default:** _none_ #### `DELUGE_CATEGORY` **Book Label** Label to assign to book downloads in Deluge - **Type:** string - **Default:** `books` #### `DELUGE_CATEGORY_AUDIOBOOK` **Audiobook Label** Label for audiobook downloads. Leave empty to use the book label. - **Type:** string - **Default:** _empty string_ #### `DELUGE_DOWNLOAD_DIR` **Download Directory** Server-side directory where torrents are downloaded (optional, uses Deluge default if not specified) - **Type:** string - **Default:** _none_ #### `RTORRENT_URL` **rTorrent URL** XML-RPC URL of your rTorrent instance - **Type:** string - **Default:** _none_ #### `RTORRENT_USERNAME` **Username** HTTP Basic auth username (if authentication enabled) - **Type:** string - **Default:** _none_ #### `RTORRENT_PASSWORD` **Password** HTTP Basic auth password - **Type:** string (secret) - **Default:** _none_ #### `RTORRENT_LABEL` **Book Label** Label to assign to book downloads in rTorrent - **Type:** string - **Default:** `cwabd` #### `RTORRENT_DOWNLOAD_DIR` **Download Directory** Server-side directory where torrents are downloaded (optional, uses rTorrent default if not specified) - **Type:** string - **Default:** _none_ #### `PROWLARR_TORRENT_ACTION` **Torrent Completion Action** Remove deletes the torrent from your client immediately after import (stops seeding, files are kept); Keep leaves it in the client to continue seeding - **Type:** string (choice) - **Default:** `keep` - **Options:** `keep` (Keep), `remove` (Remove) #### `PROWLARR_USENET_CLIENT` **Usenet Client** Choose which usenet client to use - **Type:** string (choice) - **Default:** _empty string_ - **Options:** `""` (None), `nzbget` (NZBGet), `sabnzbd` (SABnzbd) #### `NZBGET_URL` **NZBGet URL** URL of your NZBGet instance - **Type:** string - **Default:** _none_ #### `NZBGET_USERNAME` **Username** NZBGet control username - **Type:** string - **Default:** `nzbget` #### `NZBGET_PASSWORD` **Password** NZBGet control password - **Type:** string (secret) - **Default:** _none_ #### `NZBGET_CATEGORY` **Book Category** Category to assign to book downloads in NZBGet - **Type:** string - **Default:** `Books` #### `NZBGET_CATEGORY_AUDIOBOOK` **Audiobook Category** Category for audiobook downloads. Leave empty to use the book category. - **Type:** string - **Default:** _empty string_ #### `SABNZBD_URL` **SABnzbd URL** URL of your SABnzbd instance - **Type:** string - **Default:** _none_ #### `SABNZBD_API_KEY` **API Key** Found in SABnzbd: Config > General > API Key - **Type:** string (secret) - **Default:** _none_ #### `SABNZBD_CATEGORY` **Book Category** Category to assign to book downloads in SABnzbd - **Type:** string - **Default:** `books` #### `SABNZBD_CATEGORY_AUDIOBOOK` **Audiobook Category** Category for audiobook downloads. Leave empty to use the book category. - **Type:** string - **Default:** _empty string_ #### `PROWLARR_USENET_ACTION` **NZB Completion Action** Move deletes the job from your usenet client after import; Copy keeps it in the client - **Type:** string (choice) - **Default:** `move` - **Options:** `move` (Move), `copy` (Copy)
## Metadata Providers ### Metadata Providers: Hardcover | Variable | Description | Type | Default | |----------|-------------|------|---------| | `HARDCOVER_ENABLED` | Enable Hardcover as a metadata provider for book searches | boolean | `false` | | `HARDCOVER_API_KEY` | Get your API key from hardcover.app/account/api | string (secret) | _none_ | | `HARDCOVER_DEFAULT_SORT` | Default sort order for Hardcover search results. | string (choice) | `relevance` | | `HARDCOVER_EXCLUDE_COMPILATIONS` | Filter out compilations, anthologies, and omnibus editions from search results | boolean | `false` | | `HARDCOVER_EXCLUDE_UNRELEASED` | Filter out books with a release year in the future | boolean | `false` |
Detailed descriptions #### `HARDCOVER_ENABLED` **Enable Hardcover** Enable Hardcover as a metadata provider for book searches - **Type:** boolean - **Default:** `false` #### `HARDCOVER_API_KEY` **API Key** Get your API key from hardcover.app/account/api - **Type:** string (secret) - **Default:** _none_ - **Required:** Yes #### `HARDCOVER_DEFAULT_SORT` **Default Sort Order** Default sort order for Hardcover search results. - **Type:** string (choice) - **Default:** `relevance` - **Options:** `relevance` (Most relevant), `popularity` (Most popular), `rating` (Highest rated), `newest` (Newest), `oldest` (Oldest) #### `HARDCOVER_EXCLUDE_COMPILATIONS` **Exclude Compilations** Filter out compilations, anthologies, and omnibus editions from search results - **Type:** boolean - **Default:** `false` #### `HARDCOVER_EXCLUDE_UNRELEASED` **Exclude Unreleased Books** Filter out books with a release year in the future - **Type:** boolean - **Default:** `false`
### Metadata Providers: Open Library | Variable | Description | Type | Default | |----------|-------------|------|---------| | `OPENLIBRARY_ENABLED` | Enable Open Library as a metadata provider for book searches | boolean | `false` | | `OPENLIBRARY_DEFAULT_SORT` | Default sort order for Open Library search results. | string (choice) | `relevance` |
Detailed descriptions #### `OPENLIBRARY_ENABLED` **Enable Open Library** Enable Open Library as a metadata provider for book searches - **Type:** boolean - **Default:** `false` #### `OPENLIBRARY_DEFAULT_SORT` **Default Sort Order** Default sort order for Open Library search results. - **Type:** string (choice) - **Default:** `relevance` - **Options:** `relevance` (Most relevant), `newest` (Newest), `oldest` (Oldest)
### Metadata Providers: Google Books | Variable | Description | Type | Default | |----------|-------------|------|---------| | `GOOGLEBOOKS_ENABLED` | Enable Google Books as a metadata provider for book searches | boolean | `false` | | `GOOGLEBOOKS_API_KEY` | Get your API key from Google Cloud Console (APIs & Services > Credentials) | string (secret) | _none_ | | `GOOGLEBOOKS_DEFAULT_SORT` | Default sort order for Google Books search results. | string (choice) | `relevance` |
Detailed descriptions #### `GOOGLEBOOKS_ENABLED` **Enable Google Books** Enable Google Books as a metadata provider for book searches - **Type:** boolean - **Default:** `false` #### `GOOGLEBOOKS_API_KEY` **API Key** Get your API key from Google Cloud Console (APIs & Services > Credentials) - **Type:** string (secret) - **Default:** _none_ - **Required:** Yes #### `GOOGLEBOOKS_DEFAULT_SORT` **Default Sort Order** Default sort order for Google Books search results. - **Type:** string (choice) - **Default:** `relevance` - **Options:** `relevance` (Most relevant), `newest` (Newest)
## Direct Download ### Direct Download: Download Sources | Variable | Description | Type | Default | |----------|-------------|------|---------| | `AA_DONATOR_KEY` | Enables fast download access on AA. Get this from your donator account page. | string (secret) | _none_ | | `FAST_SOURCES_DISPLAY` | Always tried first, no waiting or bypass required. | JSON array | _see UI for defaults_ | | `SOURCE_PRIORITY` | Fallback sources, may have waiting. Requires bypasser. Drag to reorder. | JSON array | _see UI for defaults_ | | `MAX_RETRY` | Maximum retry attempts for failed downloads. | number | `10` | | `DEFAULT_SLEEP` | Wait time between download retry attempts. | number | `5` | | `AA_CONTENT_TYPE_ROUTING` | Override destination based on content type metadata. | boolean | `false` | | `AA_CONTENT_TYPE_DIR_FICTION` | Fiction Books | string | _none_ | | `AA_CONTENT_TYPE_DIR_NON_FICTION` | Non-Fiction Books | string | _none_ | | `AA_CONTENT_TYPE_DIR_UNKNOWN` | Unknown Books | string | _none_ | | `AA_CONTENT_TYPE_DIR_MAGAZINE` | Magazines | string | _none_ | | `AA_CONTENT_TYPE_DIR_COMIC` | Comic Books | string | _none_ | | `AA_CONTENT_TYPE_DIR_STANDARDS` | Standards Documents | string | _none_ | | `AA_CONTENT_TYPE_DIR_MUSICAL_SCORE` | Musical Scores | string | _none_ | | `AA_CONTENT_TYPE_DIR_OTHER` | Other | string | _none_ |
Detailed descriptions #### `AA_DONATOR_KEY` **Account Donator Key** Enables fast download access on AA. Get this from your donator account page. - **Type:** string (secret) - **Default:** _none_ #### `FAST_SOURCES_DISPLAY` **Fast downloads** Always tried first, no waiting or bypass required. - **Type:** JSON array - **Default:** _see UI for defaults_ #### `SOURCE_PRIORITY` **Slow downloads** Fallback sources, may have waiting. Requires bypasser. Drag to reorder. - **Type:** JSON array - **Default:** _see UI for defaults_ #### `MAX_RETRY` **Max Retries** Maximum retry attempts for failed downloads. - **Type:** number - **Default:** `10` - **Constraints:** min: 1, max: 50 #### `DEFAULT_SLEEP` **Retry Delay (seconds)** Wait time between download retry attempts. - **Type:** number - **Default:** `5` - **Constraints:** min: 1, max: 60 #### `AA_CONTENT_TYPE_ROUTING` **Enable Content-Type Routing** Override destination based on content type metadata. - **Type:** boolean - **Default:** `false` #### `AA_CONTENT_TYPE_DIR_FICTION` **Fiction Books** - **Type:** string - **Default:** _none_ #### `AA_CONTENT_TYPE_DIR_NON_FICTION` **Non-Fiction Books** - **Type:** string - **Default:** _none_ #### `AA_CONTENT_TYPE_DIR_UNKNOWN` **Unknown Books** - **Type:** string - **Default:** _none_ #### `AA_CONTENT_TYPE_DIR_MAGAZINE` **Magazines** - **Type:** string - **Default:** _none_ #### `AA_CONTENT_TYPE_DIR_COMIC` **Comic Books** - **Type:** string - **Default:** _none_ #### `AA_CONTENT_TYPE_DIR_STANDARDS` **Standards Documents** - **Type:** string - **Default:** _none_ #### `AA_CONTENT_TYPE_DIR_MUSICAL_SCORE` **Musical Scores** - **Type:** string - **Default:** _none_ #### `AA_CONTENT_TYPE_DIR_OTHER` **Other** - **Type:** string - **Default:** _none_
### Direct Download: Cloudflare Bypass | Variable | Description | Type | Default | |----------|-------------|------|---------| | `USE_CF_BYPASS` | Attempt to bypass Cloudflare protection on download sites. | boolean | `true` | | `USING_EXTERNAL_BYPASSER` | Use FlareSolverr or similar external service instead of built-in bypasser. Caution: May have limitations with custom DNS, Tor and proxies. You may experience slower downloads and and poorer reliability compared to the internal bypasser. | boolean | `false` | | `EXT_BYPASSER_URL` | URL of the external bypasser service (e.g., FlareSolverr). | string | `http://flaresolverr:8191` | | `EXT_BYPASSER_PATH` | API path for the external bypasser. | string | `/v1` | | `EXT_BYPASSER_TIMEOUT` | Timeout for external bypasser requests in milliseconds. | number | `60000` |
Detailed descriptions #### `USE_CF_BYPASS` **Enable Cloudflare Bypass** Attempt to bypass Cloudflare protection on download sites. - **Type:** boolean - **Default:** `true` - **Requires restart:** Yes #### `USING_EXTERNAL_BYPASSER` **Use External Bypasser** Use FlareSolverr or similar external service instead of built-in bypasser. Caution: May have limitations with custom DNS, Tor and proxies. You may experience slower downloads and and poorer reliability compared to the internal bypasser. - **Type:** boolean - **Default:** `false` - **Requires restart:** Yes #### `EXT_BYPASSER_URL` **External Bypasser URL** URL of the external bypasser service (e.g., FlareSolverr). - **Type:** string - **Default:** `http://flaresolverr:8191` - **Requires restart:** Yes #### `EXT_BYPASSER_PATH` **External Bypasser Path** API path for the external bypasser. - **Type:** string - **Default:** `/v1` - **Requires restart:** Yes #### `EXT_BYPASSER_TIMEOUT` **External Bypasser Timeout (ms)** Timeout for external bypasser requests in milliseconds. - **Type:** number - **Default:** `60000` - **Requires restart:** Yes - **Constraints:** min: 10000, max: 300000
### Direct Download: Mirrors | Variable | Description | Type | Default | |----------|-------------|------|---------| | `AA_BASE_URL` | Select 'Auto' to try mirrors from your list on startup and fall back on failures. Choosing a specific mirror locks Shelfmark to that mirror (no fallback). | string (choice) | `auto` | | `AA_MIRROR_URLS` | Editable list of AA mirrors. Used to populate the Primary Mirror dropdown and the order used when Auto is selected. Type a URL and press Enter to add. Order matters for auto-rotation | string | `https://annas-archive.gl,https://annas-archive.pk,https://annas-archive.vg,https://annas-archive.gd` | | `AA_ADDITIONAL_URLS` | Deprecated. Use Mirrors instead. This is kept for backwards compatibility with existing installs and environment variables. | string | _none_ | | `LIBGEN_ADDITIONAL_URLS` | Comma-separated list of custom LibGen mirrors to add to the defaults. | string | _none_ | | `ZLIB_PRIMARY_URL` | Z-Library mirror to use for downloads. | string (choice) | `https://z-lib.fm` | | `ZLIB_ADDITIONAL_URLS` | Comma-separated list of custom Z-Library mirror URLs. | string | _none_ | | `WELIB_PRIMARY_URL` | Welib mirror to use for downloads. | string (choice) | `https://welib.org` | | `WELIB_ADDITIONAL_URLS` | Comma-separated list of custom Welib mirror URLs. | string | _none_ |
Detailed descriptions #### `AA_BASE_URL` **Primary Mirror** Select 'Auto' to try mirrors from your list on startup and fall back on failures. Choosing a specific mirror locks Shelfmark to that mirror (no fallback). - **Type:** string (choice) - **Default:** `auto` - **Options:** `auto` (Auto (Recommended)), `https://annas-archive.gl` (annas-archive.gl), `https://annas-archive.pk` (annas-archive.pk), `https://annas-archive.vg` (annas-archive.vg), `https://annas-archive.gd` (annas-archive.gd) #### `AA_MIRROR_URLS` **Mirrors** Editable list of AA mirrors. Used to populate the Primary Mirror dropdown and the order used when Auto is selected. Type a URL and press Enter to add. Order matters for auto-rotation - **Type:** string - **Default:** `https://annas-archive.gl,https://annas-archive.pk,https://annas-archive.vg,https://annas-archive.gd` #### `AA_ADDITIONAL_URLS` **Additional Mirrors (Legacy)** Deprecated. Use Mirrors instead. This is kept for backwards compatibility with existing installs and environment variables. - **Type:** string - **Default:** _none_ #### `LIBGEN_ADDITIONAL_URLS` **Additional Mirrors** Comma-separated list of custom LibGen mirrors to add to the defaults. - **Type:** string - **Default:** _none_ #### `ZLIB_PRIMARY_URL` **Primary Mirror** Z-Library mirror to use for downloads. - **Type:** string (choice) - **Default:** `https://z-lib.fm` - **Options:** `https://z-lib.fm` (z-lib.fm), `https://z-lib.gs` (z-lib.gs), `https://z-lib.id` (z-lib.id), `https://z-library.sk` (z-library.sk), `https://zlibrary-global.se` (zlibrary-global.se) #### `ZLIB_ADDITIONAL_URLS` **Additional Mirrors** Comma-separated list of custom Z-Library mirror URLs. - **Type:** string - **Default:** _none_ #### `WELIB_PRIMARY_URL` **Primary Mirror** Welib mirror to use for downloads. - **Type:** string (choice) - **Default:** `https://welib.org` - **Options:** `https://welib.org` (welib.org) #### `WELIB_ADDITIONAL_URLS` **Additional Mirrors** Comma-separated list of custom Welib mirror URLs. - **Type:** string - **Default:** _none_