a
    Ad                  /   @   s&  d dl mZ d dlmZ d dlmZmZ d dlZd dlZd dlZ	d dl
mZ d dlmZ d dlZd dlmZ d dlZd dlmZmZmZmZmZmZmZ d dlmZmZmZ d d	l m!Z!m"Z" d dl m#Z# d dl$Zd dl%Zd dl&Zd dl'Z'd d
l(m)Z) dZ*edddgZ+dd Z,dd Z-dd Z.dd Z/dd Z0dd Z1dd Z2dd Z3dd  Z4e5d!d"d#Z6d$d% Z7ee5d&d'd(Z8d)d* Z9d+d, Z:de;d.d/d0Z<de;d1d2d3Z=d4d5 Z>d6d7 Z?d8d9 Z@d:d; ZAd<d= ZBd>d? ZCd@dA ZDdBdC ZEdDdE ZFG dFdG dGZGG dHdI dIeGZHG dJdK dKeGZIeGdLe5eAeBdMeGdNeJe,dOeGdPeJe,dQeGdReKe,dSeGdTeJe,dUeIdVeJe,dWeGdXeKe,dYeHdZeKe,d[eGd\e5e-e?dMeGd]eDe.e@dMeId^e5e,d_e?e/d`da dbeIdce5e,dde/deda dfeHd^e5e,d_e?e/dgda dbeGdhe5e0eCe1didjda dkeGdleKe,dmeGdneKe,doeGdpeKe,dqeGdreKe,dseGdteKe,dueGdve5e<dwdxda dyeGdzeKe<d{eGd|eKe<d}eGd~eKe<deGdeKe,deGdeJe3eGdeKe,deGdeKe,deGdeKe<deIde5e,ddda dyeHdeKe,deGde5e7ddda deGde5e8dda dyeGdeJe9ddeGde5e:e?dMeGdeKe<deGdeKe<deGde5e<ddd.e=dd1dyeGde5e<ddd.e=dd1dyeGde5e,deCe2didda dkeGdeKe,deGde5e<ddda dyg)ZLdd ZMG dd deNZOe'PdZQe'PdZRe'PdZSe'PdZTG dd dejUZUdS )    )
namedtuple)copy)permutationschainN)StringIO)Image)imagessd_samplers
processing	sd_modelssd_vaesd_samplers_kdiffusionerrors)process_images	Processed StableDiffusionProcessingTxt2Img)optsstate)
ToolButtonu   📒AxisInfoaxisvaluesc                    s    fdd}|S )Nc                    s   t |  | d S N)setattrpxxsfield 8/var/www/html/stable-diffusion-webui/scripts/xyz_grid.pyfun   s    zapply_field.<locals>.funr    )r   r"   r    r   r!   apply_field   s    r#   c                 C   s\   |d | j vr0|d | jvr0td|d  d| j |d || _ | j|d || _d S )Nr   zPrompt S/R did not find z in prompt or negative prompt.)promptnegative_promptRuntimeErrorreplacer   r    r    r!   apply_prompt%   s    r(   c                 C   s   g }|D ]}| | j||f q|jdd d g }|D ]@\}}| j|}| | jd|  | j|t| d  | _q<d}t|D ]\}	}
||
7 }|||	 7 }q|| j | _d S )Nc                 S   s   | d S )Nr   r    )tr    r    r!   <lambda>4       zapply_order.<locals>.<lambda>keyr    )appendr$   findsortlen	enumerate)r   r   r   Ztoken_ordertokenZprompt_parts_nZ
prompt_tmpidxpartr    r    r!   apply_order-   s    r9   c                 C   s*   |D ] }|  tjvrtd| qd S )NzUnknown sampler: )lowerr	   samplers_mapr&   r   r   r   r    r    r!   confirm_samplersF   s    r=   c                 C   s2   t j|}|d u r"td| |j| jd< d S )NUnknown checkpoint: sd_model_checkpoint)modulesr   get_closet_checkpoint_matchr&   nameoverride_settings)r   r   r   infor    r    r!   apply_checkpointL   s    rE   c                 C   s,   |D ]"}t j|d u rtd| qd S )Nr>   r@   r   rA   r&   r<   r    r    r!   confirm_checkpointsS   s    rG   c                 C   s6   |D ],}|dv rqt j|d u rtd| qd S )N)Nr.   Nonenoner>   rF   r<   r    r    r!   confirm_checkpoints_or_noneY   s
    rJ   c                 C   s   |t jd< d S )NCLIP_stop_at_last_layers)r   datar   r    r    r!   apply_clip_skipb   s    rM   c                 C   s*   |   dkrdtjd< n
