
    ^(j             	       z   d dl Z d dlZd dlmZ d dlZd dlmZ d dlmZ ddl	m
Z
mZ ddlmZ ddl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Zd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl Zd dl!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$m'Z' ddl$m(Z( ddl$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/Zd dl0Zd dl1Zd dl2Zd dl3Zd dl4Zd dl5Zd dl6Zd dl7Zd dl8Zd dl9Zd dl:Zd dl;Zd dl<Zd dl=Zd dl>Zd dl?Zd dl@Zd dlAZd dlBZd dlCZd dlDZd dlEZd dlFZd dlGZd dlHZd dlIZd dlJZd dlKZd dlLZd dlMZd dlNZd dlOZd dlPZd dlQZd dlRZd dlSZd dlTZd dlUZd dlVZd4dZWd ZX G d d      ZY G d d      ZZ G d d      Z[d Z\ G d de      Z]de]j                  i dfdZ_de]j                  i dfdZ` G d de      Zad  Zbd! Zcd" Zdg de]j                  i dfd#Zed$ Zfd% Zgd5d'Zhd&d&ddd&i i dfd(Zidi i dfd)Zjdi i dfd*Zkdi i dfd+Zldi i dfd,Zmd&d&ddd&i i ddf	d-Zni ddfd.Zoi dfd/Zpd6d0Zqd4d1Zrd4d2Zsddddi fd3Zty)7    N)Enum)model_management)ProgressBar   )AutoencoderKLAutoencodingEngine)StageA)StageC_coder)AudioOobleckVAE)clip_vision)gligen)diffusers_convert)model_detection)sd1_clip)	sdxl_clipc                    i }| *t         j                  j                  | j                  |      }|*t         j                  j	                  |j
                  |      }t         j                  j                  |      }t         j                  j                  ||      }| 7| j                         }|j                  ||      }	|r|j                  d|       nd}	d }|A|j                         }
|
j                  ||      }|r!|
j                  j                  d|       nd}d }
t        |	      }	t        |      }|D ]0  }||	vs||vst        j                  dj!                  |             2 ||
fS )Nlora_metadata zNOT LOADED {})comfyloramodel_lora_keys_unetmodelmodel_lora_keys_clipcond_stage_modellora_convertconvert_lora	load_loracloneadd_patchesset_attachmentspatchersetloggingwarningformat)r   clipr   strength_modelstrength_clipr   key_maploadednew_modelpatcherknew_clipk1xs                2/Users/danicosta/Desktop/Flux2/ComfyUI/comfy/sd.pyload_lora_for_modelsr1   W   sJ   G**11%++wG**11$2G2GQ**40DZZ!!$0F ;;=((@,,_mL::<!!&-8,,_mLAA	RBQJQb[OOO22156  h''    c                    i }| *t         j                  j                  | j                  |      }|*t         j                  j	                  |j
                  |      }t        j                  dt        |       d       t         j                  j                  |      }t         j                  j                  ||      }t        j                  dt        |       d       i }i }|j                         D ]4  \  }	}
t        |
t         j                  j                        r|
||	<   0|
||	<   6 t        j                  dt        |       dt        |       d       t!               }t!               }| | j#                         }|r#|j%                  ||      }|j'                  |       t         j                  j)                         }t!        |j                  j+                         j-                               }|j                         D ]G  \  }	}|	|v r&|j/                  |	||       |j1                  |	       0t        j2                  d	|	        I |j5                  |j                        }|j7                         d
kD  r|j9                  d|       nd}||j#                         }|r#|j%                  ||      }|j'                  |       t         j                  j)                         }t!        |j
                  j+                         j-                               }|j                         D ]/  \  }	}|	|v s|j/                  |	||       |j1                  |	       1 |j5                  |j
                        }|j7                         d
kD  r|j:                  j9                  d|       nd}|D ][  }||vs||vs||   }
t=        |
      j>                  }t        |
t@              r	d|
d
    d}t        j2                  d| d| d       ] ||fS )an  
    Load LoRA in bypass mode without modifying base model weights.

    Instead of patching weights, this injects the LoRA computation into the
    forward pass: output = base_forward(x) + lora_path(x)

    Non-adapter patches (bias diff, weight diff, etc.) are applied as regular patches.

    This is useful for training and when model weights are offloaded.
    Nz[BypassLoRA] key_map has z entriesz[BypassLoRA] loaded has z[BypassLoRA] z bypass adapters, z regular patches)strengthz2[BypassLoRA] Adapter key not in model state_dict: r   bypass_loraztuple()zNOT LOADED: z (type=)!r   r   r   r   r   r   r#   debuglenr   r   r   items
isinstanceweight_adapterWeightAdapterBaser"   r   r   updateBypassInjectionManager
state_dictkeysadd_adapteraddr$   create_injectionsget_hook_countset_injectionsr!   type__name__tuple)r   r&   r   r'   r(   r)   r*   bypass_patchesregular_patcheskey
patch_datar,   r.   r+   patched_keysmanagermodel_sd_keysadapter
injectionsr-   clip_managerclip_sd_keysclip_injectionsr/   
patch_types                            r0   load_bypass_lora_for_modelsrV   z   s    G**11%++wG**11$2G2GQMM-c'l^8DE**40DZZ!!$0FMM,S[MBC NO!<<>Zj%"6"6"H"HI",N3#-OC 	 * MMM#n"5!66H_I]H^^nopA	B ;;= +77XLHH\" &&==?,22==?DDFG*002LCm###C>#Jc
"TUXTY Z[ 3 ../?/E/EF
!!#a'++M:F::< #//OLIIl# ++BBD844??AFFHI*002LCl"((g(Ns 3
 '889R9RS&&(1,++M?KQJQb[Jj)22J*e,%jm_A6
OOl1#WZLBC  h''r2   c                       e Zd Zdddi dg i dfdZddZddZd Zd Zdd	Zd
e	e
   fdZdi dfde	e
   fdZddZd ZddZd Zd Zi fdZd ZddZddZy)CLIPNFr   c	                    |ry |j                   j                         }	|j                  }
|j                  }|j	                  dt        j                               }|j	                  dt        j                               }|j	                  dd       }|t        j                  |      }||	d<   |j	                  dt        j                  |||t        j                  |      z              |	d<   ||	d<    |
di |	| _        | j                  j                  D ]T  }t        j                  ||      r|}|	d   |k7  s%| j                  j                  |       t        j                   d       V t        j"                  | j                          |||      | _        |xs t%        | j                  d	d
      }|rt&        j(                  j*                  nt&        j(                  j,                  } || j                  ||      | _        | j.                  j1                  t2        j4                         t&        j6                  j8                  j:                  | j.                  _        d| j.                  _        d | _         tC        |      dkD  rTtE        |tF              r|D ]{  }| jI                  |      \  }}tC        |      dkD  r$t        j                   djK                  |             tC        |      dkD  sXt        jL                  djK                  |             } n| jI                  |d      \  }}tC        |      dkD  rmtG        tO        d |            }tC        |      dkD  r%t        j                   djK                  |             n$t        jL                  djK                  |             tC        |      dkD  r$t        jL                  djK                  |             |	d   |k(  r"t        jP                  | j.                  gd       d | _)        d
| _*        t        jV                  djK                  |||	d   |             i | _,        y )Nload_deviceoffload_devicedtypeinitial_devicedevicemodel_optionszHad to shift TE back.)embedding_directorytokenizer_datadisable_offloadFrZ   r[   Tr   zclip missing: {}zclip unexpected: {})
full_modelc                     d| vxr d| vS )Nz.logit_scalez#.transformer.text_projection.weightr   as    r0   <lambda>zCLIP.__init__.<locals>.<lambda>  s    ^15L5Qv~Q5r2   zclip unexpected {}:force_full_loadzSCLIP/text encoder model load device: {}, offload device: {}, current: {}, dtype: {}r   )-paramscopyr&   	tokenizergetr   text_encoder_devicetext_encoder_offload_devicetext_encoder_dtypetext_encoder_initial_device
dtype_sizer   dtypessupports_casttor#   r$   archive_model_dtypesgetattrr   model_patcherModelPatcherCoreModelPatcherr!   set_model_compute_dtypetorchfloat32hooksEnumHookModeMinVram	hook_modeis_clipapply_hooks_to_condsr8   r:   listload_sdr%   r7   filterload_models_gpu	layer_idxuse_clip_scheduleinfotokenizer_options)selftargetr`   no_initra   
parametersr?   r_   disable_dynamicrk   r&   rm   rZ   r[   r\   dtte_disable_dynamicrz   cmum_filters                         r0   __init__zCLIP.__init__   s   ##%{{$$	#''7G7[7[7]^&**+;=M=i=i=kl!!'40=$77DEw(,,-=?O?k?klw  zH  JT  Wg  Wr  Wr  sx  Wy  Jy  @z  {x"/ $ 0 0''..B#11+rB,(#~5)),,^<OO$;< / 	--d.C.CD"7J[ij,h8M8MO`bg0h;Mu**77SXSfSfSwSw#D$9$9{cqr,,U]];!&!9!9!A!A#$(!z?Q*d+#A<<?DAq1vz(:(A(A!(DE1vz&;&B&B1&EF $ ||J4|@1q6A:#F+  BC  %D   EH8}q((:(A(A!(DE&8&?&?&BCq6A:MM"7">">q"AB({*,,dll^TR!&jqqr}  @N  PV  W_  P`  bg  h  	i!#r2   c                 H   t        d      }| j                  j                  |      |_        | j                  |_        | j                  |_        | j
                  |_        | j                  j                         |_        | j                  |_        | j                  |_	        |S )NT)r   )r   )
rX   r!   r   r   rm   r   r   rl   r   r   )r   r   ns      r0   r   z
CLIP.clone  s    LL&&&G	!22nnnn"4499;"44!%!:!:r2   c                 <    | j                   j                  |||      S N)r!   r   )r   patchesstrength_patchr'   s       r0   r   zCLIP.add_patches*  s    ||''PPr2   c                 "    || j                   |<   y r   )r   )r   option_namevalues      r0   set_tokenizer_optionzCLIP.set_tokenizer_option-  s    .3{+r2   c                     || _         y r   )r   )r   r   s     r0   
clip_layerzCLIP.clip_layer0  s	    "r2   c                     |j                  di       }t        | j                        dkD  ri | j                  |}t        |      dkD  r||d<    | j                  j                  ||fi |S )Nr   r   )rn   r8   r   rm   tokenize_with_weights)r   textreturn_word_idskwargsr   s        r0   tokenizezCLIP.tokenize3  su    "JJ':B?t%%&* O4#9#9 O=N O !A%*;F&'3t~~33D/TVTTr2   pooled_dictc                 <    | j                   r| j                   |d<   |S )Nr   )r   )r   r   s     r0   add_hooks_to_dictzCLIP.add_hooks_to_dict;  s!    $$#'#<#<K r2   Tadd_dictc                 `   g }| j                   j                  }|| j                  sQ|rdnd}| j                  ||d      }|j	                  d      }	|j                  |       |j                  |	|g       |S |j                         }
| j                  j                          | j                  '| j                  j                  d| j                  i       |r| j                  j                  ddi       | j                  |       | j                   j                  }| j                  j                  d|i       |j                          | j                   j                  d        |rt!        t#        |
            }t%        j&                  |      5  |
D ]  }|d	   }d
|v r|d   |d
   k  rd|v r|d	   |d   kD  r(|d   }|D ]  \  }}||j(                  _         | j                   j                  |       | j                  j-                  |      }|d d \  }	}d|i}|d	   |d<   |d   |d<   |j                  |       | j/                  |       |j                  |	|g       |rj                  d       t%        j0                           	 d d d        |j                          |S # 1 sw Y   xY w)NunprojectedT)return_pooledreturn_dictcondlayerprojected_pooledFexecution_devicer   start_percentr   end_percent   pooled_outputclip_start_percentclip_end_percent)r!   forced_hooksr   encode_from_tokenspopr=   appendget_hooks_for_clip_scheduler   reset_clip_optionsr   set_clip_options
load_modelrZ   resetpatch_hooksr   r8   r   cuda_device_contexthook_keyframe_current_keyframeencode_token_weightsr   )throw_exception_if_processing_interrupted)r   tokensr   r   	show_pbarall_cond_pooled	all_hooksr   r   r   scheduled_keyframesr^   pbarscheduled_optst_rangehooks_keyframeshookkeyframeopooleds                       r0   encode_from_tokens_scheduledz!CLIP.encode_from_tokens_scheduled@  s   @BLL--	D$:$:-8MdM11&cg1hK??6*Dx(""D+#67b _ #,"G"G"I!!446~~)%%667PQ%%668JE7RSOOF#\\--F!!224F3OPOOLL$$T*"3':#;<!55f=&9N,Q/G&(2"1:(AA$$0"1:(??$&4Q&7O*9h?G**< +: LL,,Y7--BB6JA#$Ra5LD&#2F";K8?
K 456=ajK 23&&x0**;7#**D++>? A$NNP9 ': >< OO? >=s   C;J$$J-c                    | j                   j                          | j                  '| j                   j                  d| j                  i       |dk(  r| j                   j                  ddi       | j	                  |       | j
                  j                  }| j                   j                  d|i       t        j                  |      5  | j                   j                  |      }d d d        d d \  }}|r;||d}t        |      dkD  r|d   D ]  }	|d   |	   ||	<    | j                  |       |S |r||fS |S # 1 sw Y   VxY w)Nr   r   r   Fr   r   )r   r   )r   r   r   r   r   r!   rZ   r   r   r   r8   r   )
r   r   r   r   r^   r   r   r   outr,   s
             r0   r   zCLIP.encode_from_tokens}  s1   002>>%!!22GT^^3LMM)!!224F3NO))..0BF/KL11&9%%::6BA : !uf&9C1vz1AqT!WCF ""3'J< :9s   	D::Ec                 F    | j                  |      }| j                  |      S r   )r   r   )r   r   r   s      r0   encodezCLIP.encode  s!    t$&&v..r2   c                 J   |r6| j                   j                  |d| j                  j                               S | j                  j                         }|| j                   _        | j                   j                         D ]	  }||_         | j                   j                  |      S )NFstrictassign)r   load_state_dictr!   
