diff --git a/fooocus_version.py b/fooocus_version.py index 21649fee..af49112e 100644 --- a/fooocus_version.py +++ b/fooocus_version.py @@ -1 +1 @@ -version = '2.1.792' +version = '2.1.793' diff --git a/javascript/viewer.js b/javascript/viewer.js new file mode 100644 index 00000000..51c93e02 --- /dev/null +++ b/javascript/viewer.js @@ -0,0 +1,37 @@ +window.main_viewer_height = 512; + +function resized() { + let windowHeight = window.innerHeight - 260; + let elements = document.getElementsByClassName('main_view'); + + if (windowHeight > 745) windowHeight = 745; + + for (let i = 0; i < elements.length; i++) { + elements[i].style.height = windowHeight + 'px'; + } + + window.main_viewer_height = windowHeight; +} + +function viewer_to_top(delay = 100) { + setTimeout(() => window.scrollTo({top: 0, behavior: 'smooth'}), delay); +} + +function viewer_to_bottom(delay = 100) { + let element = document.getElementById('positive_prompt'); + let yPos = window.main_viewer_height; + + if (element) { + yPos = element.getBoundingClientRect().top + window.scrollY; + } + + setTimeout(() => window.scrollTo({top: yPos - 8, behavior: 'smooth'}), delay); +} + +window.addEventListener('resize', (e) => { + resized(); +}); + +onUiLoaded(async () => { + resized(); +}); diff --git a/launch.py b/launch.py index 50a26055..de23994d 100644 --- a/launch.py +++ b/launch.py @@ -10,6 +10,7 @@ sys.path += [root, backend_path] os.chdir(root) os.environ["PYTORCH_ENABLE_MPS_FALLBACK"] = "1" +os.environ["GRADIO_SERVER_PORT"] = "7865" import platform diff --git a/modules/ui_gradio_extensions.py b/modules/ui_gradio_extensions.py index fb7222c4..d393027b 100644 --- a/modules/ui_gradio_extensions.py +++ b/modules/ui_gradio_extensions.py @@ -28,12 +28,14 @@ def javascript_html(): localization_js_path = webpath('javascript/localization.js') zoom_js_path = webpath('javascript/zoom.js') edit_attention_js_path = webpath('javascript/edit-attention.js') + viewer_js_path = webpath('javascript/viewer.js') head = f'\n' head += f'\n' head += f'\n' head += f'\n' head += f'\n' head += f'\n' + head += f'\n' return head diff --git a/update_log.md b/update_log.md index 17424de3..b7922223 100644 --- a/update_log.md +++ b/update_log.md @@ -1,3 +1,7 @@ +# 2.1.793 + +* Added many javascripts to improve user experience. Now users with small screen will always see full canvas without needing to scroll. + # 2.1.790 * Face swap (in line with Midjourney InsightFace): Input Image -> Image Prompt -> Advanced -> FaceSwap diff --git a/webui.py b/webui.py index a2828add..8ecdae8b 100644 --- a/webui.py +++ b/webui.py @@ -78,10 +78,14 @@ with shared.gradio_root: with gr.Row(): with gr.Column(scale=2): with gr.Row(): - progress_window = grh.Image(label='Preview', show_label=True, height=640, visible=False) - progress_gallery = gr.Gallery(label='Finished Images', show_label=True, object_fit='contain', height=640, visible=False) - progress_html = gr.HTML(value=modules.html.make_progress_html(32, 'Progress 32%'), visible=False, elem_id='progress-bar', elem_classes='progress-bar') - gallery = gr.Gallery(label='Gallery', show_label=False, object_fit='contain', height=745, visible=True, elem_classes='resizable_area') + progress_window = grh.Image(label='Preview', show_label=True, visible=False, + elem_classes=['main_view']) + progress_gallery = gr.Gallery(label='Finished Images', show_label=True, object_fit='contain', + visible=False, elem_classes=['main_view']) + progress_html = gr.HTML(value=modules.html.make_progress_html(32, 'Progress 32%'), visible=False, + elem_id='progress-bar', elem_classes='progress-bar') + gallery = gr.Gallery(label='Gallery', show_label=False, object_fit='contain', visible=True, + elem_classes=['resizable_area', 'main_view']) with gr.Row(elem_classes='type_row'): with gr.Column(scale=17): prompt = gr.Textbox(show_label=False, placeholder="Type prompt here.", elem_id='positive_prompt', @@ -171,8 +175,8 @@ with shared.gradio_root: outpaint_selections = gr.CheckboxGroup(choices=['Left', 'Right', 'Top', 'Bottom'], value=[], label='Outpaint', show_label=False, container=False) gr.HTML('* Powered by Fooocus Inpaint Engine (beta) \U0001F4D4 Document') - switch_js = "(x) => {if(x){setTimeout(() => window.scrollTo({ top: 850, behavior: 'smooth' }), 50);}else{setTimeout(() => window.scrollTo({ top: 0, behavior: 'smooth' }), 50);} return x}" - down_js = "() => {setTimeout(() => window.scrollTo({ top: 850, behavior: 'smooth' }), 50);}" + switch_js = "(x) => {if(x){viewer_to_bottom(100);viewer_to_bottom(500);}else{viewer_to_top();} return x;}" + down_js = "() => {viewer_to_bottom();}" input_image_checkbox.change(lambda x: gr.update(visible=x), inputs=input_image_checkbox, outputs=image_input_panel, queue=False, _js=switch_js) ip_advanced.change(lambda: None, queue=False, _js=down_js)