dtjd< d S )N0TZuse_scale_latent_for_hires_fixF)r:   stripr   rL   r   r    r    r!   apply_upscale_latent_spacef   s    rP   rB   c                    s~      dv rtjjS    dkr$d S  fddttjjdd dD }t|dkrjtd	  d
 tjjS tjj|d  S d S )N)auto	automaticrI   c                    s$   g | ]}    |  v r|qS r    )r:   rO   .0r   rQ   r    r!   
<listcomp>s   r+   zfind_vae.<locals>.<listcomp>c                 S   s   t | S r   r2   r   r    r    r!   r*   s   r+   zfind_vae.<locals>.<lambda>r,   r   zNo VAE found for z; using automatic)r:   r@   r   unspecifiedsortedvae_dictr2   print)rB   choicesr    rQ   r!   find_vaem   s    "r^   c                 C   s   t jjtjt|d d S )N)vae_file)r@   r   reload_vae_weightssharedsd_modelr^   r   r    r    r!   	apply_vae{   s    rc   )r   r   c                 C   s   | j |d d S )N,)stylesextendsplit)r   r   r5   r    r    r!   apply_styles   s    rh   c                 C   s   t || jd tjd< d S )N   uni_pc_order)minstepsr   rL   r   r    r    r!   apply_uni_pc_order   s    rm   c                 C   sB   |  }|dkrd}d| _n|dkr0d}d| _n|dv }|| _d S )N
codeformerT
CodeFormergfpganGFPGAN)trueyesy1)r:   face_restoration_modelrestore_faces)r   optr   	is_activer    r    r!   apply_face_restore   s    rz   F)booleanc                    s    fdd}|S )Nc                    s&    r|  dkrdnd}|| j< d S )Nrr   TF)r:   rC   r   r{   r   r    r!   r"      s    zapply_override.<locals>.funr    )r   r{   r"   r    r|   r!   apply_override   s    r}   reversec                    s    fdd}|S )Nc                      s    rddgS ddgS )NFalseTruer    r    r~   r    r!   choice   s    zboolean_choice.<locals>.choicer    )r   r   r    r~   r!   boolean_choice   s    r   c                 C   s&   t |tkrt|d}|j d| S )N   z: )typefloatroundlabelr   rx   r   r    r    r!   format_value_add_label   s    
r   c                 C   s   t |tkrt|d}|S )Nr   )r   r   r   r   r    r    r!   format_value   s    
r   c                 C   s
   d |S )N, )joinr   r    r    r!   format_value_join_list   s    r   c                 C   s   d S r   r    r   r    r    r!   