is_dynamiccan_assign_sdmodulesr   )r   sdrd   
can_assignr   s        r0   r   zCLIP.load_sd  s    ((88ERVR^R^RiRiRk8ll002J2<D!!/ **224", 5 ((0044r2   c                     | j                   j                         }| j                  j                         }|D ]
  }||   ||<    |S r   )r   r?   rm   r   sd_clipsd_tokenizerr,   s       r0   get_sdzCLIP.get_sd  sD    ''224~~002A%aGAJ r2   c                     | j                   j                         }| j                  j                         }|D ]
  }||   ||<    |S r   )r!   model_state_dict_for_savingrm   r?   r   s       r0   state_dict_for_savingzCLIP.state_dict_for_saving  sB    ,,::<~~002A%aGAJ r2   c                     d}t        | j                  d      r1| j                  j                  || j                  j                        }t        j                  | j                  g|       | j                  S )Nr   memory_estimation_functionr^   )memory_required)hasattrr   r   r!   rZ   r   r   )r   r   memory_useds      r0   r   zCLIP.load_model  s`    4((*FG//JJ6Z^ZfZfZrZrJsK(($,,U||r2   c                 6    | j                   j                         S r   )r!   get_key_patchesr   s    r0   r   zCLIP.get_key_patches  s    ||++--r2   c                    | j                   j                          | j                  |       | j                  j                  }| j                   j                  dd i       | j                   j                  d|i       t        j                  |      5  | j                   j                  |||||||||	|

      cd d d        S # 1 sw Y   y xY w)Nr   r   )		do_sample
max_lengthtemperaturetop_ktop_pmin_prepetition_penaltyseedpresence_penalty)	r   r   r   r!   rZ   r   r   r   generate)r   r   r   r   r   r   r   r   r   r  r  r^   s               r0   r  zCLIP.generate  s    002))..?..0BF/KL11&9((11&IZdr}  FK  SX  `e  zL  SW  jz1  { :99s   %C  C	c                 <    | j                   j                  ||      S )N)skip_special_tokens)rm   decode)r   	token_idsr  s      r0   r  zCLIP.decode  s    ~~$$YDW$XXr2   )F)      ?r  )FF)	T   r  2   gffffff?        r  Nr  )T)rG   
__module____qualname__r   r   r   r   r   r   dictstrr   r   r   r   r   r   r   r   r   r  r  r   r2   r0   rX   rX      s    "e\^kly{  LN  `e ?$B	Q4#UT#Y 
 @EZ\hl ;PTUXPY ;z:/5  !# .	{Yr2   rX   c                       e Zd Zd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dZi fdZddZd ZddZd Zd Zd Zd Zy)VAENc                 x.   d|j                         v rt        j                  |      }t        j                         rdndfd| _        fd| _        d| _        d| _        d| _	        d| _
        d	| _        d | _        d
 | _        d | _        t        j                   t        j"                  g| _        d| _        d| _        d | _        d | _        d | _        d | _        d| _        d| _        |d|v rHdddd	d	dg ddg dd
}|j7                         }g d|d<   d|d<   t9        ddid|dd|d      | _        nd|v rqt=        |t>              rd|v r|d   | _	        n|d   j@                  d    | _	        tB        jD                  jD                  jG                  | j                  !      | _        n]d"|v r/tI               | _        d| _        d| _        d# | _        d$ | _        n*d%|v rAtK               | _        d&| _        d'| _	        i }|D ]  }	||	   |d(jM                  |	      <    |}nd)|v r:tK               | _        d'| _	        i }|D ]  }	||	   |d*jM                  |	      <    |}nd+|v rtK               | _        d&| _        d'| _	        nd,|v r|d,   j@                  d    d-k(  rg d.d	d	dd&ddd/}
|d,   j@                  d    x| _	        |
d0<   d&| _        d&| _        t        jN                  t        j                   t        j"                  g| _        t9        ddid1|
dd2|
d      | _        d3 | _        d4 | _        n|d,   j@                  d    d&k(  r|d,   jP                  d5k(  rg d6d	d	dd'ddddd7	}
|d,   j@                  d    x| _	        |
d0<   t        jN                  t        j                   t        j"                  g| _        d8 d'd'f| _        d9| _        d: d'd'f| _        d9| _        d	| _
        d| _        t9        ddid;|
dd<|
d      | _        d= | _        d> | _        ndddd	d	dg ddg dd
}
d?|vrd@|vrg dA|
dB<   d| _        d| _        |d,   j@                  d    x| _	        |
d0<   dC|v r#tB        jR                  jU                  |dDdEdF      }dG|v rZd|
dH<   | xj                  dz  c_        | xj                  dz  c_        | xj                  dz  c_	        | j                  fdI| _        |d,   j@                  dJ   |
dB   dK   z  }||
dL   k7  r|
j7                         }||dL<   nd }dM|v r+tW        d|
|dM   j@                  d    dN|dO|ini | _        nt9        ddid|
ddP||n|
d      | _        ndQ|v ri }d }dR| _        dR| _        dS|v rdS}dT|v rdT}|1||   j@                  dK   dUk(  rg dV|dW<   dX| _        dY| _        dY| _        tY        di || _        dZ | _        d[ | _        d-| _	        d| _        d\| _        d | _
        d] | _        d^ | _        t        jN                  t        j                   t        j"                  g| _        d| _        nd_|v sd`|v sda|v sdb|v rd_|v r"tB        jR                  jU                  |dcddi      }da|v r"tB        jR                  jU                  |dcdei      }tB        jZ                  j\                  j^                  j`                  jc                         | _        dU| _	        d	| _
        df | _        dg | _        dh ddf| _        di| _        dj ddf| _        di| _        t        jN                  t        j"                  g| _        ndk|v r|dk   }dJ}|j@                  dJ   dlk(  rdJ}n|j@                  dJ   dmk(  rd }dn|v rd}d }|,do|v r(te        jf                  |do         ji                  dpd       }tB        jZ                  jj                  j^                  jl                  jc                  ||q      | _        d| _	        d	| _
        dr | _        ds | _        dt d&d&f| _        du| _        dv d&d&f| _        du| _        t        j                   t        j"                  g| _        ndw|v r|dw   j@                  d    d&k(  rg d6d	d	dd'ddddx}
|dw   j@                  d    |
d0<   d&| _	        dy d'd'f| _        d9| _        dz d'd'f| _        d9| _        d	| _
        d| _        t        jN                  t        j                   t        j"                  g| _        t9        dd{id;|
dd<|
d      | _        d| | _        d} | _        ndw|v rd~|v rd ddf| _        d| _        d ddf| _        d| _        d	| _
        |d   j@                  dJ   dz  | _	        tB        jZ                  jn                  j^                  jq                  | j                  !      | _        d | _        d | _        t        j                   t        jN                  t        j"                  g| _        
ndw|v rdddd	d	dg ddg dd
}
d|
d<   d|
d<   d ddf| _        d| _        d ddf| _        d| _        d	| _
        |dw   j@                  d    x| _	        |
d0<   tW        |
|dM   j@                  d    N      | _        d | _        d | _        t        j                   t        jN                  t        j"                  g| _        
n$d|v rd ddf| _        d| _        d ddf| _        d| _        d	| _
        d'| _	        d'| j                  d dmd	d	dg ddd&gddd ddd}
tC        jZ                  jr                  j^                  jt                  di |
| _        d | _        d | _        t        j                   t        j"                  g| _        	n`d|v rd|v rd d'd'f| _        d9| _        d d'd'f| _        d9| _        d	| _
        d| _	        d| j                  g ddg g ddd}
tC        jZ                  jv                  jx                  jz                  di |
| _        t        j                   t        jN                  t        j"                  g| _        d | _        d | _        n|d   j@                  dJ   }d ddf| _        d| _        d ddf| _        d| _        d	| _
        d'| _	        |d   j@                  d    | _        |d   j@                  dJ   | _>        d| _        || j                  g ddg g d| j                  | j|                  dd	}
tC        jZ                  jv                  j^                  jz                  di |
| _        t        j                   t        jN                  t        j"                  g| _        d | _        d | _        njd|v rd | _
        dddfd	| _        dfd	| _        tB        jZ                  j~                  j^                  j                         | _        t        jN                  t        j                   t        j"                  g| _        nd|v rtB        jZ                  j                  j^                  j                  j                  d      | _        d | _        d | _        d| _	        d| _        d\| _        d| _        d| _        d| _
        d | _        d | _        t        j                   t        jN                  t        j"                  g| _        d| _        d'| _        nd|v r_tB        j                  j                         | _        d | _        d | _        d | _        d | _        d	| _	        d| _
        d	| _        d| _        nd|v rd}|dk(  rd}nd}tB        jZ                  j                  j^                  j                  j                  |      | _        d | _        d | _        d| _	        d| _        dld|z  z  | _        dld|z  z  | _        d | _
        d | _        d | _        t        j"                  g| _        d| _        nd|v r|d   j@                  d    | _	        d	| _
        d d'd'f| _        d9| _        d d'd'f| _        d9| _        | j                  dv r[tB        jD                  j                  j                  | j                  d «      | _        dÄ x| _        | _        dĄ | _        dń | _        n/| j                  d&k(  rq|d   j@                  dJ   dUk(  r\tB        jD                  j                  j                  | j                  tB        j                  j                  «      | _        dƄ | _        n|d   j                  t        jN                  k(  rtB        j                  j                  }nd }tB        jD                  j                  j                  | j                  |«      | _        dǄ x| _        | _        dȄ ddf| _        d| _        dɄ ddf| _        d| _        dʄ | _        d˄ | _        nd|v sd|v rtB        jR                  jU                  |ddi      }tB        jZ                  jj                  j^                  j                  j                  |Ы      | _        dф | _        d҄ | _        | j:                  j                  | _	        | j:                  j                  | _R        | j:                  j                  | _G        d| _        d\| _        d| _        d| _        d| _
        dӄ | _        dԄ | _        t        j"                  g| _        d| _        d'| _        nd|v rd|v rddUdd d gddddל}d؄ | _        dل | _        ndddJd dd&ddל}dۄ | _        d܄ | _        tC        jZ                  j                  j                  j                  di || _        d| _	        d| _        d| _        d| _        d | _
        d| _        d݄ | _        dބ | _        t        j                   t        jN                  t        j"                  g| _        tB        j                  j                  sd| _        nd|v rd|v rtB        jZ                  j                  j^                  j                         | _        d'| _	        d | _
        t        jN                  t        j                   t        j"                  g| _        d }|x| _        | _        n0t        j                  d       d | _        y tW        di |d   | _        | j:                  j                         | _        |t        j                         }|| _^        t        j                         }|*t        j                  | j                  | j$                        }|| _`        | j:                  j                  | j                         t        j                  | j:                         t        j                         | _d        tB        j                  j                  }| j&                  rtB        j                  j                  } || j:                  | j                  |      | _h        | j:                  j                  |d| j                  j                               \  }}t        |      dJkD  r$t        j                  djM                  |             t        |      dJkD  r$t        j                  djM                  |             t        j                  djM                  | j                  || j                               | j                          y )Nz*decoder.up_blocks.0.resnets.0.norm1.weightgףp=
@r  c                 R    d| d   z  | d   z  t        j                  |      z  z  S )Ni  r      r   rs   shaper\   VAE_KL_MEM_RATIOs     r0   rh   zVAE.__init__.<locals>.<lambda>  s6    uQx%PQ(8RVfVqVqrwVx7x  |L  8Lr2   c                 X    d| d   z  | d   z  dz  t        j                  |      z  z  S )Ni  r   r  @   r  r  s     r0   rh   zVAE.__init__.<locals>.<lambda>  s<    uQx%PQ(8RUW8W[k[v[vw|[}7}  AQ  8Qr2         r   r  c                     | dz  dz
  S )N       @r  r   images    r0   rh   zVAE.__init__.<locals>.<lambda>  s    53;+<r2   c                 b    | j                  d      j                  d      j                  dd      S )Nr  r  r  )add_div_clamp_r  s    r0   rh   zVAE.__init__.<locals>.<lambda>  s%    EJJsO,@,@,E,L,LSRU,Vr2   FTiD  zdecoder.mid.block_1.mix_factorr	     )r   r   r  r  r  )
double_z
z_channels
resolutionin_channelsout_chchch_multnum_res_blocksattn_resolutionsdropout)r  r   r   video_kernel_sizealphar   z8comfy.ldm.models.autoencoder.DiagonalGaussianRegularizerz0comfy.ldm.modules.diffusionmodules.model.Encoder)r   rk   z*comfy.ldm.modules.temporal_ae.VideoDecoder)regularizer_configencoder_configdecoder_configztaesd_decoder.1.weighttae_latent_channelsr   )latent_channelszvquantizer.codebook.weightc                     | S r   r   r  s    r0   rh   zVAE.__init__.<locals>.<lambda>
      5r2   c                     | S r   r   r  s    r0   rh   zVAE.__init__.<locals>.<lambda>      Er2   z*backbone.1.0.block.0.1.num_batches_tracked       z
