§
    �M§j²‘  ã                   ó^  — 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Zd dl	m
Z
 d dlmZmZ d dlmZmZ d dl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mZ d dl m!Z!  ed¦  «        Z" ej#        d¦  «        Z$d„ Z%d„ Z&de'de'de'defd„Z(d­de'de'de'dz  fd„Z)d­de'de'de'dz  fd„Z*d®de'ddfd„Z+	 	 d¯de'd e'd!e,d"ej-        d#e.d$e'd%e/d&e.de,fd'„Z0e G d(„ d)¦  «        ¦   «         Z1i d* e1d+d+d, ed°i d-d.“d/d.“d0d“d1d2“d3d4“d5d6“d7d8“d9d6“d:d6“d;d8“d<d=“d>d?“d@d=“dAg dB¢“dCdD“dEd“dFdG“dHdG“Ž edIdJd.dJg dK¢dLdMdNdO¬P¦	  «	        ¬Q¦  «        “dR e1d+d+d, ed°i d-d.“d/d.“d0d“d1dS“d3dT“d5d6“d7d8“d9d6“d:d6“d;d8“d<dU“d>dV“d@dW“dAg dB¢“dCdD“dEd“dFd“dHdG“Ž edIdJd.dJg dK¢dLdMdNdO¬P¦	  «	        ¬Q¦  «        “dX e1d+d+d, ed°i d-d.“d/d.“d0d“d1dY“d3dZ“d5d6“d7d8“d9d6“d:d6“d;d8“d<dM“d>d?“d@dU“dAg dB¢“dCdD“dEd“dFd“dHdG“Ž edIdJd.dJg dK¢dLdMdNdO¬P¦	  «	        ¬Q¦  «        “d[ e1d+d+d, ed°i d-d.“d/d.“d0d“d1d2“d3d4“d5d6“d7d8“d9d6“d:d6“d;d8“d<d=“d>d?“d@d=“dAg dB¢“dCdD“dEd“dFdG“dHdG“d\dG“Ž edIdJd.dJg dK¢dLdMdNdO¬P¦	  «	        ¬Q¦  «        “d] e1d+d+d^ ed_d_d`dZdTdadUdbdcg dd¢dedGdG¬f¦  «         edgdJd.dJg dK¢dLdhdidj¬P¦	  «	        ¬Q¦  «        “dk e1dld+d^ ed_d_d`dZdTdadUdbdcg dd¢dedGd¬f¦  «         edgdJd.dJg dK¢dLdhdidj¬P¦	  «	        ¬Q¦  «        “dm e1dnd+d^ ed_d_d`dZdTdadUdbdcg dd¢dedGddG¬o¦  «         edgdJd.dJg dK¢dLdhdidj¬P¦	  «	        ¬Q¦  «        “dp e1dqd+d^ ed°i d-d_“d/dJ“d0d`“d1dZ“d3dT“d5da“d<dU“d>db“d@dc“dAg dd¢“dCde“dEdG“dFd“drdG“dsdG“dtdh“dud_“dvdw“dxdw“dyd?“dzd “d{d|“Ž edgdJd.dJg dK¢dLdhdidj¬P¦	  «	        ¬Q¦  «        “d} e1d~d+d^ ed.d_d`dZdTdadUdbdcg dd¢dedGdG¬f¦  «         edgdJd.dJg dK¢dLdhdidj¬P¦	  «	        ¬Q¦  «        “d e1d€d+d^d�d‚ ed.d_d`dZdTdadUdbdcg dd¢dedGdG¬f¦  «         edgdJd.dJg dK¢dLdhdidj¬P¦	  «	        ¬ƒ¦  «        “d„ e1d…d+d^ ed.d_d`dZdTdadUdbdcg dd¢dedGdG¬f¦  «         edgdJd.dJg dK¢dLdhdidj¬P¦	  «	        ¬Q¦  «        “d† e1d€d+d^d‡dˆ ed.d_d`dZdTdadUdbdcg dd¢dedGdG¬f¦  «         edgdJd.dJg dK¢dLdhdidj¬P¦	  «	        ¬ƒ¦  «        “d‰ e1dŠd+d^ ed_d_d`dZdTdadUdbdcg dd¢dedGdG¬f¦  «         edgdJd.dJg dK¢dLdhdidj¬P¦	  «	        ¬Q¦  «        “d‹ e1dŒd+d^ ed�d_d`dZdTdadUdbdcg dd¢dedGdG¬f¦  «         edgdJd.dJg dK¢dLdhdidj¬P¦	  «	        ¬Q¦  «        “dŽ e1d�d+d^ ed_d_d`dZdTdadUdbdcg dd¢dedGdG¬f¦  «         edgdJd.dJg dK¢dLdhdidj¬P¦	  «	        ¬Q¦  «        “d� e1d+d+d^ ed_d_d`dZdTdadUdbdcg dd¢dedGdGdG¬‘¦  «         edgdJd.dJg dK¢dLdhdidj¬P¦	  «	        ¬Q¦  «        “d’ e1d+d+d^ ed_d_d`dZdTdadUdbdcg dd¢dedGdGdG¬‘¦  «         edgdJd.dJg dK¢dLdhdidj¬P¦	  «	        ¬Q¦  «        “d“ e1d+d+d^ ed_d_d`dZdTdadUdbdcg dd¢dedGdGdG¬‘¦  «         edgdJd.dJg dK¢dLdhdidj¬P¦	  «	        ¬Q¦  «        i¥Z2g d”¢Z3d±d–e'd—e,de4e,e,f         fd˜„Z5d™e6e'         dše6e'         ddfd›„Z7dœe8d�ede8fdž„Z9dœe8de8fdŸ„Z:d dGe:fde'd¡e'ej;        z  d¢e.defd£„Z<d²d¡e'ej;        z  d¥e,defd¦„Z=d³d¡e'ej;        z  defd§„Z>d³de'd¡e'ej;        z  defd¨„Z?d©ej@        jA        dœe8de8fdª„ZB G d«„ d¬¦  «        ZCdS )´é    N)Ú	dataclass)ÚPath)Ú	rearrange)Úhf_hub_downloadÚlogin)ÚExifTagsÚImage)Ú	load_fileé   )ÚFluxÚFluxLoraWrapperÚ