do_nothing   s    r   c                 C   s   dS )Nr.   r    r   r    r    r!   format_nothing   s    r   c                 C   s   t j|S r   )ospathbasenamer   r    r    r!   format_remove_path   s    r   c                 C   s   | S )zadummy function for specifying it in AxisOption's type when you want to get a list of permutationsr    rX   r    r    r!   str_permutations   s    r   c                 C   sF   t  ,}t||  |  W  d    S 1 s80    Y  d S r   )r   csvwriterwriterowgetvaluerO   )	data_listor    r    r!   list_to_csv_string   s    r   c              	   C   s    t ttjttt| S r   )	listmapstrrO   r   from_iterabler   readerr   )data_strr    r    r!   csv_string_to_list_strip   s    r   c                   @   s   e Zd ZedddfddZdS )
AxisOptionNg        c                 C   s.   || _ || _|| _|| _|| _|| _|| _d S r   )r   r   applyr   confirmcostr]   )selfr   r   r   r   r   r   r]   r    r    r!   __init__   s    zAxisOption.__init__)__name__
__module____qualname__r   r   r    r    r    r!   r      s   r   c                       s   e Zd Z fddZ  ZS )AxisOptionImg2Imgc                    s   t  j|i | d| _d S )NTsuperr   
is_img2imgr   argskwargs	__class__r    r!   r      s    zAxisOptionImg2Img.__init__r   r   r   r   __classcell__r    r    r   r!   r      s   r   c                       s   e Zd Z fddZ  ZS )AxisOptionTxt2Imgc                    s   t  j|i | d| _d S )NFr   r   r   r    r!   r      s    zAxisOptionTxt2Img.__init__r   r    r    r   r!   r      s   r   Nothingr   Seedseed	Var. seedsubseedzVar. strengthsubseed_strengthStepsrl   Hires stepshr_second_pass_stepsz	CFG Scale	cfg_scalezImage CFG Scaleimage_cfg_scalez
Prompt S/RzPrompt orderSamplersampler_namec                   C   s   dd t jD S )Nc                 S   s   g | ]}|j tjvr|j qS r    rB   r   hide_samplersrT   r    r    r!   rV      r+   <lambda>.<locals>.<listcomp>)r	   samplersr    r    r    r!   r*      r+   r*   )r   r   r]   zHires samplerhr_sampler_namec                   C   s   dd t jD S )Nc                 S   s   g | ]}|j tjvr|j qS r    r   rT   r    r    r!   rV      r+   r   r	   samplers_for_img2imgr    r    r    r!   r*      r+   )r   r]   c                   C   s   dd t jD S )Nc                 S   s   g | ]}|j tjvr|j qS r    r   rT   r    r    r!   rV      r+   r   r   r    r    r    r!   r*      r+   zCheckpoint nameg      ?c                   C   s   t tjtjdS )Nr,   rZ   r   checkpoints_listr   casefoldr    r    r    r!   r*      r+   )r   r   r   r]   zNegative Guidance minimum sigmas_min_uncondzSigma Churns_churnz	Sigma mins_tminz	Sigma maxs_tmaxzSigma noises_noisezSchedule typek_sched_typec                   C   s
   t tjS r   )r   r   k_diffusion_schedulerr    r    r    r!   r*      r+   r]   zSchedule min sigma	sigma_minzSchedule max sigma	sigma_maxzSchedule rhorhoEtaetaz	Clip skipZ	Denoisingdenoising_strengthzInitial noise multiplierinitial_noise_multiplierzExtra noiseimg2img_extra_noisezHires upscalerhr_upscalerc                   C   s   g t jdd t jD S )Nc                 S   s   g | ]
}|j qS r    rQ   rT   r    r    r!   rV     r+   r   )ra   latent_upscale_modessd_upscalersr    r    r    r!   r*     r+   zCond. Image Mask Weightinpainting_mask_weightVAEgffffff?c                   C   s   dgt tj S )NrH   )r   r   r[   r    r    r    r!   r*     r+   )r   r]   Stylesc                   C   s   t tjjS r   )r   ra   prompt_stylesre   r    r    r    r!   r*     r+   zUniPC Orderg      ?)r   zFace restorezToken merging ratiotoken_merging_ratiozToken merging ratio high-restoken_merging_ratio_hrz!Always discard next-to-last sigma!always_discard_next_to_last_sigmaTzSGM noise multipliersgm_noise_multiplierzRefiner checkpointrefiner_checkpointc                   C   s   dgt tjtjd S )NrH   r,   r   r    r    r    r!   r*     r+   zRefiner switch atrefiner_switch_atz
RNG sourcerandn_sourcec                   C   s   g dS )N)GPUCPUNVr    r    r    r    r!   r*     r+   c              
      s  dd |D }dd |D }dd |D }t t  t | d | j t_ fdd}|dkrtD ]~\}}|dkrtD ],\}}t|D ]\}}||||||| qqqvt|D ],\}}tD ]\}}||||||| qqqvn>|dkrtD ]\}}|dkrZtD ]0\}}t|D ]\}}||||||| q6q&n:t|D ]0\}}tD ]\}}||||||| qrqbqn|d	kr8t|D ]\}}|dkrtD ]0\}}tD ]\}}||||||| q֐qn:tD ]0\}}tD ]\}}||||||| qqqsPtd
 t| g S tjsntd t| g S t |}t	|D ]}|t  t  | }|t t   }tj