encoder.{}zblocks.11.num_batches_trackedzpreviewer.{}z2encoder.backbone.1.0.block.0.1.num_batches_trackedzdecoder.conv_in.weightr  )r%  r	     r=     r>  )block_out_channelsr)  out_channelsr-  ffactor_spatialdownsample_match_channelupsample_match_channelr'  z#comfy.ldm.hunyuan_video.vae.Encoderz#comfy.ldm.hunyuan_video.vae.Decoderc                 J    d| d   z  | d   z  t        j                  |      z  S )N  r   r  r  r  r\   s     r0   rh   zVAE.__init__.<locals>.<lambda>*  s7    C%PQ(NUZ[\U]D]aqa|a|  ~C  bD  DDr2   c                 V    d| d   z  | d   z  dz  dz  t        j                  |      z  S )NrE  r   r  r;  r  rF  s     r0   rh   zVAE.__init__.<locals>.<lambda>+  sK    C%PQ(NUZ[\U]D]`bDbegDgk{  lG  lG  HM  lN  DNr2      )r%  r	  r=  r>  r>  )	r?  r)  r@  r-  rA  ffactor_temporalrB  rC  refiner_vaec                 &    t        d| dz  dz
        S Nr   r  r  maxrf   s    r0   rh   zVAE.__init__.<locals>.<lambda>0      C1q5194Er2   )r  r<  r<  c                 L    t        dt        j                  | dz   dz              S Nr   r  r  rN  mathfloorrf   s    r0   rh   zVAE.__init__.<locals>.<lambda>2      c!TZZQRS=T6Ur2   z+comfy.ldm.hunyuan_video.vae_refiner.Encoderz+comfy.ldm.hunyuan_video.vae_refiner.Decoderc                 J    d| d   z  | d   z  t        j                  |      z  S )N
  r  rF  s     r0   rh   zVAE.__init__.<locals>.<lambda>:  s8    D5QS9DTW\]_W`D`dtdd  AF  eG  DGr2   c                 b    d| d   z  | d   z  | d   z  dz  dz  t        j                  |      z  S )NrW  rX  rY  r<  r  rF  s     r0   rh   zVAE.__init__.<locals>.<lambda>;  s\    D5QS9DTW\]_W`D`chikclDloqDqtvDv  {K  {V  {V  W\  {]  D]r2   z%encoder.down.2.downsample.conv.weightz!decoder.up.3.upsample.conv.weight)r   r   r  r,  zdecoder.post_quant_conv.weightzpost_quant_conv.zquant_conv.)zdecoder.post_quant_conv.zencoder.quant_conv.zbn.running_meanbatch_norm_latentc                      | |      dz  S )Ng      @r   )r  r\   old_memory_used_decodes     r0   rh   zVAE.__init__.<locals>.<lambda>O  s    G]^cejGkorGrr2   r   rY  r+  zpost_quant_conv.weight)ddconfig	embed_dimdecoder_ddconfigz0comfy.ldm.modules.diffusionmodules.model.Decoderzdecoder.layers.1.layers.0.beta   z"decoder.layers.2.layers.1.weight_vz;decoder.layers.2.layers.1.parametrizations.weight.original1   )r   r  r     
   stridesi  i  c                 >    d| d   z  t        j                  |      z  S )N  r   r  rF  s     r0   rh   zVAE.__init__.<locals>.<lambda>o  s    uQxScSnSnotSu?ur2   c                 D    d| d   z  dz  t        j                  |      z  S )Nrh  r   rb  r  rF  s     r0   rh   zVAE.__init__.<locals>.<lambda>p  s$    uQxRV@VZjZuZuv{Z|?|r2   	replicatec                     | S r   r   audios    r0   rh   zVAE.__init__.<locals>.<lambda>u  r:  r2   c                     | S r   r   rl  s    r0   rh   zVAE.__init__.<locals>.<lambda>v  r8  r2   z blocks.2.blocks.3.stack.5.weightz(decoder.blocks.2.blocks.3.stack.5.weightz,layers.4.layers.1.attn_block.attn.qkv.weightz4encoder.layers.4.layers.1.attn_block.attn.qkv.weight zdecoder.zencoder.c                 \    d| d   z  | d   z  | d   z  dz  t        j                  |      z  S )Nrh  r   r  r    r  rF  s     r0   rh   zVAE.__init__.<locals>.<lambda>  T    uQxRWXYRZ@Z]bcd]e@eir@s  xH  xS  xS  TY  xZ  @Zr2   c                 p    dt        | d   d      z  | d   z  | d   z  dz  t        j                  |      z  S )Ng      ?r      r  r  rq  rN  r   rs   rF  s     r0   rh   zVAE.__init__.<locals>.<lambda>  s^    c%PQ(TUFV@VY^_`Ya@adijkdl@lpy@z  O  Z  Z  [`  a  @ar2   c                 &    t        d| dz  dz
        S )Nr   rd  rH  rM  rf   s    r0   rh   zVAE.__init__.<locals>.<lambda>      Aq1uqy0Ar2   )rd  r  r  c                 L    t        dt        j                  | dz   dz              S )Nr   rH  rd  rR  rf   s    r0   rh   zVAE.__init__.<locals>.<lambda>      #aQUaK9P2Qr2   z2decoder.up_blocks.0.res_blocks.0.conv1.conv.weightr=  r>  z$encoder.down_blocks.1.conv.conv.biasconfigvae)versionrz  c                 \    d| d   z  | d   z  | d   z  dz  t        j                  |      z  S )N  r   r  r  r=  r  rF  s     r0   rh   zVAE.__init__.<locals>.<lambda>  rr  r2   c                 j    dt        | d   d      z  | d   z  | d   z  t        j                  |      z  S )NP   r   rt  r  r  ru  rF  s     r0   rh   zVAE.__init__.<locals>.<lambda>  sS    SqSTEU@UX]^_X`@`chijck@ko  pK  pK  LQ  pR  @Rr2   c                 &    t        d| dz  dz
        S Nr   r  rt  rM  rf   s    r0   rh   zVAE.__init__.<locals>.<lambda>  rw  r2   )r  r;  r;  c                 L    t        dt        j                  | dz   dz              S Nr   rt  r  rR  rf   s    r0   rh   zVAE.__init__.<locals>.<lambda>  ry  r2   zdecoder.conv_in.conv.weight)r?  r)  r@  r-  rA  rI  rB  rC  c                 &    t        d| dz  dz
        S rL  rM  rf   s    r0   rh   zVAE.__init__.<locals>.<lambda>  rw  r2   c                 L    t        dt        j                  | dz   dz              S rQ  rR  rf   s    r0   rh   zVAE.__init__.<locals>.<lambda>  ry  r2   z-comfy.ldm.models.autoencoder.EmptyRegularizerc                 J    d| d   z  | d   z  t        j                  |      z  S )Ni81  rX  rY  r  rF  s     r0   rh   zVAE.__init__.<locals>.<lambda>  s8    5QS9@TW\]_W`@`dtdd  AF  eG  @Gr2   c                 V    d| d   z  | d   z  dz  dz  t        j                  |      z  S )Ni@8  rX  rY  r<  r  rF  s     r0   rh   zVAE.__init__.<locals>.<lambda>  sL    5QS9@TW\]_W`@`ce@ehj@jn~  oJ  oJ  KP  oQ  @Qr2   z3decoder.mid_block.resnets.0.norm1.norm_layer.weightc                 &    t        d| dz  dz
        S rL  rM  rf   s    r0   rh   zVAE.__init__.<locals>.<lambda>  rw  r2   )r  r  r  c                 L    t        dt        j                  | dz   dz              S rQ  rR  rf   s    r0   rh   zVAE.__init__.<locals>.<lambda>  ry  r2   zencoder.conv_out.conv.weightc                     dt        d| d   dz
  dz  dz         z  | d   z  | d   z  dz  t        j                  |      z  S )NrW  r   r   r  r  r  ru  rF  s     r0   rh   zVAE.__init__.<locals>.<lambda>  y    s1PUVWPX[\P\`aOaefNfGg@gjopqjr@ruz{|u}@}  BG  AH  L\  Lg  Lg  hm  Ln  @nr2   c                 j    dt        d| d         z  | d   z  | d   z  t        j                  |      z  S )Nx  r   r   r  r  ru  rF  s     r0   rh   zVAE.__init__.<locals>.<lambda>  W    s1eTUhGW@WZ_`aZb@bejklem@m  rB  rM  rM  NS  rT  @Tr2   conv3dtime_compressc                 &    t        d| dz  dz
        S rL  rM  rf   s    r0   rh   zVAE.__init__.<locals>.<lambda>  rw  r2   c                 L    t        dt        j                  | dz   dz              S rQ  rR  rf   s    r0   rh   zVAE.__init__.<locals>.<lambda>  ry  r2   c                     dt        d| d   dz
  dz  dz         z  | d   z  | d   z  dz  t        j                  |      z  S )NrW  r  r   r   r  r  r  minr   rs   rF  s     r0   rh   zVAE.__init__.<locals>.<lambda>  r  r2   c                 j    dt        d| d         z  | d   z  | d   z  t        j                  |      z  S )Nr  	   r   r  r  r  rF  s     r0   rh   zVAE.__init__.<locals>.<lambda>  r  r2   zdecoder.unpatcher3d.waveletsc                 &    t        d| dz  dz
        S r  rM  rf   s    r0   rh   zVAE.__init__.<locals>.<lambda>  rw  r2   )r  r  r  c                 L    t        dt        j                  | dz   dz              S r  rR  rf   s    r0   rh   zVAE.__init__.<locals>.<lambda>  ry  r2   )r   r  r  )r'  r6  z_factorr(  r)  r@  channelschannels_multr-  r.  r/  
patch_size
num_groupstemporal_compressionspacial_compressionc                 \    d| d   z  | d   z  | d   z  dz  t        j                  |      z  S )Nr
  r   r  r  r=  r  rF  s     r0   rh   zVAE.__init__.<locals>.<lambda>  sT    U1XPUVWPX@X[`ab[c@cgp@q  vF  vQ  vQ  RW  vX  @Xr2   c                 z    dt        | d   dz   dz        dz  z  | d   z  | d   z  t        j                  |      z  S )Nr
  r   rt  r  r  r  )roundr   rs   rF  s     r0   rh   zVAE.__init__.<locals>.<lambda>  sf    eUSTXXY\]^L^F_bcFc@dglmngo@orwxyrz@z  O  Z  Z  [`  a  @ar2   z!decoder.middle.0.residual.0.gammaz1decoder.upsamples.0.upsamples.0.residual.2.weightc                 &    t        d| dz  dz
        S rL  rM  rf   s    r0   rh   zVAE.__init__.<locals>.<lambda>  rO  r2   c                 L    t        dt        j                  | dz   dz              S rQ  rR  rf   s    r0   rh   zVAE.__init__.<locals>.<lambda>  rU  r2   0      )FTT)dimz_dimdim_multr-  attn_scalestemperal_downsampler/  c                 J    d| d   z  | d   z  t        j                  |      z  S )Ni  r  r  r  rF  s     r0   rh   zVAE.__init__.<locals>.<lambda>  s7    4%PQ(?UZ[\U]C]`p`{`{  }B  aC  DCr2   c                 P    d| d   z  | d   z  dz  t        j                  |      z  S )Ni@  r  r  r	  r  rF  s     r0   rh   zVAE.__init__.<locals>.<lambda>  sE    4%PQ(?UZ[\U]C]ahCil|  mH  mH  IN  mO  DOr2   zdecoder.head.0.gammac                 &    t        d| dz  dz
        S rL  rM  rf   s    r0   rh   zVAE.__init__.<locals>.<lambda>  rO  r2   c                 L    t        dt        j                  | dz   dz              S rQ  rR  rf   s    r0   rh   zVAE.__init__.<locals>.<lambda>  rU  r2   zencoder.conv1.weightzdecoder.head.2.weight)	r  r  r  r-  r  r  image_channelsconv_out_channelsr/  c                 ^    | d   dk  rdnd| d   z  | d   z  t        j                  |      z  S )Nr   r    ip  r  r  rF  s     r0   rh   zVAE.__init__.<locals>.<lambda>  sU    ERSHVWKD]aejklemCmpuvwpxCx  |L  |W  |W  X]  |^  D^r2   c                 d    | d   dk  rdnd| d   z  | d   z  dz  t        j                  |      z  S )Nr   r  i  iX  r  r  r  rF  s     r0   rh   zVAE.__init__.<locals>.<lambda>  s_    ERSHVWKD]aejklemCmpuvwpxCx|  DA  DT  D_  D_  `e  Df  Dfr2   z(geo_decoder.cross_attn_decoder.ln_1.biasc                 d    | \  }}}t        j                  |      }||z  |z  |z  d||z  z   z  }|S )Nr   r  )	r  r\   
