diff --git a/modules/ui_session.py b/modules/ui_session.py index 2ece2251..33d7dcb7 100644 --- a/modules/ui_session.py +++ b/modules/ui_session.py @@ -31,7 +31,7 @@ def create_ui(): shared.gradio['toggle_dark_mode'].click( lambda x: 'dark' if x == 'light' else 'light', gradio('theme_state'), gradio('theme_state')).then( - None, None, None, js=f'() => {{{ui.dark_theme_js}; toggleDarkMode()}}') + None, None, None, js=f'() => {{{ui.dark_theme_js}; toggleDarkMode(); localStorage.setItem("theme", document.body.classList.contains("dark") ? "dark" : "light")}}') # Reset interface event shared.gradio['reset_interface'].click( diff --git a/server.py b/server.py index 3dd0a3f3..bd440fe0 100644 --- a/server.py +++ b/server.py @@ -163,11 +163,26 @@ def create_interface(): gradio('show_controls'), None, js=f"""(x) => {{ - if ({str(shared.settings['dark_theme']).lower()}) {{ - document.getElementsByTagName('body')[0].classList.add('dark'); - }} - else {{ - document.getElementsByTagName('body')[0].classList.remove('dark'); + // Check if this is first visit or if localStorage is out of sync + const savedTheme = localStorage.getItem('theme'); + const serverTheme = {str(shared.settings['dark_theme']).lower()} ? 'dark' : 'light'; + + // If no saved theme or mismatch with server on first load, use server setting + if (!savedTheme || !sessionStorage.getItem('theme_synced')) {{ + localStorage.setItem('theme', serverTheme); + sessionStorage.setItem('theme_synced', 'true'); + if (serverTheme === 'dark') {{ + document.getElementsByTagName('body')[0].classList.add('dark'); + }} else {{ + document.getElementsByTagName('body')[0].classList.remove('dark'); + }} + }} else {{ + // Use localStorage for subsequent reloads + if (savedTheme === 'dark') {{ + document.getElementsByTagName('body')[0].classList.add('dark'); + }} else {{ + document.getElementsByTagName('body')[0].classList.remove('dark'); + }} }} {js} {ui.show_controls_js}