a
    Ad/                     @   s|   d dl Zd dlmZmZmZmZmZmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ dd Zdd
dZG dd dZdS )    N)	ui_commonsharedscript_callbacksscripts	sd_modelssysinfo)wrap_gradio_call)opts)FormRow)reload_javascriptc                 C   sV   t t| }tj|  }t|jr&| n|jp.i }dd | D }tjf d|i|S )Nc                 S   s   i | ]\}}|d vr||qS )>   	precision ).0kvr   r   ;/var/www/html/stable-diffusion-webui/modules/ui_settings.py
<dictcomp>       z)get_value_for_setting.<locals>.<dictcomp>value)getattrr	   data_labelscallablecomponent_argsitemsgrupdate)keyr   infoargsr   r   r   get_value_for_setting
   s
    

r   Fc           	         sj   fdd}t j  }t|j}t|jr2| n|j}|jd urJ|j}nD|tkrZtj	}n4|t
krjtj}n$|tkrztj}ntd| d  d  }|jd urF|r|f |j| |d|pi }t||j|jd   nbt J |f |j| |d|pi }t||j|jd   W d    n1 s:0    Y  n |f |j| |d|p`i }|S )Nc                      s     t jv rt j  S t j  jS N)r	   datar   defaultr   r   r   r   fun   s    z%create_setting_component.<locals>.funzbad options item type: z	 for key Zsetting_)labelr   elem_idZrefresh_)r	   r   typer"   r   r   	componentstrr   TextboxintNumberboolCheckbox	Exceptionrefreshr%   r   create_refresh_buttonr
   )	r   is_quicksettingsr$   r   tr   compr&   resr   r#   r   create_setting_component   s.    



 < r6   c                   @   sX   e Zd ZdZdZdZdZdZdZdZ	dZ
dZdd Zdd Zdd Zdd	 Zd
d ZdS )
UiSettingsNc              
   G   s"  g }t tj || jD ]P\}}}|| jkst|tj| jsJ d| d| dttj| jj	 qt tj || jD ],\}}}|| jkrq~t
||r~|| q~zttj W n4 ty   t t| dd| df Y S 0 t t| d|rdnd d| dfS )	NzBad value for setting z: z; expecting z  settings changed without save: z, .z settings changed )zipr	   r   keys
componentsdummy_component	same_typer"   r'   __name__setappendsaver   config_filenameRuntimeErrordumpjsonlenjoin)selfr   changedr   r   r4   r   r   r   run_settingsC   s    H
(zUiSettings.run_settingsc                 C   sr   t |t j| js(tjddt  fS |d u s<t ||sVtjtt |dt  fS t 	t
j t|t  fS )NT)visible)r   )r	   r>   r   r"   r   r   rE   r@   r   rB   r   rC   r   )rH   r   r   r   r   r   run_settings_singleV   s    zUiSettings.run_settings_singlec                 C   s  g | _ i | _|| _| jt_t  t  t	j
dd0}t	  t	jdd" t	jdddd| _W d    n1 sx0    Y  t	   t	jd	dd
d}W d    n1 s0    Y  W d    n1 s0    Y  t	jdd| _tj| _dd t| jD | _g | _d }d }d }t	jdd ttj D ]\}\}	}
|
jd d u }||
jkr|s|
j\}}|d ur|  |  t	  t	jd| |d}|  t	jdd}|  |
j}|	| jv rtjjs| j||	|
f | j | n2|r| j | nt|	}|| j|	< | j | q4|d urH|  |  t	jdddd |   W d    n1 sx0    Y  t	jdddd t	jddd t	  t	jdd t	j!dd d!}W d    n1 s0    Y  t	jdd t	jd"d#d}W d    n1 s0    Y  t	jd$d W d    n1 sH0    Y  W d    n1 sh0    Y  W d    n1 s0    Y  t	jd%d&d'd t	jd(d)d*}t	jd+d,d*}t	jd-d.d/d}t	 , t	jd0d1d*}t	jd2d3d*}W d    n1 s0    Y  W d    n1 s,0    Y  t	jd4d5d6d$ t	jt"d7d5d W d    n1 sr0    Y  t	jd8d9d* t	j#d:d;d< dd=| _$W d    n1 s0    Y  |j%t&j'g g d> |j%t&j(g g d> |j%d?d< g g d@dA |j%dBd< g g d,dA dCdD }|j%|g g d> |j%tj)j*dEg g dF dGdH }|j+||g|gd> W d    n1 sp0    Y  || _,d S )INF)analytics_enabled   )scalezApply settingsprimaryZsettings_submit)r   variantr&   z	Reload UIZsettings_restart_gradioZsettings_result)r&   c                 S   s   i | ]\}}|d kr||qS )quicksettingsr   )r   ixr   r   r   r   u   r   z(UiSettings.create_ui.<locals>.<dictcomp>settingsr   Z	settings_)r&   r%   compact)rQ   ZDefaultsdefaultsZsettings_tab_defaults)idr&   ZSysinfor   Zsettings_tab_sysinfoz<a href="./internal/sysinfo-download" class="sysinfo_big_link" download>Download system info</a><br /><a href="./internal/sysinfo" target="_blank">(or open as text in a new page)</a>Zsysinfo_download   zCheck system info for validitybinary)r%   r'   r9   Zsysinfo_validityd   ZActionsactionsZsettings_tab_actionszRequest browser notificationsrequest_notifications)r   r&   zDownload localization templatedownload_localizationz7Reload custom script bodies (No ui updates, No restart)	secondaryZsettings_reload_script_bodiesz!Unload SD checkpoint to free VRAMZsett_unload_sd_modelz,Reload the last SD checkpoint back into VRAMZsett_reload_sd_modelZLicensesZlicensesZsettings_tab_licenseszlicenses.htmlzShow all pagesZsettings_show_all_pagesZsettings_jsonc                   S   s   t  S r    )r	   rE   r   r   r   r   <lambda>   r   z&UiSettings.create_ui.<locals>.<lambda>)r&   r   rK   fninputsoutputsc                   S   s   d S r    r   r   r   r   r   r`      r   zfunction(){})rb   rc   rd   _jsc                   S   s   d S r    r   r   r   r   r   r`      r   c                   S   s   t   t  d S r    )r   reload_script_body_onlyr   r   r   r   r   reload_scripts   s    z,UiSettings.create_ui.<locals>.reload_scriptsZrestart_reloadrb   re   rc   rd   c                 S   s(   | d u rdS t | jdddr$dS dS )Nr9   utf8ignore)errorsZValidZInvalid)r   checkdecoderT   r   r   r   
check_file   s
    z(UiSettings.create_ui.<locals>.check_file)-r<   component_dictr=   r   settings_componentsr   ui_settings_callbackr	   reorderr   BlocksRowColumnButtonsubmitHTMLresultquicksettings_listquicksettings_names	enumerateTabsr   r   section__exit__GroupTabItem	__enter__cmd_optsfreeze_settingsrA   r6   	create_uiFilehtmlr*   text_settingsclickr   unload_model_weightsreload_model_weightsstaterequest_restartchange	interface)rH   loadsaver=   Zsettings_interfaceZrestart_gradioZprevious_sectionZcurrent_tabZcurrent_rowrS   r   itemZsection_must_be_skippedr&   textr(   Zsysinfo_check_fileZsysinfo_check_outputr]   r^   Zreload_script_bodiesZunload_sd_modelZreload_sd_modelrg   ro   r   r   r   r   a   s    
0
L



(
..`
N46	&zUiSettings.create_uic                    sj   t jdddH t j fdddD ] \}}}t|dd}| j|< q&W d    n1 s\0    Y  d S )	NrR   rV   )r&   rQ   c                    s    j | d | d S )NrY   r   )r|   getrn   rH   r   r   r`      r   z.UiSettings.add_quicksettings.<locals>.<lambda>r#   T)r2   )r   ru   sortedr{   r6   rp   )rH   _ir   _itemr(   r   r   r   add_quicksettings   s     zUiSettings.add_quicksettingsc                    sL  j jtfddt gdjjjgd jD ]\}}}j	| }t
j| }t|tjrp|j |jg}nt|dr|jg}n|jg}|D ].}||ffdd	|g|jg|jd ud qq8tjdd	d
d}	|	jfdddj	d jgj	d jgd fddt
j D   fdd}
|j|
g fdd D d
d d S )Nc                     s
    j |  S r    )rJ   )r   r   r   r   r`      r   z.UiSettings.add_functionality.<locals>.<lambda>)extra_outputsra   releasec                    s    j | |dS )Nr#   rL   )r   r   r   r   r   r`     r   )rb   rc   rd   show_progresszChange checkpointZchange_checkpointF)r&   rK   c                    s    j | ddS )Nsd_model_checkpointr#   r   )r   _r   r   r   r`     r   zdfunction(v){ var res = desiredCheckpointName; desiredCheckpointName = ''; return [res || v, null]; }r   rh   c                    s   g | ]}| j v r|qS r   rp   r   r   r   r   r   
<listcomp>  r   z0UiSettings.add_functionality.<locals>.<listcomp>c                      s   dd  D S )Nc                 S   s   g | ]}t |qS r   )r   )r   r   r   r   r   r   !  r   zMUiSettings.add_functionality.<locals>.get_settings_values.<locals>.<listcomp>r   r   )component_keysr   r   get_settings_values   s    z9UiSettings.add_functionality.<locals>.get_settings_valuesc                    s   g | ]} j | qS r   r   r   r   r   r   r   &  r   )rb   rc   rd   queue)rx   r   r   r   r   r<   r   rz   r{   rp   r	   r   
isinstancer*   blurhasattrr   r   r0   rw   r=   r;   load)rH   demor   r   r   r(   r   methodsmethodZbutton_set_checkpointr   r   )r   rH   r   add_functionality   sF    






zUiSettings.add_functionality)r?   
__module____qualname__rx   rz   r   r<   rp   r=   r{   r|   r   rJ   rL   r   r   r   r   r   r   r   r7   8   s    r7   )F)gradior   modulesr   r   r   r   r   r   modules.call_queuer   modules.sharedr	   modules.ui_componentsr
   modules.ui_gradio_extensionsr   r   r6   r7   r   r   r   r   <module>   s    

$