num_layerskv_cache_multiplierbatch
num_tokens
hidden_dimrs   	total_mems	            r0   estimate_memoryz%VAE.__init__.<locals>.estimate_memory  sJ    491E:z!1!<!<U!CJ %
 2Z ?* LPQTgjtTtPt uI$$r2   c                      | |||      S r   r   r  r\   r  r  r  s       r0   rh   zVAE.__init__.<locals>.<lambda>      #E5*>QRr2   c                      | |||      S r   r   r  s       r0   rh   zVAE.__init__.<locals>.<lambda>  r  r2   z(vocoder.backbone.channel_layers.0.0.bias)source_sample_ratec                 >    | d   dz  t        j                  |      z  S Nr   iJ  r  rF  s     r0   rh   zVAE.__init__.<locals>.<lambda>      a3RbRmRmnsRt?tr2   c                 J    | d   | d   z  dz  t        j                  |      z  S Nr   r  iS r  rF  s     r0   rh   zVAE.__init__.<locals>.<lambda>  6    a5QR8@SV[@[_o_z_z  |A  `B  @Br2      c                     | S r   r   rl  s    r0   rh   zVAE.__init__.<locals>.<lambda>  r:  r2   c                     | S r   r   rl  s    r0   rh   zVAE.__init__.<locals>.<lambda>  r8  r2   pixel_space_vaec                 J    d| d   z  | d   z  t        j                  |      z  S Nr   r   r  r  rF  s     r0   rh   zVAE.__init__.<locals>.<lambda>  (    E!HuUVx@W[k[v[vw|[}?}r2   c                 J    d| d   z  | d   z  t        j                  |      z  S r  r  rF  s     r0   rh   zVAE.__init__.<locals>.<lambda>  r  r2   z1vocoder.activation_post.downsample.lowpass.filteri>  16k44k)modec                 >    d| d   z  t        j                  |      z  S )N   r   r  rF  s     r0   rh   zVAE.__init__.<locals>.<lambda>.  s    U1XQaQlQlmrQs?sr2   c                 D    d| d   z  dz  t        j                  |      z  S )NZ   r   g@r  rF  s     r0   rh   zVAE.__init__.<locals>.<lambda>/  s$    U1XPV@VZjZuZuv{Z|?|r2      c                     | S r   r   rl  s    r0   rh   zVAE.__init__.<locals>.<lambda>5  r:  r2   c                     | S r   r   rl  s    r0   rh   zVAE.__init__.<locals>.<lambda>6  r8  r2   zdecoder.22.biaszdecoder.1.weightc                 &    t        d| dz  dz
        S rL  rM  rf   s    r0   rh   zVAE.__init__.<locals>.<lambda><  rw  r2   c                 L    t        dt        j                  | dz   dz              S rQ  rR  rf   s    r0   rh   zVAE.__init__.<locals>.<lambda>>  ry  r2   )r  r%  )r6  latent_formatc                     | S r   r   r  s    r0   rh   zVAE.__init__.<locals>.<lambda>B      Ur2   c                     | S r   r   r  s    r0   rh   zVAE.__init__.<locals>.<lambda>C  s    r2   c                     dt        d| d   dz  dz        | d   z  | d   z  dz  dz  z  t        j                  |      z  S )	Ni  r   r[  ffffff?g?rX  rY  r<  ru  rF  s     r0   rh   zVAE.__init__.<locals>.<lambda>D  s    DCPQTYZ\T]adTdgjTjLlotuwoxLx  |A  BD  |E  ME  HJ  MJ  MO  MO  EP  Sc  Sn  Sn  ot  Su  Eur2   c                     dt        d| d   dz  dz        | d   z  | d   z  dz  dz  z  t        j                  |      z  S )	Nr~  r   r[  r  g?rX  rY  r;  ru  rF  s     r0   rh   zVAE.__init__.<locals>.<lambda>G  s    DCPQTYZ\T]adTdgkTkLmpuvxpyLy  }B  CE  }F  MF  IK  MK  NP  MP  EQ  Td  To  To  pu  Tv  Evr2   c                     | S r   r   r  s    r0   rh   zVAE.__init__.<locals>.<lambda>N  r  r2   c                 &    t        d| dz  dz
        S rL  rM  rf   s    r0   rh   zVAE.__init__.<locals>.<lambda>O  rO  r2   c                 L    t        dt        j                  | dz   dz              S rQ  rR  rf   s    r0   rh   zVAE.__init__.<locals>.<lambda>Q  rU  r2   c                 v    dt        d| d   dz  dz        | d   z  | d   z  z  t        j                  |      z  S )NrE  r   r[  gQ?g)\(?rX  rY  ru  rF  s     r0   rh   zVAE.__init__.<locals>.<lambda>S  sy    C3qSXY[S\`dSdgkSkKmpuvxpyKy  }B  CE  }F  LF  EG  JZ  Je  Je  fk  Jl  Elr2   c                     dt        d| d   dz  dz        | d   z  | d   z  dz  dz  z  t        j                  |      z  S )	Nr
  r   r[  g?gp=
ף?rX  rY  r;  ru  rF  s     r0   rh   zVAE.__init__.<locals>.<lambda>T  s    B#aRWXZR[_cRcfjRjJlotuwoxJx  |A  BD  |E  KE  HJ  KJ  MO  KO  EP  Sc  Sn  Sn  ot  Su  Eur2   z#vocoder.resblocks.0.convs1.0.weightz+vocoder.vocoder.resblocks.0.convs1.0.weightz
audio_vae.zautoencoder.metadatac                 >    | d   dz  t        j                  |      z  S r  r  rF  s     r0   rh   zVAE.__init__.<locals>.<lambda>X  r  r2   c                 J    | d   | d   z  dz  t        j                  |      z  S r  r  rF  s     r0   rh   zVAE.__init__.<locals>.<lambda>Y  r  r2   c                     | S r   r   rl  s    r0   rh   zVAE.__init__.<locals>.<lambda>b  r:  r2   c                     | S r   r   rl  s    r0   rh   zVAE.__init__.<locals>.<lambda>c  r8  r2   z.decoder.layers.3.transformers.0.pre_norm.alphaz8decoder.layers.3.transformers.11.self_attn.to_out.weight)r  transformer_depthssinusoidal_blockssliding_windowdecoder_conv_mapping
chunk_sizechunk_midpoint_shiftc                 >    d| d   z  t        j                  |      z  S )Nr  r   r  rF  s     r0   rh   zVAE.__init__.<locals>.<lambda>l  s    D5QR8OWgWrWrsxWyCyr2   c                 D    d| d   z  dz  t        j                  |      z  S )Nr  r   r  r  rF  s     r0   rh   zVAE.__init__.<locals>.<lambda>m  s-    D5QR8OVZDZ^n^y^yz  _A  DAr2   rd  c                 >    d| d   z  t        j                  |      z  S )NH   r   r  rF  s     r0   rh   zVAE.__init__.<locals>.<lambda>r  s    BqMUeUpUpqvUwCwr2   c                 D    d| d   z  dz  t        j                  |      z  S )Nr  r   r  r  rF  s     r0   rh   zVAE.__init__.<locals>.<lambda>s  s$    BqMTXDX\l\w\wx}\~C~r2   c                     | S r   r   rl  s    r0   rh   zVAE.__init__.<locals>.<lambda>|  r:  r2   c                     | S r   r   rl  s    r0   rh   zVAE.__init__.<locals>.<lambda>}  r8  r2   zgs.base_offset_scalezoctree.out_proj.weightc                      t        d      )NzNTripoSplat gaussian decoder: use the 'TripoSplat Decode' (VAEDecodeTripoSplat))RuntimeError)argsr   s     r0   _no_generic_ioz$VAE.__init__.<locals>._no_generic_io  s    &'wxxr2   z5WARNING: No VAE weights detected, VAE not initalized.rk   rc   r   zMissing VAE keys {}zLeftover VAE keys {}z2VAE load device: {}, offload device: {}, dtype: {}r   )r<  r   )r  r   )or@   r   convert_vae_state_dictr   is_amdmemory_used_encodememory_used_decodedownscale_ratioupscale_ratior6  
latent_dimoutput_channelspad_channel_valueprocess_inputprocess_outputr}   bfloat16r~   working_dtypesrb   	not_videosizedownscale_index_formulaupscale_index_formulaextra_1d_channel
crop_inputaudio_sample_raterl   r   first_stage_modelr:   r  r  r   taesdTAESDr	   r
   r%   float16ndimutilsstate_dict_prefix_replacer   r   ldmgenmor{  r   VideoVAEjsonloadsrn   
lightrickscausal_video_autoencodercogvideoAutoencoderKLCogVideoXcosmosCausalContinuousVideoTokenizerwanvae2_2WanVAEr  	hunyuan3dShapeVAEacemusic_dcae_pipeline	MusicDCAEpixel_space_convertPixelspaceConversionVAEmmaudioautoencoderAudioAutoencodertaehvTAEHVlatent_formatsHunyuanVideo15r\   HunyuanVideo	audio_vaeAudioVAEoutput_sample_rateaudio_sample_rate_outputrm  vae_sa3SA3AudioVAEmemory_managementaimdo_enabled
triposplatOctreeGaussianDecoderr#   r$   eval
vae_devicer^   vae_offload_device	vae_dtyperv   rw   intermediate_deviceoutput_devicery   r{   rz   r!   r   r   r8   r7   r   
model_size)r   r   r^   rz  r\   r  r3  r4  new_sdr,   r_  
decoder_chra  	param_keytensor_conv1r|  
vae_configr  sample_rater  r  r   r[   mpr   r   r  r  r^  s                             @@@r0   r   zVAE.__init__  s   72779D"99"=B""$#" #L #Q   !%<V$~~u}}=$	'+$%)" $!&>/25.2!SVghtu  ~A  NZ  no  EG  TW  "X!/!4!4!66?23*-w');PX  [U  PV WI  Uc  Ld WC  O]  L^*_& *R/h-2G82S+34I+JD(+-.F+G+M+Ma+PD().):):)@)@QUQeQe)@)f&-3)/&'($%&" &9"&9#=C)5&')$')$A57UF<..q12 0B6)5&')$A79!uF>0034 EK)5&')$')$)R/./55a8B>6Vghz{  PQ  fh  FJ  fj   kHDFG_D`DfDfghDiiD(8L+A+-D()+D&+0==%..%--*XD'-?T\  _Y  TZZ  LT  PUZ  LT  PU.VD* /DD+ /ND+0177:b@RH`EaEfEfjkEk6Qbcuv  KL  ac  yz  X\  x|  MR   SHDFG_D`DfDfghDiiD(8L+A+0==%..%--*XD'*Er2)ND&1<D.,UWY[]+^D(3>D0&'DO%)DN-?T\  _Y  TZ [H  T\  P] [H  T\  P].^D* /GD+ /]D+ -1QTefrs{~  LX  lm  CE  RU   VH>bHMpxzMz.7+/0,-.*DFG_D`DfDfghDiiD(8L+A72="[[BB2dv  P]  H^  _(B.8<!45,,1,**a/*,,1,151H1H.2r/!#$<!=!C!CA!F(S\J]^`Ja!aJ!Xd^3+3==?(1;(.+/(/251>  2W\^_w\x\~\~  @A  ]B  2W  qA  qM  HZ  \l  Gm  SU  2W.1CX`  c]  X^ _Q  ]e  Tf _Q  qA  qM  ]m  S[  T\2]. 2R7 	%)"'+$72= DIPTVV ]I()}**2."4,<y)16.-1*/3,)8)B6)B&*u'*|'')$'($)4&"#&9#%8"',}}ennemm&T#'+$3r9=gkm=m  r`  df  rf  j`  df  jf5;>>rB
CSTBARG>>rB
CSTB).)<)<)B)B)K)K)M&')$"# +Z' +a'&A1a%H"-6*(QSTVW'X$/8,',}}emm&D#EK!"VW%%a(C/G!''*d2G=C"#!
'H,@!%HX,>!?!C!CE4!PJ).)=)=)A)A)Z)Z)c)cls  }G)c  *H&'*$"# +Z' +R'&A2r%J"-8*(QSUWY'Z$/:,',~~u}}&E#."4<Y9Z9`9`ab9cgi9i2M^_qr  GH  ]_  uv  TX  tx  y)+,I)J)P)PQR)S&')$&A2r%J"-8*(QSUWY'Z$/:,"#!&',}}ennemm&T#);PX  [J  PK WD  PX  LY WD  PX  LY*Z& +G' +Q'."49nrt9t&A1a%H"-6*(QSTVW'X$/8,"#')*H'I'O'OPQ'RVW'W$).););)?)?)V)Vgkg{g{)V)|& +n' +T'',~~u}}emm&T#."4(,ASabnowz  HT  hi  A  NQ  R%)",-)&A1a%H"-6*(QSTVW'X$/8,"#@BC`@a@g@ghi@jj$x'=)6TVWoTpTvTvwxTy)z& +n' +T'',~~u}}emm&T#/25&A1a%H"-6*(QSTVW'X$/8,"#')$*,AUAUcdtx  JK  ]^  lo  BK  _`  wy  vz  GJ  Z[  kl  FG  `a  b).)9)9)=)=)\)\)h_g)h& +X' +a'',~~u}}&E#4:F"L*Er2)ND&1<D.,UWY[]+^D(3>D0&'DO+-D('*T5I5IWcwx  JL  ex  EH   IH-2YY]]-A-A-H-H-T8-TD*+0>>5==%--*XD' /CD+ /OD+34::1=C*Eq!)LD&1:D.,UWXZ[+\D(3<D0&'DO+-D(+-.D+E+K+KA+ND(-/0G-H-N-Nq-QD*-0D*'*T5I5IWcwx  JL  ex  LP  L`  L`  w{  wM  wM  Z]   ^H-2YY]]->->-E-E-Q-QD*+0>>5==%--*XD' /^D+ /fD+ <rA"#%+S'+S' */)<)<)@)@)I)I)K&',}}ennemm&T# <rA).):):)N)N)X)Xlq)X)r&*t' +B''($'($)4&%)"'+$"#&9#%8"',~~u}}emm&T#'+$(*%"b().)B)B)Z)Z)\&*}'*}''($%&"'($"#'($'+$DJ#%' D D).):):)>)>)J)J)[)[ae)[)f&*s'*|'')$'($%(EK,?%@"'*ek.A'B$"#&9#%8"',}}o#"'"b(')*<'='C'CA'F$"#&A2r%J"-8*(QSUWY'Z$/:,''94-2[[->->-D-DUYUiUiy}-D-~D*?RRD&)<*=D' /vD+))R/B7H4I4O4OPQ4RVX4X-2[[->->-D-DUYUiUiy~  zN  zN  z]  z]-D  .^D* /wD+,-33u}}D&+&:&:&G&G&*-2[[->->-D-DUYUiUi  zG-D  .HD*?RRD&)<*Eq!)LD&1:D.,UWXZ[+\D(3<D0 /mD+ /vD+6"<@mqs@s[[::2n?]^).)=)=)A)A)K)K)T)T^f)T)g&*t' +B''+'='='M'M$040F0F0Y0Y-#'#9#9#E#E '($)4&%)"'+$"#&9#%8"',}}o#'+$(*%ARGMQSS*-R^_12APU,/PF /zD+ /AD+*-Q]^04d,.NF /xD+.~D+).)@)@)L)L)Vv)V&'*$'($%)"'+$"#).&&9#%8"',~~u}}emm&T# ..<<+/D('2-2Jb2P).)=)=)A)A)W)W)Y&')$"#',}}ennemm&T#yDRR'$*A WX)-&%2%HfX6F%HD"!%!7!7!<!<!>>%002F)<<>=$..t{{D<O<OPE!!$..1--d.D.DE-AAC  11$$11B$00dkkZhi%%55bt||OfOfOh5i1q6A:OO188;<q6A:MM077:;IPPQUQ\Q\^lnrn|n|}~r2   c                     | j                   | j                   S t        j                  j                  | j                        | _         | j                   S r   )r  r   r   module_sizer  r   s    r0   rI  zVAE.model_size  s>    99 99**66t7M7MN	yyr2   c                 2    | j                   t        d      y )NzvERROR: VAE is invalid: None

If the VAE is from a checkpoint loader node your checkpoint does not contain a valid VAE.)r  r  r   s    r0   throw_exception_if_invalidzVAE.throw_exception_if_invalid  s(    !!)   Z  [  [ *r2   c                    | j                   rm| j                         }|j                  dd }t        t	        |            D ]7  }||   |z  |z  }||   |z  dz  }|||   k7  s"|j                  |dz   ||      }9 |j                  d   | j                  kD  r|dd | j                  f   }|S |j                  d   | j                  k  r| j                  t        | j                  t              r| j                  }d }nd}| j                  }t        j                  j                  j                  |d| j                  |j                  d   z
  f||      }|S )Nr   rY  r   .constantr   )r  r   )r  spacial_compression_encoder  ranger8   narrowr  r	  r:   r  r}   nn
