ó
    USh3F  ã                   óÄ  • S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
JrJrJrJr  S SKrS SKrS SKJr  S SKrS SKrS SKJr  \" \S5      (       a  \R2                  R4                  O\R4                  r\	R6                  " S\	R8                  5      rSrS	 rS
 r S0S jr!S r"S r#S r$S r%S1S jr&S r'S2S jr(S\4S jr)S r*S\+4S jr,S r-S r.S r/S r0S r1 " S S\5      r2S\+S\34S  jr4S!\\+   S\+S-  4S" jr5S# r6S3S$\7S\74S% jjr8   S4S&\+S$\\\\94      S'\:S\;\\\\94      \+4   4S( jjr<S!\7S)\S-  4S* jr=S+ r>S\+4S, jr?S-\R€                  S.\7S\+4S/ jrAg)5é    )ÚPathN)ÚListÚTupleÚAnyStrÚ
NamedTuple)ÚImage)ÚPerformanceÚ
Resamplingz/(<lora:([^:]+):([+-]?(?:\d+(?:\.\d*)?|\.\d+))>)é
   c                 ó  • [        U5      nUS:”  a7  [        R                  " U [        R                  " S[        R
                  S9US9$ US:  a8  [        R                  " U [        R                  " S[        R
                  S9U* S9$ U $ )Nr   )é   r   )ÚshapeÚdtype)ÚkernelÚ
iterations)ÚintÚcv2ÚdilateÚnpÚonesÚuint8Úerode)ÚxÚks     Ú0/home/gothic/public_html/Fooocus/modules/util.pyÚerode_or_dilater      sg   € ÜˆA‹€AØˆ1ƒuÜ�zŠz˜!¤B§G¢G°&ÄÇÁÑ$IÐVWÑXÐXØˆ1ƒuÜ�yŠy˜¤2§7¢7°¼r¿x¹xÑ#HÐVWÐUWÑXÐXØ€Hó    c                 óª   • [         R                  " U 5      n U R                  [        U5      [        U5      4[        S9n [
        R                  " U 5      $ ©N)Úresample)r   Ú	fromarrayÚresizer   ÚLANCZOSr   Úarray)ÚimÚwidthÚheights      r   Úresample_imager(   (   s=   € Ü	�Š˜Ó	€BØ	�‰”C˜“J¤ F£Ð,´wˆÐ	?€BÜ�8Š8�B‹<Ðr   c           	      óþ  • [         R                  " U 5      n S nUS:X  a  U" XU5      nGO>US:X  a©  X-  nU R                  U R                  -  nXg:”  a  UOU R                  U-  U R                  -  nXg::  a  UOU R                  U-  U R                  -  n	U" XU	5      n