j|| t d}|rt|j| jd j| jd |||}j|| j|j|  j|j|  j|j|  q~jd j}tj
jd | dd}|rt||d |d |t gg}jd| jdjd  S )Nc                 S   s   g | ]}t |gqS r    r   GridAnnotationrT   r    r    r!   rV     r+   z!draw_xyz_grid.<locals>.<listcomp>c                 S   s   g | ]}t |gqS r    r   rU   rt   r    r    r!   rV     r+   c                 S   s   g | ]}t |gqS r    r   rU   zr    r    r!   rV     r+   c                    s  fdd}||||d  d t _ | |||||}d u rt|d g _d g _d g _d g _d_||||}|jr|jd j|< |jj|< |j	j|< |jd j|< nJd}	j
jf}
jd d urjd j}	jd j}
t|	|
j|< d S )Nc                    s$   | |t    |t   t   S r   rW   )ixiyiz)r   ysr    r!   index!  s    z2draw_xyz_grid.<locals>.process_cell.<locals>.indexri   z out of r   P)r   jobr   r   all_prompts	all_seeds	infotextsindex_of_first_imager$   r   widthheightmodesizer   new)r   rt   r   r   r   r   r   	processedr7   Z	cell_mode	cell_sizecellZ	list_sizeZprocessed_resultr   r   r    r!   process_cell  s,    z#draw_xyz_grid.<locals>.process_cellr   rt   r   zeUnexpected error: Processing could not begin, you may need to refresh the tab or restart the service.zNUnexpected error: draw_xyz_grid failed to return even a single processed image)rowsr   ri   )r2   n_iterr   	job_countr3   r\   r   anyr   range
image_griddraw_grid_annotationsr  insertr   r   r   r   )r   r   r   zsx_labelsy_labelsz_labelsr
  draw_legendinclude_lone_imagesinclude_sub_gridsfirst_axes_processedsecond_axes_processedmargin_size	hor_texts	ver_textsZtitle_textsr  r   r   r   rt   r   r   z_countistart_index	end_indexgridZsub_grid_sizez_gridr    r	  r!   draw_xyz_grid  st    #

 