functionalpad)	r   pixelsr  dimsdr/   x_offsetr  r   s	            r0   vae_encode_crop_pixelszVAE.vae_encode_crop_pixels  sX   ??"==?O<<"%D3t9%!W/?B Go5!;Q<#]]1q5(A>F	 & <<d222C!6$"6"6!667F  \\" 4 44%%1d44c:11D E%D 22E,,00!T=Q=QTZT`T`acTd=d9elpx}0~r2   c                 *    t        j                         S r   )r   intermediate_dtyper   s    r0   vae_output_dtypezVAE.vae_output_dtype  s    2244r2   c                     |j                   d   t        j                  j                  |j                   d   |j                   d   |||      z  }||j                   d   t        j                  j                  |j                   d   |j                   d   |dz  |dz  |      z  z  }||j                   d   t        j                  j                  |j                   d   |j                   d   |dz  |dz  |      z  z  }t        j                  j	                  |      } fd} j                  t        j                  j                  |||dz  |dz  | j                   j                  |      t        j                  j                  |||dz  |dz  | j                   j                  |      z   t        j                  j                  ||||| j                   j                  |      z   dz        }|S )Nr   r  r   c                     j                   j                  | j                  j                        j                  j                              j                  j                               S Nr\   r  r  rv   rF  r^   rd  rg   r   s    r0   rh   z#VAE.decode_tiled_.<locals>.<lambda>  \    d44;;ADD<P<S<STXT_T_<`addko  lA  lA  lCd  Dr2   )upscale_amountrH  r         @)	r  r   r  get_tiled_scale_stepsr   r  tiled_scaler  rH  )	r   samplestile_xtile_yoverlapstepsr   	decode_fnoutputs	   `        r0   decode_tiled_zVAE.decode_tiled_  sO   a 5;;#D#DW]]STEUW^WdWdefWgioqw  zA  $B  Bq!EKK$E$EgmmTUFVX_XeXefgXhjptujuw}  AB  xB  DK  %L  L  	Lq!EKK$E$EgmmTUFVX_XeXefgXhjpstjtv|  AB  wB  DK  %L  L  	L{{&&u- D	$$[[$$Wi1fqjRYlpl~l~  OS  Oa  Oa  jn$  oKK##GY
FaKQXkok}k}  NR  N`  N`  im#  nn[[$$Wicgcucu  FJ  FX  FX  ae$  ff 
 r2   c                 <    |j                   dk(  r fd}n2|j                  |j                  d   d   d   z  df      } fd} j                  t        j
                  j                  |||f| j                   j                   j                              S )	Nr  c                     j                   j                  | j                  j                        j                  j                              j                  j                               S rg  ri  rj  s    r0   rh   z%VAE.decode_tiled_1d.<locals>.<lambda>  s\    $"8"8"?"?T^^@T@W@WX\XcXc@d"e"h"hos  pE  pE  pG"h  #Hr2   r   r   r   rY  c           	      &   j                   j                  | j                  dd   d   | j                  d   f      j	                  j
                        j	                  j                              j	                  j                               S )NrY  r   r   rh  )r  r  reshaper  rv   rF  r^   rd  )rg   og_shaper   s    r0   rh   z%VAE.decode_tiled_1d.<locals>.<lambda>  s    $"8"8"?"?		2xXY{\def\gijipipqsitJu@v@y@yz~  {I  {I  AJ  AM  AM  NR  NY  NY  AZ  #[  #^  #^  ei  ez  ez  e|  #^  #}r2   tilers  rl  r@  rH  )
r  r  r{  r  r   r  tiled_scale_multidimr  r  rH  )r   rp  rq  rs  ru  r|  s   `    @r0   decode_tiled_1dzVAE.decode_tiled_1d  s    <<1 HI}}Hoox{HQK(1+4Mr&RSG }I""5;;#C#CGY^d]fpw  IM  I[  I[  jn  j~  j~  NR  N`  N`#C  $a  b  	br2   c                       fd} j                  t        j                  j                  |||||f| j                   j
                   j                   j                              S )Nc                     j                   j                  | j                  j                        j                  j                              j                  j                               S rg  ri  rj  s    r0   rh   z%VAE.decode_tiled_3d.<locals>.<lambda>  rk  r2   )r~  rs  rl  r@  index_formulasrH  )r  r   r  r  r  r  r  rH  )r   rp  tile_trq  rr  rs  ru  s   `      r0   decode_tiled_3dzVAE.decode_tiled_3d  s     D	""5;;#C#CGY^dflnt]u  @G  X\  Xj  Xj  y}  yM  yM  ^b  ^x  ^x  HL  HZ  HZ#C  $[  \  	\r2   c                 &    |j                   d   t        j                  j                  |j                   d   |j                   d   |||      z  }||j                   d   t        j                  j                  |j                   d   |j                   d   |dz  |dz  |      z  z  }||j                   d   t        j                  j                  |j                   d   |j                   d   |dz  |dz  |      z  z  }t        j                  j	                  |      } fd}t        j                  j                  |||||d j                  z   j                   j                  |	      }|t        j                  j                  |||dz  |dz  |d j                  z   j                   j                  |	      z  }|t        j                  j                  |||dz  |dz  |d j                  z   j                   j                  |	      z  }|dz  }|S )Nr   r  r   c                     j                   j                  j                  |       j                  j                        j                  j
                              j                  j                               S rg  r  r   r
  rv   rF  r^   rd  rj  s    r0   rh   z#VAE.encode_tiled_.<locals>.<lambda>  q    d44;;T=O=OPQ=R<V<VW[WeWe<f<i<ijnjuju<vwzz  BF  BW  BW  BYz  Zr2   r   )rl  r@  rH  r   rm  )	r  r   r  rn  r   ro  r  r6  rH  )	r   pixel_samplesrq  rr  rs  rt  r   	encode_fnrp  s	   `        r0   encode_tiled_zVAE.encode_tiled_  s   ##A&)J)J=K^K^_`Kacpcvcvwxcy  |B  DJ  LS  *T  T$$Q'%++*K*KML_L_`aLbdqdwdwxydz  }C  GH  }H  JP  ST  JT  V]  +^  ^  	^$$Q'%++*K*KML_L_`aLbdqdwdwxydz  }C  FG  }G  IO  ST  IT  V]  +^  ^  	^{{&&u- Z	++))-FFT[opqu  rF  rF  pF  VZ  Vj  Vj  z~  zL  zL  SW)  X5;;**=)VaZQW[\Q\^eyz{  |P  |P  zP  `d  `t  `t  DH  DV  DV  ]a*  b  	b5;;**=)Vq[RX[\R\^eyz{  |P  |P  zP  `d  `t  `t  DH  DV  DV  ]a*  b  	b3r2   c           	           j                   dk(  r! fd} j                  d j                  z  }n: j                  } j                  |z  ||z  }||z  }d j                  z  } fd}t        j
                  j                  |||f|| j                        } j                   dk(  r|S |j                  |j                  d    j                  d      S )Nr   c                     j                   j                  j                  |       j                  j                        j                  j
                              j                  j                               S rg  r  rj  s    r0   rh   z%VAE.encode_tiled_1d.<locals>.<lambda>   sq    $"8"8"?"?ASASTUAV@Z@Z[_[i[i@j@m@mnrnyny@z"{"~"~  FJ  F[  F[  F]"~  #^r2   c                    j                   j                  j                  |       j                  j                        j                  j
                              j                  dd      j                  j                               S )Nr   rY  rh  )r  r   r
  rv   rF  r^   r{  rd  )rg   r@  r   s    r0   rh   z%VAE.encode_tiled_1d.<locals>.<lambda>	  s    $"8"8"?"?ASASTUAV@Z@Z[_[i[i@j@m@mnrnyny@z"{  #D  #D  EF  HT  VX  #Y  #\  #\  cg  cx  cx  cz  #\  #{r2   r}  r   rY  )
r  r6  r  r  r   r  r  rH  r{  r  )	r   rp  rq  rs  r  rl  extra_channel_sizer   r@  s	   `       @r0   encode_tiled_1dzVAE.encode_tiled_1d  s    ??a ^I//L!5!55N!%!6!6//2DDL11F!33G!5!55N {Ikk..w		[b  tB  Q]  mq  m  m.  @??aJ;;w}}Q/1E1EGY[]^^r2   c                       fd}t         j                  j                  |||||f| j                   j                  d j
                   j                  	      S )Nc                     j                   j                  j                  |       j                  j                        j                  j
                              j                  j                               S rg  r  rj  s    r0   rh   z%VAE.encode_tiled_3d.<locals>.<lambda>  r  r2   T)r~  rs  rl  r@  	downscaler  rH  )r   r  r  r  r6  r  rH  )r   rp  r  rq  rr  rs  r  s   `      r0   encode_tiled_3dzVAE.encode_tiled_3d  s     Z	{{//&RXZ`Iakr  DH  DX  DX  gk  g{  g{  GK  \`  \x  \x  HL  HZ  HZ/  [  	[r2   c           
         | j                          d }d}| j                  dk(  r|j                  dk(  r|d d d d df   }t        j                  | j
                        5  	 | j                  |j                  | j                        }t        j                  | j                  g|| j                         | j                  j                  | j
                        }t        ||z        }t        d|      }d}t        | j                   dd      rUt#        j$                  | j                   j'                  |j                        | j(                  | j+                               }d	}t-        d|j                  d   |      D ]'  }	||	|	|z    j/                  | j
                  | j                        }
|r& | j                   j0                  |
fd
||	|	|z    i| n | j                   j0                  |
fi |j/                  | j(                  | j+                         d	      }|Wt#        j$                  |j                  d   ft3        |j                  dd        z   | j(                  | j+                               }||	|	|z    j5                  |       ~| j7                  ||	|	|z           * 	 |rt@        j                  jC                          |j                  dz
  }|dk(  s| jD                  | jG                  |      }nL|dk(  r| jI                  |      }n5|dk(  r0d| jK                         z  }|dz  }| jM                  |||d||f      }d d d        |j/                  | j(                        jO                  dd      }|S # t8        $ r7}t        j:                  |       t=        j>                  d       d	}Y d }~d }~ww xY w# 1 sw Y   yxY w)NFr   rH  r   r   rj   r   comfy_has_chunked_ior^   r\   Toutput_buffer)r^   r\   rl   zWWarning: Ran out of memory when regular VAE decoding, retrying with tiled VAE decoding.r  r	  r  rq  rr  rs  rY  )(rT  r  r  r   r   r^   r  r  rF  r   r!   rb   get_free_memoryintrN  rx   r  r}   emptydecode_output_shaperH  rd  rX  rv   r  rH   copy_r  	Exceptionraise_non_oomr#   r$   r   soft_empty_cacher  r  rw  spacial_compression_decoder  movedim)r   
samples_invae_optionsr  do_tiler   free_memorybatch_numberpreallocatedr/   rp  r   er^  r~  rs  s                   r0   r  z
VAE.decode  s   '')??aJOOq$8#Aq!G,J11$++>"55j6F6FW 00$,,Q\nr  oC  oC  D"ll::4;;G";#<="1l3  %4113I5Q$)KK0F0F0Z0Z[e[k[k0luy  vH  vH  PT  Pe  Pe  Pg  %hM#'Lq*"2"21"5|DA(1|+;<??t{{Z^ZhZh?iG#5..55g|][\]^_k]kMl|p{|;d44;;GS{SVV^b^p^px|  yN  yN  yP  W[V  \(0,1KK9I9I!9L8NQVWZW`W`abacWdQe8enr  oA  oA  IM  I^  I^  I`  -aM%a,7==cB''a,(GH E( &&779!*19 5 5 A$($8$8$DMQY$($6$6z$BMQY$"A"A"CCD"aiG$($8$8DY]hikrt{g|$8$}MY ?\ &((););<DDQrJ-   ..q1 yz
 3 ?>s8   N< IM9%BN<9	N9,N4.N<4N99N<<Oc                    | j                          | j                  |j                  | j                        }t	        j
                  | j                  g|| j                         |j                  dz
  }i }	|||	d<   |||	d<   |||	d<   t	        j                  | j                        5  |dk(  s| j                  %|	j                  d        | j                  |fi |	}
n_|dk(  r | j                  |fi |	}
nF|dk(  rA|	d||f|	d<   nt        d|      ||f|	d<   |t        d|      |	d<    | j                   |fi |	}
d d d        
j#                  dd	      S # 1 sw Y   xY w)
Nr  r   rq  rr  rs  r   r  r  rY  )rT  r  r  rF  r   r   r!   rb   r  r   r^   r  r   r  rw  rN  r  r  )r   rp  rq  rr  rs  r  	overlap_tr   r^  r  rv  s              r0   decode_tiledzVAE.decode_tiledM  sm   '')--gmmT^^L(($,,fjfzfz{||a#DN#DN%DO11$++>qyD11="---g>>+++G<t<$'('7&;DO'*1i'8'7&KDO%%(F^DN---g>> ? ~~a$$ ?>s   )BEE"c           
      2   | j                          | j                  |      }|j                  dd      }d}| j                  dk(  rN|j                  dk  r?| j
                  s"|j                  dd      j                  d      }n|j                  d      }t        j                  | j                        5  	 | j                  |j                  | j                        }t        j                  | j                  g|| j                         | j                  j!                  | j                        }t#        |t%        d|      z        }t%        d|      }d }t'        d|j                  d   |      D ]B  }| j)                  ||||z          j+                  | j                        }t-        | j.                  d	d      r(| j.                  j1                  || j                  
      }	n6|j+                  | j                        }| j.                  j1                  |      }	|	j+                  | j2                        j+                  | j5                               }	|Wt7        j8                  |j                  d   ft;        |	j                  dd        z   | j2                  | j5                               }|	||||z    E 	 |rtD        j                  jG                          | j                  dk(  r d}|dz  }| jI                  |||d||f      }n>| j                  dk(  s| jJ                  | jM                  |      }n| jO                  |      }d d d        S # t<        $ r6}
t        j>                  |
       tA        jB                  d       d}Y d }
~
d }
~
ww xY w# 1 sw Y   S xY w)NrY  r   Fr  rH  r   r   r  r  r   rh  r  zWWarning: Ran out of memory when regular VAE encoding, retrying with tiled VAE encoding.Tr	  r  r  )(rT  ra  r  r  r  r  	unsqueezer   r   r^   r  r  rF  r   r!   rb   r  r  rN  rX  r
  rv   rx   r  r   rH  rd  r}   r  rH   r  r  r#   r$   r   r  r  r  r  r  )r   r  r  r   r  r  rp  r/   	pixels_inr   r  r~  rs  s                r0   r   z
VAE.encodek  sA   '')33MB%--b!4??aM$6$6$:>> - 5 5a ; E Ea H - 7 7 :11$++>"55m6I6I4>>Z 00$,,Q\nr  oC  oC  D"ll::4;;G";Q1D#DE"1l3q-"5"5a"8,GA $ 2 2=1|CS3T U X XY]YgYg hIt557MuU"44;;Idkk;Z$-LL$=	"44;;IF&&!3!3477d>S>S>U7VC"'++}/B/B1/E.G%PSPYPYZ[Z\P]J^.^gkgygy  BF  BW  BW  BY  #Z25GAa,./ H* &&779??a'D"aiG"22=VZefhoqxdy2zG__)T-B-B-N"22=AG"00?GM ?P )   ..q1 yz
 ) ?P s8   2N4G>M