FluxParams)ÚAutoEncoderÚAutoEncoderParams)Ú
HFEmbedder)Úfiles_locator)Úconvert_diffusers_to_fluxÚcheckpointsÚBFL_API_KEYc                  ó–  — t           j                             d¦  «        } | rZt          d¦  «         	 t	          | ¬¦  «         t          d¦  «         dS # t
          $ r}t          d|› �¦  «         Y d }~nd }~ww xY wt           j                             t           j                             d¦  «        ¦  «        rt          d¦  «         dS d	S )
NÚHF_TOKENzMTrying to authenticate to HuggingFace with the HF_TOKEN environment variable.©Útokenz:Successfully authenticated with HuggingFace using HF_TOKENTz/Warning: Failed to authenticate with HF_TOKEN: z~/.cache/huggingface/tokenz&Already authenticated with HuggingFaceF)	ÚosÚenvironÚgetÚprintr   Ú	ExceptionÚpathÚexistsÚ
expanduser)Úhf_tokenÚes     ú8C:\Users\johnn\OneDrive\Documents\AI\models\flux\util.pyÚensure_hf_authr%      sã   € ÝŒz�~Š~˜jÑ)Ô)€HØð IÝÐ]Ñ^Ô^Ð^ð	IÝ˜Ð!Ñ!Ô!Ð!ÝÐNÑOÔOÐOØ�4øÝð 	Ið 	Ið 	IÝÐGÀAÐGÐGÑHÔHÐHÐHÐHÐHÐHÐHøøøøð	Iøøøõ 
„w‡~‚~•b”g×(Ò(Ð)EÑFÔFÑGÔGð ÝÐ6Ñ7Ô7Ð7Øˆtàˆ5s   ²A Á
A9ÁA4Á4A9c                  ó`  — 	 t          j         d¦  «                             ¦   «         } | st          d¦  «         dS t          | ¬¦  «         t          d¦  «         dS # t          $ r t          d¦  «         Y dS t
          $ r,}t          d|› �¦  «         t          d	¦  «         Y d }~dS d }~ww xY w)
NzHF Token (hidden input): zNo token provided. Aborting.Fr   zSuccessfully authenticated!Tz"
Authentication cancelled by user.zAuthentication failed: zRTip: You can also run 'huggingface-cli login' or set HF_TOKEN environment variable)ÚgetpassÚstripr   r   ÚKeyboardInterruptr   )r   Úauth_es     r$   Úprompt_for_hf_authr+   +   sÞ   € ðÝ”Ð ;Ñ<Ô<×BÒBÑDÔDˆØð 	ÝÐ0Ñ1Ô1Ð1Ø�5å�EÐÑÔÐÝÐ+Ñ,Ô,Ð,ØˆtøÝð ð ð ÝÐ3Ñ4Ô4Ð4ØˆuˆuÝð ð ð ÝÐ0¨Ð0Ð0Ñ1Ô1Ð1ÝÐbÑcÔcÐcØˆuˆuˆuˆuˆuøøøøðøøøs"   ‚7A »A ÁB-Á8	B-Â!B(Â(B-Úrepo_idÚfilenameÚenv_varÚreturnc                 ó   — |}ddl m} 	 |S )zCGet the local path for a checkpoint file, downloading if necessary.r   ©Úoffload)Úmmgpr2   r   r%   r   Úcheckpoint_dirr   ÚstrÚlowerr+   ÚRuntimeError)r,   r-   r.   Ú
local_pathr2   r#   s         r$   Úget_checkpoint_pathr9   >   s(   € ð( €JØÐÐÐÐÐðð* Ðó    Úbf16Ú
model_nameÚtrt_transformer_precisionc                 ó’  — ddddddddœ}| |vrd	S ||          }|                      d
d¦  «        }t          |z  }dd|› d�d|› d�ddddœ}|                     ¦   «         r”d}g }|                     ¦   «         D ]R\  }	}
|	                     d¦  «        rŒ||
z  }|                     ¦   «         sd} n|                     |	› d|› �¦  «         ŒS|r't          d|› �¦  «         d                     |¦  «        S t          d|› d|› �¦  «         t          d|› �¦  «         |                     d¬¦  «         |                     ¦   «         D �]x\  }	}
||
z  }|                     ¦   «         rŒ |j	                             dd¬¦  «         	 t          d|
› �¦  «         t          ||
|¬ ¦  «         Œb# t          $ �r
}d!t          |¦  «                             ¦   «         v s#d"t          |¦  «                             ¦   «         v rY d	}~Œ¸d#t          |¦  «                             ¦   «         v s#d$t          |¦  «                             ¦   «         v rst          d%|› d&�¦  «         t          d'¦  «         t          d(|› �¦  «         t          d)¦  «         t          d*¦  «         t          d+¦  «         t          d,| › �¦  «        ‚‚ d	}~ww xY wt          d|› �¦  «         g }|                     ¦   «         D ]N\  }	}
|	                     d¦  «        rŒ||
z  }|                     ¦   «         r|                     |	› d|› �¦  «         ŒOd                     |¦  «        S )-z9Download ONNX models for TRT to our checkpoints directoryz!black-forest-labs/FLUX.1-dev-onnxz%black-forest-labs/FLUX.1-schnell-onnxz'black-forest-labs/FLUX.1-Canny-dev-onnxz'black-forest-labs/FLUX.1-Depth-dev-onnxz'black-forest-labs/FLUX.1-Redux-dev-onnxz&black-forest-labs/FLUX.1-Fill-dev-onnxz)black-forest-labs/FLUX.1-Kontext-dev-onnx)úflux-devúflux-schnellúflux-dev-cannyúflux-dev-depthúflux-dev-reduxúflux-dev-fillúflux-dev-kontextNú/Ú_zclip.opt/model.onnxztransformer.opt/z/model.onnxz/backbone.onnx_datazt5.opt/model.onnxzt5.opt/backbone.onnx_datazvae.opt/model.onnx)ÚclipÚtransformerÚtransformer_dataÚt5Út5_dataÚvaeTÚ_dataFú:zONNX models ready in ú,zDownloading ONNX models from z to zUsing transformer precision: )Úexist_ok)ÚparentsrQ   zDownloading )r,   r-   Ú	local_dirzdoes not existz	not foundz
gated repoÚ
restrictedzCannot access z - requires license acceptancezPlease follow these steps:z$   1. Visit: https://huggingface.co/z(   2. Log in to your HuggingFace accountz-   3. Accept the license terms and conditionsz   4. Then retry this commandz License acceptance required for )ÚreplaceÚCHECKPOINTS_DIRr    ÚitemsÚendswithÚappendr   ÚjoinÚmkdirÚparentr   r   r5   r6   r7   )r<   r=   Úonnx_repo_mapr,   Úsafe_repo_nameÚonnx_dirÚonnx_file_mapÚall_files_existÚcustom_pathsÚmoduleÚ	onnx_filer8   r#   Ú	full_paths                 r$   Údownload_onnx_models_for_trtrf   m   s
  € ð 8Ø?ØCØCØCØAØGðð €Mð ˜Ð&Ð&Øˆtà˜JÔ'€GØ—_’_ S¨#Ñ.Ô.€NÝ Ñ/€Hð &ØPÐ*CÐPÐPÐPØ]Ð/HÐ]Ð]Ð]Ø!Ø.Ø#ðð €Mð ‡‚ÑÔð *ØˆØˆØ!.×!4Ò!4Ñ!6Ô!6ð 	:ð 	:ÑˆF�IØ�Š˜wÑ'Ô'ð ØØ! IÑ-ˆJØ×$Ò$Ñ&Ô&ð Ø"'�Ø�Ø×Ò 6Ð 8Ð 8¨JÐ 8Ð 8Ñ9Ô9Ð9Ð9àð 	*ÝÐ4¨(Ð4Ð4Ñ5Ô5Ð5Ø—8’8˜LÑ)Ô)Ð)õ 
Ð
A¨'Ð
AÐ
A°xÐ
AÐ
AÑBÔBÐBÝ	Ð
EÐ*CÐ
EÐ
EÑFÔFÐFØ‡N‚N˜D€NÑ!Ô!Ð!ð +×0Ò0Ñ2Ô2ð ñ Ñˆ�	Ø 	Ñ)ˆ
Ø×ÒÑÔð 	Øð 	Ô×Ò¨°tÐÑ<Ô<Ð<ð	ÝÐ, Ð,Ð,Ñ-Ô-Ð-Ý G°iÈ8ÐTÑTÔTÐTÐTøÝð 	ñ 	ð 	Ø¥3 q¡6¤6§<¢<¡>¤>Ð1Ð1°[ÅCÈÁFÄFÇLÂLÁNÄNÐ5RÐ5RØ����Ø¥ Q¡¤§¢¡¤Ð/Ð/°<Å3ÀqÁ6Ä6Ç<Â<Á>Ä>Ð3QÐ3QÝÐN wÐNÐNÐNÑOÔOÐOÝÐ2Ñ3Ô3Ð3ÝÐF¸WÐFÐFÑGÔGÐGÝÐ@ÑAÔAÐAÝÐEÑFÔFÐFÝÐ5Ñ6Ô6Ð6Ý"Ð#RÀjÐ#RÐ#RÑSÔSÐSð øøøøð	øøøõ 
Ð
, (Ð
,Ð
,Ñ-Ô-Ð-ð €LØ*×0Ò0Ñ2Ô2ð 9ð 9Ñˆ�	Ø�?Š?˜7Ñ#Ô#ð 	ØØ˜yÑ(ˆ	Ø×ÒÑÔð 	9Ø×Ò 6Ð 7Ð 7¨IÐ 7Ð 7Ñ8Ô8Ð8øà�8Š8�LÑ!Ô!Ð!s    Æ $F%Æ%J:Æ0AJ5Ç;B:J5Ê5J:c                 ó"   — t          | |¦  «        S )zKCheck ONNX access and download models for TRT - returns ONNX directory path)rf   )r<   r=   s     r$   Úcheck_onnx_access_for_trtrh   Ê   s   € å'¨
Ð4MÑNÔNÐNr:   Únamec           	      óV  — t           €
J d¦   «         ‚dddddddddœ}| |vrt          d| › d�¦  «         dS ||          }d	|› d
�}t           ddœ}d|i}t          j        |||¬¦  «        }|j        dk    rt          d|j        › d|j        › �¦  «        ‚t          d| › d|› d�¦  «         dS )a   
    Track usage of licensed models via the BFL API for commercial licensing compliance.

    For more information on licensing BFL's models for commercial use and usage reporting,
    see the README.md or visit: https://dashboard.bfl.ai/licensing/subscriptions?showInstructions=true
    NzBFL_API_KEY is not setz
flux-1-devzflux-1-kontext-devz
flux-tools)r?   rE   rD   rB   rA   úflux-dev-canny-loraúflux-dev-depth-lorarC   zSkipping tracking usage for z7, as it cannot be tracked. Please check the model name.z&https://api.bfl.ai/v1/licenses/models/z/usagezapplication/json)zx-keyzContent-TypeÚnumber_of_generations)ÚheadersÚjsonéÈ   zFailed to track usage: ú zSuccessfully tracked usage for z with z generations)r   r   ÚrequestsÚpostÚstatus_coder   Útext)ri   ÚnÚmodel_slug_mapÚ
model_slugÚurlrn   ÚpayloadÚresponses           r$   Útrack_usage_via_apir|   Ï   s  € õ Ð"Ð"Ð$<Ñ"Ô"Ð"ð !Ø0Ø%Ø&Ø&Ø+Ø+Ø&ð	ð 	€Nð �>Ð!Ð!ÝÐj¨TÐjÐjÐjÑkÔkÐkØˆà Ô%€JØ
E°:Ð
EÐ
EÐ
E€CÝ#Ð5GÐHÐH€GØ&¨Ð*€GåŒ}˜S¨'¸Ð@Ñ@Ô@€HØÔ˜sÒ"Ð"ÝÐX°(Ô2FÐXÐXÈÌÐXÐXÑYÔYÐYåÐK°ÐKÐK¸AÐKÐKÐKÑLÔLÐLÐLÐLr:   ç333333ë?FÚoutput_nameÚidxÚxÚadd_sampling_metadataÚpromptÚnsfw_thresholdÚtrack_usagec	                 ó  — |                      |¬¦  «        }	t          d|	› �¦  «         |                     dd¦  «        }t          |d         d¦  «        }t	          j        d|dz   z                       ¦   «                              ¦   «                              ¦   «         ¦  «        }
| �d	„  | |
¦  «        D ¦   «         d         }n|dz
  }||k     r¯t	          j	        ¦   «         }|d
v rd|t          j        j        <   nd|t          j        j        <   d|t          j        j        <   ||t          j        j        <   |r||t          j        j        <   |
                     |	|dd¬¦  «         |rt#          |d¦  «         |dz  }nt          d¦  «         |S )N)r   zSaving éÿÿÿÿr   r   zc h w -> h w cg     à_@g      ð?c                 ó6   — g | ]}|d          dk    ¯|d         ‘ŒS )ÚlabelÚnsfwÚscore© )Ú.0r€   s     r$   ú
<listcomp>zsave_image.<locals>.<listcomp>  s+   € ÐWÐWÐW QÀ!ÀGÄ*ÐPVÒBVÐBV�a˜”jÐBVÐBVÐBVr:   )r?   r@   zAI generated;txt2img;fluxzAI generated;img2img;fluxzBlack Forest Labsé_   )ÚexifÚqualityÚsubsamplingz.Your generated image may contain NSFW content.)Úformatr   Úclampr   r	   Ú	fromarrayÚcpuÚbyteÚnumpyÚExifr   ÚBaseÚSoftwareÚMakeÚModelÚImageDescriptionÚsaver|   )Únsfw_classifierri   r~   r   r€   r�   r‚   rƒ   r„   ÚfnÚimgÚ
nsfw_scoreÚ	exif_datas                r$   Ú
save_imager¤   ó   s�  € ð 
×	Ò	 Ð	Ñ	$Ô	$€BÝ	ˆ.�Bˆ.ˆ.ÑÔÐà	�Š��A‰Œ€AÝ�!�A”$Ð(Ñ)Ô)€AÝ
Œ/˜5 A¨¡GÑ,×1Ò1Ñ3Ô3×8Ò8Ñ:Ô:×@Ò@ÑBÔBÑ
CÔ
C€CàÐ"ØWÐW¨/¨/¸#Ñ*>Ô*>ÐWÑWÔWÐXYÔZˆ
ˆ
à# cÑ)ˆ
à�NÒ"Ð"Ý”J‘L”Lˆ	ØÐ/Ð/Ð/Ø0KˆI•h”mÔ,Ñ-Ð-à0KˆI•h”mÔ,Ñ-Ø(;ˆ	•(”-Ô$Ñ%Ø)-ˆ	•(”-Ô%Ñ&Ø ð 	?Ø8>ˆI•h”mÔ4Ñ5Ø�Š�˜)¨R¸QˆÑ?Ô?Ð?Øð 	)Ý  aÑ(Ô(Ð(Øˆq‰ˆˆåÐ>Ñ?Ô?Ð?à€Jr:   c                   ój   — e Zd ZU eed<   eed<   eed<   eed<   eed<   dZedz  ed<   dZedz  ed<   dS )	Ú	ModelSpecÚparamsÚ	ae_paramsr,   Ú	repo_flowÚrepo_aeNÚlora_repo_idÚlora_filename)	Ú__name__Ú
__module__Ú__qualname__r   Ú__annotations__r   r5   r«   r¬   r‹   r:   r$   r¦   r¦     sm   € € € € € € àÐÐÑØ Ð Ð Ñ Ø€L€L�LØ€N€N�NØ€L€L�LØ#€L�#˜‘*Ð#Ð#Ñ#Ø $€M�3˜‘:Ð$Ð$Ñ$Ð$Ð$r:   r¦   z	flux2-devÚ zckpts/flux2_vae.safetensorsÚin_channelsé€   Úout_channelsÚ
vec_in_dimÚcontext_in_dimé <  Úhidden_sizei   Ú	mlp_ratioç      @Úsingle_linear1_mlp_ratiog      @Úsingle_mlp_hidden_ratioÚdouble_mlp_ratioÚdouble_linear1_mlp_ratioÚ	num_headsé0   Údepthé   Údepth_single_blocksÚaxes_dim©é    rÆ   rÆ   rÆ   ÚthetaéÐ  Úqkv_biasÚguidance_embedTÚflux2é   é   )r   é   é   rÏ   rÎ   rÆ   g      à?g        )	Ú
resolutionr²   ÚchÚout_chÚch_multÚnum_res_blocksÚ
z_channelsÚscale_factorÚshift_factor)r,   r©   rª   r§   r¨   zflux2-klein-4bi   i   é   é   é   zflux2-klein-9bi 0  i   zpi-flux2Úpiflowr?   zckpts/flux_vae.safetensorsé@   i   g      @é   é&   )é   é8   rà   i'  )r²   r´   rµ   r¶   r¸   r¹   r¿   rÁ   rÃ   rÄ   rÇ   rÉ   rÊ   é   rß   gxz¥,C×?g=›UŸ«½?r@   z black-forest-labs/FLUX.1-schnellzflux-chromazlodestones/Chroma1-HD)r²   r´   rµ   r¶   r¸   r¹   r¿   rÁ   rÃ   rÄ   rÇ   rÉ   rÊ   Úchromazflux-chroma-radiancezlodestones/Chroma1-Radiancerâ   ÚradianceÚradiance_patch_sizeÚradiance_hidden_sizeÚradiance_mlp_ratiorÏ   Úradiance_depthÚradiance_max_freqsÚradiance_tile_sizeÚradiance_final_head_typeÚconvrA   z"black-forest-labs/FLUX.1-Canny-devrk   zblack-forest-labs/FLUX.1-devz'black-forest-labs/FLUX.1-Canny-dev-loraz flux1-canny-dev-lora.safetensors)r,   r©   rª   r«   r¬   r§   r¨   rB   z"black-forest-labs/FLUX.1-Depth-devrl   z'black-forest-labs/FLUX.1-Depth-dev-loraz flux1-depth-dev-lora.safetensorsrC   z"black-forest-labs/FLUX.1-Redux-devrD   z!black-forest-labs/FLUX.1-Fill-devi€  rE   z$black-forest-labs/FLUX.1-Kontext-devzflux-dev-uso)r²   r´   rµ   r¶   r¸   r¹   r¿   rÁ   rÃ   rÄ   rÇ   rÉ   rÊ   Úesozflux-dev-umozflux-dev-kontext-dreamomni2))é   é   )é°  éà  )éÐ  é°  )éð  ép  )é   é0  )é@  éà  )ép  é   )é°  éP  )rÌ   rÌ   )rü   rû   )rú   rù   )rø   r÷   )rö   rõ   )rô   ró   )rò   rñ   )rð   rï   )rî   rí   é   Úaspect_ratioÚareac                 ó\  — t          |                      d¦  «        d         ¦  «        }t          |                      d¦  «        d         ¦  «        }||z  }t          t          j        ||z  ¦  «        ¦  «        }t          t          j        ||z  ¦  «        ¦  «        }d|dz  z  d|dz  z  fS )NrO   r   r   rß   )ÚfloatÚsplitÚroundÚmathÚsqrt)rþ   rÿ   ÚwidthÚheightÚratios        r$   Úaspect_ratio_to_height_widthr	  –  sž   € Ý�,×$Ò$ SÑ)Ô)¨!Ô,Ñ-Ô-€EÝ�<×%Ò% cÑ*Ô*¨1Ô-Ñ.Ô.€FØ�F‰N€EÝ•$”)˜D 5™LÑ)Ô)Ñ*Ô*€EÝ•4”9˜T E™\Ñ*Ô*Ñ+Ô+€FØ�˜"‘Ñ˜r V¨r¡\Ñ2Ð2Ð2r:   ÚmissingÚ
unexpectedc                 óx  — t          | ¦  «        dk    r�t          |¦  «        dk    r}t          dt          | ¦  «        › d�d                     | ¦  «        z   ¦  «         t          d¦  «         t          dt          |¦  «        › d�d                     |¦  «        z   ¦  «         d S t          | ¦  «        dk    r8t          dt          | ¦  «        › d�d                     | ¦  «        z   ¦  «         d S t          |¦  «        dk    r8t          dt          |¦  «        › d�d                     |¦  «        z   ¦  «         d S d S )Nr   zGot z missing keys:
	z
	zQ
-------------------------------------------------------------------------------
z unexpected keys:
	)Úlenr   rZ   )r
  r  s     r$   Úprint_load_warningr  Ÿ  s2  € Ý
ˆ7�|„|�aÒÐ�C 
™OœO¨aÒ/Ð/ÝÐ5•S˜‘\”\Ð5Ð5Ð5¸¿ºÀGÑ8LÔ8LÑLÑMÔMÐMÝÐ$Ñ%Ô%Ð%ÝÐ;•S˜‘_”_Ð;Ð;Ð;¸f¿kºkÈ*Ñ>UÔ>UÑUÑVÔVÐVÐVÐVÝ	ˆW‰Œ˜Ò	Ð	ÝÐ5•S˜‘\”\Ð5Ð5Ð5¸¿ºÀGÑ8LÔ8LÑLÑMÔMÐMÐMÐMÝ	ˆZ‰Œ˜1Ò	Ð	ÝÐ;•S˜‘_”_Ð;Ð;Ð;¸f¿kºkÈ*Ñ>UÔ>UÑUÑVÔVÐVÐVÐVð 
Ð	r:   Ú
state_dictr§   c                 óØ  ‡— t          | ¦  «        Šdt          fˆfd„} |d¦  «        \  }} |d¦  «        \  }} |d¦  «        \  }}|�+t          |j        ¦  «        D ]}	|‰d|	› d�<   |�	|‰d|	› d	�<   Œ|�+t          |j        ¦  «        D ]}	|‰d|	› d
�<   |�	|‰d|	› d�<   Œ|�+t          |j        ¦  «        D ]}	|‰d|	› d�<   |�	|‰d|	› d�<   ŒdD ]}
‰                     |
d¦  «         Œ‰S )z×
    Remap Flux2 checkpoint keys to the shared Flux1-style module layout.
    - Duplicate shared modulation weights to each single/double block.
    - Drop unused guidance embeddings that are identity in Flux2.
    Úprefixc                 óà   •— ‰                      | › d�d ¦  «        }‰                      | › d�d ¦  «        }|€6‰                      | › d�d ¦  «        }|€‰                      | › d�d ¦  «        n|}||fS )Nz.lin.weightz	.lin.biasz.linear.weightz.linear.bias)Úpop)r  ÚwÚbÚsds      €r$   Úpop_modz,preprocess_flux2_state_dict.<locals>.pop_mod±  sŠ   ø€ Ø�FŠF�fÐ)Ð)Ð)¨4Ñ0Ô0ˆØ�FŠF�fÐ'Ð'Ð'¨Ñ.Ô.ˆØˆ9Ø—’˜&Ð0Ð0Ð0°$Ñ7Ô7ˆAØ9:¸�—’˜&Ð.Ð.Ð.°Ñ5Ô5Ð5ÈˆAØ�!ˆtˆr:   Údouble_stream_modulation_imgÚdouble_stream_modulation_txtÚsingle_stream_modulationNzdouble_blocks.z.img_mod.lin.weightz.img_mod.lin.biasz.txt_mod.lin.weightz.txt_mod.lin.biaszsingle_blocks.z.modulation.lin.weightz.modulation.lin.bias)z'double_stream_modulation_img.lin.weightz%double_stream_modulation_img.lin.biasz'double_stream_modulation_txt.lin.weightz%double_stream_modulation_txt.lin.biasz#single_stream_modulation.lin.weightz!single_stream_modulation.lin.biasz*double_stream_modulation_img.linear.weightz(double_stream_modulation_img.linear.biasz*double_stream_modulation_txt.linear.weightz(double_stream_modulation_txt.linear.biasz&single_stream_modulation.linear.weightz$single_stream_modulation.linear.biaszguidance_in.in_layer.weightzguidance_in.in_layer.biaszguidance_in.out_layer.weightzguidance_in.out_layer.bias)Údictr5   ÚrangerÁ   rÃ   r  )r  r§   r  Ú	img_mod_wÚ	img_mod_bÚ	txt_mod_wÚ	txt_mod_bÚsingle_mod_wÚsingle_mod_bÚiÚunusedr  s              @r$   Úpreprocess_flux2_state_dictr%  ª  s¤  ø€ õ 
ˆjÑ	Ô	€Bð�ð ð ð ð ð ð ð #˜7Ð#AÑBÔBÑ€IˆyØ"˜7Ð#AÑBÔBÑ€IˆyØ!( Ð)CÑ!DÔ!DÑ€L�,àÐÝ�v”|Ñ$Ô$ð 	Fð 	FˆAØ:CˆBÐ6 Ð6Ð6Ð6Ñ7ØÐ$Ø<E�Ð8 AÐ8Ð8Ð8Ñ9øØÐÝ�v”|Ñ$Ô$ð 	Fð 	FˆAØ:CˆBÐ6 Ð6Ð6Ð6Ñ7ØÐ$Ø<E�Ð8 AÐ8Ð8Ð8Ñ9øØÐÝ�vÔ1Ñ2Ô2ð 	Lð 	LˆAØ=IˆBÐ9 Ð9Ð9Ð9Ñ:ØÐ'Ø?K�Ð; AÐ;Ð;Ð;Ñ<øðð ð ˆð$ 	�Šˆv�tÑÔÐÐØ€Ir:   c                 ó*   — t          j        | ¦  «        S )N)r   Úconvert_state_dict)r  s    r$   Úpreprocess_flux_state_dictr(  ä  s   € Ý$Ô7¸
ÑCÔCÐCr:   ÚcudaÚdeviceÚverbosec                 ó´  — t           |          }|}t          j        d¦  «        5  |j        �:|j        �3t          |j        ¬¦  «                             t          j        ¦  «        }n1t          |j        ¦  «                             t          j        ¦  «        }d d d ¦  «         n# 1 swxY w Y   ddl
m} |                     |||dt          j        ¬¦  «         |S )NÚmeta)r§   r   r1   F)Úpreprocess_sdÚwritable_tensorsÚdefault_dtype)ÚconfigsÚtorchr*  r«   r¬   r   r§   ÚtoÚbfloat16r   r3   r2   Úload_model_data)	ri   Úmodel_filenamer*  r+  r.  ÚconfigÚ	ckpt_pathÚmodelr2   s	            r$   Úload_flow_modelr:  è  s  € õ �TŒ]€Fà€Iå	Œ�fÑ	Ô	ð ;ð ;ØÔÐ*¨vÔ/CÐ/OÝ#¨6¬=Ð9Ñ9Ô9×<Ò<½U¼^ÑLÔLˆEˆEå˜œÑ'Ô'×*Ò*­5¬>Ñ:Ô:ˆEð	;ð ;ð ;ñ ;ô ;ð ;ð ;ð ;ð ;ð ;ð ;øøøð ;ð ;ð ;ð ;ð ÐÐÐÐÐØ×Ò˜E >ÀÐafÕv{ô  wEÐñ  Fô  Fð  Fð" €Ls   ¤A3B#Â#B'Â*B'é   Ú
max_lengthc                 ób   — t          d||t          j        ¬¦  «                             | ¦  «        S )Nr±   )r<  Útorch_dtype)r   r2  r4  r3  )r*  Útext_encoder_filenamer<  s      r$   Úload_t5r@    s-   € å�bÐ.¸:ÕSXÔSaÐbÑbÔb×eÒeÐflÑmÔmÐmr:   c                 óˆ   — t          t          j        d¦  «        ddt          j        d¬¦  «                             | ¦  «        S )NÚclip_vit_large_patch14r±   éM   T)r<  r>  Úis_clip)r   ÚflÚlocate_folderr2  r4  r3  ©r*  s    r$   Ú	load_cliprH    s\   € Ý•rÔ'Ð(@ÑAÔAÀ2ÐRTÕbgÔbpð  }Að  Bñ  Bô  B÷  Eò  Eð  FLñ  Mô  Mð  Mr:   c                 óœ  — t           |          }t          t          |j        t	          j        d¦  «        d¦  «        ¦  «        }t          j        d¦  «        5  t          |j	        ¦  «        }d d d ¦  «         n# 1 swxY w Y   t          |t          |¦  «        ¬¦  «        }|                     |dd¬¦  «        \  }}t          ||¦  «         |S )Nzflux_vae.safetensorsÚFLUX_AEr-  rG  FT)ÚstrictÚassign)r1  r5   r9   r,   rE  Úlocate_filer2  r*  r   r¨   Úload_sftÚload_state_dictr  )ri   r*  r7  r8  Úaer  r
  r  s           r$   Úload_aerQ    sø   € Ý�TŒ]€FÝÕ'¨¬½¼ÐG]Ñ8^Ô8^Ð`iÑjÔjÑkÔk€Iõ 
Œ�fÑ	Ô	ð +ð +Ý˜Ô)Ñ*Ô*ˆð+ð +ð +ñ +ô +ð +ð +ð +ð +ð +ð +øøøð +ð +ð +ð +õ 
�)¥C¨¡K¤KÐ	0Ñ	0Ô	0€BØ×,Ò,¨R¸ÀdÐ,ÑKÔKÑ€GˆZÝ�w 
Ñ+Ô+Ð+Ø€Is   ÁA8Á8A<Á?A<r9  c           
      ój  — |                       ¦   «         D ]�\  }}||v r”||         j        |j        k    r~t          d|› d||         j        › d|j        › d�¦  «         t          j        |||         j        ¬¦  «        }t          d„ ||         j        D ¦   «         ¦  «        }||         ||<   |||<   Œž|S )zR
    Optionally expand the state dict to match the model's parameters shapes.
    zExpanding 'z' with shape z to model parameter with shape ú.rG  c              3   ó6   K  — | ]}t          d |¦  «        V — ŒdS )r   N)Úslice)rŒ   Údims     r$   ú	<genexpr>z/optionally_expand_state_dict.<locals>.<genexpr>4  s*   è è € ÐOÐO°�u Q¨™}œ}ÐOÐOÐOÐOÐOÐOr:   )Únamed_parametersÚshaper   r2  Ú
