<!DOCTYPE html>
< html lang = "en" class = "light-theme" >
< head >
< link rel = "stylesheet" type = "text/css" href = "css/bundle.css" >
{{ template "header.html" . }}
< title > {{ .lang.Strings.pageTitle }}< / title >
< / head >
< body class = "max-w-full overflow-x-hidden section" >
< div id = "notification-box" > < / div >
< span class = "dropdown" tabindex = "0" id = "lang-dropdown" >
< span class = "button ~urge dropdown-button" >
< i class = "ri-global-line" > < / i >
< span class = "ml-1 chev" > < / span >
< / span >
< div class = "dropdown-display" >
< div class = "card ~neutral !low" id = "lang-list" >
< / div >
< / div >
< / span >
< div class = "page-container" id = "page-container" >
< div class = "card ~neutral !low mb-1" >
< div class = "row" >
< img class = "banner header" src = "banner.svg" alt = "jfa-go" / >
< / div >
< div class = "row col flex center" >
< span class = "heading welcome" > {{ .lang.StartPage.welcome }}< / span >
< / div >
< div class = "row col flex center" >
< p class = "content" > {{ .lang.StartPage.pressStart }}< / p >
< / div >
< section class = "section ~neutral banner footer flex-expand middle" >
< span class = "support" > {{ .lang.StartPage.httpsNotice }}< / span >
< span class = "button ~urge !normal next" > {{ .lang.StartPage.start }}< / span >
< / section >
< / div >
< div class = "card ~neutral !low mb-1 unfocused" >
< span class = "heading" > {{ .lang.Language.title }}< / span >
< p class = "content" id = "language-description" > < / p >
< label class = "label" >
< span class = "mt-half" > {{ .lang.Language.defaultAdminLang }}< / span >
< div class = "select ~neutral !normal mt-half mb-1" >
< select id = "ui-language-admin" >
< / select >
< / div >
< / label >
< label class = "label" >
< span class = "mt-half" > {{ .lang.Language.defaultFormLang }}< / span >
< div class = "select ~neutral !normal mt-half mb-1" >
< select id = "ui-language-form" >
< / select >
< / div >
< / label >
< label class = "label" >
< span class = "mt-half" > {{ .lang.Language.defaultEmailLang }}< / span >
< div class = "select ~neutral !normal mt-half mb-1" >
< select id = "email-language" >
< / select >
< / div >
< / label >
< section class = "section ~neutral banner footer flex-expand middle" >
< span class = "button ~neutral !normal back" > {{ .lang.Strings.back }}< / span >
< span class = "button ~urge !normal next" > {{ .lang.Strings.next }}< / span >
< / section >
< / div >
< div class = "card ~neutral !low mb-1 unfocused" >
< span class = "heading" > {{ .lang.General.title }}< / span >
< div class = "row" >
< div class = "col" >
< label class = "label" >
< span class = "mt-half" > {{ .lang.General.listenAddress }}< / span >
< input type = "url" class = "input ~neutral !normal mt-half mb-1" id = "ui-host" value = "0.0.0.0" >
< / label >
< label class = "row switch" >
< input type = "checkbox" id = "advanced-tls" > < span > {{ .lang.General.useHTTPS }}< / span >
< / label >
< p class = "support mb-1" > {{ .lang.General.useHTTPSNotice }}< / p >
< label class = "label" >
< span class = "mt-half" > {{ .lang.General.pathToCertificate }}< / span >
< input type = "text" class = "input ~neutral !normal mt-half mb-1" id = "advanced-tls_cert" >
< / label >
< label class = "label" >
< span class = "mt-half" > {{ .lang.General.pathToKeyFile }}< / span >
< input type = "text" class = "input ~neutral !normal mt-half mb-1" id = "advanced-tls_key" >
< / label >
< / div >
< div class = "col" >
< label class = "label" >
< span class = "mt-half" > {{ .lang.Strings.port }}< / span >
< input type = "number" class = "input ~neutral !normal mt-half mb-1" id = "ui-port" value = "8056" >
< / label >
< label class = "label" >
< span class = "mt-half" > {{ .lang.General.httpsPort }}< / span >
< input type = "number" class = "input ~neutral !normal mt-half mb-1" id = "advanced-tls_port" value = "8057" >
< / label >
< label class = "label" >
< span class = "mt-half" > {{ .lang.General.urlBase }} ({{ .lang.Strings.optional }})< / span >
< input type = "url" class = "input ~neutral !normal mt-half" id = "ui-url_base" >
< p class = "support mb-1" > {{ .lang.General.urlBaseNotice }}< / p >
< / label >
< label class = "label" >
< span > {{ .lang.Strings.theme }}< / span >
< div class = "select ~neutral !normal mt-half mb-1" >
< select id = "ui-theme" >
< option value = "Jellyfin (Dark)" > {{ .lang.General.darkTheme }}< / option >
< option value = "Default (Light)" > {{ .lang.General.lightTheme }}< / option >
< / select >
< / div >
< / label >
< / div >
< / div >
< section class = "section ~neutral banner footer flex-expand middle" >
< span class = "button ~neutral !normal back" > {{ .lang.Strings.back }}< / span >
< span class = "button ~urge !normal next" > {{ .lang.Strings.next }}< / span >
< / section >
< / div >
< div class = "card ~neutral !low mb-1 unfocused" >
< span class = "heading" > {{ .lang.Login.title }}< / span >
< p class = "content" > {{ .lang.Login.description }}< / p >
< div class = "pl-1" >
< label class = "row switch pb-1" >
< input type = "radio" name = "ui-jellyfin_login" value = "true" checked > < span > {{ .lang.Login.authorizeWithJellyfin }}< / span >
< / label >
< label class = "row switch pl-1 pb-1" >
< input type = "checkbox" id = "ui-admin_only" > < span > {{ .lang.Login.adminOnly }}< / span >
< / label >
< label class = "row switch pb-1" >
< input type = "radio" name = "ui-jellyfin_login" value = "false" > < span > {{ .lang.Login.authorizeManual }}< / span >
< / label >
< / div >
< div id = "login-manual" >
< label class = "label" >
< span class = "mt-half" > {{ .lang.Strings.username }}< / span >
< input type = "text" id = "ui-username" class = "input ~neutral !normal mt-half mb-1" placeholder = "{{ .lang.Strings.username }}" >
< / label >
< label class = "label" >
< span > {{ .lang.Strings.password }}< / span >
< input type = "password" id = "ui-password" class = "input ~neutral !normal mt-half mb-1" placeholder = "{{ .lang.Strings.password }}" >
< / label >
< label class = "label" >
< span > {{ .lang.Strings.emailAddress }} ({{ .lang.Strings.optional }})< / span >
< input type = "email" id = "ui-email" class = "input ~neutral !normal mt-half" placeholder = "email@address" >
< span class = "support mb-1" > {{ .lang.Login.emailNotice }}< / span >
< / label >
< / div >
< section class = "section ~neutral banner footer flex-expand middle" >
< span class = "button ~neutral !normal back" > {{ .lang.Strings.back }}< / span >
< span class = "button ~urge !normal next" > {{ .lang.Strings.next }}< / span >
< / section >
< / div >
< div class = "card ~neutral !low mb-1 unfocused" >
< span class = "heading" > {{ .lang.JellyfinEmby.title }}< / span >
< p class = "content" > {{ .lang.JellyfinEmby.description }}< / p >
< div class = "row" >
< div class = "col" >
< label class = "label" >
< span > {{ .lang.Strings.serverType }}< / span >
< div class = "select ~neutral !normal mt-half" >
< select id = "jellyfin-type" >
< option value = "jellyfin" > Jellyfin< / option >
< option value = "emby" > Emby< / option >
< / select >
< / div >
< p class = "support mb-1" > {{ .lang.JellyfinEmby.embyNotice }}< / p >
< / label >
< label class = "label" >
< span class = "mt-half" > {{ .lang.JellyfinEmby.replaceJellyfin }} ({{ .lang.Strings.optional }})< / span >
< input type = "text" class = "input ~neutral !normal mt-half" id = "jellyfin-substitute_jellyfin_strings" >
< p class = "support mb-1" > {{ .lang.JellyfinEmby.replaceJellyfinNotice }}< / p >
< / label >
< label class = "label" >
< span class = "mt-half" > {{ .lang.Strings.username }}< / span >
< input type = "text" id = "jellyfin-username" class = "input ~neutral !normal mt-half mb-1" placeholder = "{{ .lang.Strings.username }}" >
< / label >
< label class = "label" >
< span > {{ .lang.Strings.password }}< / span >
< input type = "password" id = "jellyfin-password" class = "input ~neutral !normal mt-half mb-1" placeholder = "{{ .lang.Strings.password }}" >
< / label >
< / div >
< div class = "col" >
< label class = "label" >
< span class = "mt-half" > {{ .lang.Strings.serverAddress }} ({{ .lang.JellyfinEmby.internal }})< / span >
< input type = "url" class = "input ~neutral !normal mt-half mb-1" id = "jellyfin-server" placeholder = "http://jellyf.in:80" >
< / label >
< label class = "label" >
< span class = "mt-half" > {{ .lang.Strings.serverAddress }} ({{ .lang.JellyfinEmby.external }})< / span >
< input type = "url" class = "input ~neutral !normal mt-half" id = "jellyfin-public_server" placeholder = "https://jellyf.in" >
< p class = "support mb-1" > {{ .lang.JellyfinEmby.addressExternalNotice }}< / p >
< / label >
< / div >
< / div >
< section class = "section ~neutral banner footer flex-expand middle" >
< span class = "button ~neutral !normal back" > {{ .lang.Strings.back }}< / span >
< div >
< span class = "button ~urge !normal" id = "jellyfin-test-connection" > {{ .lang.JellyfinEmby.testConnection }}< / span >
< span class = "button ~urge !normal next" disabled > {{ .lang.Strings.next }}< / span >
< / div >
< / section >
< / div >
< div class = "card ~neutral !low mb-1 unfocused" >
< span class = "heading" > {{ .lang.Ombi.title }}< / span >
< p class = "content" > {{ .lang.Ombi.description }}< / p >
< label class = "row switch pb-1" >
< input type = "checkbox" id = "ombi-enabled" > < span > {{ .lang.Strings.enabled }}< / span >
< / label >
< label class = "label" >
< span class = "mt-half" > {{ .lang.Strings.serverAddress }}< / span >
< input type = "url" class = "input ~neutral !normal mt-half mb-1" id = "ombi-server" placeholder = "ombi.jellyf.in" >
< / label >
< label class = "label" >
< span class = "mt-half" > {{ .lang.Strings.apiKey }}< / span >
< input type = "text" class = "input ~neutral !normal mt-half" id = "ombi-api_key" >
< p class = "support mb-1" > {{ .lang.Ombi.apiKeyNotice }}< / p >
< / label >
< section class = "section ~neutral banner footer flex-expand middle" >
< span class = "button ~neutral !normal back" > {{ .lang.Strings.back }}< / span >
< div >
< span class = "button ~urge !normal next" > {{ .lang.Strings.next }}< / span >
< / div >
< / section >
< / div >
< div class = "card ~neutral !low mb-1 unfocused" >
< span class = "heading" > {{ .lang.Email.title }}< / span >
< p class = "content" id = "email-description" > < / p >
< div class = "row" >
< div class = "col" >
< label class = "label" >
< span > {{ .lang.Email.method }}< / span >
< div class = "select ~neutral !normal mt-half mb-1" >
< select id = "email-method" >
< option value = "" > {{ .lang.Strings.disabled }}< / option >
< option value = "smtp" > SMTP< / option >
< option value = "mailgun" > Mailgun< / option >
< / select >
< / div >
< / label >
< label class = "row switch" >
< input type = "checkbox" id = "email-no_username" > < span > {{ .lang.Email.useEmailAsUsername }}< / span >
< / label >
< p class = "support mb-1" > {{ .lang.Email.useEmailAsUsernameNotice }}< / p >
< label class = "label" >
< span class = "mt-half" > {{ .lang.Email.fromAddress }}< / span >
< input type = "email" class = "input ~neutral !normal mt-half mb-1" id = "email-address" placeholder = "mail@jellyf.in" >
< / label >
< label class = "label" >
< span class = "mt-half" > {{ .lang.Email.senderName }}< / span >
< input type = "text" class = "input ~neutral !normal mt-half mb-1" id = "email-from" value = "Jellyfin" >
< / label >
< label class = "label" >
< span class = "mt-half" > {{ .lang.Email.dateFormat }}< / span >
< input type = "text" class = "input ~neutral !normal mt-half" id = "email-date_format" value = "%d/%m/%y" >
< p class = "support mb-1" id = "email-dateformat-notice" > < / p >
< / label >
< div >
< label class = "row switch pb-1" >
< input type = "radio" name = "email-24h" value = "true" checked > < span > {{ .lang.Email.time24h }}< / span >
< / label >
< label class = "row switch pb-1" >
< input type = "radio" name = "email-24h" value = "false" > < span > {{ .lang.Email.time12h }}< / span >
< / label >
< / div >
< / div >
< div class = "col" >
< div id = "email-smtp" >
< p class = "subheading" > SMTP< / p >
< label class = "label" >
< span > {{ .lang.Email.encryption }}< / span >
< div class = "select ~neutral !normal mt-half mb-1" >
< select id = "smtp-encryption" >
< option value = "starttls" > STARTTLS ({{ .lang.Strings.port }} 587)< / option >
< option value = "ssl_tls" > SSL/TLS ({{ .lang.Strings.port }} 465)< / option >
< / select >
< / div >
< / label >
< label class = "label" >
< span class = "mt-half" > {{ .lang.Strings.serverAddress }}< / span >
< input type = "url" class = "input ~neutral !normal mt-half mb-1" id = "smtp-server" placeholder = "smtp.jellyf.in" >
< / label >
< label class = "label" >
< span class = "mt-half" > {{ .lang.Strings.port }}< / span >
< input type = "number" class = "input ~neutral !normal mt-half mb-1" id = "smtp-port" placeholder = "587" >
< / label >
< label class = "label" >
< span class = "mt-half" > {{ .lang.Strings.username }}< / span >
< input type = "text" class = "input ~neutral !normal mt-half mb-1" id = "smtp-username" >
< / label >
< label class = "label" >
< span class = "mt-half" > {{ .lang.Strings.password }}< / span >
< input type = "password" class = "input ~neutral !normal mt-half mb-1" id = "smtp-password" >
< / label >
< / div >
< div id = "email-mailgun" >
< p class = "subheading" > Mailgun< / p >
< label class = "label" >
< span class = "mt-half" > {{ .lang.Email.mailgunApiURL }}< / span >
< input type = "url" class = "input ~neutral !normal mt-half mb-1" id = "mailgun-api_url" placeholder = "https://api.eu.mailgun.net/v3/mail.jellyf.in/messages" >
< / label >
< label class = "label" >
< span class = "mt-half" > {{ .lang.Strings.apiKey }}< / span >
< input type = "text" class = "input ~neutral !normal mt-half mb-1" id = "mailgun-api_key" >
< / label >
< / div >
< / div >
< / div >
< section class = "section ~neutral banner footer flex-expand middle" >
< span class = "button ~neutral !normal back" > {{ .lang.Strings.back }}< / span >
< div >
< span class = "button ~urge !normal next" > {{ .lang.Strings.next }}< / span >
< / div >
< / section >
< / div >
< div class = "card ~neutral !low mb-1 unfocused related-to-email" >
< span class = "heading" > {{ .lang.Notifications.title }}< / span >
< p class = "content" > {{ .lang.Notifications.description }}< / p >
< label class = "row switch pb-1" >
< input type = "checkbox" id = "notifications-enabled" > < span > {{ .lang.Strings.enabled }}< / span >
< / label >
< span class = "heading" > {{ .lang.WelcomeEmails.title }}< / span >
< p class = "content" > {{ .lang.WelcomeEmails.description }}< / p >
< label class = "row switch pb-1" >
< input type = "checkbox" id = "welcome_email-enabled" > < span > {{ .lang.Strings.enabled }}< / span >
< / label >
< label class = "label" >
< span class = "mt-half" > {{ .lang.Strings.emailSubject }}< / span >
< input type = "text" class = "input ~neutral !normal mt-half mb-1" id = "welcome_email-subject" placeholder = "{{ .emailLang.WelcomeEmail.title }}" >
< / label >
< section class = "section ~neutral banner footer flex-expand middle" >
< span class = "button ~neutral !normal back" > {{ .lang.Strings.back }}< / span >
< div >
< span class = "button ~urge !normal next" > {{ .lang.Strings.next }}< / span >
< / div >
< / section >
< / div >
< div class = "card ~neutral !low mb-1 unfocused related-to-email" >
< span class = "heading" > {{ .lang.InviteEmails.title }}< / span >
< p class = "content" > {{ .lang.InviteEmails.description }}< / p >
< label class = "row switch pb-1" >
< input type = "checkbox" id = "invite_emails-enabled" > < span > {{ .lang.Strings.enabled }}< / span >
< / label >
< label class = "label" >
< span class = "mt-half" > {{ .lang.Strings.URL }}< / span >
< input type = "url" class = "input ~neutral !normal mt-half mb-1" id = "invite_emails-url_base" placeholder = "https://accounts.jellyf.in/invite" >
< / label >
< label class = "label" >
< span class = "mt-half" > {{ .lang.Strings.emailSubject }}< / span >
< input type = "text" class = "input ~neutral !normal mt-half mb-1" id = "invite_emails-subject" placeholder = "{{ .emailLang.InviteEmail.title }}" >
< / label >
< section class = "section ~neutral banner footer flex-expand middle" >
< span class = "button ~neutral !normal back" > {{ .lang.Strings.back }}< / span >
< div >
< span class = "button ~urge !normal next" > {{ .lang.Strings.next }}< / span >
< / div >
< / section >
< / div >
< div id = "password-resets" class = "card ~neutral !low mb-1 unfocused related-to-email" >
< span class = "heading" > {{ .lang.PasswordResets.title }}< / span >
< p class = "content" > {{ .lang.PasswordResets.description }}< / p >
< label class = "row switch pb-1" >
< input type = "checkbox" id = "password_resets-enabled" > < span > {{ .lang.Strings.enabled }}< / span >
< / label >
< label class = "label" >
< span class = "mt-half" > {{ .lang.PasswordResets.pathToJellyfin }}< / span >
< input type = "text" class = "input ~neutral !normal mt-half" id = "password_resets-watch_directory" placeholder = "/config/jellyfin" >
< p class = "support mb-1" > {{ .lang.PasswordResets.pathToJellyfinNotice }}< / p >
< / label >
< label class = "label" >
< span class = "mt-half" > {{ .lang.Strings.emailSubject }}< / span >
< input type = "text" class = "input ~neutral !normal mt-half mb-1" id = "password_resets-subject" placeholder = "{{ .emailLang.PasswordReset.title }}" >
< / label >
< section class = "section ~neutral banner footer flex-expand middle" >
< span class = "button ~neutral !normal back" > {{ .lang.Strings.back }}< / span >
< div >
< span class = "button ~urge !normal next" > {{ .lang.Strings.next }}< / span >
< / div >
< / section >
< / div >
< div class = "card ~neutral !low mb-1 unfocused" >
< span class = "heading" > {{ .lang.PasswordValidation.title }}< / span >
< p class = "content" > {{ .lang.PasswordValidation.description }}< / p >
< label class = "row switch pb-1" >
< input type = "checkbox" id = "password_validation-enabled" checked > < span > {{ .lang.Strings.enabled }}< / span >
< / label >
< label class = "label" >
< span class = "mt-half" > {{ .lang.PasswordValidation.length }}< / span >
< input type = "number" class = "input ~neutral !normal mt-half mb-1" id = "password_validation-min_length" value = "8" >
< / label >
< label class = "label" >
< span class = "mt-half" > {{ .lang.PasswordValidation.uppercase }}< / span >
< input type = "number" class = "input ~neutral !normal mt-half mb-1" id = "password_validation-upper" value = "1" >
< / label >
< label class = "label" >
< span class = "mt-half" > {{ .lang.PasswordValidation.lowercase }}< / span >
< input type = "number" class = "input ~neutral !normal mt-half mb-1" id = "password_validation-lower" value = "0" >
< / label >
< label class = "label" >
< span class = "mt-half" > {{ .lang.PasswordValidation.numbers }}< / span >
< input type = "number" class = "input ~neutral !normal mt-half mb-1" id = "password_validation-number" value = "0" >
< / label >
< label class = "label" >
< span class = "mt-half" > {{ .lang.PasswordValidation.special }}< / span >
< input type = "number" class = "input ~neutral !normal mt-half mb-1" id = "password_validation-special" value = "0" >
< / label >
< section class = "section ~neutral banner footer flex-expand middle" >
< span class = "button ~neutral !normal back" > {{ .lang.Strings.back }}< / span >
< div >
< span class = "button ~urge !normal next" > {{ .lang.Strings.next }}< / span >
< / div >
< / section >
< / div >
< div class = "card ~neutral !low mb-1 unfocused" >
< span class = "heading" > {{ .lang.HelpMessages.title }}< / span >
< p class = "content" > {{ .lang.HelpMessages.description }}< / p >
< label class = "label" >
< span class = "mt-half" > {{ .lang.HelpMessages.contactMessage }}< / span >
< input type = "text" class = "input ~neutral !normal mt-half" id = "ui-contact_message" >
< p class = "support mb-1" > {{ .lang.HelpMessages.contactMessageNotice }}< / p >
< / label >
< label class = "label" >
< span class = "mt-half" > {{ .lang.HelpMessages.helpMessage }}< / span >
< input type = "text" class = "input ~neutral !normal mt-half" id = "ui-help_message" >
< p class = "support mb-1" > {{ .lang.HelpMessages.helpMessageNotice }}< / p >
< / label >
< label class = "label" >
< span class = "mt-half" > {{ .lang.HelpMessages.successMessage }}< / span >
< input type = "text" class = "input ~neutral !normal mt-half" id = "ui-success_message" >
< p class = "support mb-1" > {{ .lang.HelpMessages.successMessageNotice }}< / p >
< / label >
< label class = "label related-to-email" >
< span class = "mt-half" > {{ .lang.HelpMessages.emailMessage }}< / span >
< input type = "text" class = "input ~neutral !normal mt-half" id = "email-message" >
< p class = "support mb-1" > {{ .lang.HelpMessages.emailMessageNotice }}< / p >
< / label >
< section class = "section ~neutral banner footer flex-expand middle" >
< span class = "button ~neutral !normal back" > {{ .lang.Strings.back }}< / span >
< div >
< span class = "button ~urge !normal next" > {{ .lang.Strings.next }}< / span >
< / div >
< / section >
< / div >
< div class = "card ~neutral !low mb-1 unfocused" >
< div class = "row col flex center" >
< span class = "heading" > {{ .lang.EndPage.finished }}< / span >
< / div >
< div class = "row col flex center" >
< p class = "content" > {{ .lang.EndPage.restartMessage }}< / p >
< / div >
< div class = "row col flex center" >
< span class = "button ~neutral !normal back mr-1" > {{ .lang.Strings.back }}< / span >
< span class = "button ~urge !normal" id = "restart" > {{ .lang.Strings.submit }}< / span >
< span class = "button ~urge !normal unfocused" id = "refresh" > {{ .lang.EndPage.refreshPage }}< / span >
< / div >
< / div >
< / div >
< script >
window.langFile = JSON.parse({{ .language }});
window.messages = JSON.parse({{ .messages }});
< / script >
< script src = "js/setup.js" type = "module" > < / script >
< / body >
< / html >