2BN
	N	,N?NN		NNc                    | j                          | j                  |      }| j                  }|j                  dd      }|dk(  r?| j                  s"|j                  dd      j                  d      }n|j                  d      }| j                  |j                  | j                        }t        j                  | j                  g|| j                         i }	|||	d<   |||	d<   |||	d	<   t        j                  | j                        5  |dk(  r&|	j                  d        | j                   |fi |	}
n |dk(  r | j"                  |fi |	}
n|dk(  r| t%        d | j&                  d   |            }nd
} | j(                  d   |      |	d<   |	d||f|	d	<   nE | j(                  d   t%        dt+        |dz   | j&                  d   |                        ||f|	d	<   |j                  d   } | j(                  d    | j&                  d   |            } | j,                  |d d d d d |f   fi |	}
d d d        
S # 1 sw Y   
S xY w)NrY  r   r  r   r   r  rq  rr  rs  '  r  )rT  ra  r  r  r  r  r  r  rF  r   r   r!   rb   r   r^   r   r  r  rN  r  r  r  r  )r   r  rq  rr  rs  r  r  r^  r   r  rp  tile_t_latentmaximums                r0   encode_tiledzVAE.encode_tiled  su   '')33MB%--b!419>> - 5 5a ; E Ea H - 7 7 :--m.A.A4>>R(($,,fjfzfz{#DN#DN%DO11$++>qy".$..}EE,$,,]CdC%$'+B4+?+?+B6+J$KM$(M!6!3!3A!6}!EX$'('7&;DO'<t'9'9!'<SCYZHZ\s\`\p\pqr\st}\~D  >A  (B  DK  MT  'UDO'--a0/$,,Q/0G0D0DQ0G0PQ.$..}Qq'\/JSdS) ?, - ?, s   D,IIc                 6    | j                   j                         S r   )r  r?   r   s    r0   r   z
VAE.get_sd  s    %%0022r2   c                 H    	 | j                   d   S #  | j                   cY S xY wNrY  )r  r   s    r0   r  zVAE.spacial_compression_decode  s+    	&%%b))	&%%%    !c                 H    	 | j                   d   S #  | j                   cY S xY wr  )r  r   s    r0   rW  zVAE.spacial_compression_encode  s+    	(''++	('''r  c                 T    	 t         | j                  d   d      dz        S #  Y y xY w)Nr   i    )r  r  r   s    r0   temporal_compression_decodezVAE.temporal_compression_decode  s4    	.++A.t4t;<<	s    # ')NNNNN)r  r  r<  )r	  r;  )i  r;  r;  )r   r  r  )r=  r=  r  )i   i   )r  r=  r=  )r   r  r  )rG   r  r  r   rI  rT  ra  rd  rw  r  r  r  r  r  r  r  r   r  r   r  rW  r  r   r2   r0   r  r    sp    Xt[25b\_&[ .0 6p%<3j,\3&(r2   r  c                       e Zd ZddZd Zy)
StyleModelc                     || _         y r   )r   )r   r   r^   s      r0   r   zStyleModel.__init__  s	    
r2   c                 8    | j                  |j                        S r   )r   last_hidden_state)r   inputs     r0   get_condzStyleModel.get_cond  s    zz%1122r2   N)cpu)rG   r  r  r   r  r   r2   r0   r  r    s    3r2   r  c                    t         j                  j                  | d      }|j                         }d|v r/t         j                  j
                  j                  ddddd      }nQd	|v r3t         j                  j                  j                  j                         }nt        d
j                  |             |j                  |       t        |      S )NT	safe_loadstyle_embeddingr>  i   r  r  )widthcontext_dimnum_headn_layes	num_tokenzredux_down.weightzinvalid style model {})r   r  load_torch_filer@   t2i_adapterrP   StyleAdapterr  fluxreduxReduxImageEncoderr  r%   r   r  )	ckpt_path
model_datar@   r   s       r0   load_style_modelr    s    ,,Y$,GJ??DD !!))66Ts]^hiuv6w		$		$$668077	BCC	*%er2   c                       e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ y) CLIPTyper   r   r  r  rH  rd  rt  r  r  re     rc           r<           r                             r  N)!rG   r  r  STABLE_DIFFUSIONSTABLE_CASCADESD3STABLE_AUDIOHUNYUAN_DITFLUXMOCHILTXVHUNYUAN_VIDEOPIXARTCOSMOSLUMINA2WANHIDREAMCHROMAACEOMNIGEN2
QWEN_IMAGEHUNYUAN_IMAGEHUNYUAN_VIDEO_15OVIS
KANDINSKY5KANDINSKY5_IMAGENEWBIEFLUX2LONGCAT_IMAGE	COGVIDEOXLENSPIXELDIT	IDEOGRAM4r   r2   r0   r  r    s    N
CLKDEDMFFG
CGF
CHJMDJFEMIDHIr2   r  Fc                 8    t        | ||||      }|j                  S r   )	load_clipr!   )
ckpt_pathsr`   	clip_typer_   r   r&   s         r0   load_clip_model_patcherr    s     Z!4iP_`D<<r2   c                 H   g }| D ]o  }t         j                  j                  |dd      \  }}|j                  dd       %t         j                  j	                  |d|      \  }}|j                  |       q t        |||||      }	t        | |||ff|	j                  _	        |	S )NT)r  return_metadatacustom_operationsro  )model_prefixr  )r`   r  r_   r   )
r   r  r  rn   convert_old_quantsr   load_text_encoder_state_dictsr  r!   cached_patcher_init)
r  r`   r  r_   r   	clip_datapr   r  r&   s
             r0   r
  r
    s    I{{221VZ2[H0$7? ;;99"2X`9aLB	 
 )H[gp  AN  `o  pD(?*Nacln{A|'}DLL$Kr2   c                       e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#y")#TEModelr   r   r  r  rH  rd  rt  r  r  re  r  rc  r  r  r  r<  r  r  r  r  r  r  r  r  r  r  r  r  r  r     r;  !   N)$rG   r  r  CLIP_LCLIP_HCLIP_GT5_XXLT5_XLT5_BASELLAMA3_8
T5_XXL_OLD
GEMMA_2_2B	QWEN25_3B	QWEN25_7BBYT5_SMALL_GLYPH
GEMMA_3_4BMISTRAL3_24BMISTRAL3_24B_PRUNED_FLUX2QWEN3_4BQWEN3_2BGEMMA_3_12BJINA_CLIP_2QWEN3_8B	QWEN3_06BGEMMA_3_4B_VISION
QWEN35_08B	QWEN35_2B	QWEN35_4B	QWEN35_9B
QWEN35_27BMINISTRAL_3_3BGEMMA_4_E4BGEMMA_4_E2BGEMMA_4_31BT5_GEMMAGPT_OSS_20Br   r2   r0   r  r  *  s    FFFFEGHJJIIJL "HHKKHIJIIIJNKKKHKr2   r  c                 :   d| v rt         j                  S d| v rt         j                  S d| v rt         j                  S d| v rt         j                  S d| v rI| d   }|j
                  d   dk(  rt         j                  S |j
                  d   dk(  rt         j                  S d	| v rt         j                  S d
| v r7| d
   }|j
                  d   dk(  rt         j                  S t         j                  S d| v rt         j                  S d| v rd| v rt         j                  S d| v rd| vrt         j                  S d| v rd| vrt         j                  S d| v rt         j                  S d| v r$d| v rt         j                   S t         j"                  S t         j$                  S d| v rd| v rt         j&                  S d| v rI| d   }|j
                  d   dk(  rt         j(                  S |j
                  d   dk(  rt         j*                  S d| v rd| v r| d   }|j
                  d   dk(  rt         j,                  S |j
                  d   dk(  rt         j.                  S |j
                  d   dk(  rt         j0                  S |j
                  d   dk(  rt         j2                  S t         j4                  S d| v r| d   }d| v r|j
                  d   dk(  rt         j6                  S |j
                  d   dk(  rt         j8                  S |j
                  d   dk(  rt         j:                  S |j
                  d   dk(  rt         j<                  S |j
                  d   dk(  r$d | v rt         j>                  S t         j@                  S |j
                  d   d!k(  rt         jB                  S t         jD                  S y )"Nz+text_model.encoder.layers.30.mlp.fc1.weightz+text_model.encoder.layers.22.mlp.fc1.weightz*text_model.encoder.layers.0.mlp.fc1.weightz(model.encoder.layers.0.mixer.Wqkv.weight3encoder.block.23.layer.1.DenseReluDense.wi_1.weightr   i (  i   1encoder.block.23.layer.1.DenseReluDense.wi.weightz.encoder.block.0.layer.0.SelfAttention.k.weightrq  z5model.encoder.layers.0.pre_self_attn_layernorm.weightz0model.layers.0.post_feedforward_layernorm.weightz'model.layers.59.self_attn.q_norm.weightz'model.layers.41.self_attn.q_norm.weightz'model.layers.47.self_attn.q_norm.weightz'model.layers.34.self_attn.q_norm.weight&model.layers.0.self_attn.q_norm.weightz.vision_model.embeddings.patch_embedding.weightzlayers.0.self_attn.sinksz(layers.0.mlp.experts.gate_up_proj.weightz$model.layers.0.self_attn.k_proj.biasr	  r=  z/model.language_model.layers.0.linear_attn.A_logz4model.language_model.layers.0.input_layernorm.weightr>  i 
  r  z.model.layers.0.post_attention_layernorm.weightrb  z/model.layers.39.post_attention_layernorm.weighti   )#r  r  r  r  r-  r  r  r  r"  r&  r   r:  r9  r7  r8  r,  r0  r'  r#  r;  r$  r%  r1  r3  r4  r5  r2  r*  r+  r.  r/  r(  r)  r6  r!  )r   weights     r0   detect_te_modelrA  N  sx   4:~~4:~~3r9~~1R7"""<BIJ<<?e#>>!\\!_$== :b@!!!72=DE<<?c!+++>"D9R?4:&&&4:?hpr?r&&&4:?hpr?r&&&4:&&&3r9?2E000)))!!!!R',VZ\,\"""-3:;<<?c!$$$<<?c!$$$8B>Cy}CJK<<?d"%%%<<?d"$$$<<?d"$$$<<?d"%%%   72=DE3r9||A$&'''aD('''aD('''aD((((<<?d"@BF+++888<<?d")))r2   c                     d}d}| D ]5  }||v s||v st         j                  j                  j                  |      c S  i S )Nr=  r>  )r   text_encoderssd3_clipt5_xxl_detect)r  weight_nameweight_name_oldr   s       r0   t5xxl_detectrH    sI    GKIO"2 5&&//==bAA  Ir2   c                     ddg}| D ]:  }|D ]3  }||v st         j                  j                  j                  |      c c S  < i S )Nz&model.layers.0.self_attn.k_proj.weightz+model.layers.0.linear_attn.in_proj_a.weight)r   rC  hunyuan_videollama_detect)r  weight_namesr   rF  s       r0   rK  rK    sM    <>klL'Kb **88EEbII ( 
 Ir2   c           
      ^=   | } G d d      }t        t        |            D ]x  }d||   v r(t        j                  j	                  ||   dd      ||<   n%d||   v r||   d   j                  dd      ||   d<   d	||   v s_||   j                  d	      ||   d
<   z i } |       }	i |	_        t        |      dk(  r9t        |d         }
|
t        j                  k(  rL|t        j                  k(  r,t        j                  |	_        t        j                   |	_        n"|t        j$                  k(  r\t        j&                  j(                  j)                  ddd      |	_        t        j&                  j(                  j*                  |	_        n|t        j,                  k(  r_t        j&                  j.                  j1                  ddddd d       |	_        t        j&                  j.                  j2                  |	_        nAt        j4                  |	_        t        j6                  |	_        n|
t        j8                  k(  rTt        j&                  j:                  j<                  |	_        t        j&                  j:                  j>                  |	_        n|
t        j@                  k(  rW|t        j$                  k(  rft        j&                  j(                  j(                  d0ddddtC        |      |	_        t        j&                  j(                  j*                  |	_        n!|t        jD                  k(  rbt        j&                  jF                  jH                  d0i tC        |      |	_        t        j&                  jF                  jJ                  |	_        n|t        jL                  k(  s|t        jN                  k(  rbt        j&                  jP                  jR                  d0i tC        |      |	_        t        j&                  jP                  jT                  |	_        n$|t        jV                  k(  rzt        j&                  jX                  jZ                  d0i tC        |      |	_        t        j&                  jX                  j\                  |	_        |d   j_                  dd       |d<   n|t        j,                  k(  rjt        j&                  j.                  j0                  d0i tC        |      ddddd d|	_        t        j&                  j.                  j2                  |	_        n|t        j`                  k(  rbt        j&                  jb                  jd                  d0i tC        |      |	_        t        j&                  jb                  jf                  |	_        nt        j&                  jh                  jj                  d0i tC        |      |	_        t        j&                  jh                  jl                  |	_        nC|
t        jn                  k(  rbt        j&                  jp                  jZ                  d0i tC        |      |	_        t        j&                  jp                  jr                  |	_        n|
t        jt                  k(  rTt        j&                  jv                  jx                  |	_        t        j&                  jv                  jz                  |	_        ng|
t        j|                  k(  r|t        j~                  k(  sd|d   v rlt        j&                  j                  j                  |	_        t        j&                  j                  j                  |	_        |d   j_                  dd       |d<   nt        j&                  j                  j                  |	_        t        j&                  j                  j                  |	_        nz|
t        j                  k(  rlt        j&                  j                  j                  |	_        t        j&                  j                  j                  |	_        |d   j_                  dd       |d<   n|
t        j                  t        j                  t        j                  fv rt        j                  t        j&                  j                  j                  t        j                  t        j&                  j                  j                  t        j                  t        j&                  j                  j                  i|
   }t        j&                  j                  j                  d0i t        |      d|i|	_        |j"                  |	_        |d   j_                  dd       |d<   n|
t        j                  k(  r|t        j                  k(  rat        j&                  j                  j                  d0i t        |      |	_        t        j&                  j                  j                  |	_        n`t        j&                  j                  jZ                  d0i t        |      |	_        t        j&                  j                  j                  |	_        |d   j_                  dd       |d<   n|
t        j                  k(  r~t        j&                  j                  jZ                  d0i t        |      ddi|	_        t        j&                  j                  j                  |	_        |d   j_                  dd       |d<   n6|
t        j                  k(  r~t        j&                  j                  jZ                  d0i t        |      ddi|	_        t        j&                  j                  j                  |	_        |d   j_                  dd       |d<   n|
t        j                  k(  rzt        j&                  jF                  j                  d0i t        |      |	_        t        j&                  jF                  j                  |	_        |d   j_                  dd       |d<   n|
t        j                  k(  rjt        j&                  j.                  j0                  d0i t        |      ddddd d|	_        t        j&                  j.                  j2                  |	_        n|
t        j                  k(  rbt        j&                  j                  jZ                  d0i t        |      |	_        t        j&                  j                  j                  |	_        n&|
t        j                  k(  rN|t        j                  k(  rdt        j&                  j                  jZ                  d0ddit        |      |	_        t        j&                  j                  j                  |	_        n|t        j                  k(  rbt        j&                  j                  jZ                  d0i t        |      |	_        t        j&                  j                  j                  |	_        n&t        j&                  j                  jZ                  d0i t        |      |	_        t        j&                  j                  j                  |	_        n|
t        j                  k(  s|
t        j                  k(  rt        j&                  j                  j                  d0i t        |      d|
t        j                  k(  i|	_        t        j&                  j                  j                  |	_        |d   j_                  dd       |d<   n|
t        j                  k(  rzt        j&                  j                  j                  d0i t        |      |	_        t        j&                  j                  j                  |	_        |d   j_                  dd       |d<   n|
t        j                  k(  r|t        j                  k(  s|t        j                  k(  rft        j&                  j                  j                  d0i t        |      ddi|	_        t        j&                  j                  j                  |	_        nt        j&                  j                  jZ                  d0i t        |      |	_        t        j&                  j                  j                  |	_        n|
t        j                  k(  rbt        j&                  j                  jZ                  d0i t        |      |	_        t        j&                  j                  j                  |	_        n|
t        j                   k(  r|t        j                  k(  ret        j&                  j                  jZ                  d0i t        |      |	_        t        j&                  j                  j                  |	_        nt        j&                  j                  j                  d0i t        |      ddi|	_        t        j&                  j                  j                  |	_        n|
t        j
                  k(  rXt        j&                  j                  j                  |	_        t        j&                  j                  j                  |	_        n|
t        j                  t        j                  t        j                  t        j                  t        j                  fv rt        j                  j                  |d   dddd      |d<   t        j                  d t        j                  d!t        j                  d"t        j                  d#t        j                  d$i|
   }t        j&                  j                  jZ                  d0i t        |      d|i|	_        t        j&                  j                  j#                  |%      |	_        
ne|
t        j                   k(  ret        j&                  j"                  jZ                  d0i t        |      |	_        t        j&                  j"                  j$                  |	_        	n|
t        j&                  k(  r}t        j&                  j(                  jZ                  d0i t        |      |	_        t        j&                  j(                  j*                  |	_        |d   j_                  dd       |d<   	n[|t        j$                  k(  r\t        j&                  j(                  j)                  ddd      |	_        t        j&                  j(                  j*                  |	_        n|t        j,                  k(  r_t        j&                  j.                  j1                  ddddd d       |	_        t        j&                  j.                  j2                  |	_        nzt,        j.                  |	_        t,        j0                  |	_        nJt        |      d&k(  rS|t        j$                  k(  rt        |d         t        |d         g}t        j&                  j(                  j(                  d0t        j2                  |v t        j                  |v t        j@                  |v dtC        |      |	_        t        j&                  j(                  j*                  |	_        nu|t        j4                  k(  rXt        j&                  j6                  j8                  |	_        t        j&                  j6                  j:                  |	_        n	|t        j                  k(  rdt        j&                  j                  j<                  d0i tC        |      |	_        t        j&                  j                  j>                  |	_        n|t        j@                  k(  rft        j&                  jB                  jD                  d0i t        |      |	_        t        j&                  jB                  jF                  |	_        n|t        j,                  k(  rg }|D ]  }t        |      }
|jI                  |
       ! t        j2                  |v }t        j                  |v }t        j@                  |v }t        j                  |v }|rtC        |      ni }|rt        |      ni }t        j&                  j.                  j0                  d0||||d'|||	_        t        j&                  j.                  j2                  |	_        n|t        j                  k(  rbt        j&                  j                  jZ                  d0i t        |      |	_        t        j&                  j                  j                  |	_        n|t        jJ                  k(  rdt        j&                  j                  jZ                  d0i t        |      |	_        t        j&                  jB                  jL                  |	_        n+|t        jN                  k(  ret        j&                  jP                  jZ                  d0i t        |      |	_        t        j&                  jP                  jR                  |	_        n|t        jT                  k(  ret        j&                  jP                  jZ                  d0i t        |      |	_        t        j&                  jP                  jV                  |	_        n9|t        jD                  k(  rt        j&                  jF                  jX                  d0i t        |      t        j&                  jF                  j[                  |      |	_        t        j&                  jF                  j\                  |	_        |d   j_                  dd       |d<   n|t        j^                  k(  rt        j&                  j`                  jZ                  d0i t        |      |	_        t        j&                  j`                  jb                  |	_        d(|d   v r|d   }|d   }n
|d   }|d   }|j_                  dd       |d)<   |j_                  dd       |d*<   n|t        j~                  k(  rt        |d         t        |d         g}t        j                  |v rd}nd+}t        j&                  jd                  jZ                  d0d,|it        |      |	_        t        j&                  jd                  jf                  |	_        nt        jh                  |	_        t        j6                  |	_        nt        |      d-k(  rat        j&                  j(                  j(                  d0i tC        |      |	_        t        j&                  j(                  j*                  |	_        nyt        |      d.k(  rkt        j&                  j.                  j0                  d0i tC        |      t        |      |	_        t        j&                  j.                  j2                  |	_        d}|D ]U  }|t        j                  jk                  |      z  }t        j&                  jl                  jo                  |||      \  }}W tq        |	||||||/      }|S )1Nc                       e Zd Zy)1load_text_encoder_state_dicts.<locals>.EmptyClassNrG   r  r  r   r2   r0   
EmptyClassrO    s    r2   rQ  z#transformer.resblocks.0.ln_1.weightro  text_projectionr   r   ztext_projection.weightzlm_head.weightzmodel.lm_head.weightFT)clip_lclip_gt5)rS  rT  rU  llamadtype_t5dtype_llamaspiece_model)rS  rT  rU  rV  rX  model_classtokenizer_json
model_type	gemma3_4bgemma3_4b_vision)rS  rT  rU  rV  rW  byt5prunedtekken_modelqwen3_4bqwen3_8bzmodel.zvisual.zmodel.lm_head.)zmodel.language_model.zmodel.visual.zlm_head.
qwen35_08b	qwen35_2b	qwen35_4b	qwen35_9b
qwen35_27b)r\  r   )rS  rT  rU  rV  r?  gemma_spiece_modeljina_spiece_modelqwen3_2blm_modelr  r  )r`   r   ra   r?   r_   r   r   )rX  r8   r   r  clip_text_transformers_convert	transposer   rk   rA  r  r  r  r  r   StableCascadeClipModelr&   StableCascadeTokenizerrm   r  rC  rD  SD3Tokenizerr  hidreamhidream_clipHiDreamTokenizerSDXLRefinerClipModelSDXLTokenizerr  sd2_clipSD2ClipModelSD2Tokenizerr  rH  r  ltltxv_teLTXVT5Tokenizerr  r  	pixart_t5	pixart_tePixArtTokenizerr  r'  teWanT5Tokenizerrn   r  r#  cogvideo_teCogVideoXTokenizerr  mochi_teMochiT5Tokenizerr"  r%  CosmosT5Tokenizerr  aura_t5AuraT5ModelAuraT5Tokenizerr   r  r,  
AceT5ModelAceT5Tokenizersa_t5	SAT5ModelSAT5Tokenizerr:  sa3SAT5GemmaModelSAT5GemmaTokenizerr7  r8  r9  gemma4
Gemma4_E4B
Gemma4_E2B
Gemma4_31B	gemma4_terK  r#  r  pixelditpixeldit_tePixelDiTGemma2Tokenizerlumina2LuminaTokenizerr'  
NTokenizerr0  r,  	gemma3_teGemma3_12BTokenizerr!  r$  omnigen2Omnigen2Tokenizerr%  r  hunyuan_imageHunyuanImageTokenizerr  longcat_imageLongCatImageTokenizer
qwen_imageQwenImageTokenizerr(  r)  r  flux2_teFlux2Tokenizerr;  gpt_osslens_teLensTokenizerr*  r  r  klein_teKleinTokenizerz_imageZImageTokenizerr+  ovisOvisTokenizerr.  r  	ideogram4Ideogram4TokenizerKleinTokenizer8Br-  jina_clip_2JinaClip2TextModelWrapperJinaClip2TokenizerWrapperr1  r2  r3  r4  r5  r  qwen35r/  animaAnimaTokenizerr6  ernieErnieTokenizerr   SD1ClipModelSD1Tokenizerr  r  hydit
HyditModelHyditTokenizer	flux_clipFluxTokenizerr  rJ  hunyuan_video_clipHunyuanVideoTokenizerr   r  HunyuanVideo15Tokenizerr   
kandinsky5Kandinsky5Tokenizerr  Kandinsky5TokenizerImageltxav_te	sd_detectLTXAVGemmaTokenizerr  newbieNewBieTokenizerace15ACE15TokenizerSDXLClipModelcalculate_parameters
long_cliplmodel_options_long_cliprX   )state_dictsr`   r  r_   r   r  rQ  ira   clip_targette_modelvariantqwen35_type	te_modelshidream_dualclip_classes
hidream_terS  rT  rU  rV  	t5_kwargsllama_kwargsclip_data_gemmaclip_data_jinar\  r   r   r&   s                               r0   r  r    s   I  3y>"0IaL@ ;;EEiPQlTVXZ[IaL IaL09B1FW9X9b9bcdfg9h	!56y|+3<Q<3C3CDT3UIaL/0 # N,KK
9~"9Q<0w~~%H333#,#C#C (1(H(H%hll*#(#6#6#?#?#H#HPU^bgl#H#m (-(;(;(D(D(Q(Q%h...#(#6#6#>#>#K#KSXaejow|  HL  Z^#K  $_ (-(;(;(C(C(T(T%#,#A#A (1(?(?%'$22;;HHK$)$7$7$@$@$M$MK!'HLL(#(#6#6#?#?#H#H  $IPU^chl  $Ip|  ~G  qH  $I (-(;(;(D(D(Q(Q%hmm+#(#6#6#9#9#A#A#\LQZD[#\ (-(;(;(>(>(N(N%hoo-hoo1M#(#6#6#@#@#J#J#e\ZcMd#e (-(;(;(E(E(U(U%hll*#(#6#6#:#:#=#=#XY@W#X (-(;(;(?(?(N(N%1:11A1A.RV1W~.h...#(#6#6#>#>#K#K $Ll[dNe $LOT]bgksx  GK$L (-(;(;(C(C(T(T%h000#(#6#6#?#?#K#K#fl[dNe#f (-(;(;(D(D(W(W%#(#6#6#<#<#E#E#`U^H_#` (-(;(;(A(A(R(R%+++$2299<<W|I?VWK$)$7$7$>$>$P$PK!&$22::FFK$)$7$7$?$?$O$OK!(HLL(Nil,J#(#6#6#:#:#E#E (-(;(;(?(?(N(N%1:11A1A.RV1W~.#(#6#6#<#<#F#F (-(;(;(A(A(O(O%)))$2266EEK$)$7$7$;$;$N$NK!-6q\-=-=nd-SN>*'--w/B/BGDWDWXX**E,?,?,F,F,Q,Q**E,?,?,F,F,Q,Q**E,?,?,F,F,Q,QSS[]G  %2299CCslS\F]skrsK$+$5$5K!/8|/?/?@PRV/WN+,+++H---#(#6#6#?#?#K#K#fl[dNe#f (-(;(;(D(D(\(\%#(#6#6#>#>#A#A#\LQZD[#\ (-(;(;(C(C(S(S%-6q\-=-=nd-SN>*+++$22::==pY@WpdopK$)$7$7$?$?$J$JK!-6q\-=-=nd-SN>*222$22::==wY@WwdvwK$)$7$7$?$?$J$JK!-6q\-=-=nd-SN>*,,,$2255??Z,yBYZK$)$7$7$:$:$N$NK!-6q\-=-=nd-SN>*)))$22::GG  I,W`Ja  IOT]bgltx  DH IK$)$7$7$?$?$P$PK!***$22;;>>YiAXYK$)$7$7$@$@$R$RK!***H222#(#6#6#D#D#G#G#nU#nVbclVm#n (-(;(;(I(I(_(_%h444#(#6#6#D#D#G#G#b,W`Ja#b (-(;(;(I(I(_(_%#(#6#6#A#A#D#D#_|T]G^#_ (-(;(;(F(F(Y(Y%---W=^=^1^$2277@@   R<PYCZ   Rckov  pQ  pQ  dQ   RK$)$7$7$<$<$K$KK!-6q\-=-=nd-SN>*,,,$22::BB]\R[E\]K$)$7$7$?$?$M$MK!/8|/?/?@PRV/WN+,)))HMM)Y(..-H#(#6#6#;#;#D#D#v|T]G^#vku#v (-(;(;(@(@(O(O%#(#6#6#>#>#A#A#\LQZD[#\ (-(;(;(C(C(S(S%)))$2277::U\)=TUK$)$7$7$<$<$J$JK!)))H...#(#6#6#@#@#C#C#^lS\F]#^ (-(;(;(E(E(X(X%#(#6#6#;#;#D#D#v|T]G^#vku#v (-(;(;(@(@(Q(Q%,,,$22>>XXK$)$7$7$C$C$]$]K!',,g.?.?ARART[TeTegngygyzz ;;@@1iq  EN  \l  Pm  nIaL"--|W=N=NP[]d]n]np{  ~E  ~O  ~O  Q\  ^e  ^p  ^p  r~    @H  IK$2299<<o|I?VocnoK$)$7$7$>$>$H$HT_$H$`K!***$2288;;Vl9>UVK$)$7$7$=$=$L$LK!///$2288;;Vl9>UVK$)$7$7$=$=$L$LK!-6q\-=-=nd-SN>* HLL(#(#6#6#?#?#H#HPT]bgl#H#m (-(;(;(D(D(Q(Q%h...#(#6#6#>#>#K#KSW`ejow|  HL  Z^#K  $_ (-(;(;(C(C(T(T%#+#8#8 (0(=(=%	Y1	$(16	RS8UVI$22;;DD   HGNN^gLgpwp~p~  CL  qL  QX  Q_  Q_  cl  Ql   H  p|  }F  pG   HK$)$7$7$@$@$M$MK!(...$2288CCK$)$7$7$=$=$L$LK!(--'$2277AA\LQZD[\K$)$7$7$<$<$J$JK!(000$22@@SSnVbclVmnK$)$7$7$E$E$[$[K!(***')$'
*:6(//9 ( ^^'??F^^'??F#;;B$$(@@E 46Y/2I6;<	2L$22::GG   Wv^diksx   W  }F   W  JV   WK$)$7$7$?$?$P$PK!(000$22@@CC^lS\F]^K$)$7$7$E$E$[$[K!(333$22@@CC^lS\F]^K$)$7$7$E$E$]$]K!(---$22==@@[<PYCZ[K$)$7$7$B$B$V$VK!(333$22==@@[<PYCZ[K$)$7$7$B$B$[$[K!(--'$2255>>   IiAX   I\a\o\o\r\r\|\|  ~G  ]H   IK$)$7$7$:$:$N$NK!-6q\-=-=nd-SN>*(//)$2299<<W|I?VWK$)$7$7$>$>$N$NK!79Q<G"+A,!*1"+A,!*13B3F3F~W[3\N/02@2D2D^UY2ZN./(,,&(16	RS8UVI9,'
'
$2288;;kZkS_`iSjkK$)$7$7$=$=$L$LK!(66K$-$;$;K!	Y1	 ..77@@[<PYCZ[ % 3 3 < < I I	Y1	 ..66CCylS\F]yamnwaxy % 3 3 ; ; L LJekk66q99
(-(;(;(F(F(^(^_`bpr  )A%  1DQ[lz  HQ  an  @O  PDKr2   c                 B   t         j                  j                  | d      }t        j                  |      }t        j                         r|j                         }t         j                  j                  |t        j                         t        j                               S )NTr  rc   )r   r  r  r   load_gligenr   should_use_fp16halfry   r{   get_torch_deviceunet_offload_device)r  datar   s      r0   r  r    s    ;;&&yD&ADt$E'')

//CSCdCdCf  xH  x\  x\  x^/  _  _r2   c                 h    t         j                  j                  |       }d|j                         v ryy)Nr   zx
HINT: This seems to be a Lora file and Lora files should be put in the lora folder and loaded with a lora loader node..ro  )ospathbasenamelower)r  r?   filenames      r0   model_detection_error_hintr    s.    ww%H!! Kr2   Tc                 b   t        j                  d       t        |||d|d      \  }}}	}
|*t        | d      5 }t	        j
                  |      }d d d        |d   d   }|d   }d	|v r|d	   d