,"r&  c                   @   s   e Zd Zdd Zdd ZdS )SharedSettingsStackHelperc                 C   s   t j| _t j| _t j| _d S r   )r   rK   r   vaerj   r   r    r    r!   	__enter__  s    z#SharedSettingsStackHelper.__enter__c                 C   s<   | j tjd< | jtjd< tj  tj  | j	tjd< d S )Nr   rj   rK   )
r(  r   rL   rj   r@   r   reload_model_weightsr   r`   rK   )r   exc_type	exc_valuetbr    r    r!   __exit__  s
    

z"SharedSettingsStackHelper.__exit__N)r   r   r   r*  r/  r    r    r    r!   r'    s   r'  z?\s*([+-]?\s*\d+)\s*-\s*([+-]?\s*\d+)(?:\s*\(([+-]\d+)\s*\))?\s*zZ\s*([+-]?\s*\d+(?:.\d*)?)\s*-\s*([+-]?\s*\d+(?:.\d*)?)(?:\s*\(([+-]\d+(?:.\d*)?)\s*\))?\s*z:\s*([+-]?\s*\d+)\s*-\s*([+-]?\s*\d+)(?:\s*\[(\d+)\s*])?\s*zU\s*([+-]?\s*\d+(?:.\d*)?)\s*-\s*([+-]?\s*\d+(?:.\d*)?)(?:\s*\[(\d+(?:.\d*)?)\s*])?\s*c                   @   s$   e Zd Zdd Zdd Zdd ZdS )Scriptc                 C   s   dS )Nz
X/Y/Z plotr    r)  r    r    r!   title  s    zScript.titlec                    s  fddt D _t  tjdd t t tjddd jD jd jdd	d
}tjdddd}tjddddd}t	t
ddd}W d    n1 s0    Y  t t tjddd jD jd jddd
}tjdddd}tjddddd}t	t
ddd}	W d    n1 s@0    Y  t t tjddd jD jd jddd
}
tjdddd}tjddddd}t	t
ddd}W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s0    Y  tjd d!d"B t < tjd#dd$d%}tjd&dd'd%}W d    n1 sv0    Y  t < tjd(dd)d%}tjd*dd+d%}W d    n1 s0    Y  t , tjd,dd-dd.d/d0}W d    n1 s0    Y  t & tjd1dd2d%}W d    n1 sR0    Y  W d    n1 sr0    Y  tjd d3d": tjd4d5d6}tjd7d8d6}tjd9d:d6}W d    n1 s0    Y  fd;d<}||||||g}|j|||d= ||||
||g}|j|||d= ||||
||g}|j|||d= fd>d?}|j|||g||gd@ |	j|||g||gd@ |j||
|g||gd@ fdAdB|j||||g|||gd@ |j||||g|	||gd@ |
j|
|||g|||gd@ fdCdD}|j|||||||||
||g
||||	|||||g	d@ dEdF  |dGf|dHf| fdIdJf|dKf|dLf| fdMdJf|
dNf|dOf| fdPdJff	_|||||||
||||||||gS )QNc                    s&   g | ]}t |tks|j kr|qS r    )r   r   r   rT   )r   r    r!   rV     r+   zScript.ui.<locals>.<listcomp>   )scalezX typec                 S   s   g | ]
}|j qS r    r   rT   r    r    r!   rV     r+   ri   r   x_type)r   r]   valuer   elem_idzX valuesx_values)r   linesr7  FT)r   visiblemultiselectinteractiveZxyz_grid_fill_x_tool_button)r6  r7  r:  zY typec                 S   s   g | ]
}|j qS r    r4  rT   r    r    r!   rV     r+   r   y_typezY valuesy_valuesZxyz_grid_fill_y_tool_buttonzZ typec                 S   s   g | ]
}|j qS r    r4  rT   r    r    r!   rV     r+   z_typezZ valuesz_valuesZxyz_grid_fill_z_tool_buttoncompactaxis_options)variantr7  zDraw legendr  )r   r6  r7  zKeep -1 for seedsno_fixed_seedszInclude Sub Imagesr  zInclude Sub Gridsr  zGrid margins (px)i     r  )r   minimummaximumr6  stepr7  z$Use text inputs instead of dropdownscsv_mode	swap_axeszSwap X/Y axesZxy_grid_swap_axes_button)r6  r7  zSwap Y/Z axesZyz_grid_swap_axes_buttonzSwap X/Z axesZxz_grid_swap_axes_buttonc                    s     j | j|| j |  j||fS r   )current_axis_optionsr   )Z
axis1_typeZaxis1_valuesZaxis1_values_dropdownZ
axis2_typeZaxis2_valuesZaxis2_values_dropdownr)  r    r!   rJ    s    zScript.ui.<locals>.swap_axes)inputsoutputsc                    sN    j |  }|jr:|r(t| t fS t | fS nt t fS d S r   )rK  r]   r   grupdate)	axis_typerI  r   r)  r    r!   fill  s    
zScript.ui.<locals>.fill)fnrL  rM  c                    s   j |  j  d u}|rh   |rF|rhttt fdd|}g }n"|rhtt fddt|}d}tjj|dtj	j| p||dtj|r nd |o| |dfS )Nc                    s   |  v S r   r    rX   r   r    r!   r*     r+   z0Script.ui.<locals>.select_axis.<locals>.<lambda>c                    s   |  v S r   r    rX   r   r    r!   r*     r+   r.   )r:  )r:  r6  )r]   r:  r6  )
rK  r]   r   r   filterr   rN  ButtonrO  Textbox)rP  axis_valuesZaxis_values_dropdownrI  Zhas_choicesr)  r   r!   select_axis  s     zScript.ui.<locals>.select_axisc
              	      sR    |||| \}
}} |||| \}}} |||	| \}}}|
||||||||f	S r   r    )rI  r5  r8  x_values_dropdownr=  r>  y_values_dropdownr?  r@  z_values_dropdownZ_fill_x_buttonZ	_x_valuesZ_x_values_dropdownZ_fill_y_buttonZ	_y_valuesZ_y_values_dropdownZ_fill_z_buttonZ	_z_valuesZ_z_values_dropdown)rW  r    r!   change_choice_mode  s    z%Script.ui.<locals>.change_choice_modec                 S   s*   |  d}| |d}t|}tj|dS )Nz Valuesr.   )r6  )getr   rN  rO  )r   paramsZval_keyvalsvalslistr    r    r!   get_dropdown_update_from_params  s    
z2Script.ui.<locals>.get_dropdown_update_from_paramsX TypeX Valuesc                    s
    d| S )NXr    r]  r`  r    r!   r*     r+   zScript.ui.<locals>.<lambda>Y TypeY Valuesc                    s
    d| S )NYr    rd  re  r    r!   r*     r+   Z TypeZ Valuesc                    s
    d| S )NZr    rd  re  r    r!   r*   	  r+   )rB  rK  rN  RowColumnDropdownr   r7  rU  r   fill_values_symbolCheckboxSliderrT  clickchangeinfotext_fields)r   r   r5  r8  rX  Zfill_x_buttonr=  r>  rY  Zfill_y_buttonr?  r@  rZ  Zfill_z_buttonr  rD  r  r  r  rI  Zswap_xy_axes_buttonZswap_yz_axes_buttonZswap_xz_axes_buttonrJ  Zxy_swap_argsZyz_swap_argsZxz_swap_argsrQ  r[  r    )r`  r   rW  r   r!   ui  s|    
.,
..
.n
6
6
<
V.
6z	Script.uic           !         s  st j tjsd_ fdd}j| jd urJ sJt|||j| jd urv svt|	|	|
j| jd ur st|
||
d t	_
ttt
 t j j d }|tjk sJ d| dtj ddd	 }s0||

|jd
krVtt
 t }njjd
kr|t
t t }nDjd
krtt t
 }njt t
 t }ttrjrjdkr|tt
 t 7 }njdkr(|t
t t 7 }n^jdkrR|tt t
 7 }n4jr~|jt t
 t 7 }n|d9 }|j9 }jj }|dkrd| dnd}tdkrdnd}tdtt
 t |  dt dt dt
 d| | d| d tj| tt_t
t_tt_ d}d}j!j!krj!j!krd}j!j!krd}nd}nrj!j!krΈj!j!krd}j!j!krd}nd}n8j!j!krj!j!krd}j!j!krd}nd}d gdt  	
fdd}t" d t#
fddD fdd
D fddD |||||||d }W d    n1 s0    Y  |j$s|S t}d d|  |j%d d| < |s|j$d |d  |_$tj&r|dkr|d nd}t'|D ]T}|d!kr@|d n|}t$j(|j$| j)d"|j%| tj*|j+| |j,| d#|d$	 q*|st'|D ]&} |j$d= |j+d= |j,d= |j%d= q|S )%Nri   c                    s|   j dkrdgS  jd ur$s$|}nt|} jtkr4g }|D ]}t|}t|}|d urt|d}t|dd }	|dd urt|dnd}
|t	t
||	|
7 }q@|d ur t|d}t|d}	|dd urt|dnd}|dd tj||	|d D 7 }q@|| q@|}n jtkr:g }|D ]}t|}t|}|d urt|d}t|d}	|dd urt|dnd}
|t||	|
 |
 7 }nl|d ur&t|d}t|d}	|dd urt|dnd}|tj||	|d 7 }n
|| qH|}n jtkrRt	t|} fd	d|D } jrx | |S )
Nr   r   ri   rE     c                 S   s   g | ]}t |qS r    )intrT   r    r    r!   rV   /  r+   z4Script.run.<locals>.process_axis.<locals>.<listcomp>)startstopnumc                    s   g | ]}  |qS r    )r   rT   rx   r    r!   rV   M  r+   )r   r]   r   r   rw  re_range	fullmatchre_range_countgroupr   r  nplinspacetolistr/   r   re_range_floatre_range_count_floataranger   r   r   )rx   r^  Zvals_dropdownr_  Zvalslist_extvalmmcrx  endrH  rz  )rI  r   r{  r!   process_axis  sZ    


 
 $


"
"z Script.run.<locals>.process_axisi@B z*Error: Resulting grid would be too large (z" MPixels) (max configured size is z	 MPixels)c                 S   s    | j dv rdd |D S |S d S )Nr   r   c                 S   s6   g | ].}|d u s |dks |dkr.t tdn|qS )Nr.   l    )rw  random	randrange)rU   r  r    r    r!   rV   k  r+   z6Script.run.<locals>.fix_axis_seeds.<locals>.<listcomp>r4  )Zaxis_optZ	axis_listr    r    r!   fix_axis_seedsi  s    
z"Script.run.<locals>.fix_axis_seedsr   r   rE  z; z images per cellr.   szX/Y/Z plot will create z images on  r   z gridz. (Total steps to process: )r   rt   c           
   
      sF  t jjrtg jdS t}|jd d  |_||  ||	 
|| zt|}W n@ t	y } z(t
|d tg jd}W Y d }~n
d }~0 0 d| }	 |	 d u r|dkr|dkrt|j|_ |jd< jdkr:j|jd< |jd< jd	v r:s:d
dd D |jd< jdkrj|jd< |jd< jd	v rsd
dd 	D |jd< t||j|j|j |	<  d d u rB|dkrB|dkrB|dkrBt|j|_
jdkr(
j|jd< |jd< 
jd	v r(s(d
dd D |jd< t||j|j|j d< |S )Nr.   zgenerating image for xyz plotri   r   r0  r   ra  rb  r  r   c                 S   s   g | ]}t |qS r    r   rT   r    r    r!   rV     r+   z,Script.run.<locals>.cell.<locals>.<listcomp>zFixed X Valuesrf  rg  c                 S   s   g | ]}t |qS r    r  r   r    r    r!   rV     r+   zFixed Y Valuesri  rj  c                 S   s   g | ]}t |qS r    r  r   r    r    r!   rV     r+   zFixed Z Values)ra   r   interruptedr   r   r   re   r   r   	Exceptionr   displayextra_generation_paramsr1  r   r   r
   create_infotextr   r   all_subseeds)
r   rt   r   r   r   r   pcreseZsubgrid_index)grid_infotextrD  r   r   x_optr8  r   y_optr>  r   z_optr@  r  r    r!   r
    sH    &"

,
zScript.run.<locals>.cellc                    s   g | ]}  |qS r    r   rT   )r   r  r    r!   rV     r+   zScript.run.<locals>.<listcomp>c                    s   g | ]}  |qS r    r   r   )r   r  r    r!   rV     r+   c                    s   g | ]}  |qS r    r   r   )r   r  r    r!   rV     r+   )r   r   r  r  r  r  r
  r  r  r  r  r  r  r   Zxyz_gridT)rD   	extensionr$   r   r$  r   )-r@   r
   fix_seedr   return_grid
batch_sizerK  r]   r   r   MAX_IMAGE_PIXELSr   r2   r  r  img_max_size_mpr   sumrl   
isinstancer   	enable_hrr   r  r\   ra   
total_tqdmupdateTotalr   r   Z
xyz_plot_xZ
xyz_plot_yZ
xyz_plot_zr   r'  r&  r   r   	grid_saver  
save_imageoutpath_gridsgrid_formatr   r   )!r   r   r5  r8  rX  r=  r>  rY  r?  r@  rZ  r  r  r  rD  r  rI  r  Zgrid_mpr  total_stepsZimage_cell_countZcell_console_textZplural_sr  r  r
  r  r   Z
grid_countgZadj_gr5   r    )rI  r  rD  r   r   r  r8  r   r  r>  r   r  r@  r  r!   run  s    @


,$


$
V$3&<z
Script.runN)r   r   r   r1  ru  r  r    r    r    r!   r0    s   rr0  )F)F)Vcollectionsr   r   	itertoolsr   r   r  r   os.pathr   ior   PILr   numpyr  modules.scriptsscriptsgradiorN  r@   r   r	   r
   r   r   r   r   Zmodules.processingr   r   r   Zmodules.sharedr   r   ra   modules.sd_samplersmodules.sd_modelsmodules.sd_vaereZmodules.ui_componentsr   ro  r   r#   r(   r9   r=   rE   rG   rJ   rM   rP   r   r^   rc   rh   rm   rz   boolr}   r   r   r   r   r   r   r   r   r   r   r   r   r   rw  r   rB  r&  objectr'  compiler|  r  r~  r  r0  r    r    r    r!   <module>   s   $	
-o