zeros_liker*  Útuple)r9  r  ri   ÚparamÚexpanded_state_dict_weightÚslicess         r$   Úoptionally_expand_state_dictr_  (  så   € ð ×-Ò-Ñ/Ô/ð 
>ð 
>‰ˆˆeØ�:ÐÐØ˜$ÔÔ%¨¬Ò4Ð4ÝØz $ÐzÐz°ZÀÔ5EÔ5KÐzÐzÐlqÔlwÐzÐzÐzñô ð õ .3Ô-=¸eÈJÐW[ÔL\ÔLcÐ-dÑ-dÔ-dÐ*ÝÐOÐO¸
À4Ô8HÔ8NÐOÑOÔOÑOÔO�Ø5?ÀÔ5EÐ*¨6Ñ2Ø#=�
˜4Ñ øàÐr:   c                   ó   — e Zd ZdZd„ ZdS )ÚFlux2TransformerSharedza
    Convenience wrapper to instantiate the shared Flux2 transformer with explicit defaults.
    c                 ó€   — ddl m} t          ddd ddddddd	d
dd¬¦  «        }|                     |¦  «          |di |¤ŽS )Nr   )ÚFlux2Transformer2DModelr   r³   rÂ   rÀ   r·   rá   rº   rÅ   rÈ   g�íµ ÷Æ°>)Ú
patch_sizer²   r´   Ú
num_layersÚnum_single_layersÚattention_head_dimÚnum_attention_headsÚjoint_attention_dimÚtimestep_guidance_channelsr¹   Úaxes_dims_ropeÚ
rope_thetaÚepsr‹   )Ú/diffusers.models.transformers.transformer_flux2rc  r  Úupdate)ÚclsÚkwargsrc  Údefaultss       r$   Ú__new__zFlux2TransformerShared.__new__@  sz   € Ø[Ð[Ð[Ð[Ð[Ð[åØØØØØ Ø"Ø "Ø %Ø'*ØØ+ØØð
ñ 
ô 
ˆð 	�Š˜ÑÔÐØ&Ð&Ð2Ð2¨Ð2Ð2Ð2r:   N)r­   r®   r¯   Ú__doc__rs  r‹   r:   r$   ra  ra  ;  s-   € € € € € ðð ð3ð 3ð 3ð 3ð 3r:   ra  )r;   )r   )r}   Fr‹   )rý   )r)  Nr;  )r)  )Dr'   r  r   Údataclassesr   Úpathlibr   rr   r2  Úeinopsr   Úhuggingface_hubr   r   ÚPILr   r	   Úsafetensors.torchr
   rN  r9  r   r   r   Úmodules.autoencoderr   r   Úmodules.conditionerr   Úshared.utilsr   rE  Úshared.convertr   rV   Úgetenvr   r%   r+   r5   r9   rf   rh   r|   ÚintÚTensorÚboolr  r¤   r¦   r1  ÚPREFERED_KONTEXT_RESOLUTIONSr[  r	  Úlistr  r  r%  r(  r*  r:  r@  rH  rQ  ÚnnÚModuler_  ra  r‹   r:   r$   ú<module>r‡     sö  ðØ €€€Ø €€€Ø 	€	€	€	Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð à €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø Ð Ð Ð Ð Ð Ð Ð Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3à 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø +Ð +Ð +Ð +Ð +Ð +Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4à�$�}Ñ%Ô%€àˆbŒi˜Ñ&Ô&€ðð ð ð$ð ð ð&, ð ,°ð ,¸cð ,Àdð ,ð ,ð ,ð ,ð^Z"ð Z"¨Sð Z"ÈSð Z"Ð^aÐdhÑ^hð Z"ð Z"ð Z"ð Z"ðzOð O¨#ð OÈ#ð OÐ[^ÐaeÑ[eð Oð Oð Oð Oð
!Mð !M˜cð !M¨4ð !Mð !Mð !Mð !MðX !Øð(ð (à
ð(ð ð(ð 
ð	(ð
 „|ð(ð  ð(ð ð(ð ð(ð ð(ð 	ð(ð (ð (ð (ðV ð%ð %ð %ð %ð %ñ %ô %ñ „ð%ðU	Ø��ØØØ-Øˆzð 
ð 
ð 
Ø˜ð
à˜ð
ð �qð
ð !˜5ð	
ð
 ˜ð
ð �cð
ð &) Sð
ð %( Cð
ð !˜Sð
ð &) Sð
ð �bð
ð �!ð
ð !# ð
ð &Ð%Ð%Ð%ð
ð �$ð
ð  �Uð!
ð"  ˜4ð#
ð$ �$ð%
ð( $Ð#ØØØØØ �L�LØØØØð

ñ 

ô 

ð1#ñ #ô #ðU	ðJ �i�iØØØ-Øˆzð 
ð 
ð 
Ø˜ð
à˜ð
ð �qð
ð  ˜4ð	
ð
 ˜ð
ð �cð
ð &) Sð
ð %( Cð
ð !˜Sð
ð &) Sð
ð �bð
ð �!ð
ð !# ð
ð &Ð%Ð%Ð%ð
ð �$ð
ð  �Uð!
ð" !˜5ð#
ð$ �$ð%
ð( $Ð#ØØØØØ �L�LØØØØð

ñ 

ô 

ð1#ñ #ô #ðKU	ðR �i�iØØØ-Øˆzð 
ð 
ð 
Ø˜ð
à˜ð
ð �qð
ð !˜5ð	
ð
 ˜ð
ð �cð
ð &) Sð
ð %( Cð
ð !˜Sð
ð &) Sð
ð �bð
ð �!ð
ð !# ð
ð &Ð%Ð%Ð%ð
ð �$ð
ð  �Uð!
ð" !˜5ð#
ð$ �$ð%
ð( $Ð#ØØØØØ �L�LØØØØð

ñ 

ô 

ð1#ñ #ô #ðSU	ðZ �	�	ØØØ-Øˆzð 
ð 
ð 
Ø˜ð
à˜ð
ð �qð
ð !˜5ð	
ð
 ˜ð
ð �cð
ð &) Sð
ð %( Cð
ð !˜Sð
ð &) Sð
ð �bð
ð �!ð
ð !# ð
ð &Ð%Ð%Ð%ð
ð �$ð
ð  �Uð!
ð"  ˜4ð#
ð$ �$ð%
ð& �4ð'
ð* $Ð#ØØØØØ �L�LØØØØð

ñ 

ô 

ð3$ñ $ô $ð[U	ðd �	�	ØØØ,ØˆzØØØØØØØØØ "Ø!�\�\ØØØð
ñ 
ô 
ð $Ð#ØØØØØ �L�LØØØØð

ñ 

ô 

ð'ñ ô ðeU	ðb �I�IØ2ØØ,ØˆzØØØØØØØØØ "Ø!�\�\ØØØ ð
ñ 
ô 
ð $Ð#ØØØØØ �L�LØØØØð

ñ 

ô 

ð'ñ ô ðcU	ð` �9�9Ø'ØØ,ØˆzØØØØØØØØØ "Ø!�\�\ØØØ Øð
ñ 
ô 
ð  $Ð#ØØØØØ �L�LØØØØð

ñ 

ô 

ð)ñ ô ðaU	ð` ˜I˜IØ-ØØ,Øˆzð 
ð 
ð 
Ø˜ð
à˜ð
ð �sð
ð  ˜4ð	
ð
 ˜ð
ð �cð
ð �bð
ð �"ð
ð !# ð
ð "�\�\�\ð
ð �&ð
ð �Tð
ð !˜5ð
ð �4ð
ð �Tð
ð  !# ð!
ð" "$ ð#
ð$  !˜qð%
ð& ˜1ð'
ð(  !˜qð)
ð*  !˜qð+
ð, &, Vð-
ð0 $Ð#ØØØØØ �L�LØØØØð

ñ 

ô 

ð9'ñ 'ô 'ðaU	ðp �i�iØ4ØØ,ØˆzØØØØØØØØØ "Ø!�\�\ØØØð
ñ 
ô 
ð $Ð#ØØØØØ �L�LØØØØð

ñ 

ô 

ð'ñ ô ðqU	ðn	 ˜9˜9Ø.ØØ,Ø>Ø8ØˆzØØØØØØØØØ "Ø!�\�\ØØØð
ñ 
ô 
ð $Ð#ØØØØØ �L�LØØØØð

ñ 

ô 

ð+ ñ  ô  ðo	U	ðp
 �i�iØ4ØØ,ØˆzØØØØØØØØØ "Ø!�\�\ØØØð
ñ 
ô 
ð $Ð#ØØØØØ �L�LØØØØð

ñ 

ô 

ð'ñ ô ðq
U	ðn ˜9˜9Ø.ØØ,Ø>Ø8ØˆzØØØØØØØØØ "Ø!�\�\ØØØð
ñ 
ô 
ð $Ð#ØØØØØ �L�LØØØØð

ñ 

ô 

ð+ ñ  ô  ðoU	ðp �i�iØ4ØØ,ØˆzØØØØØØØØØ "Ø!�\�\ØØØð
ñ 
ô 
ð $Ð#ØØØØØ �L�LØØØØð

ñ 

ô 

ð'ñ ô ðqU	ðn �Y�YØ3ØØ,ØˆzØØØØØØØØØ "Ø!�\�\ØØØð
ñ 
ô 
ð $Ð#ØØØØØ �L�LØØØØð

ñ 

ô 

ð'ñ ô ðoU	ðl ˜	˜	Ø6ØØ,ØˆzØØØØØØØØØ "Ø!�\�\ØØØð
ñ 
ô 
ð $Ð#ØØØØØ �L�LØØØØð

ñ 

ô 

ð'ñ ô ðmU	ðj �I�IØØØ,ØˆzØØØØØØØØØ "Ø!�\�\ØØØØð
ñ 
ô 
ð  $Ð#ØØØØØ �L�LØØØØð

ñ 

ô 

ð)ñ ô ðkU	ðj �I�IØØØ,ØˆzØØØØØØØØØ "Ø!�\�\ØØØØð
ñ 
ô 
ð  $Ð#ØØØØØ �L�LØØØØð

ñ 

ô 

ð)ñ ô ðkU	ðj " 9 9ØØØ,ØˆzØØØØØØØØØ "Ø!�\�\ØØØØð
ñ 
ô 
ð  $Ð#ØØØØØ �L�LØØØØð

ñ 

ô 

ð)$ñ $ô $ðkU	ð U	€ðp ð  ð  Ð ð*3ð 3¨sð 3¸#ð 3ÈEÐRUÐWZÐRZÌOð 3ð 3ð 3ð 3ðW  S¤	ð W°t¸C´yð WÀTð Wð Wð Wð Wð7¨Dð 7¸*ð 7Èð 7ð 7ð 7ð 7ðtD¨4ð D°Dð Dð Dð Dð Dð "(ØØ,ð%ð %Ø
ð%ð �%”,Ñð%ð ð	%ð 
ð%ð %ð %ð %ðPnð n�C˜%œ,Ñ&ð nÐ[^ð nÐisð nð nð nð nð
Mð M�c˜EœLÑ(ð M°jð Mð Mð Mð Mðð �#ð ˜s U¤\Ñ1ð ¸{ð ð ð ð ð¨¬¬ð ÀTð Èdð ð ð ð ð&3ð 3ð 3ð 3ð 3ñ 3ô 3ð 3ð 3ð 3r:   