k(  rz|j                         } G d dt        j                  j                  t        j                  j                        }|j                  d ||j                  j                               |}|j                  di       j                  dd       }||j                  |       |||	fS # 1 sw Y   xY w)NzyWarning: The load checkpoint with config function is deprecated and will eventually be removed, please use the other one.FT)
output_vaeoutput_clipoutput_clipvisionr`   output_modelrr   rk   cond_stage_configparameterizationvc                       e Zd Zy).load_checkpoint.<locals>.ModelSamplingAdvancedNrP  r   r2   r0   ModelSamplingAdvancedr    s    r2   r  model_samplingr   )r#   r$   load_checkpoint_guess_configopenyamlr  r   r   r  ModelSamplingDiscreteV_PREDICTIONadd_object_patchr   model_configrn   r   )config_pathr  r  r  r`   r?   rz  r   r&   r{  _streammodel_config_paramsclip_configr   r  r   s                    r0   load_checkpointr	    s7   OO  P  Q6yZep  EJ  `s  BF  GE4a~+s#v^^F+F $ /(3%&9:K0012c9A(<(<(R(RTYThThTuTu /1Fu{{G_G_1`aE"-11+tDI	"4# $#s   D%%D.c	                    t         j                  j                  | d      \  }	}
t        |	||||||||
|
      }|%t	        dj                  | t        | |	                  |d   t        | ddd||||fdf|d   _        |d   .t        |d   dd       t        | |||ff|d   j                  _        |d	   .t        |d	   dd       t        | |||ff|d	   j                  _        |S )
