2022-11-16 13:03:44 +03:00
# Flet imports
import flet as ft
2022-11-19 21:10:13 +03:00
from flet . ref import Ref
2022-11-16 13:03:44 +03:00
# other imports
from math import pi
from typing import Optional
from loguru import logger
2022-11-19 21:10:13 +03:00
# utils imports
2022-11-21 00:11:50 +03:00
import webui_flet_utils
2022-11-16 13:03:44 +03:00
2022-11-19 21:10:13 +03:00
# for debugging
from pprint import pprint
2022-11-16 13:03:44 +03:00
@logger.catch ( reraise = True )
def main ( page : ft . Page ) :
2022-11-19 21:10:13 +03:00
## main function defines
2022-11-21 00:11:50 +03:00
default_control_height = 50
default_text_size_a = 15
default_text_size_b = 20
default_text_size_c = 25
toolbar_width = 25
2022-11-20 04:00:58 +03:00
def get_settings_from_config ( ) :
pass
2022-11-17 00:11:43 +03:00
def change_theme ( e ) :
page . theme_mode = " dark " if page . theme_mode == " light " else " light "
if " (Light theme) " in theme_switcher . tooltip :
theme_switcher . tooltip = theme_switcher . tooltip . replace ( " (Light theme) " , ' ' )
if " (Dark theme) " in theme_switcher . tooltip :
theme_switcher . tooltip = theme_switcher . tooltip . replace ( " (Dark theme) " , ' ' )
theme_switcher . tooltip + = " (Light theme) " if page . theme_mode == " light " else " (Dark theme) "
page . update ( )
2022-11-21 00:11:50 +03:00
###### layouts #########################################################
2022-11-19 21:10:13 +03:00
def change_layout ( e ) :
current_layout . value = e . control . data
set_current_layout_options ( e . control . data )
set_current_layout_tools ( e . control . data )
set_property_panel_options ( e . control . data )
page . update ( )
def set_current_layout_options ( layout ) :
for control in current_layout_options . controls :
current_layout_options . controls . pop ( )
if layout == ' Latent Space ' :
current_layout_options . controls . append ( latent_space_layout_options )
elif layout == ' Textual Inversion ' :
current_layout_options . controls . append ( textual_inversion_layout_options )
elif layout == ' Node Editor ' :
current_layout_options . controls . append ( node_editor_layout_options )
def set_current_layout_tools ( layout ) :
for control in current_layout_tools . controls :
current_layout_tools . controls . pop ( )
if layout == ' Latent Space ' :
current_layout_tools . controls . append ( latent_space_layout_tools )
elif layout == ' Textual Inversion ' :
current_layout_tools . controls . append ( textual_inversion_layout_tools )
elif layout == ' Node Editor ' :
current_layout_tools . controls . append ( node_editor_layout_tools )
def set_property_panel_options ( layout ) :
2022-11-21 00:11:50 +03:00
controls = property_panel . content . controls
for control in controls :
controls . pop ( )
2022-11-19 21:10:13 +03:00
if layout == ' Latent Space ' :
2022-11-21 00:11:50 +03:00
controls . append ( latent_space_layout_properties )
2022-11-19 21:10:13 +03:00
elif layout == ' Textual Inversion ' :
2022-11-21 00:11:50 +03:00
controls . append ( textual_inversion_layout_properties )
2022-11-19 21:10:13 +03:00
elif layout == ' Node Editor ' :
2022-11-21 00:11:50 +03:00
controls . append ( node_editor_layout_properties )
2022-11-19 21:10:13 +03:00
2022-11-21 00:11:50 +03:00
###### settings window #################################################
2022-11-17 00:11:43 +03:00
def close_settings_window ( e ) :
settings . open = False
page . update ( )
def open_settings_window ( e ) :
page . dialog = settings
settings . open = True
page . update ( )
2022-11-20 04:00:58 +03:00
general_settings = ft . Column (
alignment = ' start ' ,
2022-11-21 00:11:50 +03:00
scroll = ' auto ' ,
2022-11-20 04:00:58 +03:00
controls = [
ft . Divider ( height = 10 , color = " gray " ) ,
ft . Row (
controls = [
ft . Dropdown (
label = " GPU " ,
options = [
ft . dropdown . Option ( " 0:NVIDEA-BLAHBLAH9000 " ) ,
] ,
value = " 0:NVIDEA-BLAHBLAH9000 " ,
tooltip = " Select which GPU to use. " ,
) ,
] ,
) ,
ft . Row (
controls = [
ft . TextField (
label = " Output Directory " ,
value = ' outputs ' ,
text_align = ' start ' ,
tooltip = " Choose output directory. " ,
keyboard_type = ' text ' ,
) ,
] ,
) ,
ft . Row (
controls = [
ft . Dropdown (
label = " Default Model " ,
options = [
ft . dropdown . Option ( " Stable Diffusion v1.5 " ) ,
] ,
value = " " ,
tooltip = " Select default model to use. " ,
) ,
] ,
) ,
ft . Row (
controls = [
ft . TextField (
label = " Default Model Config " ,
value = ' configs/stable-diffusion/v1-inference.yaml ' ,
text_align = ' start ' ,
tooltip = " Choose default model config. " ,
keyboard_type = ' text ' ,
) ,
] ,
) ,
ft . Row (
controls = [
ft . TextField (
label = " Default Model Path " ,
value = ' models/ldm/stable-diffusion-v1/Stable Diffusion v1.5.ckpt ' ,
text_align = ' start ' ,
tooltip = " Choose default model path. " ,
keyboard_type = ' text ' ,
) ,
] ,
) ,
ft . Row (
controls = [
ft . TextField (
label = " Default GFPGAN Directory " ,
value = ' models/gfpgan ' ,
text_align = ' start ' ,
tooltip = " Choose default gfpgan directory. " ,
keyboard_type = ' text ' ,
) ,
] ,
) ,
ft . Row (
controls = [
ft . TextField (
label = " Default RealESRGAN Directory " ,
value = ' models/gfpgan ' ,
text_align = ' start ' ,
tooltip = " Choose default realESRGAN directory. " ,
keyboard_type = ' text ' ,
) ,
] ,
) ,
ft . Row (
controls = [
ft . Dropdown (
label = " Default RealESRGAN Model " ,
options = [
ft . dropdown . Option ( " " ) ,
] ,
value = " " ,
tooltip = " Select which realESRGAN model to use. " ,
) ,
] ,
) ,
ft . Row (
controls = [
ft . Dropdown (
label = " Default Upscaler " ,
options = [
ft . dropdown . Option ( " " ) ,
] ,
value = " " ,
tooltip = " Select which upscaler to use. " ,
) ,
] ,
) ,
] ,
)
performance_settings = ft . Column (
alignment = ' start ' ,
2022-11-21 00:11:50 +03:00
scroll = ' auto ' ,
2022-11-20 04:00:58 +03:00
controls = [
ft . Divider ( height = 10 , color = " gray " ) ,
] ,
)
server_settings = ft . Column (
alignment = ' start ' ,
2022-11-21 00:11:50 +03:00
scroll = True ,
2022-11-20 04:00:58 +03:00
controls = [
ft . Divider ( height = 10 , color = " gray " ) ,
] ,
)
interface_settings = ft . Column (
alignment = ' start ' ,
2022-11-21 00:11:50 +03:00
scroll = True ,
2022-11-20 04:00:58 +03:00
controls = [
ft . Divider ( height = 10 , color = " gray " ) ,
] ,
)
2022-11-17 00:11:43 +03:00
settings = ft . AlertDialog (
#modal = True,
title = ft . Text ( " Settings " ) ,
2022-11-20 04:00:58 +03:00
content = ft . Container (
width = page . width * 0.50 ,
content = ft . Tabs (
selected_index = 0 ,
animation_duration = 300 ,
tabs = [
ft . Tab (
text = " General " ,
content = general_settings ,
) ,
ft . Tab (
text = " Performance " ,
content = performance_settings ,
) ,
ft . Tab (
text = " Server " ,
content = server_settings ,
) ,
ft . Tab (
text = " Interface " ,
content = interface_settings ,
) ,
] ,
) ,
2022-11-17 00:11:43 +03:00
) ,
actions = [
# should save options when clicked
ft . ElevatedButton ( " Save " , icon = ft . icons . SAVE , on_click = close_settings_window ) ,
# Should allow you to discard changed made to the settings.
ft . ElevatedButton ( " Discard " , icon = ft . icons . RESTORE_FROM_TRASH_ROUNDED , on_click = close_settings_window ) ,
] ,
actions_alignment = " end " ,
#on_dismiss=lambda e: print("Modal dialog dismissed!"),
)
2022-11-21 00:11:50 +03:00
###### gallery window ##################################################
2022-11-19 21:10:13 +03:00
def close_gallery_window ( e ) :
gallery . open = False
page . update ( )
def open_gallery_window ( e ) :
page . dialog = gallery
gallery . open = True
page . update ( )
gallery = ft . AlertDialog (
title = ft . Text ( ' Gallery ' ) ,
content = ft . Row (
controls = [
ft . Text ( ' Working on it I swear... ' ) ,
ft . Container (
width = page . width * 0.75 ,
height = page . height * 0.75 ,
) ,
] ,
) ,
actions = [
# should save image to disk
ft . ElevatedButton ( " Save " , icon = ft . icons . SAVE , on_click = close_settings_window ) ,
# remove image from gallery
ft . ElevatedButton ( " Discard " , icon = ft . icons . RESTORE_FROM_TRASH_ROUNDED , on_click = close_settings_window ) ,
] ,
actions_alignment = " end " ,
2022-11-17 00:11:43 +03:00
)
2022-11-21 00:11:50 +03:00
###### app bar #########################################################
app_bar_title = ft . Text (
value = " Sygil " ,
size = default_text_size_c ,
text_align = ' center ' ,
)
prompt = ft . TextField (
value = " " ,
min_lines = 1 ,
max_lines = 1 ,
shift_enter = True ,
tooltip = " Prompt to use for generation. " ,
autofocus = True ,
hint_text = " A corgi wearing a top hat as an oil painting. " ,
height = default_control_height ,
text_size = default_text_size_b ,
)
generate_button = ft . ElevatedButton (
text = " Generate " ,
on_click = None ,
height = default_control_height ,
)
2022-11-19 21:10:13 +03:00
layouts = ft . PopupMenuButton (
items = [
ft . PopupMenuItem ( text = " Latent Space " , on_click = change_layout , data = " Latent Space " ) ,
ft . PopupMenuItem ( text = " Textual Inversion " , on_click = change_layout , data = " Textual Inversion " ) ,
ft . PopupMenuItem ( text = " Node Editor " , on_click = change_layout , data = " Node Editor " ) ,
] ,
tooltip = " Switch between different workspaces " ,
2022-11-21 00:11:50 +03:00
height = default_control_height ,
2022-11-19 21:10:13 +03:00
)
2022-11-21 00:11:50 +03:00
current_layout = ft . Text (
value = ' Latent Space ' ,
size = default_text_size_a ,
tooltip = " Current Workspace " ,
)
2022-11-19 21:10:13 +03:00
layout_menu = ft . Row (
alignment = ' start ' ,
controls = [
ft . Container ( content = layouts ) ,
ft . Container ( content = current_layout ) ,
2022-11-21 00:11:50 +03:00
] ,
height = default_control_height ,
2022-11-19 21:10:13 +03:00
)
latent_space_layout_options = ft . Row (
alignment = ' start ' ,
controls = [
ft . Container ( ft . IconButton ( content = ft . Text ( value = ' Canvas ' ) , tooltip = ' Canvas Options ' , on_click = None , disabled = True ) ) ,
ft . Container ( ft . IconButton ( content = ft . Text ( value = ' Layers ' ) , tooltip = ' Layer Options ' , on_click = None , disabled = True ) ) ,
ft . Container ( ft . IconButton ( content = ft . Text ( value = ' Tools ' ) , tooltip = ' Toolbox ' , on_click = None , disabled = True ) ) ,
ft . Container ( ft . IconButton ( content = ft . Text ( value = ' Preferences ' ) , tooltip = ' Set Editor Preferences ' , on_click = None , disabled = True ) ) ,
2022-11-21 00:11:50 +03:00
] ,
height = default_control_height ,
2022-11-19 21:10:13 +03:00
)
textual_inversion_layout_options = ft . Row (
alignment = ' start ' ,
controls = [
ft . Container ( ft . IconButton ( content = ft . Icon ( ft . icons . ADD_OUTLINED ) , tooltip = ' textual_inversion options 1 ' , on_click = None , disabled = True ) ) ,
ft . Container ( ft . IconButton ( content = ft . Icon ( ft . icons . ADD_OUTLINED ) , tooltip = ' textual_inversion options 2 ' , on_click = None , disabled = True ) ) ,
ft . Container ( ft . IconButton ( content = ft . Icon ( ft . icons . ADD_OUTLINED ) , tooltip = ' textual_inversion options 3 ' , on_click = None , disabled = True ) ) ,
2022-11-21 00:11:50 +03:00
] ,
height = default_control_height ,
2022-11-19 21:10:13 +03:00
)
node_editor_layout_options = ft . Row (
alignment = ' start ' ,
controls = [
ft . Container ( ft . IconButton ( content = ft . Icon ( ft . icons . ADD_OUTLINED ) , tooltip = ' node_editor options 1 ' , on_click = None , disabled = True ) ) ,
ft . Container ( ft . IconButton ( content = ft . Icon ( ft . icons . ADD_OUTLINED ) , tooltip = ' node_editor options 2 ' , on_click = None , disabled = True ) ) ,
ft . Container ( ft . IconButton ( content = ft . Icon ( ft . icons . ADD_OUTLINED ) , tooltip = ' node_editor options 3 ' , on_click = None , disabled = True ) ) ,
2022-11-21 00:11:50 +03:00
] ,
height = default_control_height ,
2022-11-19 21:10:13 +03:00
)
current_layout_options = ft . Row (
alignment = ' start ' ,
controls = [
ft . Container ( content = latent_space_layout_options ) ,
2022-11-21 00:11:50 +03:00
] ,
height = default_control_height ,
2022-11-19 21:10:13 +03:00
)
2022-11-17 00:11:43 +03:00
theme_switcher = ft . IconButton (
ft . icons . WB_SUNNY_OUTLINED ,
on_click = change_theme ,
expand = 1 ,
2022-11-21 00:11:50 +03:00
tooltip = f " Click to change between the light and dark themes. Current { ' (Light theme) ' if page . theme_mode == ' light ' else ' (Dark theme) ' } " ,
height = default_control_height ,
2022-11-17 00:11:43 +03:00
)
2022-11-21 00:11:50 +03:00
settings_button = ft . IconButton (
icon = ft . icons . SETTINGS ,
on_click = open_settings_window ,
height = default_control_height ,
)
2022-11-17 00:11:43 +03:00
menu_button = ft . PopupMenuButton (
items = [
#ft.PopupMenuItem(text="Settings", on_click=open_settings_modal),
ft . PopupMenuItem ( ) , # divider
#ft.PopupMenuItem(text="Checked item", checked=False, on_click=check_item_clicked),
2022-11-21 00:11:50 +03:00
] ,
height = default_control_height ,
2022-11-17 00:11:43 +03:00
)
option_bar = ft . Row (
controls = [
2022-11-21 00:11:50 +03:00
# ft.Container(expand=True, content = current_layout_options),
ft . Container ( expand = 2 , content = layout_menu ) ,
2022-11-17 00:11:43 +03:00
ft . Container ( expand = 1 , content = theme_switcher ) ,
ft . Container ( expand = 1 , content = settings_button ) ,
ft . Container ( expand = 1 , content = menu_button ) ,
2022-11-21 00:11:50 +03:00
] ,
height = default_control_height ,
2022-11-17 00:11:43 +03:00
)
appbar = ft . Row (
width = page . width ,
controls = [
2022-11-21 00:11:50 +03:00
ft . Container ( content = app_bar_title ) ,
2022-11-19 21:10:13 +03:00
ft . VerticalDivider ( width = 20 , opacity = 0 ) ,
2022-11-21 00:11:50 +03:00
ft . Container ( expand = 6 , content = prompt ) ,
2022-11-19 21:10:13 +03:00
# ft.Container(expand = 1, content = generate_button),
2022-11-21 00:11:50 +03:00
ft . Container ( expand = 4 , content = option_bar ) ,
2022-11-17 00:11:43 +03:00
] ,
2022-11-21 00:11:50 +03:00
height = default_control_height ,
2022-11-17 00:11:43 +03:00
)
2022-11-21 00:11:50 +03:00
###### toolbar #########################################################
open_gallery_button = ft . IconButton ( width = 20 , content = ft . Icon ( ft . icons . DASHBOARD_OUTLINED ) , tooltip = ' Gallery ' , on_click = open_gallery_window )
import_image_button = ft . IconButton ( width = 20 , content = ft . Icon ( ft . icons . ADD_OUTLINED ) , tooltip = ' Import image as new layer ' , on_click = None )
2022-11-19 21:10:13 +03:00
universal_tools = ft . Row (
alignment = ' start ' ,
wrap = True ,
controls = [
open_gallery_button ,
import_image_button ,
]
)
## canvas layout tools
latent_space_layout_tools = ft . Row (
alignment = ' start ' ,
wrap = True ,
2022-11-21 00:11:50 +03:00
controls = [
] ,
2022-11-19 21:10:13 +03:00
)
2022-11-17 00:11:43 +03:00
2022-11-19 21:10:13 +03:00
## textual inversion tools
textual_inversion_layout_tools = ft . Row (
alignment = ' start ' ,
wrap = True ,
2022-11-21 00:11:50 +03:00
controls = [
] ,
2022-11-19 21:10:13 +03:00
)
## node editor tools
node_editor_layout_tools = ft . Row (
alignment = ' start ' ,
wrap = True ,
controls = [
] ,
)
current_layout_tools = ft . Column (
2022-11-21 00:11:50 +03:00
width = toolbar_width ,
2022-11-19 21:10:13 +03:00
controls = [
latent_space_layout_tools ,
] ,
)
toolbar = ft . Column (
2022-11-21 00:11:50 +03:00
width = toolbar_width ,
2022-11-17 00:11:43 +03:00
controls = [
2022-11-21 00:11:50 +03:00
ft . Container ( content = universal_tools ) ,
ft . Container ( content = current_layout_tools ) ,
2022-11-17 00:11:43 +03:00
] ,
)
2022-11-19 21:10:13 +03:00
2022-11-21 00:11:50 +03:00
###### layers panel ####################################################
def show_hide_layer ( e ) :
parent = e . control . data [ ' parent ' ]
if parent . data [ ' hidden ' ] :
parent . data [ ' hidden ' ] = False
parent . opacity = 1.0
else :
parent . data [ ' hidden ' ] = True
parent . opacity = 0.5
page . update ( )
def get_layers ( ) :
layers = [ ft . Divider ( height = 10 , opacity = 0 ) ]
count = 0
for i in range ( 10 ) :
count + = 1
layer_icon = ft . IconButton (
icon = ft . icons . HIGHLIGHT_ALT_OUTLINED ,
tooltip = ' show/hide ' ,
on_click = show_hide_layer ,
data = { ' parent ' : None } ,
)
layer_label = ft . Text ( value = ( " layer_ " + str ( count ) ) )
layer_button = ft . Row (
controls = [
layer_icon ,
layer_label ,
] ,
data = { ' hidden ' : False } ,
)
layer_icon . data . update ( { ' parent ' : layer_button } ) ## <--see what i did there? :)
layers . append ( layer_button )
return layers
layer_list = get_layers ( )
layer_manager = ft . Container (
content = ft . Column (
controls = layer_list ,
) ,
bgcolor = ft . colors . WHITE10 ,
)
asset_manager = ft . Container (
content = ft . Column (
controls = [
ft . Divider ( height = 10 , opacity = 0 ) ,
] ,
) ,
bgcolor = ft . colors . WHITE10 ,
)
layers = ft . Container (
width = 200 ,
content = ft . Tabs (
selected_index = 0 ,
animation_duration = 300 ,
tabs = [
ft . Tab (
text = " Layers " ,
content = layer_manager ,
) ,
ft . Tab (
text = " Assets " ,
content = asset_manager ,
) ,
] ,
) ,
)
###### canvas ##########################################################
2022-11-17 00:11:43 +03:00
canvas = ft . Container (
content = ft . Stack (
[
2022-11-21 00:11:50 +03:00
ft . Image (
2022-11-17 00:11:43 +03:00
src = f " https://i.redd.it/qdxksbar05o31.jpg " ,
#width=300,
#height=300,
#fit="contain",
gapless_playback = True ,
expand = True ,
) ,
] ,
2022-11-21 00:11:50 +03:00
clip_behavior = None ,
) ,
alignment = ft . alignment . center ,
expand = True ,
)
###### text editor #####################################################
text_editor = ft . Container (
content = ft . Text ( ' WIP ' ) ,
expand = True ,
)
###### top panel #######################################################
top_panel = ft . Container (
content = ft . Tabs (
selected_index = 0 ,
animation_duration = 300 ,
tabs = [
ft . Tab (
text = ' Canvas ' ,
content = canvas ,
) ,
ft . Tab (
text = ' Text Editor ' ,
content = text_editor ,
) ,
] ,
2022-11-17 00:11:43 +03:00
) ,
2022-11-21 00:11:50 +03:00
expand = True ,
)
###### bottom_panel ####################################################
video_editor_window = ft . Container ( bgcolor = ft . colors . BLACK12 , height = 250 )
console_window = ft . Container ( bgcolor = ft . colors . BLACK12 , height = 250 )
bottom_panel = ft . Row (
height = 150 ,
controls = [
ft . Tabs (
selected_index = 0 ,
animation_duration = 300 ,
tabs = [
ft . Tab (
text = " Video Editor " ,
content = video_editor_window ,
) ,
ft . Tab (
text = " Console " ,
content = console_window ,
) ,
] ,
) ,
] ,
)
###### center panel ####################################################
center_panel = ft . Container (
content = ft . Column (
controls = [
top_panel ,
bottom_panel ,
] ,
) ,
expand = True ,
2022-11-17 00:11:43 +03:00
)
2022-11-19 21:10:13 +03:00
###### property panel ##################################################
## canvas layout properties
2022-11-17 00:11:43 +03:00
model_menu = ft . Dropdown (
label = " Custom Models " ,
options = [
ft . dropdown . Option ( " Stable Diffusion 1.5 " ) ,
ft . dropdown . Option ( " Waifu Diffusion 1.3 " ) ,
ft . dropdown . Option ( " MM-27 Merged Pruned " ) ,
] ,
height = 70 ,
expand = 1 ,
value = " Stable Diffusion 1.5 " ,
tooltip = " Custom models located in your `models/custom` folder including the default stable diffusion model. " ,
)
sampling_menu = ft . Dropdown (
label = " Sampling method " ,
options = [ #["k_lms", "k_euler", "k_euler_a", "k_dpm_2", "k_dpm_2_a", "k_heun", "PLMS", "DDIM"]
ft . dropdown . Option ( " k_lms " ) ,
ft . dropdown . Option ( " k_euler " ) ,
ft . dropdown . Option ( " k_euler_a " ) ,
ft . dropdown . Option ( " k_dpm_2 " ) ,
ft . dropdown . Option ( " k_dpm_2_a " ) ,
ft . dropdown . Option ( " k_heun " ) ,
ft . dropdown . Option ( " PLMS " ) ,
ft . dropdown . Option ( " DDIM " ) ,
] ,
height = 70 ,
expand = 1 ,
value = " k_lms " ,
tooltip = " Sampling method or scheduler to use, different sampling method "
" or schedulers behave differently giving better or worst performance in more or less steps. "
" Try to find the best one for your needs and hardware. " ,
)
2022-11-19 21:10:13 +03:00
latent_space_layout_properties = ft . Container (
2022-11-17 00:11:43 +03:00
content = ft . Column (
controls = [
ft . Row (
controls = [
model_menu ,
] ,
spacing = 4 ,
alignment = ' spaceAround ' ,
) ,
ft . Row (
controls = [
sampling_menu ,
] ,
spacing = 4 ,
alignment = ' spaceAround ' ,
) ,
ft . Row (
controls = [
ft . TextField ( label = " Width " , value = 512 , height = 50 , expand = 1 , suffix_text = " W " , text_align = ' center ' , tooltip = " Widgth in pixels. " , keyboard_type = " number " ) ,
ft . TextField ( label = " Height " , value = 512 , height = 50 , expand = 1 , suffix_text = " H " , text_align = ' center ' , tooltip = " Height in pixels. " , keyboard_type = " number " ) ,
ft . TextField ( label = " CFG " , value = 7.5 , height = 50 , expand = 1 , text_align = ' center ' , #suffix_text="CFG",
tooltip = " Classifier Free Guidance Scale. " , keyboard_type = " number " ) ,
] ,
spacing = 4 ,
alignment = ' spaceAround ' ,
) ,
ft . Row (
controls = [
ft . TextField ( label = " Seed " , hint_text = " blank=random seed " , height = 60 , expand = 2 , text_align = ' start ' , #suffix_text="seed",
tooltip = " Seed used for the generation, leave empty or use -1 for a random seed. You can also use word as seeds. " ,
keyboard_type = " number "
) ,
ft . TextField ( label = " Sampling Steps " , value = 30 , height = 60 , expand = 1 , text_align = ' center ' , tooltip = " Sampling steps. " , keyboard_type = " number " ) ,
] ,
spacing = 4 ,
alignment = ' spaceAround ' ,
) ,
ft . Draggable ( content = ft . Divider ( height = 10 , color = " gray " ) ) ,
2022-11-19 21:10:13 +03:00
# ft.Switch(label="Stable Horde", value=False, disabled=True, tooltip="Option disabled for now."),
# ft.Draggable(content=ft.Divider(height=10, color="gray")),
# ft.Switch(label="Batch Options", value=False, disabled=True, tooltip="Option disabled for now."),
# ft.Draggable(content=ft.Divider(height=10, color="gray")),
# ft.Switch(label="Upscaling", value=False, disabled=True, tooltip="Option disabled for now."),
# ft.Draggable(content=ft.Divider(height=10, color="gray")),
# ft.Switch(label="Preview Image Settings", value=False, disabled=True, tooltip="Option disabled for now."),
# ft.Draggable(content=ft.Divider(height=10, color="gray")),
]
) ,
expand = True
)
## textual inversion layout properties
clip_model_menu_label = ft . Text ( value = ' Clip Models ' , tooltip = " Select Clip model(s) to use. " )
clip_model_menu = ft . PopupMenuButton (
items = [
ft . PopupMenuItem ( text = " Vit-L/14 " , checked = False , data = ' Vit-L/14 ' , on_click = None ) ,
ft . PopupMenuItem ( text = " Vit-H-14 " , checked = False , data = ' Vit-H-14 ' , on_click = None ) ,
ft . PopupMenuItem ( text = " Vit-g-14 " , checked = False , data = ' Vit-g-14 ' , on_click = None ) ,
] ,
)
other_model_menu_label = ft . Text ( value = ' Other Models ' , tooltip = " For DiscoDiffusion and JAX enable all the same models here as you intend to use when generating your images. " )
other_model_menu = ft . PopupMenuButton (
items = [
ft . PopupMenuItem ( text = " VitL14_336px " , checked = False , data = ' VitL14_336px ' , on_click = None ) ,
ft . PopupMenuItem ( text = " VitB16 " , checked = False , data = ' VitB16 ' , on_click = None ) ,
ft . PopupMenuItem ( text = " VitB32 " , checked = False , data = ' VitB32 ' , on_click = None ) ,
ft . PopupMenuItem ( text = " RN50 " , checked = False , data = ' RN50 ' , on_click = None ) ,
ft . PopupMenuItem ( text = " RN50x4 " , checked = False , data = ' RN50x4 ' , on_click = None ) ,
ft . PopupMenuItem ( text = " RN50x16 " , checked = False , data = ' RN50x16 ' , on_click = None ) ,
ft . PopupMenuItem ( text = " RN50x64 " , checked = False , data = ' RN50x64 ' , on_click = None ) ,
ft . PopupMenuItem ( text = " RN101 " , checked = False , data = ' RN101 ' , on_click = None ) ,
] ,
)
def get_textual_inversion_settings ( ) :
settings = {
' selected_models ' : [ ] ,
' selected_images ' : [ ] ,
' results ' : [ ] ,
}
return settings
def get_textual_inversion_grid_row ( row_name ) :
row_items = [ ]
row_items . append ( ft . Text ( value = row_name ) )
2022-11-21 00:11:50 +03:00
row_items . append ( ft . Text ( value = webui_flet_utils . get_textual_inversion_row_value ( row_name ) ) )
2022-11-19 21:10:13 +03:00
return row_items
def get_textual_inversion_results_grid ( ) :
grid_rows = [ ]
2022-11-21 00:11:50 +03:00
for item in webui_flet_utils . textual_inversion_grid_row_list :
2022-11-19 21:10:13 +03:00
grid_rows . append (
ft . Row (
controls = get_textual_inversion_grid_row ( item ) ,
height = 50 ,
)
)
return ft . Column ( controls = grid_rows )
def get_textual_inversion_results ( e ) :
e . control . data = get_textual_inversion_settings ( )
2022-11-21 00:11:50 +03:00
webui_flet_utils . run_textual_inversion ( e . control . data )
2022-11-19 21:10:13 +03:00
textual_inversion_results . content = get_textual_inversion_results_grid ( )
page . update ( )
run_textual_inversion_button = ft . ElevatedButton ( " Get Text from Image(s) " , on_click = get_textual_inversion_results , data = { } )
textual_inversion_results = ft . Container ( content = None )
textual_inversion_layout_properties = ft . Container (
content = ft . Column (
controls = [
ft . Row (
controls = [
clip_model_menu_label ,
clip_model_menu ,
] ,
spacing = 4 ,
alignment = ' spaceAround ' ,
) ,
ft . Row (
controls = [
other_model_menu_label ,
other_model_menu ,
] ,
spacing = 4 ,
alignment = ' spaceAround ' ,
) ,
ft . Row (
controls = [
run_textual_inversion_button ,
] ,
alignment = ' spaceAround ' ,
) ,
2022-11-17 00:11:43 +03:00
ft . Draggable ( content = ft . Divider ( height = 10 , color = " gray " ) ) ,
2022-11-19 21:10:13 +03:00
ft . Row (
controls = [
textual_inversion_results ,
] ,
wrap = True ,
)
]
) ,
expand = True
)
## node editor layout properties
node_editor_layout_properties = ft . Container (
content = ft . Column (
controls = [
2022-11-17 00:11:43 +03:00
]
) ,
expand = True
)
2022-11-19 21:10:13 +03:00
## property panel
2022-11-21 00:11:50 +03:00
property_panel = ft . Container (
bgcolor = ft . colors . WHITE10 ,
content = ft . Column (
controls = [
ft . Divider ( height = 10 , opacity = 0 ) ,
latent_space_layout_properties ,
] ,
) ,
2022-11-17 00:11:43 +03:00
)
2022-11-21 00:11:50 +03:00
## advanced panel
advanced_panel = ft . Container (
bgcolor = ft . colors . WHITE10 ,
content = ft . Column (
controls = [
ft . Divider ( height = 10 , opacity = 0 ) ,
] ,
) ,
2022-11-17 00:11:43 +03:00
)
2022-11-21 00:11:50 +03:00
right_panel = ft . Container (
content = ft . Tabs (
selected_index = 0 ,
animation_duration = 300 ,
tabs = [
2022-11-19 21:10:13 +03:00
ft . Tab (
2022-11-21 00:11:50 +03:00
text = ' Properties ' ,
content = property_panel ,
2022-11-19 21:10:13 +03:00
) ,
ft . Tab (
2022-11-21 00:11:50 +03:00
text = ' Advanced ' ,
content = advanced_panel ,
2022-11-19 21:10:13 +03:00
) ,
2022-11-21 00:11:50 +03:00
] ,
) ,
width = 400 ,
)
###### workspace #######################################################
workspace = ft . Row (
controls = [
toolbar ,
ft . VerticalDivider ( width = 2 , color = " gray " , opacity = 0 ) ,
layers ,
ft . VerticalDivider ( width = 2 , color = " gray " , opacity = 0 ) ,
center_panel ,
ft . VerticalDivider ( width = 2 , color = " gray " , opacity = 0 ) ,
right_panel ,
2022-11-20 04:00:58 +03:00
] ,
2022-11-21 00:11:50 +03:00
expand = True ,
2022-11-17 00:11:43 +03:00
)
2022-11-21 00:11:50 +03:00
###### make page #######################################################
2022-11-19 21:10:13 +03:00
page . title = " Stable Diffusion Playground "
page . theme_mode = " dark "
2022-11-17 00:11:43 +03:00
page . appbar = ft . AppBar (
#leading=leading,
#leading_width=leading_width,
automatically_imply_leading = True ,
#elevation=5,
bgcolor = ft . colors . BLACK26 ,
actions = [ appbar ]
)
2022-11-21 00:11:50 +03:00
page . add ( workspace )
2022-11-17 00:11:43 +03:00
2022-11-19 21:10:13 +03:00
ft . app ( target = main , port = 8505 , view = ft . WEB_BROWSER )