[         R                  " SX45      nUR                  X¡S-  US-  -
  US-  U	S-  -
  4S9  GO�X-  nU R                  U R                  -  nXg:  a  UOU R                  U-  U R                  -  nXg:¼  a  UOU R                  U-  U R                  -  n	U" XU	5      n
[         R                  " SX45      nUR                  X¡S-  US-  -
  US-  U	S-  -
  4S9  Xg:  ao  US-  U	S-  -
  nUS:”  a]  UR                  U
R                  X4SSUS4S9SS9  UR                  U
R                  X4SU
R                  XR                  4S9SX¹-   4S9  OtXg:”  ao  US-  US-  -
  nUS:”  a^  UR                  U
R                  XÂ4SSSU4S9SS9  UR                  U
R                  XÂ4U
R                  SU
R                  U4S9XÈ-   S4S9  [        R                  " U5      $ )a£  
Resizes an image with the specified resize_mode, width, and height.

Args:
    resize_mode: The mode to use when resizing the image.
        0: Resize the image to the specified width and height.
        1: Resize the image to fill the specified width and height, maintaining the aspect ratio, and then center the image within the dimensions, cropping the excess.
        2: Resize the image to fit within the specified width and height, maintaining the aspect ratio, and then center the image within the dimensions, filling empty with data from image.
    im: The image to resize.
    width: The width to resize the image to.
    height: The height to resize the image to.
c                 ó,   • U R                  X4[        S9$ r   )r"   r#   )r%   ÚwÚhs      r   r"   Úresize_image.<locals>.resize>   s   € Ø�y‰y˜!˜¬'ˆyÐ2Ð2r   r   é   ÚRGBé   )Úbox)r   r   )	r   r!   r&   r'   ÚnewÚpaster"   r   r$   )r%   r&   r'   Úresize_moder"   ÚresÚratioÚ	src_ratioÚsrc_wÚsrc_hÚresizedÚfill_heightÚ
fill_widths                r   Úresize_imager=   .   sµ  € ô 
�Š˜Ó	€Bò3ð �aÓÙ�R Ó'Šà	˜Ó	Ø‘ˆØ—H‘H˜rŸy™yÑ(ˆ	àÓ*‘°·±¸6Ñ0AÀRÇYÁYÑ0NˆØÓ,‘°"·)±)¸eÑ2CÀrÇxÁxÑ2Oˆá˜ EÓ*ˆÜ�iŠi˜ ˜Ó/ˆØ�	‰	�'¨¡
¨U°a©ZÑ 7¸À1¹ÀuÐPQÁzÑ9QÐRˆ	ÓSð ‘ˆØ—H‘H˜rŸy™yÑ(ˆ	àÓ*‘°·±¸6Ñ0AÀRÇYÁYÑ0NˆØÓ,‘°"·)±)¸eÑ2CÀrÇxÁxÑ2Oˆá˜ EÓ*ˆÜ�iŠi˜ ˜Ó/ˆØ�	‰	�'¨¡
¨U°a©ZÑ 7¸À1¹ÀuÐPQÁzÑ9QÐRˆ	ÑSàÓØ  A™+¨°©
Ñ2ˆKØ˜Q‹Ø—	‘	˜'Ÿ.™.¨%Ð)=ÀAÀqÈ%ÐQRÐCS˜.ÐTÐZ`�	ÑaØ—	‘	˜'Ÿ.™.¨%Ð)=ÀAÀwÇ~Á~ÐW\×^lÑ^lÐCm˜.ÐnÐuvð  yDñ  yLð  uM�	ñ  NøØÓØ !™ e¨q¡jÑ0ˆJØ˜A‹~Ø—	‘	˜'Ÿ.™.¨*Ð)=ÀAÀqÈ!ÈVÐCT˜.ÐUÐ[a�	ÑbØ—	‘	˜'Ÿ.™.¨*Ð)=ÀGÇMÁMÐSTÐV]×VcÑVcÐekÐCl˜.ÐmÐt~ñ  uGð  IJð  tK�	ñ  Lä�8Š8�C‹=Ðr   c                 óD   • [         R                  " X-  S-  S-  5      S-  $ )Ng      à?ç      P@)ÚmathÚceil)r,   r+   s     r   Úget_shape_ceilrB   h   s!   € Ü�9Š9�q‘u ‘n¨Ñ,Ó-°Ñ4Ð4r   c                 ó:   • U R                   S S u  p[        X5      $ )Nr0   )r   rB   )r%   ÚHÚWs      r   Úget_image_shape_ceilrF   l   s   € Ø�8‰8�B�Qˆ<�D€AÜ˜!ÓÐr   c                 óf  • [        U5      nU R                  u  p#nX#pe[        S5       Hq  n[        XV5      n[	        Xq-
  5      S:  a    OTX-  n[        [        [        U5      U-  S-  5      S-  5      n[        [        [        U5      U-  S-  5      S-  5      nMs     XR:X  a  Xc:X  a  U $ [        XUS9$ )Né   gš™™™™™¹?r?   é@   )r&   r'   )Úfloatr   ÚrangerB   Úabsr   Úroundr(   )	r%   Ú
shape_ceilÚH_originÚW_originÚ_rD   rE   Úcurrent_shape_ceilr   s	            r   Úset_image_shape_ceilrS   q   s³   € Ü�zÓ"€JàŸH™HÑ€H˜Ø€qä�3ŽZˆÜ+¨AÓ1ÐÜÐ!Ñ.Ó/°#Ó5ÙØÑ+ˆÜ””e˜A“h ‘l TÑ)Ó*¨RÑ/Ó0ˆÜ””e˜A“h ‘l TÑ)Ó*¨RÑ/Ó0Šñ ð 	ƒ}˜›Øˆ	ä˜"¨aÑ0Ð0r   c                 ój  • U R                   [        R                  :X  d   eU R                  S:X  a  U S S 2S S 2S 4   n U R                  S:X  d   eU R                  u  pnUS:X  d  US:X  d  US:X  d   eUS:X  a  U $ US:X  a  [        R
                  " X U /SS9$ US:X  a—  U S S 2S S 2SS24   R                  [        R                  5      nU S S 2S S 2SS24   R                  [        R                  5      S-  nXE-  SSU-
  -  -   nUR                  SS	5      R                  [        R                  5      nU$ g )
Nr0   r   r.   é   )Úaxisr   g     ào@g      ð?éÿ   )	r   r   r   Úndimr   ÚconcatenateÚastypeÚfloat32Úclip)r   rD   rE   ÚCÚcolorÚalphaÚys          r   ÚHWC3ra   …   s  € Ø�7‰7”b—h‘hÓÐÐØ‡v�v�ƒ{ØŠa’�Dˆj‰MˆØ�6‰6�Q‹;Ðˆ;Ø�g‰g�G€Aˆ!Ø�‹6�Q˜!“V˜q A›vÐ%Ð%ØˆAƒvØˆØˆAƒvÜ�~Š~˜q Q˜i¨aÑ0Ð0ØˆAƒvØ’!’Q˜˜!˜�)‘×#Ñ#¤B§J¡JÓ/ˆØ’!’Q˜˜!˜�)‘×#Ñ#¤B§J¡JÓ/°%Ñ7ˆØ‰M˜E S¨5¡[Ñ1Ñ1ˆØ�F‰F�1�c‹N×!Ñ!¤"§(¡(Ó+ˆØˆð r   c                 ól   • U  Vs/ s H  o"S:w  d  M
  UPM     n n[        U 5      S:X  a  Ub  U/$ U $ s  snf )NÚ r   )Úlen)ÚitemsÚdefaultr   s      r   Úremove_empty_strrg   ˜   s<   € ÙÓ)š�1 b¡�Q™€EÐ)Ü
ˆ5ƒz�Qƒ˜7Ñ.ØˆyÐØ€Lùò *s   …	1’1c                  óÎ   • U  Vs/ s H  n[        U5      S:w  d  M  [        U5      PM!     nn[        U5      S:X  a  g[        U5      S:X  a  US   $ SR                  U5      $ s  snf )Nrc   r   r.   ú, )Ústrrd   Újoin)ÚargsÚkwargsr   Úpromptss       r   Újoin_promptsro   Ÿ   s_   € Ù#Ó4št˜!¤s¨1£v°¡|‹vŒs�1Žv™t€GÐ4Ü
ˆ7ƒ|�qÓØÜ
ˆ7ƒ|�qÓØ�q‰zÐØ�9‰9�WÓÐùò 5s
   …A"œA"c                 óH  • [         R                   R                  5       nUR                  S5      nUR                  S5      n[        R                  " SS5      nU SU SU 3n[
        R                  R                  XU5      nU[
        R                  R                  U5      U4$ )Nz%Y-%m-%dz%Y-%m-%d_%H-%M-%Siè  i'  rQ   Ú.)	ÚdatetimeÚnowÚstrftimeÚrandomÚrandintÚosÚpathrk   Úabspath)ÚfolderÚ	extensionÚcurrent_timeÚdate_stringÚtime_stringÚrandom_numberÚfilenameÚresults           r   Úgenerate_temp_filenamer‚   ¨   s‹   € Ü×$Ñ$×(Ñ(Ó*€LØ×'Ñ'¨
Ó3€KØ×'Ñ'Ð(;Ó<€KÜ—N’N 4¨Ó.€MØ�˜a ˜¨a°	¨{Ð;€HÜ�W‰W�\‰\˜&¨xÓ8€FØœŸ™Ÿ™¨Ó/°Ð9Ð9r   Fc                 óž   • U(       a!  [        U S5       n[        U5      nS S S 5        O[        U 5      nUb  WS U $ W$ ! , (       d  f       N= f)NÚrb)ÚopenÚaddnet_hash_safetensorsÚcalculate_sha256)r€   Úuse_addnet_hashÚlengthÚfileÚsha256_values        r   Úsha256rŒ   ²   sO   € ÞÜ�(˜DÔ! TÜ2°4Ó8ˆL÷ "Ð!ô (¨Ó1ˆà$*Ñ$6ˆ<˜˜Ð ÐH¸LÐH÷ "Õ!ús	   ”>¾
Ac                 óB  ^ ^• [         R                  " 5       nSmT R                  S5        T R                  S5      n[        R                  US5      nUS-   nT R                  U5        [        U U4S jS5       H  nUR                  U5        M     UR                  5       $ )zikohya-ss hash for safetensors from https://github.com/kohya-ss/sd-scripts/blob/main/library/train_util.pyé   r   é   Úlittlec                  ó&   >• T R                  T5      $ ©N©Úread)ÚbÚblksizes   €€r   Ú<lambda>Ú)addnet_hash_safetensors.<locals>.<lambda>Ç   s   ø€ ˜aŸf™f Wœor   r   )	ÚhashlibrŒ   Úseekr”   r   Ú
from_bytesÚiterÚupdateÚ	hexdigest)r•   Úhash_sha256ÚheaderÚnÚoffsetÚchunkr–   s   `     @r   r†   r†   ¼   s�   ù€ ä—.’.Ó"€KØ€Gà‡F�Fˆ1„IØ�V‰V�A‹Y€FÜ�‰�v˜xÓ(€Aà�‰U€FØ‡F�Fˆ6„NÜÕ-¨sÖ3ˆØ×Ñ˜5Ö!ñ 4ð × Ñ Ó"Ð"r   Úreturnc                 ó  ^^• [         R                  " 5       nSm[        U S5       m[        UU4S jS5       H  nUR	                  U5        M     S S S 5        UR                  5       $ ! , (       d  f       UR                  5       $ = f)NrŽ   r„   c                  ó&   >• TR                  T 5      $ r’   r“   )r–   Úfs   €€r   r—   Ú"calculate_sha256.<locals>.<lambda>Ò   s   ø€  !§&¡&¨¤/r   r   )r™   rŒ   r…   rœ   r�   rž   )r€   rŸ   r£   r–   r§   s      @@r   r‡   r‡   Í   sp   ù€ Ü—.’.Ó"€KØ€Gä	ˆh˜Ô	 ÜÕ1°3Ö7ˆEØ×Ñ˜uÖ%ñ 8÷ 
ð × Ñ Ó"Ð"÷	 
Ô	ð × Ñ Ó"Ð"ús   ¦*A(Á(
Bc                 óŠ   • S[        U 5      ;  a   S[        U 5      ;  a  S[        U 5      ;  a  U $ [        R                  " U SS9$ )NÚ,Ú
Ú:F)Úensure_ascii)rj   ÚjsonÚdumps©Útexts    r   Úquoter²   Ø   s:   € Ø
”#�d“)Ó ¬C°«IÓ 5¸#ÄSÈÃYÓ:NØˆä�:Š:�d¨Ñ/Ð/r   c                 óš   • [        U 5      S:X  d  U S   S:w  d	  U S   S:w  a  U $  [        R                  " U 5      $ ! [         a    U s $ f = f)Nr   Ú"éÿÿÿÿ)rd   r®   ÚloadsÚ	Exceptionr°   s    r   Úunquoter¸   ß   sN   € Ü
ˆ4ƒy�Aƒ~˜˜a™ C›¨4°©8°s«?ØˆðÜ�zŠz˜$ÓÐøÜó ØŠðús   ¥; »A
Á	A
c                 ó‚  • UnU nSU;   aª   UR                  SS5      u  pEUR                  U5      nUR                  U5      nSUs=::  a  U:  ae  O  O²X'[	        U5      -   U n	UR                  XI-   U-   SS	5      nUR                  S
5      (       a  USS nUR                  S
5      (       a  USS nSX4$ OOUR                  U5      (       a9  US[	        U5      [	        U5      -
   nUR                  S
5      (       a  USS nSX4$ SUS4$ ! [         a+  n[        SU  35        [        SU 35        SUS4s SnA$ SnAff = f)aN  
Checks the prompt to see if the style text is wrapped around it. If so,
returns True plus the prompt text without the style text. Otherwise, returns
False with the original prompt.

Note that the "cleaned" version of the style text is only used for matching
purposes here. It isn't returned; the original style text is not modified.
z{prompt}r0   z(Unable to compare style text to prompt:
zError: Frc   Nr   r.   ri   éþÿÿÿT)ÚsplitÚ
ValueErrorÚprintÚfindrd   ÚreplaceÚ
startswithÚendswith)
Ú
style_textÚpromptÚstripped_promptÚstripped_style_textÚleftÚrightÚeÚleft_posÚ	right_posÚreal_prompts
             r   Úunwrap_style_text_from_promptrÌ   é   sw  € ð €OØ$ÐØÐ(Ó(ð	%Ø-×3Ñ3°JÀÓB‰KˆDð #×'Ñ'¨Ó-ˆØ#×(Ñ(¨Ó/ˆ	Ø�Õ$˜9Ö$Ø)´S¸³YÑ*>¸yÐIˆKØ$×,Ñ,¨TÑ-?À%Ñ-GÈÈQÓOˆFØ× Ñ  ×&Ñ&Ø  ˜�Ø�‰˜t×$Ñ$Ø  ˜�Ø˜Ð,Ð,ð %ð ×#Ñ#Ð$7×8Ñ8Ø$Ð%V¤s¨?Ó';¼cÐBUÓ>VÑ'VÐWˆFØ�‰˜t×$Ñ$Ø  ˜�Ø˜Ð'Ð'à�&˜"ÐÐøô5 ó 	%ô Ð=¸j¸\ÐJÔKÜ�G˜A˜3�-Ô Ø˜& "Ð$Õ$ûð	%ús   ŒD	 Ä	
D>Ä D9Ä3D>Ä9D>c                 óì   • U R                   (       d  U R                  (       d  SX4$ [        U R                   U5      u  p4nU(       d  SXS4$ [        U R                  U5      u  pgnU(       d  SXS4$ SXGU4$ )zí
Takes a style and compares it to the prompt and negative prompt. If the style
matches, returns True plus the prompt and negative prompt with the style text
removed. Otherwise, returns False with the original prompt and negative prompt.
Frc   T)rÃ   Únegative_promptrÌ   )	ÚstylerÃ   rÎ   Úmatch_positiveÚextracted_positiverË   Úmatch_negativeÚextracted_negativerQ   s	            r   Úextract_original_promptsrÔ     s‚   € ð �<�< × 5× 5Ø�fÐ-Ð-ä6SØ�‰�fó7Ñ3€N¨ö Ø�f¨rÐ1Ð1ä,IØ×Ñ˜ó-Ñ)€N¨ö Ø�f¨rÐ1Ð1àÐ#¸ÐDÐDr   c           	      ó„  • / n/ n[         R                  R                  R                  5        H!  u  nu  pVUR	                  [        XEUS95        M#     Sn S nU H4  n	[        X�U5      u  p«pÍU
(       d  M  U	nUn UnUS:X  a  US:w  a  XÐ:w  a  Un  O   U(       d  O.UR                  U5        UR	                  UR                  5        Mr  U S:w  aÚ  US:w  a*  UR	                  [         R                  R                  5        OªU R                  S5      S   n[        [        U 5      5       Vs/ s H  oðR                  Xï5      (       d  M  UPM     nn[        U5      S:”  aL  U S US    nUR	                  [         R                  R                  5        UR                  S5      (       a  US S n[        [!        U5      5      Xq4$ s  snf )N)ÚnamerÃ   rÎ   rc   ri   r   r.   rµ   rº   )ÚmodulesÚsdxl_stylesÚstylesre   ÚappendÚPromptStylerÔ   ÚremoverÖ   Úfooocus_expansionr»   rK   rd   rÀ   rÁ   ÚlistÚreversed)rÃ   rÎ   Ú	extractedÚapplicable_stylesÚ
style_nameÚstyle_promptÚstyle_negative_promptrË   Úfound_stylerÏ   Úis_matchÚ
new_promptÚnew_neg_promptÚnew_real_promptÚ
first_wordÚiÚfirst_word_positionss                    r   Úextract_styles_from_promptrí   .  s¹  € Ø€IØÐä=D×=PÑ=P×=WÑ=W×=]Ñ=]Ö=_Ñ9ˆ
Ñ9�\Ø× Ñ ¤°*ÐcxÑ!yÖzñ >`ð €Kà
Øˆã&ˆEÜD\Ø˜óEÑAˆH .÷ ˆxØ#�Ø#�Ø"0�Ø "Ó$¨¸BÓ)>À?ÓC\Ø"1�KÙñ 'ö Øà× Ñ  Ô-Ø×Ñ˜×)Ñ)Ô*ñ' ð, �ƒ|Ø˜"ÓØ×ÑœW×0Ñ0×BÑBÕCð  Ÿ™ dÓ+¨AÑ.ˆJÜ/4´S¸³[Ô/AÓ#fÒ/A¨!×EVÑEVÐWa×Ee§AÑ/AÐ Ð#fÜÐ'Ó(¨1Ó,Ø$Ð%>Ð&:¸2Ñ&>Ð?�Ø× Ñ ¤×!4Ñ!4×!FÑ!FÔGØ×'Ñ'¨×-Ñ-Ø"-¨c¨rÐ"2�Kä”˜Ó#Ó$ kÐBÐBùò $gs   Ä'F=ÅF=c                   ó4   • \ rS rSr% \\S'   \\S'   \\S'   Srg)rÛ   i]  rÖ   rÃ   rÎ   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__rj   Ú__annotations__Ú__static_attributes__rï   r   r   rÛ   rÛ   ]  s   ‡ Ø
ƒIØƒKØÖr   rÛ   Údatac                 óŽ   •  [         R                  " U 5      n[        U[        5      (       d   e g! [        [
        4 a     gf = f)NFT)r®   r¶   Ú
isinstanceÚdictr¼   ÚAssertionError)rö   Úloaded_jsons     r   Úis_jsonrü   c  sF   € ðÜ—j’j Ó&ˆÜ˜+¤t×,Ñ,Ð,Ñ,ð øô œÐ'ó Ùðús   ‚-1 ±AÁAÚ	filenamesc                 óR   • U H!  n[        U5      nXR                  :X  d  M  Us  $    g r’   )r   Ústem)Ú	lora_namerý   r€   rx   s       r   Úget_filname_by_stemr  l  s)   € ÛˆÜ�H‹~ˆØŸ	™	Õ!ØŠOñ ð r   c           	      ó   • [        U[        5      (       d  U/nU H„  n[        R                  R	                  [        R                  R                  [        R                  R                  X 5      5      5      n[        R                  R                  U5      (       d  M‚  Us  $    [        R                  R	                  [        R                  R                  [        R                  R                  US   U 5      5      5      $ )Nr   )rø   rÞ   rw   rx   ry   Úrealpathrk   Úisfile)rÖ   Úfoldersrz   r€   s       r   Úget_file_from_folder_listr  t  s�   € Ü�gœt×$Ñ$Ø�)ˆãˆÜ—7‘7—?‘?¤2§7¡7×#3Ñ#3´B·G±G·L±LÀÓ4NÓ#OÓPˆÜ�7‰7�>‰>˜(×#Ó#ØŠOñ ô
 �7‰7�?‰?œ2Ÿ7™7×+Ñ+¬B¯G©G¯L©L¸À¹ÀTÓ,JÓKÓLÐLr   Úlorasc                 ó|   • U  Vs/ s H*  o"S   (       d  M  U(       a  US   S:w  d  M   US   US   4PM,     sn$ s  snf )Nr   r.   ÚNoner0   rï   )r  Úremove_noneÚloras      r   Úget_enabled_lorasr  €  s?   € Ù+0Ómª5 4¸µGÓÖVaÀÀaÁÈFÑARÓˆT�!‰W�d˜1‘gÓ©5ÑmÐmùÒms   …9–9¨9rÃ   Úloras_limitc           	      óä  • UR                  5       nUc  / n/ nSnSn	U R                  S5       H•  n
[        R                  U
5      n[	        U5      S:X  a	  XŠS-   -  nM0  U HX  nUS   S-   nU(       d  [        US   U5      nUb  UR                  U[        US   5      45        U
R                  US   S5      n
MZ     XŠS-   -  nM—     US:w  a  US S n	U(       a  [        U5      n	/ nU Vs/ s H  oÿS   PM	     nnU H,  nU(       a  US   U;   d  UU;   a  M  UR                  U5        M.     [	        U5      S:X  a  X4$ / nX-    H  nUS   S	:w  d  M  UR                  U5        M!     US U U	4$ s  snf )
Nrc   rª   r   ri   r.   z.safetensorsr0   rº   r	  )
Úcopyr»   ÚLORAS_PROMPT_PATTERNÚfindallrd   r  rÚ   rJ   r¿   Úcleanup_prompt)rÃ   r  r  Úskip_file_checkÚprompt_cleanupÚdeduplicate_lorasÚlora_filenamesÚfound_lorasÚprompt_without_lorasÚcleaned_promptÚtokenÚmatchesÚmatchr   Ú	new_lorasr  Ú
lora_namesÚ
found_loraÚupdated_lorass                      r   Ú!parse_lora_references_from_promptr!  „  s£  € ð �J‰J‹L€EàÑØˆà€KØÐØ€Nà—‘˜cÖ"ˆÜ&×.Ñ.¨uÓ5ˆäˆw‹<˜1ÓØ ¨D¡LÑ0Ð ÙÛˆEØ˜a™ >Ñ1ˆIÞ"Ü/°°a±¸.ÓI�	ØÑ$Ø×"Ñ" I¬u°U¸1±X«Ð#?Ô@Ø—M‘M %¨¡(¨BÓ/ŠEñ ð 	¨¡Ñ,Òñ #ð ˜rÓ!Ø-¨c¨rÐ2ˆæÜ'Ð(<Ó=ˆà€IÙ&+Ó,¢e˜d�q”'¡e€JÐ,Û!ˆ
Þ *¨Q¡-°:Ó"=ÀÈyÓAXÙØ×Ñ˜Ö$ñ "ô
 ˆ9ƒ~˜ÓØÐ$Ð$à€MØÔ!ˆØ�‰7�fÕØ× Ñ  Ö&ñ "ð ˜˜+Ð&¨Ð6Ð6ùò -s   Ã)E-Úperformancec                 ó¼   • U R                  5       nUc  U$ UR                  5       nU  H0  n[        U5      nX5R                  :X  d  M  UR	                  U5        M2     U$ r’   )r  Úlora_filenamer   rÖ   rÜ   )rý   r"  Úloras_without_performanceÚperformance_lorar€   rx   s         r   Úremove_performance_lorar'  ¸  s]   € Ø )§¡Ó 0ÐàÑØ(Ð(à"×0Ñ0Ó2ÐãˆÜ�H‹~ˆØŸy™yÕ(Ø%×,Ñ,¨XÖ6ñ ð
 %Ð$r   c                 óÞ   • [         R                  " SSU 5      n [         R                  " SSU 5      n SnU R                  S5       H"  nUR                  5       nUS:X  a  M  XS-   -  nM$     US S $ )Nz +Ú z,+rª   rc   ri   rº   )ÚreÚsubr»   Ústrip)rÃ   r  r  s      r   r  r  È  sn   € Ü�VŠV�D˜#˜vÓ&€FÜ�VŠV�D˜#˜vÓ&€FØ€NØ—‘˜cÖ"ˆØ—‘“ˆØ�B‹;ÙØ $™,Ñ&Šñ	 #ð
 ˜#˜2ÐÐr   c           
      ó(  • [        [        R                  R                  5       GH¢  n[        R
                  " SU 5      n[        U5      S:X  a  U s  $ [        SU  35        U GH_  n [        R                  R                   Vs/ s HJ  n[        R                  R                  [        R                  R                  U5      5      S   U:X  d  MH  UPML     nn[        [        R                  R                  [        R                  R                  US   5      SS9R!                  5       R#                  5       n	U	 Vs/ s H  owS:w  d  M
  UPM     n	n[        U	5      S:”  d   eU(       a&  U R%                  SU S3X’[        U	5      -     S5      n O'U R%                  SU S3UR'                  U	5      S5      n  [        SU  35        GMb     GM¥     [        SU  35        U $ s  snf s  snf !   [        S	U S
U S35        U R%                  SU S3U5      n  N^= f)Nz__([\w-]+)__r   z[Wildcards] processing: zutf-8)Úencodingrc   Ú__r.   z[Wildcards] Warning: z.txt missing or empty. Using "z" as a normal word.z[Wildcards] z.[Wildcards] BFS stack overflow. Current text: )rK   r×   ÚconfigÚwildcards_max_bfs_depthr*  r  rd   r½   Úwildcard_filenamesrw   rx   ÚsplitextÚbasenamer…   rk   Úpath_wildcardsr”   Ú
splitlinesr¿   Úchoice)
Úwildcard_textÚrngrë   Úread_wildcards_in_orderrQ   ÚplaceholdersÚplaceholderr   r  Úwordss
             r   Úapply_wildcardsr>  Ô  sõ  € Ü”7—>‘>×9Ñ9×:ˆÜ—z’z /°=ÓAˆÜˆ|Ó Ó!Ø Ò äÐ(¨¨Ð8Ô9Ü'ˆKðYÜ&-§n¡n×&GÒ&Gó  DÒ&G Ì2Ï7É7×K[ÑK[Ô\^×\cÑ\c×\lÑ\lÐmnÓ\oÓKpÐqrÑKsð  xCñ  LCŸ1Ñ&G�ð  DÜœRŸW™WŸ\™\¬'¯.©.×*GÑ*GÈÐQRÉÓTÐ_fÑg×lÑlÓn×yÑyÓ{�Ù$)Ó5¢E˜q°"©WŸ¡E�Ð5Ü˜5“z A“~Ð%�~Þ*Ø$1×$9Ñ$9¸B¸{¸mÈ2Ð:NÐPUÔZ]Ð^cÓZdÑVdÑPeÐghÓ$i‘Mà$1×$9Ñ$9¸B¸{¸mÈ2Ð:NÐPS×PZÑPZÐ[`ÓPaÐcdÓ$e‘Mô
 �L  Ð0×1ô (ñ ;ô, 
Ð:¸=¸/Ð
JÔKØÐùò Dùâ5øðYÜÐ-¨k¨]ð ; Ø +˜}Ð,?ðAô Bà -× 5Ñ 5¸¸;¸-ÀrÐ6JÈKÓ X’ús>   Á'G%ÂAGÃGÃA%G%Ä9	G ÅG Å?G%Æ&G%Ç
G%Ç%*HÚimageÚaspect_ratiosc           	      ó$  ^•  [         R                  " [        R                  " U 5      5      n U R                  u  p#[        X#-  S5      m[        R                  " X#5      nX$-   SX4-   3nSU SU ST SU 3n[        UU4S jS9n[        [        UR                  S	5      5      u  p‰[        X‰-  S5      n
[        R                  " X‰5      nX‹-   SX›-   3nU SU ST SU 3nUS
U SU	 SU
 SU 3-  nU$ ! [         a  nSU 3s S nA$ S nAff = f)Nr0   r¬   zImage Size: z x z	, Ratio: ri   c           	      ó’   >• [        T[        U R                  S5      S   5      [        U R                  S5      S   5      -  -
  5      $ )NÚ*r   r.   )rL   rJ   r»   )r   r6   s    €r   r—   Ú%get_image_size_info.<locals>.<lambda>ø  s@   ø€ ¼¸UÄUÈ1Ï7É7ÐSVË<ÐXYÉ?ÓE[Ô^cÐde×dkÑdkÐloÓdpÐqrÑdsÓ^tÑEtÑ=tÔ9ur   )ÚkeyrC  r«   zError reading image: )r   r!   r   r   ÚsizerM   r@   ÚgcdÚminÚmapr   r»   r·   )r?  r@  r&   r'   rG  Ú	lcm_ratioÚ	size_infoÚclosest_ratioÚrecommended_widthÚrecommended_heightÚrecommended_ratioÚrecommended_gcdÚrecommended_lcm_ratiorÈ   r6   s                 @r   Úget_image_size_inforR  ï  sD  ø€ ð+Ü—’¤§¢¨£Ó0ˆØŸ
™
‰ˆÜ�e‘n aÓ(ˆÜ�hŠh�uÓ%ˆØ‘|�n A f¡m _Ð5ˆ	Ø" 5 '¨¨V¨H°I¸e¸WÀBÀyÀkÐRˆ	ä˜MÔ/uÑvˆÜ03´C¸×9LÑ9LÈSÓ9QÓ0RÑ-ÐÜ!Ð"3Ñ"HÈ!ÓLÐÜŸ(š(Ð#4ÓIˆØ#4Ñ#GÐ"HÈÐJ\ÑJoÐIpÐ qÐà�g˜S  ¨¨5¨'°°I°;Ð?ˆ	Ø�rÐ+Ð,¨CÐ0BÐ/CÀ2ÐFWÐEXÐXZÐ[pÐZqÐrÑrˆ	àÐøÜó +Ø& q cÐ*Õ*ûð+ús   ƒC2C6 Ã6
DÄ D
ÄDÄ
D)r.   r’   )z
./outputs/Úpng)T)é   FTTN)BÚpathlibr   Únumpyr   rr   ru   r@   rw   r   r*  Útypingr   r   r   r   r®   r™   ÚPILr   Úmodules.configr×   Úmodules.sdxl_stylesÚmodules.flagsr	   Úhasattrr
   r#   ÚcompileÚXr  ÚHASH_SHA256_LENGTHr   r(   r=   rB   rF   rS   ra   rg   ro   r‚   rŒ   r†   rj   r‡   r²   r¸   rÌ   rÔ   rí   rÛ   Úboolrü   r  r  rÞ   r  rJ   r   Útupler!  r'  r  r>  ÚndarrayrR  rï   r   r   Ú<module>rc     sÞ  ðÝ ã Û Û Û Û 	Û 
Û 	ß 2Ó 2ã Û å ã Û Ý %á'.¨u°l×'CÑ'Cˆ5×Ñ×#Ò#ÈÏÉ€ð
 —z’zÐ"TÐVX×VZÑVZÓ[Ð àÐ òòô7òt5ò ò
1ò(ô&òô:ð &+Ð3Eô Iò#ð"# #ô #ò0òò*òZEò0,Cô^�*ô ð�#ð ˜$ô ð¨d°3©ið ¸CÀ$¹Jô ò	Mñn˜Tð n¸õ nð jkØdhØ59ñ17¨cð 17¸$¸uÀVÈUÀ]Ñ?SÑ:Tð 17Ðcfð 17à>CÀDÈÈvÐW\È}ÑI]ÑD^Ð`cÐDcÑ>dõ17ðh% tð %¸+ÈÑ:Lô %ò 	ðÀsô ð6+˜rŸz™zð +¸$ð +À3õ +r   