NTr  )te_model_optionsr  r   ,ERROR: Could not detect model type of: {}
{}r   Fr   r!   r   )r   r  r  load_state_dict_guess_configr  r%   r  r  r  rx   load_checkpoint_clip_patcherr!   load_checkpoint_vae_patcher)r  r  r  r  r`   r  r_   r  r   r   r  r   s               r0   r  r    sw   ;;..y$.OLB
&r:{DUWjlx  {H  [k  v~  P_  `C
{JQQR[]w  yB  DF  ^G  H  I  	I
1v&BYPUW\^cex  {G  IV  Xh  Ei  kl  &mA"
 1vgc!fi>J.JYXkmz  }M  MN  .OA*
1vgc!fi>J.IIWjly  |L  LM  .NA*Jr2   c                 L    t        | ddd|d|||	      \  }}}}|j                  S )zReload only the CLIP patcher from a checkpoint. Used as the cached_patcher_init
    factory for the CLIP returned by load_checkpoint_guess_config.FTr  r  r  r`   r  r_   r  r   r  r!   r  r`   r_   r  r   r  r&   s          r0   r  r    s=     1/#)'
MAtQ <<r2   c                 L    t        | ddd|d|||	      \  }}}}|j                  S )zReload only the VAE patcher from a checkpoint. Used as the cached_patcher_init
    factory for the VAE returned by load_checkpoint_guess_config.TFr  r  )r  r`   r_   r  r   r  r{  s          r0   r  r    s=     0/#)'
LAq#q ;;r2   c           
      0    t        | ddd||||      ^}}|S )NF)r`   r_   r  r   )r  )r  r`   r_   r  r   r   r  s          r0   'load_checkpoint_guess_config_model_onlyr    s+    ,Yue 3'-+	-IEA
 Lr2   c                 H    t        | ddd|d|||	      ^}}}|j                  S )NFT)r`   r  r_   r  r   r  r  s          r0   &load_checkpoint_guess_config_clip_onlyr    s4    .y%u 3%'-+	-KAta
 <<r2   c
           	      *
   d }
d }d }d }d }t        j                  |       }t        j                  j	                  | |      }t        j                  j                  | |      }|j                  dt        j                               }|j                  dd       }|%t        j                  j                  | ||      \  } }t        j                  | ||      }|5t        j                  d       t        | i       }|y |d t        i       d fS t        |j                         }|j"                  d }|||_        |j                  d|j                  dd             }|t        j&                  |||	      }|j"                  "t        j(                  d ||j                         }n!t        j(                  |||j                         }|j+                  ||       |j,                  #|r!t/        j0                  | |j,                  d
      }|rt        j2                  ||      }|j5                  | ||      }|	rt        j6                  j8                  nt        j6                  j:                  }|j                  dt        j<                               } ||||      }|j?                  | ||jA                                |rlt        j                  jC                  | |jD                  D ci c]  }|d c}d
      }|jG                  |      }|j                  dd       }t        |||      }|rY|j                  dd       g }t        | jI                               D ]2  }|jK                  d      s|jM                  |d tO        d               4 tO        |      dkD  roi } | D ]+  }d}!|D ]  }"|!xs |jQ                  |"      }! |!r$| |   | |<   - |D ]8  }"t        j                  j                  | |"i       \  }#}$|#D ]
  }|#|   | |<    | } : |jS                  |       }%|%f|jU                  |       }&tO        |&      dkD  r2t        j                  j	                  |&      }tW        |%||&||&||	      }
nt        j                  d       | jI                         }'tO        |'      dkD  r$t        jX                  dj[                  |'             |rEt]        j^                  d      k7  r-t        j`                  d       t        jb                  |gd
       ||
||fS c c}w )NrZ   r  r  zTWarning, This is not a checkpoint file, trying to load it as a diffusion model only.r_   )r   r\   weight_dtypemodel_paramssupported_dtypesr  Tr   r[   rc   r   ro  filter_keysr   r  r^   z.scaled_fp8
scaled_fp8r   F)r?   )r`   ra   r   r?   r_   r   zVno CLIP/text encoder weights in checkpoint, the text encoder model will not be loaded.zleft over keys: {}r  z&loaded diffusion model directly to GPUri   )2r   unet_prefix_from_state_dictr   r  r  r  rn   r   r  r  model_config_from_unetr#   r$   load_diffusion_model_state_dictr  r   supported_inference_dtypesquant_configr  
unet_dtypeunet_manual_castset_inference_dtypeclip_vision_prefixr   load_clipvision_from_sdunet_inital_load_device	get_modelry   rz   r{   r  load_model_weightsr   r  vae_key_prefixprocess_vae_state_dictr@   endswithr   r8   
startswithr  process_clip_state_dictrX   r7   r%   r}   r^   r   r   )(r   r  r  r  r`   r  r_   r  r  r   r&   
clipvisionr{  r   ry   diffusion_model_prefixr   r  rZ   r  r  diffusion_modelunet_weight_dtyper*  manual_cast_dtypeinital_load_devicerz   r[   r,   vae_sdrD  scaled_fp8_listout_sdskipprefquant_sd	qmetadatar  clip_sd	left_overs(                                           r0   r  r    s   DJ
CEM,HHL11"6LMJ;;++B0FGL##M3C3T3T3VWK%))*=tD {{55b:P[c5dH"99">T_ghLno9"BO"sbz488\DDE  ,$):&""7M,=,=nd,STJ%00j[l  |H  I
  ,,==dKQ]QxQxy,==j+WcW~W~$$Z1BC&&2$<<RA`A`bfgJ-EEjR\]&&r+AJ\&];Ju**77PUPcPcPtPt&**+;=M=a=a=cd$UTbc  %;MD\D\D^ _66r<KfKf;gKfaArEKf;guy6z44V<"&&}d;
VhzB 3T:B O"'')_::m,#**1-@s</@.@+AB % ?#a'A D /#9q||D'9 !0$&qEq	  ,D*/++*H*HT\^*H*_'Hi%$,QKq	 &B	 , #..".=""::2>G7|a"[[==gF
K=Pahu  MT  dt  FU  V xy	I
9~*11)<=e!44LLAB,,m_dS4j11[ <hs   !
T
c                    |j                  dd      }|j                  dd      }|%t        j                  j                  | d|      \  } }t	        j
                  |       }t        j                  j                  | |did      }t        |      dkD  r)|} |%t        j                  j                  | d|      \  } }t        j                  j                  |       }t        j                  j                  |       }	|j                  d	t        j                               }
t	        j                  | d|      }|| }nt	        j                  | d      }|t	        j                  |d      }|yt	        j                  |       }|yt        j                  j                  |j                         }i }|D ]F  }|| v r| j#                  |      |||   <   t%        j&                  d
j)                  ||   |             H |j                  dt        j*                               }t-        |j.                        }|j0                  d}	|t        j2                  |||	      }n|}|j0                  "t        j4                  d|
|j.                        }n!t        j4                  ||
|j.                        }|j7                  ||       |||_        |j                  dd      rd|j:                  d<   |j=                  |d      }|rt        j>                  j@                  nt        j>                  jB                  } |||
|      }t        jD                  |      s|jG                  |       |jI                  |d|jK                                | jM                         }t        |      dkD  r$t%        jN                  dj)                  |             |S )a  
    Loads a UNet diffusion model from a state dictionary, supporting both diffusers and regular formats.

    Args:
        sd (dict): State dictionary containing model weights and configuration
        model_options (dict, optional): Additional options for model loading. Supports:
            - dtype: Override model data type
            - custom_operations: Custom model operations
            - fp8_optimizations: Enable FP8 optimizations

    Returns:
        ModelPatcher: A wrapped model instance that handles device management and weight loading.
        Returns None if the model configuration cannot be detected.

    The function:
    1. Detects and handles different model formats (regular, diffusers, mmdit)
    2. Configures model dtype based on parameters and device capabilities
    3. Handles weight conversion and device placement
    4. Manages model optimization settings
    5. Loads weights and returns a device-managed model instance
    r\   Nr  ro  r  Tr!  r   rZ   z{} {}r[   r  fp8_optimizationsFfp8rc   r   z%left over keys in diffusion model: {})(rn   r   r  r  r   r%  r  r8   r  r  r   r  r&  convert_diffusers_mmdit model_config_from_diffusers_unetunet_to_diffusersunet_configr   r#   r$   r%   r  r   r(  r)  r*  r+  r,  r  optimizationsr0  ry   rz   r{   is_device_cpurv   r1  r   r@   r   )r   r_   r  r   r\   r  r8  temp_sdr   r  rZ   r  rJ  diffusers_keysr,   r[   r:  r*  r;  r   rz   ry   rE  s                          r0   r'  r'    sh   , gt,E%))*=tD {{55b"x5PH -HHLkk33B9OQS8Tbf3gG
7|a$ ;;99"b89TLB11"5J;;++B/L##M3C3T3T3VWK"99"b8TL 88R@*AA&"ML#*KKBOL#"[[::<;S;STNF#702q	F>!,-OOGNN>!3Da$HI	 $ #&&'79I9]9]9_`N\DDE  ,}%00j[l  |H  I

  ,,==dKQ]QxQxy,==j+WcW~W~$$Z1BC$):&,e4,0""5)""62.E7F5&&33EL_L_LpLpL KP^_M)).9 	VR0H0H0JK	I
9~<CCINOr2   c           	          t         j                  j                  | d      \  }}t        ||||      }|It	        j
                  dj                  |              t        dj                  | t        | |                  t        | |ff|_
        |S )NTr  )r_   r  r   z$ERROR UNSUPPORTED DIFFUSION MODEL {}r  )r   r  r  r'  r#   errorr%   r  r  load_diffusion_modelr  )	unet_pathr_   r   r   r  r   s         r0   rS  rS    s    ;;..y$.OLB+BmV^p  AE}<CCINOJQQR[]w  yB  DF  ^G  H  I  	I!5	=7Q RELr2   c                     |%t         j                  j                  | d      \  }}nt         j                  j                  |       }t        |||      }|j	                          |j
                  S )a,  Reload a disk-backed VAE from ``vae_path`` and return its patcher.

    Used as the ``cached_patcher_init`` factory on ``VAE.patcher`` so
    :meth:`comfy.model_patcher.ModelPatcher.deepclone_multigpu` can produce a
    fresh, untainted VAE patcher (no inherited per-device load state, no
    in-place quantization fallout) for multigpu work-units and the
    SelectVAEDevice node. The optional ``device`` matches the source loader's
    VAE initialization path; the deepclone's ``load_device`` still controls
    where the cloned patcher is targeted.
    Tr  r#  )r   r  r  r  rT  r!   )vae_pathr  r^   r   r   r{  s         r0   load_vae_patcherrW    s_     {{228T2RH[[((2
hv
6C""$;;r2   c                 J    t        j                  d       t        | d|i      S )NzeThe load_unet function has been deprecated and will be removed please switch to: load_diffusion_modelr\   r  )r#   r$   rS  )rT  r\   s     r0   	load_unetrY    s!    OO{|	'59IJJr2   c                 J    t        j                  d       t        | d|i      S )Nz{The load_unet_state_dict function has been deprecated and will be removed please switch to: load_diffusion_model_state_dictr\   r  )r#   r$   r'  )r   r\   s     r0   load_unet_state_dictr[    s'    OO  R  S*2gu=MNNr2   c                    d }|g}|/|j                  |j                                |j                         }d }	||j                         }	|i }t	        j
                  |       | |j                         nd }
|j                  ||	|
      }|D ]
  }||   ||<    |D ]+  }||   }|j                         r|j                         ||<   - t        j                  j                  || |       y )Nr  )r   r   r   r   r   r   is_contiguous
contiguousr   r  save_torch_file)output_pathr   r&   r{  r   r  
extra_keysrD  load_modelsr=  clip_vision_sdr   r,   ts                 r0   save_checkpointre    s    G'K4??,-,,.F
$$[1-8-D'['')$N		$	$Wfn	EB11  qE LLNBqE 
 
KKK(Cr2   r   )NNTTNNN)NNF)ur  r}   enumr   r#   r   r   comfy.utilsr   ldm.models.autoencoderr   r   ldm.cascade.stage_ar	   ldm.cascade.stage_c_coderr
   ldm.audio.autoencoderr   comfy.ldm.genmo.vae.model1comfy.ldm.lightricks.vae.causal_video_autoencoder"comfy.ldm.lightricks.vae.audio_vaecomfy.ldm.cosmos.vaecomfy.ldm.wan.vaecomfy.ldm.wan.vae2_2comfy.ldm.hunyuan3d.vaecomfy.ldm.triposplat.vae%comfy.ldm.ace.vae.music_dcae_pipelinecomfy.ldm.cogvideo.vaecomfy.ldm.hunyuan_video.vae!comfy.ldm.mmaudio.vae.autoencodercomfy.ldm.audio.vae_sa3comfy.pixel_space_convertcomfy.weight_adapterr  rS  r  ro  r   r   r   r   r   r   comfy.text_encoders.sd2_clipcomfy.text_encoders.sd3_clipcomfy.text_encoders.sa_t5comfy.text_encoders.aura_t5comfy.text_encoders.pixart_t5comfy.text_encoders.hyditcomfy.text_encoders.fluxcomfy.text_encoders.long_cliplcomfy.text_encoders.genmocomfy.text_encoders.lt!comfy.text_encoders.hunyuan_videocomfy.text_encoders.cosmoscomfy.text_encoders.lumina2comfy.text_encoders.pixelditcomfy.text_encoders.wancomfy.text_encoders.hidreamcomfy.text_encoders.acecomfy.text_encoders.omnigen2comfy.text_encoders.qwen_image!comfy.text_encoders.hunyuan_imagecomfy.text_encoders.z_imagecomfy.text_encoders.ideogram4comfy.text_encoders.oviscomfy.text_encoders.kandinsky5comfy.text_encoders.jina_clip_2comfy.text_encoders.newbiecomfy.text_encoders.animacomfy.text_encoders.ace15!comfy.text_encoders.longcat_imagecomfy.text_encoders.qwen35comfy.text_encoders.erniecomfy.text_encoders.gemma4comfy.text_encoders.cogvideocomfy.text_encoders.sa3comfy.text_encoders.gpt_osscomfy.model_patcher
comfy.loracomfy.lora_convertcomfy.hookscomfy.t2i_adapter.adaptercomfy.taesd.taesdcomfy.taesd.taehvcomfy.latent_formatscomfy.ldm.flux.reduxr1   rV   rX   r  r  r  r  r  r  r
  r  rA  rH  rK  r  r  r  r	  r  r  r  r  r  r  r'  rS  rW  rY  r[  re  r   r2   r0   <module>r     s       " # E ' 3 2   8 )      ,  " (       	        # #   " $    %    ( ! " #  "  # % ( " $  % & !     ( !   ! #  "           (F`(FuY uYnM M`3 3
t D =AHLeLeuw  JO  /3h>W>Wgi  |A 	!d !HOd /1dV^VoVo  @B  TY @D_0 8<af  }A  PT  df  y{  MR $ AETVik  ~C " @DSUhj  }B   LP_atv  IN  KO^`su  HM  15$Z_uy  IM  ]_  rt  C  UZ d2N 794Y^ _B 35e &KO .2tX\ik Dr2   