<!DOCTYPE html> <html lang="en" class="light"> <head> <link rel="stylesheet" type="text/css" href="css/{{ .cssVersion }}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> <div class="top-4 left-4 absolute"> <span class="dropdown" tabindex="0" id="lang-dropdown"> <span class="button ~urge dropdown-button"> <i class="ri-global-line"></i> <span class="ml-2 chev"></span> </span> <div class="dropdown-display"> <div class="card ~neutral @low" id="lang-list"> </div> </div> </span> </div> <div class="page-container" id="page-container"> <div class="card ~neutral @low mb-2"> <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 my-2">{{ .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 @low next">{{ .lang.StartPage.start }}</span> </section> </div> <div class="card ~neutral @low mb-2 unfocused"> <span class="heading">{{ .lang.Language.title }}</span> <p class="content my-2" id="language-description"></p> <label class="label"> <span class="mt-4">{{ .lang.Language.defaultAdminLang }}</span> <div class="select ~neutral @low mt-4 mb-2"> <select id="ui-language-admin"> </select> </div> </label> <label class="label"> <span class="mt-4">{{ .lang.Language.defaultFormLang }}</span> <div class="select ~neutral @low mt-4 mb-2"> <select id="ui-language-form"> </select> </div> </label> <label class="label"> <span class="mt-4">{{ .lang.Language.defaultEmailLang }}</span> <div class="select ~neutral @low mt-4 mb-2"> <select id="email-language"> </select> </div> </label> <section class="section ~neutral banner footer flex-expand middle"> <span class="button ~neutral @low back">{{ .lang.Strings.back }}</span> <span class="button ~urge @low next">{{ .lang.Strings.next }}</span> </section> </div> <div class="card ~neutral @low mb-2 unfocused"> <span class="heading">{{ .lang.General.title }}</span> <div class="row"> <div class="col"> <label class="label"> <span class="mt-4">{{ .lang.General.listenAddress }}</span> <input type="url" class="input ~neutral @low mt-4 mb-2" id="ui-host" value="0.0.0.0"> </label> <label class="row switch"> <input type="checkbox" class="mr-2" id="advanced-tls"><span>{{ .lang.General.useHTTPS }}</span> </label> <p class="support mb-2 mt-1">{{ .lang.General.useHTTPSNotice }}</p> <label class="label"> <span class="mt-4">{{ .lang.General.pathToCertificate }}</span> <input type="text" class="input ~neutral @low mt-4 mb-2" id="advanced-tls_cert"> </label> <label class="label"> <span class="mt-4">{{ .lang.General.pathToKeyFile }}</span> <input type="text" class="input ~neutral @low mt-4 mb-2" id="advanced-tls_key"> </label> <span class="heading">{{ .lang.Updates.title }}</span> <p class="content my-2" id="updates-description"></p> <label class="row switch pb-4"> <input type="checkbox" class="mr-2" id="updates-enabled" checked><span>{{ .lang.Strings.enabled }}</span> </label> <label class="label"> <span>{{ .lang.Updates.updateChannel }}</span> <div class="select ~neutral @low mt-4 mb-2"> <select id="updates-channel"> <option value="stable">{{ .lang.Updates.stable }}</option> <option value="unstable">{{ .lang.Updates.unstable }}</option> </select> </div> </label> </div> <div class="col"> <label class="label"> <span class="mt-4">{{ .lang.Strings.port }}</span> <input type="number" class="input ~neutral @low mt-4 mb-2" id="ui-port" value="8056"> </label> <label class="label"> <span class="mt-4">{{ .lang.General.httpsPort }}</span> <input type="number" class="input ~neutral @low mt-4 mb-2" id="advanced-tls_port" value="8057"> </label> <label class="label"> <span class="mt-4">{{ .lang.General.urlBase }} ({{ .lang.Strings.optional }})</span> <input type="url" class="input ~neutral @low mt-4" id="ui-url_base"> <p class="support mb-2 mt-1">{{ .lang.General.urlBaseNotice }}</p> </label> <label class="label"> <span>{{ .lang.Strings.theme }}</span> <div class="select ~neutral @low mt-4 mb-2"> <select id="ui-theme"> <option value="Jellyfin (Dark)">{{ .lang.General.darkTheme }}</option> <option value="Default (Light)">{{ .lang.General.lightTheme }}</option> </select> </div> </label> <span class="heading">{{ .lang.Proxy.title }}</span> <p class="content my-2" id="proxy-description">{{ .lang.Proxy.description }}</p> <label class="row switch pb-4"> <input type="checkbox" class="mr-2" id="advanced-proxy"><span>{{ .lang.Strings.enabled }}</span> </label> <label class="label"> <span>{{ .lang.Proxy.protocol }}</span> <div class="select ~neutral @low mt-4 mb-2"> <select id="advanced-proxy_protocol"> <option value="http">HTTP</option> <option value="socks">SOCKS5</option> </select> </div> </label> <label class="label"> <span class="mt-4">{{ .lang.Proxy.address }}</span> <input type="text" class="input ~neutral @low mt-4 mb-2" id="advanced-proxy_address"> </label> <label class="label"> <span class="mt-4">{{ .lang.Strings.username }}</span> <input type="text" class="input ~neutral @low mt-4 mb-2" id="advanced-proxy_user"> </label> <label class="label"> <span class="mt-4">{{ .lang.Strings.password }}</span> <input type="text" class="input ~neutral @low mt-4 mb-2" id="advanced-proxy_password"> </label> </div> </div> <section class="section ~neutral banner footer flex-expand middle"> <span class="button ~neutral @low back">{{ .lang.Strings.back }}</span> <span class="button ~urge @low next">{{ .lang.Strings.next }}</span> </section> </div> <div class="card ~neutral @low mb-2 unfocused"> <span class="heading">{{ .lang.Login.title }}</span> <p class="content my-2">{{ .lang.Login.description }}</p> <div class="pl-4"> <label class="row switch pb-4"> <input type="radio" class="mr-2" name="ui-jellyfin_login" value="true" checked><span>{{ .lang.Login.authorizeWithJellyfin }}</span> </label> <label class="row switch pl-4 pb-4"> <input type="checkbox" class="mr-2" id="ui-admin_only" checked><span>{{ .lang.Login.adminOnly }}</span> </label> <label class="row switch pl-4 pb-2"> <input type="checkbox" class="mr-2" id="ui-allow_all"><span>{{ .lang.Login.allowAll }}</span> </label> <p class="support pb-4 pl-4 mt-1" id="description-ui-allow_all">{{ .lang.Login.allowAllDescription }}</p> <label class="row switch pb-4"> <input type="radio" class="mr-2" name="ui-jellyfin_login" value="false"><span>{{ .lang.Login.authorizeManual }}</span> </label> <p class="support pb-4 pl-4 mt-1">{{ .lang.Login.authorizeManualUserPageNotice }}</p> </div> <div id="login-manual"> <label class="label"> <span class="mt-4">{{ .lang.Strings.username }}</span> <input type="text" id="ui-username" class="input ~neutral @low mt-4 mb-2" placeholder="{{ .lang.Strings.username }}"> </label> <label class="label"> <span>{{ .lang.Strings.password }}</span> <input type="password" id="ui-password" class="input ~neutral @low mt-4 mb-2" 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 @low mt-4" placeholder="email@address"> <span class="support mb-2 mt-1">{{ .lang.Login.emailNotice }}</span> </label> </div> <section class="section ~neutral banner footer flex-expand middle"> <span class="button ~neutral @low back">{{ .lang.Strings.back }}</span> <span class="button ~urge @low next">{{ .lang.Strings.next }}</span> </section> </div> <div class="card ~neutral @low mb-2 unfocused"> <span class="heading">{{ .lang.JellyfinEmby.title }}</span> <p class="content my-2">{{ .lang.JellyfinEmby.description }}</p> <div class="row"> <div class="col"> <label class="label"> <span>{{ .lang.Strings.serverType }}</span> <div class="select ~neutral @low mt-4"> <select id="jellyfin-type"> <option value="jellyfin">Jellyfin</option> <option value="emby">Emby</option> </select> </div> <p class="support mb-2 mt-1">{{ .lang.JellyfinEmby.embyNotice }}</p> </label> <label class="label"> <span class="mt-4">{{ .lang.JellyfinEmby.replaceJellyfin }} ({{ .lang.Strings.optional }})</span> <input type="text" class="input ~neutral @low mt-4" id="jellyfin-substitute_jellyfin_strings"> <p class="support mb-2 mt-1">{{ .lang.JellyfinEmby.replaceJellyfinNotice }}</p> </label> <label class="label"> <span class="mt-4">{{ .lang.Strings.username }}</span> <input type="text" id="jellyfin-username" class="input ~neutral @low mt-4 mb-2" placeholder="{{ .lang.Strings.username }}"> </label> <label class="label"> <span>{{ .lang.Strings.password }}</span> <input type="password" id="jellyfin-password" class="input ~neutral @low mt-4 mb-2" placeholder="{{ .lang.Strings.password }}"> </label> </div> <div class="col"> <label class="label"> <span class="mt-4">{{ .lang.Strings.serverAddress }} ({{ .lang.JellyfinEmby.internal }})</span> <input type="url" class="input ~neutral @low mt-4 mb-2" id="jellyfin-server" placeholder="http://jellyf.in:80"> </label> <label class="label"> <span class="mt-4">{{ .lang.Strings.serverAddress }} ({{ .lang.JellyfinEmby.external }})</span> <input type="url" class="input ~neutral @low mt-4" id="jellyfin-public_server" placeholder="https://jellyf.in"> <p class="support mb-2 mt-1">{{ .lang.JellyfinEmby.addressExternalNotice }}</p> </label> </div> </div> <section class="section ~neutral banner footer flex-expand middle"> <span class="button ~neutral @low back">{{ .lang.Strings.back }}</span> <div> <span class="button ~urge @low" id="jellyfin-test-connection">{{ .lang.JellyfinEmby.testConnection }}</span> <span class="button ~urge @low next" disabled>{{ .lang.Strings.next }}</span> </div> </section> </div> <div class="card ~neutral @low mb-2 unfocused"> <span class="heading">{{ .lang.Ombi.title }}</span> <p class="content my-2">{{ .lang.Ombi.description }}</p> <label class="row switch pb-4"> <input type="checkbox" class="mr-2" id="ombi-enabled"><span>{{ .lang.Strings.enabled }}</span> </label> <label class="label"> <span class="mt-4">{{ .lang.Strings.serverAddress }}</span> <input type="url" class="input ~neutral @low mt-4 mb-2" id="ombi-server" placeholder="ombi.jellyf.in"> </label> <label class="label"> <span class="mt-4">{{ .lang.Strings.apiKey }}</span> <input type="text" class="input ~neutral @low mt-4" id="ombi-api_key"> <p class="support mb-2 mt-1">{{ .lang.Ombi.apiKeyNotice }}</p> </label> <section class="section ~neutral banner footer flex-expand middle"> <span class="button ~neutral @low back">{{ .lang.Strings.back }}</span> <div> <span class="button ~urge @low next">{{ .lang.Strings.next }}</span> </div> </section> </div> <div class="card ~neutral @low mb-2 unfocused"> <span class="heading">{{ .lang.UserPage.title }}</span> <p class="content my-2">{{ .lang.UserPage.description }}</p> <p class="content my-2">{{ .lang.UserPage.customizeMessages }}</p> <label class="row switch pb-4"> <input type="checkbox" class="mr-2" id="userpage-enabled"><span>{{ .lang.Strings.enabled }}</span> </label> <p class="support mb-1 mt-1">{{ .lang.UserPage.requiredSettings }}</p> <section class="section ~neutral banner footer flex-expand middle"> <span class="button ~neutral @low back">{{ .lang.Strings.back }}</span> <div> <span class="button ~urge @low next">{{ .lang.Strings.next }}</span> </div> </section> </div> <div class="card ~neutral @low mb-2 unfocused"> <span class="heading">{{ .lang.Messages.title }}</span> <p class="content my-2" id="messages-description"></p> <label class="row switch pb-4"> <input type="checkbox" class="mr-2" id="messages-enabled" checked><span>{{ .lang.Strings.enabled }}</span> </label> <label class="label"> <span class="mt-4">{{ .lang.Email.dateFormat }}</span> <input type="text" class="input ~neutral @low mt-4" id="email-date_format" value="%d/%m/%y"> <p class="support mb-2 mt-1" id="email-dateformat-notice"></p> </label> <div> <label class="row switch pb-4"> <input type="radio" class="mr-2" name="email-24h" value="true" checked><span>{{ .lang.Strings.time24h }}</span> </label> <label class="row switch pb-4"> <input type="radio" class="mr-2" name="email-24h" value="false"><span>{{ .lang.Strings.time12h }}</span> </label> </div> <div id="email-sect"> <span class="heading">{{ .lang.Email.title }}</span> <p class="content my-2" id="email-description"></p> <div class="row"> <div class="col"> <label class="label"> <span>{{ .lang.Email.method }}</span> <div class="select ~neutral @low mt-4 mb-2"> <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" class="mr-2" id="email-no_username"><span>{{ .lang.Email.useEmailAsUsername }}</span> <p class="support mb-2 mt-1">{{ .lang.Email.useEmailAsUsernameNotice }}</p> </label> <label class="label"> <span class="mt-4">{{ .lang.Email.fromAddress }}</span> <input type="email" class="input ~neutral @low mt-4 mb-2" id="email-address" placeholder="mail@jellyf.in"> </label> <label class="label"> <span class="mt-4">{{ .lang.Email.senderName }}</span> <input type="text" class="input ~neutral @low mt-4 mb-2" id="email-from" value="Jellyfin"> </label> </div> <div class="col"> <div id="email-smtp"> <p class="text-2xl font-semibold mb-2">SMTP</p> <label class="label"> <span>{{ .lang.Email.encryption }}</span> <div class="select ~neutral @low mt-4 mb-2"> <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-4">{{ .lang.Strings.serverAddress }}</span> <input type="url" class="input ~neutral @low mt-4 mb-2" id="smtp-server" placeholder="smtp.jellyf.in"> </label> <label class="label"> <span class="mt-4">{{ .lang.Strings.port }}</span> <input type="number" class="input ~neutral @low mt-4 mb-2" id="smtp-port" placeholder="587"> </label> <label class="label"> <span class="mt-4">{{ .lang.Strings.username }}</span> <input type="text" class="input ~neutral @low mt-4 mb-2" id="smtp-username"> </label> <label class="label"> <span class="mt-4">{{ .lang.Strings.password }}</span> <input type="password" class="input ~neutral @low mt-4 mb-2" id="smtp-password"> </label> </div> <div id="email-mailgun"> <p class="text-2xl font-semibold mb-2">Mailgun</p> <label class="label"> <span class="mt-4">{{ .lang.Email.mailgunApiURL }}</span> <input type="url" class="input ~neutral @low mt-4 mb-2" id="mailgun-api_url" placeholder="https://api.eu.mailgun.net/v3/mail.jellyf.in/messages"> </label> <label class="label"> <span class="mt-4">{{ .lang.Strings.apiKey }}</span> <input type="text" class="input ~neutral @low mt-4 mb-2" id="mailgun-api_key"> </label> </div> </div> </div> </div> <section class="section ~neutral banner footer flex-expand middle"> <span class="button ~neutral @low back">{{ .lang.Strings.back }}</span> <div> <span class="button ~urge @low next">{{ .lang.Strings.next }}</span> </div> </section> </div> <div class="card ~neutral @low mb-2 unfocused related-to-email"> <span class="heading">{{ .lang.Notifications.title }}</span> <p class="content my-2">{{ .lang.Notifications.description }}</p> <label class="row switch pb-4"> <input type="checkbox" class="mr-2" id="notifications-enabled"><span>{{ .lang.Strings.enabled }}</span> </label> <span class="heading">{{ .lang.WelcomeEmails.title }}</span> <p class="content my-2">{{ .lang.WelcomeEmails.description }}</p> <label class="row switch pb-4"> <input type="checkbox" class="mr-2" id="welcome_email-enabled"><span>{{ .lang.Strings.enabled }}</span> </label> <label class="label"> <span class="mt-4">{{ .lang.Strings.emailSubject }}</span> <input type="text" class="input ~neutral @low mt-4 mb-2" id="welcome_email-subject" placeholder="{{ .emailLang.WelcomeEmail.title }}"> </label> <section class="section ~neutral banner footer flex-expand middle"> <span class="button ~neutral @low back">{{ .lang.Strings.back }}</span> <div> <span class="button ~urge @low next">{{ .lang.Strings.next }}</span> </div> </section> </div> <div class="card ~neutral @low mb-2 unfocused related-to-email"> <span class="heading">{{ .lang.InviteEmails.title }}</span> <p class="content my-2">{{ .lang.InviteEmails.description }}</p> <label class="row switch pb-4"> <input type="checkbox" class="mr-2" id="invite_emails-enabled"><span>{{ .lang.Strings.enabled }}</span> </label> <label class="label"> <span class="mt-4">{{ .lang.Strings.URL }}</span> <input type="url" class="input ~neutral @low mt-4 mb-2" id="invite_emails-url_base" placeholder="https://accounts.jellyf.in/invite"> </label> <label class="label"> <span class="mt-4">{{ .lang.Strings.emailSubject }}</span> <input type="text" class="input ~neutral @low mt-4 mb-2" id="invite_emails-subject" placeholder="{{ .emailLang.InviteEmail.title }}"> </label> <section class="section ~neutral banner footer flex-expand middle"> <span class="button ~neutral @low back">{{ .lang.Strings.back }}</span> <div> <span class="button ~urge @low next">{{ .lang.Strings.next }}</span> </div> </section> </div> <div id="password-resets" class="card ~neutral @low mb-2 unfocused related-to-email"> <span class="heading">{{ .lang.PasswordResets.title }}</span> <p class="content my-2">{{ .lang.PasswordResets.description }}</p> <label class="row switch pb-4"> <input type="checkbox" class="mr-2" id="password_resets-enabled"><span>{{ .lang.Strings.enabled }}</span> </label> <label class="label"> <span class="mt-4">{{ .lang.PasswordResets.pathToJellyfin }}</span> <input type="text" class="input ~neutral @low mt-4" id="password_resets-watch_directory" placeholder="/config/jellyfin"> <p class="support mb-2 mt-1">{{ .lang.PasswordResets.pathToJellyfinNotice }}</p> </label> <label class="switch"> <input type="checkbox" class="mr-2" id="password_resets-link_reset"><span>{{ .lang.PasswordResets.resetLinks }}</span> <p class="support mb-2 mt-1">{{ .lang.PasswordResets.resetLinksNotice }} {{ .lang.PasswordResets.resetLinksRequiredForUserPage }}</p> </label> <label class="switch"> <input type="checkbox" class="mr-2" id="password_resets-set_password"><span>{{ .lang.PasswordResets.setPassword }}</span> <p class="support mb-2 mt-1">{{ .lang.PasswordResets.setPasswordNotice }}</p> </label> <label class="label"> <p class="mt-4">{{ .lang.PasswordResets.resetLinksLanguage }}</p> <div class="select ~neutral @low mt-4 mb-2"> <select id="password_resets-language"> </select> </div> </label> <label class="row label"> <span class="mt-4">{{ .lang.Strings.emailSubject }}</span> <input type="text" class="input ~neutral @low mt-4 mb-2" id="password_resets-subject" placeholder="{{ .emailLang.PasswordReset.title }}"> </label> <section class="section ~neutral banner footer flex-expand middle"> <span class="button ~neutral @low back">{{ .lang.Strings.back }}</span> <div> <span class="button ~urge @low next">{{ .lang.Strings.next }}</span> </div> </section> </div> <div class="card ~neutral @low mb-2 unfocused"> <span class="heading">{{ .lang.PasswordValidation.title }}</span> <p class="content my-2">{{ .lang.PasswordValidation.description }}</p> <label class="row switch pb-4"> <input type="checkbox" class="mr-2" id="password_validation-enabled" checked><span>{{ .lang.Strings.enabled }}</span> </label> <label class="label"> <span class="mt-4">{{ .lang.PasswordValidation.length }}</span> <input type="number" class="input ~neutral @low mt-4 mb-2" id="password_validation-min_length" value="8"> </label> <label class="label"> <span class="mt-4">{{ .lang.PasswordValidation.uppercase }}</span> <input type="number" class="input ~neutral @low mt-4 mb-2" id="password_validation-upper" value="1"> </label> <label class="label"> <span class="mt-4">{{ .lang.PasswordValidation.lowercase }}</span> <input type="number" class="input ~neutral @low mt-4 mb-2" id="password_validation-lower" value="0"> </label> <label class="label"> <span class="mt-4">{{ .lang.PasswordValidation.numbers }}</span> <input type="number" class="input ~neutral @low mt-4 mb-2" id="password_validation-number" value="0"> </label> <label class="label"> <span class="mt-4">{{ .lang.PasswordValidation.special }}</span> <input type="number" class="input ~neutral @low mt-4 mb-2" id="password_validation-special" value="0"> </label> <section class="section ~neutral banner footer flex-expand middle"> <span class="button ~neutral @low back">{{ .lang.Strings.back }}</span> <div> <span class="button ~urge @low next">{{ .lang.Strings.next }}</span> </div> </section> </div> <div class="card ~neutral @low mb-2 unfocused"> <span class="heading">{{ .lang.HelpMessages.title }}</span> <p class="content my-2">{{ .lang.HelpMessages.description }}</p> <label class="label"> <span class="mt-4">{{ .lang.HelpMessages.contactMessage }}</span> <input type="text" class="input ~neutral @low mt-4" id="ui-contact_message"> <p class="support mb-2 mt-1">{{ .lang.HelpMessages.contactMessageNotice }}</p> </label> <label class="label"> <span class="mt-4">{{ .lang.HelpMessages.helpMessage }}</span> <input type="text" class="input ~neutral @low mt-4" id="ui-help_message"> <p class="support mb-2 mt-1">{{ .lang.HelpMessages.helpMessageNotice }}</p> </label> <label class="label"> <span class="mt-4">{{ .lang.HelpMessages.successMessage }}</span> <input type="text" class="input ~neutral @low mt-4" id="ui-success_message"> <p class="support mb-2 mt-1">{{ .lang.HelpMessages.successMessageNotice }}</p> </label> <label class="label related-to-email"> <span class="mt-4">{{ .lang.HelpMessages.emailMessage }}</span> <input type="text" class="input ~neutral @low mt-4" id="email-message"> <p class="support mb-2 mt-1">{{ .lang.HelpMessages.emailMessageNotice }}</p> </label> <section class="section ~neutral banner footer flex-expand middle"> <span class="button ~neutral @low back">{{ .lang.Strings.back }}</span> <div> <span class="button ~urge @low next">{{ .lang.Strings.next }}</span> </div> </section> </div> <div class="card ~neutral @low mb-2 unfocused"> <div class="row col flex center"> <span class="heading">{{ .lang.EndPage.finished }}</span> </div> <div class="row col flex center"> <p class="content my-2">{{ .lang.EndPage.restartMessage }}</p> </div> <div class="row col flex center"> <span class="button ~neutral @low back mr-4">{{ .lang.Strings.back }}</span> <span class="button ~urge @low" id="restart">{{ .lang.Strings.submit }}</span> <span class="button ~urge @low 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>