{ "order": [], "sections": { "updates": { "order": [], "meta": { "name": "Updates", "description": "Settings for update notifications and release channel." }, "settings": { "enabled": { "name": "Enabled", "required": true, "requires_restart": true, "type": "bool", "value": true, "description": "Enable/disable updating notifications and downloading/applying updates." }, "channel": { "name": "Release Channel", "required": true, "requires_restart": false, "type": "select", "options": [ ["stable", "Stable"], ["unstable", "Unstable"] ], "value": "", "description": "Release channel for updates." } } }, "jellyfin": { "order": [], "meta": { "name": "Jellyfin", "description": "Settings for connecting to Jellyfin" }, "settings": { "username": { "name": "Jellyfin Username", "required": true, "requires_restart": true, "type": "text", "value": "username", "description": "It is recommended to create a limited admin account for this program." }, "password": { "name": "Jellyfin Password", "required": true, "requires_restart": true, "type": "password", "value": "password" }, "server": { "name": "Server address", "required": true, "requires_restart": true, "type": "text", "value": "http://jellyfin.local:8096", "description": "Jellyfin server address. Can be public, or local for security purposes." }, "public_server": { "name": "Public address", "required": false, "requires_restart": false, "type": "text", "value": "https://jellyf.in:443", "description": "Publicly accessible Jellyfin address for invite form. Leave blank to reuse the above address." }, "client": { "name": "Client Name", "required": true, "requires_restart": true, "advanced": true, "type": "text", "value": "jfa-go", "description": "The name of the client that will show up in the Jellyfin dashboard." }, "cache_timeout": { "name": "User cache timeout (minutes)", "required": false, "requires_restart": true, "advanced": true, "type": "number", "value": 30, "description": "Timeout of user cache in minutes. Set to 0 to disable." }, "type": { "name": "Server type", "required": false, "requires_restart": true, "type": "select", "options": [ ["jellyfin", "Jellyfin"], ["emby", "Emby"] ], "value": "jellyfin", "description": "Note: Emby integration works but is missing some features, such as Password Resets." }, "substitute_jellyfin_strings": { "name": "Substitute occurrences of \"Jellyfin\"", "required": false, "requires_restart": true, "type": "text", "value": "", "description": "Optionally substitute occurrences of \"Jellyfin\" in the account creation form and emails with this. May result in bad grammar." } } }, "ui": { "order": [], "meta": { "name": "General", "description": "Settings related to the UI and program functionality." }, "settings": { "language-form": { "name": "Default Form Language", "required": false, "requires_restart": true, "type": "select", "options": [ ["en-us", "English (US)"] ], "value": "en-us", "description": "Default Account Form Language. Visit weblate.hrfee.dev if you'd like to translate." }, "language-admin": { "name": "Default Admin Language", "required": false, "requires_restart": true, "type": "select", "options": [ ["en-us", "English (US)"] ], "value": "en-us", "description": "Default Admin page Language. Settings has not been translated. Visit weblate.hrfee.dev if you'd like to translate." }, "theme": { "name": "Default Look", "required": false, "requires_restart": true, "type": "select", "options": [ ["Jellyfin (Dark)", "Jellyfin (Dark)"], ["Default (Light)", "Default (Light)"] ], "value": "Jellyfin (Dark)", "description": "Default appearance for all users." }, "host": { "name": "Address", "required": true, "requires_restart": true, "type": "text", "value": "0.0.0.0", "description": "Set 0.0.0.0 to run on localhost" }, "port": { "name": "Port", "required": true, "requires_restart": true, "type": "number", "value": 8056 }, "jellyfin_login": { "name": "Use Jellyfin for authentication", "required": false, "requires_restart": true, "type": "bool", "value": true, "description": "Enable this to use Jellyfin users instead of the below username and pw." }, "admin_only": { "name": "Allow admin users only", "required": false, "requires_restart": true, "depends_true": "jellyfin_login", "type": "bool", "value": true, "description": "Allows only admin users on Jellyfin to access the admin page." }, "username": { "name": "Web Username", "required": true, "requires_restart": true, "depends_false": "jellyfin_login", "type": "text", "value": "your username", "description": "Username for admin page (Leave blank if using jellyfin_login)" }, "password": { "name": "Web Password", "required": true, "requires_restart": true, "depends_false": "jellyfin_login", "type": "password", "value": "your password", "description": "Password for admin page (Leave blank if using jellyfin_login)" }, "email": { "name": "Admin email address", "required": false, "requires_restart": false, "depends_false": "jellyfin_login", "type": "text", "value": "example@example.com", "description": "Address to send notifications to (Leave blank if using jellyfin_login)" }, "debug": { "name": "Debug logging", "required": false, "requires_restart": true, "type": "bool", "value": false, "description": "Enables debug logging and exposes pprof as a route (Don't use in production!)" }, "contact_message": { "name": "Contact message", "required": false, "requires_restart": false, "type": "text", "value": "Need help? contact me.", "description": "Displayed at bottom of all pages except admin" }, "help_message": { "name": "Help message", "required": false, "requires_restart": false, "type": "text", "value": "Enter your details to create an account.", "description": "Displayed at top of invite form." }, "success_message": { "name": "Success message", "required": false, "requires_restart": false, "type": "text", "value": "Your account has been created. Click below to continue to Jellyfin.", "description": "Displayed when a user creates an account" }, "url_base": { "name": "URL Base", "required": false, "requires_restart": true, "type": "text", "value": "", "description": "URL base for when running jfa-go with a reverse proxy in a subfolder." } } }, "advanced": { "order": [], "meta": { "name": "Advanced", "description": "Advanced settings." }, "settings": { "tls": { "name": "TLS/HTTP2", "required": false, "requires_restart": true, "type": "bool", "value": false, "description": "Enable TLS." }, "tls_port": { "name": "TLS Port", "depends_true": "tls", "required": false, "requires_restart": true, "type": "number", "value": 8057, "description": "Port to run TLS server on" }, "tls_cert": { "name": "Path to TLS Certificate", "depends_true": "tls", "required": false, "requires_restart": true, "type": "text", "value": "", "description": "Path to .crt file. See jfa-go wiki for more info." }, "tls_key": { "name": "Path to TLS Key file", "depends_true": "tls", "required": false, "requires_restart": true, "type": "text", "value": "", "description": "Path to .key file. See jfa-go wiki for more info." } } }, "password_validation": { "order": [], "meta": { "name": "Password Validation", "description": "Password validation (minimum length, etc.)" }, "settings": { "enabled": { "name": "Enabled", "required": false, "requires_restart": false, "type": "bool", "value": true }, "min_length": { "name": "Minimum Length", "requires_restart": false, "depends_true": "enabled", "type": "text", "value": "8" }, "upper": { "name": "Minimum uppercase characters", "requires_restart": false, "depends_true": "enabled", "type": "text", "value": "1" }, "lower": { "name": "Minimum lowercase characters", "requires_restart": false, "depends_true": "enabled", "type": "text", "value": "0" }, "number": { "name": "Minimum number count", "requires_restart": false, "depends_true": "enabled", "type": "text", "value": "1" }, "special": { "name": "Minimum number of special characters", "requires_restart": false, "depends_true": "enabled", "type": "text", "value": "0" } } }, "messages": { "order": [], "meta": { "name": "Messages/Notifications", "description": "General settings for emails/messages." }, "settings": { "enabled": { "name": "Enabled", "required": true, "requires_restart": true, "type": "bool", "value": true, "description": "Enable the sending of emails/messages such as password resets, announcements, etc." }, "use_24h": { "name": "Use 24h time", "required": false, "requires_restart": false, "depends_true": "method", "type": "bool", "value": true }, "date_format": { "name": "Date format", "required": false, "requires_restart": false, "advanced": true, "depends_true": "method", "type": "text", "value": "%d/%m/%y", "description": "Date format used in emails. Follows datetime.strftime format." }, "message": { "name": "Help message", "required": false, "requires_restart": false, "depends_true": "method", "type": "text", "value": "Need help? contact me.", "description": "Message displayed at bottom of emails." } } }, "email": { "order": [], "meta": { "name": "Email", "description": "General email settings.", "depends_true": "messages|enabled" }, "settings": { "language": { "name": "Email Language", "required": false, "requires_restart": false, "depends_true": "method", "type": "select", "options": [ ["en-us", "English (US)"] ], "value": "en-us", "description": "Default email language. Submit a PR on github if you'd like to translate." }, "no_username": { "name": "Use email addresses as username", "required": false, "requires_restart": false, "depends_true": "method", "type": "bool", "value": false, "description": "Use email address from invite form as username on Jellyfin." }, "method": { "name": "Email method", "required": false, "requires_restart": false, "type": "select", "options": [ ["", "Disabled"], ["smtp", "SMTP"], ["mailgun", "Mailgun"] ], "value": "smtp", "description": "Method of sending email to use." }, "address": { "name": "Sent from (address)", "required": false, "requires_restart": false, "depends_true": "method", "type": "email", "value": "jellyfin@jellyf.in", "description": "Address to send emails from" }, "from": { "name": "Sent from (name)", "required": false, "requires_restart": false, "depends_true": "method", "type": "text", "value": "Jellyfin", "description": "The name of the sender" }, "plaintext": { "name": "Send emails as plain text", "required": false, "requires_restart": false, "advanced": true, "depends_true": "method", "type": "bool", "value": false, "description": "Send emails as plain text instead of HTML." } } }, "mailgun": { "order": [], "meta": { "name": "Mailgun (Email)", "description": "Mailgun API connection settings", "depends_true": "email|method" }, "settings": { "api_url": { "name": "API URL", "required": false, "requires_restart": false, "type": "text", "value": "https://api.mailgun.net..." }, "api_key": { "name": "API Key", "required": false, "requires_restart": false, "type": "text", "value": "your api key" } } }, "smtp": { "order": [], "meta": { "name": "SMTP (Email)", "description": "SMTP Server connection settings.", "depends_true": "email|method" }, "settings": { "username": { "name": "Username", "required": false, "requires_restart": false, "type": "text", "value": "", "description": "Username for SMTP. Leave blank to user send from address as username." }, "encryption": { "name": "Encryption Method", "required": false, "requires_restart": false, "type": "select", "options": [ ["ssl_tls", "SSL/TLS"], ["starttls", "STARTTLS"] ], "value": "starttls", "description": "Your email provider should provide different ports for each encryption method. Generally 465 for ssl_tls, 587 for starttls." }, "server": { "name": "Server address", "required": false, "requires_restart": false, "type": "text", "value": "smtp.jellyf.in", "description": "SMTP Server address." }, "port": { "name": "Port", "required": false, "requires_restart": false, "type": "number", "value": 465 }, "password": { "name": "Password", "required": false, "requires_restart": false, "type": "password", "value": "smtp password" }, "ssl_cert": { "name": "Path to custom SSL certificate", "required": false, "requires_restart": false, "advanced": true, "type": "text", "value": "", "description": "Use if your SMTP server's SSL Certificate is not trusted by the system." } } }, "telegram": { "order": [], "meta": { "name": "Telegram", "description": "Settings for Telegram signup/notifications" }, "settings": { "enabled": { "name": "Enabled", "required": false, "requires_restart": true, "type": "bool", "value": false, "description": "Enable signup verification through Telegram and the sending of notifications through it." }, "required": { "name": "Require on sign-up", "required": false, "required_restart": true, "type": "bool", "value": false, "description": "Require telegram connection on sign-up." }, "token": { "name": "API Token", "required": false, "requires_restart": true, "depends_true": "enabled", "type": "text", "value": "", "description": "Telegram Bot API Token." }, "language": { "name": "Language", "required": false, "requires_restart": false, "depends_true": "enabled", "type": "select", "options": [ ["en-us", "English (US)"] ], "value": "en-us", "description": "Default telegram message language. Visit weblate if you'd like to translate." } } }, "password_resets": { "order": [], "meta": { "name": "Password Resets", "description": "Settings for the password reset handler.", "depends_true": "messages|enabled" }, "settings": { "enabled": { "name": "Enabled", "required": false, "requires_restart": true, "type": "bool", "value": true, "description": "Enable to store provided email addresses, monitor Jellyfin directory for pw-resets, and send reset pins" }, "watch_directory": { "name": "Jellyfin directory", "required": false, "requires_restart": true, "depends_true": "enabled", "type": "text", "value": "/path/to/jellyfin", "description": "Path to the folder Jellyfin puts password-reset files." }, "link_reset": { "name": "Use reset link instead of PIN (Required for Ombi)", "required": false, "requires_restart": true, "depends_true": "enabled", "type": "bool", "value": false, "description": "Send users a link to reset their password instead of a PIN. Must be enabled to reset Ombi password at the same time as the Jellyfin password." }, "language": { "name": "Default reset link language", "required": false, "requires_restart": true, "depends_true": "link_reset", "type": "select", "options": [ ["en-us", "English (US)"] ], "value": "en-us", "description": "Default language for password reset success screen." }, "email_html": { "name": "Custom email (HTML)", "required": false, "requires_restart": false, "advanced": true, "depends_true": "enabled", "type": "text", "value": "", "description": "Path to custom email html" }, "email_text": { "name": "Custom email (plaintext)", "required": false, "requires_restart": false, "advanced": true, "depends_true": "enabled", "type": "text", "value": "", "description": "Path to custom email in plain text" }, "subject": { "name": "Email subject", "required": false, "requires_restart": false, "depends_true": "enabled", "type": "text", "value": "", "description": "Subject of password reset emails." } } }, "invite_emails": { "order": [], "meta": { "name": "Invite emails", "description": "Settings for sending invites directly to users.", "depends_true": "email|method" }, "settings": { "enabled": { "name": "Enabled", "required": false, "requires_restart": false, "type": "bool", "value": true }, "email_html": { "name": "Custom email (HTML)", "required": false, "requires_restart": false, "advanced": true, "depends_true": "enabled", "type": "text", "value": "", "description": "Path to custom email HTML" }, "email_text": { "name": "Custom email (plaintext)", "required": false, "requires_restart": false, "advanced": true, "depends_true": "enabled", "type": "text", "value": "", "description": "Path to custom email in plain text" }, "subject": { "name": "Email subject", "required": true, "requires_restart": false, "depends_true": "enabled", "type": "text", "value": "", "description": "Subject of invite emails." }, "url_base": { "name": "URL Base", "required": true, "requires_restart": false, "depends_true": "enabled", "type": "text", "value": "http://accounts.jellyf.in:8056/invite", "description": "Base URL for jfa-go. This is necessary because using a reverse proxy means the program has no way of knowing the URL itself." } } }, "notifications": { "order": [], "meta": { "name": "Notifications", "description": "Notification related settings.", "depends_true": "messages|enabled" }, "settings": { "enabled": { "name": "Enabled", "required": "false", "requires_restart": true, "type": "bool", "value": true, "description": "Enabling adds optional toggles to invites to notify on expiry and user creation." }, "expiry_html": { "name": "Expiry email (HTML)", "required": false, "requires_restart": false, "advanced": true, "depends_true": "enabled", "type": "text", "value": "", "description": "Path to expiry notification email HTML." }, "expiry_text": { "name": "Expiry email (Plaintext)", "required": false, "requires_restart": "false", "advanced": true, "depends_true": "enabled", "type": "text", "value": "", "description": "Path to expiry notification email in plaintext." }, "created_html": { "name": "User created email (HTML)", "required": false, "requires_restart": false, "advanced": true, "depends_true": "enabled", "type": "text", "value": "", "description": "Path to user creation notification email HTML." }, "created_text": { "name": "User created email (Plaintext)", "required": false, "requires_restart": false, "advanced": true, "depends_true": "enabled", "type": "text", "value": "", "description": "Path to user creation notification email in plaintext." } } }, "ombi": { "order": [], "meta": { "name": "Ombi Integration", "description": "Connect to Ombi to automatically create both Ombi and Jellyfin accounts for new users. You'll need to create a user template for this to work. Once enabled, refresh to see an option in settings for this. To handle password resets for Ombi & Jellyfin, enable \"Use reset link instead of PIN\"." }, "settings": { "enabled": { "name": "Enabled", "required": false, "requires_restart": true, "type": "bool", "value": false, "description": "Enable to create an Ombi account for new Jellyfin users" }, "server": { "name": "URL", "required": false, "requires_restart": true, "type": "text", "value": "localhost:5000", "depends_true": "enabled", "description": "Ombi server URL, including http(s)://." }, "api_key": { "name": "API Key", "required": false, "requires_restart": true, "type": "text", "value": "", "depends_true": "enabled", "description": "API Key. Get this from the first tab in Ombi settings." } } }, "welcome_email": { "order": [], "meta": { "name": "Welcome Message", "description": "Optionally send a welcome message to new users with the Jellyfin URL and their username.", "depends_true": "messages|enabled" }, "settings": { "enabled": { "name": "Enabled", "required": false, "requires_restart": true, "type": "bool", "value": false, "description": "Enable to send welcome emails to new users." }, "subject": { "name": "Email subject", "required": false, "requires_restart": false, "type": "text", "value": "", "description": "Subject of welcome emails." }, "email_html": { "name": "Custom email (HTML)", "required": false, "requires_restart": false, "advanced": true, "type": "text", "value": "", "description": "Path to custom email html" }, "email_text": { "name": "Custom email (plaintext)", "required": false, "requires_restart": false, "advanced": true, "type": "text", "value": "", "description": "Path to custom email in plain text" } } }, "email_confirmation": { "order": [], "meta": { "name": "Email confirmation", "description": "If enabled, a user will be sent an email confirmation link to ensure their password is right before they can make an account.", "depends_true": "email|method" }, "settings": { "enabled": { "name": "Enabled", "required": false, "requires_restart": true, "type": "bool", "value": false }, "subject": { "name": "Email subject", "required": false, "requires_restart": false, "type": "text", "value": "", "description": "Subject of email confirmation emails." }, "email_html": { "name": "Custom email (HTML)", "required": false, "requires_restart": false, "advanced": true, "type": "text", "value": "", "description": "Path to custom email html" }, "email_text": { "name": "Custom email (plaintext)", "required": false, "requires_restart": false, "advanced": true, "type": "text", "value": "", "description": "Path to custom email in plain text" } } }, "user_expiry": { "order": [], "meta": { "name": "User Expiry", "description": "When set on an invite, users will be deleted or disabled a specified amount of time after they create their account." }, "settings": { "behaviour": { "name": "Behaviour", "required": false, "requires_restart": false, "type": "select", "options": [ ["delete_user", "Delete user"], ["disable_user", "Disable user"] ], "value": "disable_user", "description": "Whether to delete or disable users on expiry." }, "send_email": { "name": "Send email", "required": false, "requires_restart": false, "type": "bool", "value": true, "depends_true": "messages|enabled", "description": "Send an email when a user's account expires." }, "subject": { "name": "Email subject", "required": false, "requires_restart": false, "depends_true": "messages|enabled", "type": "text", "value": "", "description": "Subject of user expiry emails." }, "email_html": { "name": "Custom email (HTML)", "required": false, "requires_restart": false, "advanced": true, "depends_true": "messages|enabled", "type": "text", "value": "", "description": "Path to custom email html" }, "email_text": { "name": "Custom email (plaintext)", "required": false, "requires_restart": false, "advanced": true, "depends_true": "messages|enabled", "type": "text", "value": "", "description": "Path to custom email in plain text" } } }, "disable_enable": { "order": [], "meta": { "name": "Account Disabling/Enabling", "description": "Subject/email files for account disabling/enabling emails.", "depends_true": "messages|enabled" }, "settings": { "subject_disabled": { "name": "Email subject (Disabled)", "required": false, "requires_restart": false, "type": "text", "value": "", "description": "Subject of account disabling emails." }, "subject_enabled": { "name": "Email subject (Enabled)", "required": false, "requires_restart": false, "type": "text", "value": "", "description": "Subject of account enabling emails." }, "disabled_html": { "name": "Custom disabling email (HTML)", "required": false, "requires_restart": false, "advanced": true, "type": "text", "value": "", "description": "Path to custom email html" }, "disabled_text": { "name": "Custom disabling email (plaintext)", "required": false, "requires_restart": false, "advanced": true, "type": "text", "value": "", "description": "Path to custom email in plain text" }, "enabled_html": { "name": "Custom enabling email (HTML)", "required": false, "requires_restart": false, "advanced": true, "type": "text", "value": "", "description": "Path to custom email html" }, "enabled_text": { "name": "Custom enabling email (plaintext)", "required": false, "requires_restart": false, "advanced": true, "type": "text", "value": "", "description": "Path to custom email in plain text" } } }, "deletion": { "order": [], "meta": { "name": "Account Deletion", "description": "Subject/email files for account deletion emails.", "depends_true": "messages|enabled" }, "settings": { "subject": { "name": "Email subject", "required": false, "requires_restart": false, "type": "text", "value": "", "description": "Subject of account deletion emails." }, "email_html": { "name": "Custom email (HTML)", "required": false, "requires_restart": false, "advanced": true, "type": "text", "value": "", "description": "Path to custom email html" }, "email_text": { "name": "Custom email (plaintext)", "required": false, "requires_restart": false, "advanced": true, "type": "text", "value": "", "description": "Path to custom email in plain text" } } }, "files": { "order": [], "meta": { "name": "File Storage", "description": "Optional settings for changing storage locations.", "advanced": true }, "settings": { "invites": { "name": "Invite Storage", "required": false, "requires_restart": true, "type": "text", "value": "", "description": "Location of stored invites (json)." }, "emails": { "name": "Email Addresses", "required": false, "requires_restart": true, "type": "text", "value": "", "description": "Location of stored email addresses (json)." }, "users": { "name": "User storage", "required": false, "requires_restart": false, "type": "text", "value": "", "description": "Stores users temporarily when a user expiry is set." }, "ombi_template": { "name": "Ombi user template", "required": false, "requires_restart": false, "type": "text", "value": "", "description": "Location of stored Ombi user template." }, "user_profiles": { "name": "User Profiles", "required": false, "requires_restart": true, "type": "text", "value": "", "description": "Location of stored user profiles (encompasses template and configuration and displayprefs) (json)" }, "html_templates": { "name": "Custom HTML Template Directory", "required": false, "requires_restart": true, "type": "text", "value": "", "description": "Path to directory containing custom versions of web ui pages. See wiki for more info." }, "lang_files": { "name": "Custom language files directory", "required": false, "requires_restart": true, "type": "text", "value": "", "description": "The path to a directory which following the same form as the internal 'lang/' directory. See GitHub for more info." }, "custom_emails": { "name": "Custom email content", "required": false, "requires_restart": false, "type": "text", "value": "", "description": "JSON file generated by program in settings, different from email_html/email_text. See wiki for more info." }, "telegram_users": { "name": "Telegram users", "required": false, "requires_restart": false, "type": "text", "value": "", "description": "Stores telegram user IDs and language preferences." } } } } }