
    
3j                    P   S SK r S SKJr  S SKrS SKJr  S SKrS SKrS SK	r	S SK
r
S SKrS SKrS SKrS SKJr  S SKrS SKJr  S SKJrJrJrJrJr  S SKJr  S SKJrJr  S SKrS SKrS SKJ r   \	RB                  RE                  \	RB                  RE                  \	RB                  RG                  \$5      5      5      r%\RL                  " S	\	RB                  RO                  \%S
5      5         " S S5      r( " S S5      r) " S S5      r* " S S5      r+ " S S5      r, " S S5      r- " S S5      r. " S S5      r/ " S S5      r0 " S S5      r1 " S S 5      r2 " S! S"5      r3 " S# S$5      r4S% r5 " S& S'5      r6 " S( S)5      r7 " S* S+5      r8 " S, S-5      r9 " S. S/5      r: " S0 S15      r; " S2 S35      r< " S4 S55      r= " S6 S75      r> " S8 S95      r? " S: S;5      r@ " S< S=5      rA " S> S?5      rB " S@ SA5      rC " SB SC5      rD " SD SE5      rE " SF SG5      rFSH rGSI rH " SJ SK5      rISL rJ " SM SN5      rK " SO SP5      rL " SQ SR5      rM " SS ST5      rN " SU SV5      rO " SW SX5      rP " SY SZ5      rQ " S[ S\5      rR " S] S^5      rS " S_ S`5      rT " Sa Sb5      rUS ScSdSeSfSgShSi.rV " Sj Sk5      rW " Sl Sm5      rX " Sn So5      rY " Sp Sq5      rZ " Sr Ss5      r[ " St Su5      r\ " Sv Sw5      r]S SxK^J_r_J`r`   " Sy Sz\`5      ra " S{ S|5      rb " S} S~5      rc " S S5      rdS re " S S\R                  5      rg " S S5      rh " S S5      ri " S S5      rj " S S5      rkS SKlJmrm  S SKnJoro   " S S5      rp " S S5      rq " S S5      rr " S S\R                  5      rt " S S\R                  5      ru " S S\R                  5      rv " S S5      rw " S S\R                  5      rx " S S5      ry " S S\R                  5      rz " S S\R                  5      r{ " S S\R                  5      r|g)    N)Image)model_managementMAX_RESOLUTION)common_upscaleProgressBarload_torch_filesave_torch_filestate_dict_prefix_replace)IO)ioui)BytesIOkjnodes_fontsfontsc                   B    \ rS rSr\S 5       rSrSrSrSr	SS/r
S	 rS
rg)BOOLConstant   c                     SSSSS0400$ )NrequiredvalueBOOLEANdefaultT ss    H/home/wildlama/comfy/ComfyUI/custom_nodes/ComfyUI-KJNodes/nodes/nodes.pyINPUT_TYPESBOOLConstant.INPUT_TYPES   s#    i)T!23
 
 	
    r   r   	get_valueKJNodes/constantsbooleanr   c                     U4$ Nr   selfr   s     r   r#   BOOLConstant.get_value'   	    xr    r   N__name__
__module____qualname____firstlineno__classmethodr   RETURN_TYPESRETURN_NAMESFUNCTIONCATEGORYSEARCH_ALIASESr#   __static_attributes__r   r    r   r   r      s9    
 

  LLH"H)Nr    r   c                   B    \ rS rSr\S 5       rSrSrSrSr	SS/r
S	 rS
rg)INTConstant*   c                     SSSSSSS.400$ )Nr   r   INTr        r   minmaxr   r   s    r   r   INTConstant.INPUT_TYPES+   s'    e3FOabc
 
 	
r    )r<   r"   r#   r$   integerr   c                     U4$ r'   r   r(   s     r   r#   INTConstant.get_value7   r+   r    r   Nr,   r   r    r   r9   r9   *   s9    
 

 LLH"H)Nr    r9   c                   B    \ rS rSr\S 5       rSrSrSrSr	SS/r
S	 rS
rg)FloatConstant:   c                     SSSSSSSS.400$ )	Nr   r   FLOAT        r=   r>   gh㈵>r   r@   rA   stepr   r   s    r   r   FloatConstant.INPUT_TYPES;   s*    g37JSeovwx
 
 	
r    rJ   r"   r#   r$   floatr   c                     [        US5      4$ )N   )roundr(   s     r   r#   FloatConstant.get_valueH   s    eQ!!r    r   Nr,   r   r    r   rG   rG   :   s9    
 
 LLH"Hw'N"r    rG   c                   >    \ rS rSr\S 5       rSrSrSrSS/r	S r
S	rg
)StringConstantK   c                     SSSSSS.400$ )Nr   stringSTRING Fr   	multiliner   clss    r   r   StringConstant.INPUT_TYPESL   s%     8%%HI
 	
r    rZ   	passtringr$   textr   c                     U4$ r'   r   )r)   rY   s     r   rb   StringConstant.passtringX   s
    zr    r   N)r-   r.   r/   r0   r1   r   r2   r4   r5   r6   rb   r7   r   r    r   rV   rV   K   s4    
 
 LH"Hg&Nr    rV   c                   >    \ rS rSr\S 5       rSrSrSrSS/r	S r
S	rg
)StringConstantMultiline[   c                 "    SSSSS.4SSS04S.0$ )	Nr   rZ   r[   Tr\   r   r   )rY   strip_newlinesr   r^   s    r   r   #StringConstantMultiline.INPUT_TYPES\   s0     #$%GH#,y$.?"@
 	
r    ra   	stringifyr$   rc   r   c                 Z    UnU(       a   UR                  SS5      R                  5       nU4$ )N
r[   )replacestrip)r)   rY   rj   
new_strings       r   rl   !StringConstantMultiline.stringifyi   s-    
#++D"5;;=J}r    r   N)r-   r.   r/   r0   r1   r   r2   r4   r5   r6   rl   r7   r   r    r   rg   rg   [   s4    
 
 LH"Hg&Nr    rg   c                   :    \ rS rSrSrSrSrSr\S 5       r	S r
Srg	)
ScaleBatchPromptScheduleq   ra   scalescheduleKJNodes/misczZ
Scales a batch schedule from Fizz' nodes BatchPromptSchedule
to a different frame count.
c           
      <    SSSSS.4SSSSSSS	.4SSSSSSS	.4S
.0$ )Nr   rZ   T0:(0.0),
7:(1.0),
15:(0.0)
)
forceInputr   r<         )rz   r   r@   rA   rM   )	input_strold_frame_countnew_frame_countr   r   s    r   r   $ScaleBatchPromptSchedule.INPUT_TYPES{   sP     'Hh)ij%*41TU^blm,n$o%*41TU^blm,n$o
 	r    c                 r   Sn[        [        R                  " XB5      5      nUS-
  US-
  -  n0 nUR                  5        H)  u  p[	        [        [	        U5      U-  5      5      n
XU
'   M+     SR                  [        UR                  5       5       VVs/ s H  u  pSU SU S3PM     snn5      nU4$ s  snnf )Nz"(\d+)"\s*:\s*"(.*?)"(?:,|\Z)r{   , "z":")dictrefindallitemsintrS   joinsorted)r)   r~   r}   r   patternframe_stringsscaling_factornew_frame_strings	old_framerY   	new_framekv
output_strs                 r   rv   &ScaleBatchPromptSchedule.scaleschedule   s    2RZZ;< *A-/A2EF  "/!4!4!6IE#i.>"ABCI ,2i( "7 YY6BSBYBYB[;\];\41!A3c!A;\]^
}  ^s   B3
r   N)r-   r.   r/   r0   r2   r4   r5   DESCRIPTIONr1   r   rv   r7   r   r    r   rt   rt   q   s1    LHHK
  r    rt   c                   :    \ rS rSrSrSrSrSr\S 5       r	S r
Srg	)
GetLatentsFromBatchIndexed   LATENTindexedlatentsfrombatchKJNodes/latentszN
Selects and returns the latents at the specified indices as an latent batch.
c                 (    SSSSSS.4/ SQSS	04S
.0$ )Nr   r   rZ   z0, 1, 2Tr\   )BCHWBTCHWBCTHWr   r   )latentsindexeslatent_formatr   r   s    r   r   &GetLatentsFromBatchIndexed.INPUT_TYPES   s3     '%94'PQ#=	6?R"S
 	r    c                 V   UR                  5       nUS   nUR                  S5       Vs/ s H  n[        UR                  5       5      PM     nn[        R
                  " U[        R                  S9nUS:X  a  XX   n	O"US:X  a
  US S 2U4   n	OUS:X  a  US S 2S S 2U4   n	W	US'   U4$ s  snf )Nsamples,dtyper   r   r   )copysplitr   rp   torchtensorlong)
r)   r   r   r   r   latent_samplesindex
index_listindices_tensorchosen_latentss
             r   r   2GetLatentsFromBatchIndexed.indexedlatentsfrombatch   s    ,,. + 7>mmC6HI6HUc%++-(6H
I j

C F"+;Ng%+A~,=>Ng%+Aq.,@AN+	z Js   #B&r   N)r-   r.   r/   r0   r2   r4   r5   r   r1   r   r   r7   r   r    r   r   r      s1    L(H HK  r    r   c                   >    \ rS rSr\S 5       rSrSrSrSr	Sr
S rS	rg
)ConditioningMultiCombine   c                 .    SSSSSSS.4SS/S	S04S
S
S.0$ )Nr   r<         r{   rL   combineconcatr   CONDITIONING)
inputcount	operationconditioning_1conditioning_2r   r   s    r   r   $ConditioningMultiCombine.INPUT_TYPES   s@     $!AbRS&TU((3i5KL"4"4	 	r    )r   r<   )combinedr   r   KJNodes/masking/conditioningz/
Combines multiple conditioning nodes into one
c                     SSK Jn  SSK Jn  U" 5       nU" 5       nUS   n[        SU5       HF  n	USU	S-    3   n
US:X  a  UR	                  X5      S   nM*  US:X  d  M2  UR                  X5      S   nMH     X4$ )	Nr   )ConditioningCombine)ConditioningConcatr   r{   conditioning_r   r   )nodesr   r   ranger   r   )r)   r   r   kwargsr   r   cond_combine_nodecond_concat_nodecondcnew_conds              r   r    ConditioningMultiCombine.combine   s    -,/1-/&'q*%Aa!eW56HI%(00@Ch&'..t>qA & ""r    r   Nr-   r.   r/   r0   r1   r   r2   r3   r4   r5   r   r   r7   r   r    r   r   r      s6      +L-LH-HK#r    r   c                   6    \ rS rSr\S 5       rSrSrSrS r	Sr
g)	AppendStringsToList   c                 $    SSSSS.4SSSS.4S.0$ )Nr   rZ   r[   Tr   rz   string1string2r   r^   s    r   r   AppendStringsToList.INPUT_TYPES   s0     $"D&IJ$"D&IJ
 	
r    ra   
joinstringKJNodes/textc                 p    [        U[        5      (       d  U/n[        U[        5      (       d  U/nX-   nU4$ r'   )
isinstancelist)r)   r   r   joined_strings       r   r   AppendStringsToList.joinstring   s;    '4((iG'4((iG)  r    r   Nr-   r.   r/   r0   r1   r   r2   r4   r5   r   r7   r   r    r   r   r      s*    
 
 LHH!r    r   c                   :    \ rS rSr\S 5       rSrSrSrS	S jr	Sr
g)
JoinStrings   c                 4    SSSSS.40SSSS.4SSSS.4S	.S
.$ )N	delimiterrZ    Fr\   r[   Tr   r   r   optionalr   r^   s    r   r   JoinStrings.INPUT_TYPES   sC     hCe(LM %"D&IJ$"D&IJ	
 	
r    ra   r   r   c                     X!-   U-   nU4$ r'   r   )r)   r   r   r   r   s        r   r   JoinStrings.joinstring  s    +g5  r    r   Nr[   r[   r   r   r    r   r   r      s*    	
 	
 LHH!r    r   c                   >    \ rS rSr\S 5       rSrSrSrSr	Sr
S rS	rg
)JoinStringMultii  c                 N    SSSSSS.4SSSS	.4SS
SS.4SSS04S.SSSSS	.40S.$ )Nr<   r     r{   rL   rZ   r[   Tr   r   Fr\   r   r   )r   string_1r   return_liststring_2r   r   r   s    r   r   JoinStringMulti.INPUT_TYPES  sb      %!AdTU&VW%2T'JK&Ce(LM )Iu+=>	 X2T'JK
 
	r    ra   )rY   r   r   z
Creates single string, or a list of strings, from  
multiple input strings.  
You can set how many inputs the node has,  
with the **inputcount** and clicking update.
c                     US   nUS   nU/n[        SU5       HE  nUR                  SUS-    3S5      nU(       d  M$  U(       a  UR                  U5        M>  XB-   U-   nMG     U(       a  U4$ U4$ )Nr   r   r{   string_r[   )r   getappend)	r)   r   r   r   rY   r   stringsr   rq   s	            r   r   JoinStringMulti.combine-  s    
#]+(q*%Aga!eW$5r:Jz*+j8 & :9r    r   Nr   r   r    r   r   r     s6      LLHHKr    r   c                   B    \ rS rSr\S 5       rSrSrSrSr	Sr
SS	 jrS
rg)CondPassThroughi>  c                     0 SSS.S.$ )Nr   positivenegativer   r   r   s    r   r   CondPassThrough.INPUT_TYPES?  s     /. 	r    r   r   r  passthroughrw   z}
    Simply passes through the positive and negative conditioning,
    workaround for Set node not allowing bypassed inputs.
Nc                     X4$ r'   r   )r)   r  r  s      r   r  CondPassThrough.passthroughS  s    $$r    r   NNr-   r.   r/   r0   r1   r   r2   r3   r4   r5   r   r  r7   r   r    r   r   r   >  s6      5L+LHHK
%r    r   c                   B    \ rS rSr\S 5       rSrSrSrSr	Sr
SS	 jrS
rg)ModelPassThroughiV  c                     0 SS0S.$ )NmodelMODELr   r   r   s    r   r   ModelPassThrough.INPUT_TYPESW  s      	r    r  )r  r  rw   z`
    Simply passes through the model,
    workaround for Set node not allowing bypassed inputs.
Nc                     U4$ r'   r   r)   r  s     r   r  ModelPassThrough.passthroughj  s	    8Or    r   r'   r  r   r    r   r  r  V  s6      LLHHK
r    r  c                     U S   U S   R                  5       /nUR                  u  pgnXS   S'   X5S   S'   XES   S'   UR                  U5        g )Nr   r{   maskset_area_to_boundsmask_strength)r   shaper   )	tr  r   r  strengthn_hws	            r   append_helperr!  m  sV    qT1Q499;**a!V%7!!" (!_	r    c                   >    \ rS rSr\S 5       rSrSrSrSr	Sr
S rS	rg
)ConditioningSetMaskAndCombineiu  c                 @    SSSSSSSSSSSSS	.4SSSSSS	.4S
S/4S.	0$ )Nr   r   MASKrJ         ?rK         $@{Gz?rL   r   mask bounds)	
positive_1
negative_1
positive_2
negative_2mask_1mask_2mask_1_strengthmask_2_strengthset_cond_arear   r^   s    r   r   )ConditioningSetMaskAndCombine.INPUT_TYPESv  sY     0000$$$+SQU_c-d#e$+SQU_c-d#e#,m"<!>

 	
r    r  combined_positivecombined_negativer   r   r
Bundles multiple conditioning mask and combine nodes into one,functionality is identical to ComfyUI native nodes
c
                 |   / n
/ nSnUS:w  a  Sn[        UR                  5      S:  a  UR                  S5      n[        UR                  5      S:  a  UR                  S5      nU H  n[        XXU5        M     U H  n[        XXU	5        M     U H  n[        XXU5        M     U H  n[        XXU	5        M     X4$ NFr   T   r   lenr  	unsqueezer!  )r)   r+  r,  r-  r.  r/  r0  r3  r1  r2  r   c2r  r  s                 r   r   $ConditioningSetMaskAndCombine.append  s    "I%!%v||q %%a(Fv||q %%a(FA!QOL A!QOL A!R_M A!R_M wr    r   Nr-   r.   r/   r0   r1   r   r2   r3   r4   r5   r   r   r7   r   r    r   r#  r#  u  s6    
 
 4L>LH-HKr    r#  c                   >    \ rS rSr\S 5       rSrSrSrSr	Sr
S rS	rg
)ConditioningSetMaskAndCombine3i  c                 V    SSSSSSSSSSSSSSSS	.4SSSSSS	.4SSSSSS	.4S
S/4S.0$ )Nr   r   r%  rJ   r'  rK   r(  r)  rL   r   r*  )r+  r,  r-  r.  
positive_3
negative_3r/  r0  mask_3r1  r2  mask_3_strengthr3  r   r^   s    r   r   *ConditioningSetMaskAndCombine3.INPUT_TYPES  su     000000$$$$+SQU_c-d#e$+SQU_c-d#e$+SQU_c-d#e#,m"<!>
 	
r    r  r5  r   r   r8  c                 4   / n/ nSnU
S:w  a  Sn[        UR                  5      S:  a  UR                  S5      n[        UR                  5      S:  a  UR                  S5      n[        U	R                  5      S:  a  U	R                  S5      n	U H  n[        UX~UU5        M     U H  n[        UXUU5        M     U H  n[        UXUU5        M     U H  n[        UXUU5        M     U H  n[        UXUU5        M     U H  n[        UXUU5        M     X4$ r:  r<  )r)   r+  r,  r-  rE  r.  rF  r/  r0  rG  r3  r1  r2  rH  r   r?  r  r  s                     r   r   %ConditioningSetMaskAndCombine3.append  s    "I%!%v||q %%a(Fv||q %%a(Fv||q %%a(FA!V(:OL A!V(:OL A!V(:OL A!V);_M A!V);_M A!V);_M wr    r   NrA  r   r    r   rC  rC    s6    
 
& 4L>LH-HKr    rC  c                   >    \ rS rSr\S 5       rSrSrSrSr	Sr
S rS	rg
)ConditioningSetMaskAndCombine4i  c           	          S0 SS_SS_SS_SS_SS_SS_S	S_S
S_SS_SS_SS_SS_SSSSSSS.4_SSSSSSS.4_SSSSSSS.4_SSSSSSS.4_SSS/4_0$ )Nr   r+  r   r,  r-  r.  rE  rF  
positive_4
negative_4r/  r%  r0  rG  mask_4r1  rJ   r'  rK   r(  r)  rL   r2  rH  mask_4_strengthr3  r   r*  r   r^   s    r   r   *ConditioningSetMaskAndCombine4.INPUT_TYPES  s.     00 0 0	
 0 0 0 0 * * * * "GSQU_c-d#e "GSQU_c-d#e "GSQU_c-d#e  "GSQU_c-d#e!"  9m"<!>#
 	
r    r  r5  r   r   r8  c                    / n/ nSnUS:w  a  Sn[        U	R                  5      S:  a  U	R                  S5      n	[        U
R                  5      S:  a  U
R                  S5      n
[        UR                  5      S:  a  UR                  S5      n[        UR                  5      S:  a  UR                  S5      nU H  n[        UU	UUU5        M     U H  n[        UU
UUU5        M     U H  n[        UUUUU5        M     U H  n[        UUUUU5        M     U H  n[        UU	UUU5        M     U H  n[        UU
UUU5        M     U H  n[        UUUUU5        M     U H  n[        UUUUU5        M     UU4$ r:  r<  )r)   r+  r,  r-  rE  rO  r.  rF  rP  r/  r0  rG  rQ  r3  r1  r2  rH  rR  r   r?  r  r  s                         r   r   %ConditioningSetMaskAndCombine4.append  s   "I%!%v||q %%a(Fv||q %%a(Fv||q %%a(Fv||q %%a(FA!VQ(:OL A!VQ(:OL A!VQ(:OL A!VQ(:OL A!VR);_M A!VR);_M A!VR);_M A!VR);_M 2wr    r   NrA  r   r    r   rM  rM    s6    
 
. 4L>LH-HKr    rM  c                   >    \ rS rSr\S 5       rSrSrSrSr	Sr
S rS	rg
)ConditioningSetMaskAndCombine5i  c           
          S0 SS_SS_SS_SS_SS_SS_S	S_S
S_SS_SS_SS_SS_SS_SS_SS_SSSSSSS.4_SSSSSSS.4_SSSSSS.4SSSSSS.4SSSSSS.4SS/4S.E0$ )Nr   r+  r   r,  r-  r.  rE  rF  rO  rP  
positive_5
negative_5r/  r%  r0  rG  rQ  mask_5r1  rJ   r'  rK   r(  r)  rL   r2  r   r*  )rH  rR  mask_5_strengthr3  r   r^   s    r   r   *ConditioningSetMaskAndCombine5.INPUT_TYPES  sS     00 0 0	
 0 0 0 0 0 0 * * * * *  "GSQU_c-d#e!" "GSQU_c-d#e#$ %,SQU_c-d#e$+SQU_c-d#e$+SQU_c-d#e#,m"<!>+
 	
r    r  r5  r   r   r8  c                    / n/ nSnUS:w  a  Sn[        UR                  5      S:  a  UR                  S5      n[        UR                  5      S:  a  UR                  S5      n[        UR                  5      S:  a  UR                  S5      n[        UR                  5      S:  a  UR                  S5      n[        UR                  5      S:  a  UR                  S5      nU H  n[        UUUUU5        M     U H  n[        UUUUU5        M     U H  n[        UUUUU5        M     U H  n[        UUUUU5        M     U H  n[        UUUUU5        M     U H  n[        UUUUU5        M     U H  n[        UUUUU5        M     U H  n[        UUUUU5        M     U	 H  n[        UUUUU5        M     U
 H  n[        UUUUU5        M     UU4$ r:  r<  )r)   r+  r,  r-  rE  rO  rY  r.  rF  rP  rZ  r/  r0  rG  rQ  r[  r3  r1  r2  rH  rR  r\  r   r?  r  r  s                             r   r   %ConditioningSetMaskAndCombine5.append?  s   "I%!%v||q %%a(Fv||q %%a(Fv||q %%a(Fv||q %%a(Fv||q %%a(FA!VQ(:OL A!VQ(:OL A!VQ(:OL A!VQ(:OL A!VQ(:OL A!VR);_M A!VR);_M A!VR);_M A!VR);_M A!VR);_M 2wr    r   NrA  r   r    r   rW  rW    s6    
 
6 4L>LH-HK$r    rW  c                   `    \ rS rSr\S 5       r\R                  SSSS4rSr	Sr
SrS	rSS jrSrg
)
VRAM_Debugie  c                 R    SSS04SSS04SSS04S.[         R                  4SSS.S	.$ )
Nr   r   TF)empty_cache
gc_collectunload_all_modelsIMAGEr  )	any_input
image_pass
model_passr   r   ANYr   s    r   r   VRAM_Debug.INPUT_TYPESg  sP     &	4'89$y$&78"+i-?!@	
 &&$$
 r    rg  r  r<   )
any_outputri  rj  freemem_beforefreemem_after	VRAMdebugzKJNodes/memoryz
Returns the inputs unchanged, they are only used as triggers,  
and performs comfy model management functions and garbage collection,  
reports free VRAM before and after the operations.
Nc                    [         R                  " 5       n[        R                  " SUS 35        U(       a  [         R                  " 5         U(       a  [         R
                  " 5         U(       a  SS KnUR                  5         [         R                  " 5       n	[        R                  " SU	S 35        [        R                  " SX-
  S 35        SUS SU	S 3/0XdXWU	4S.$ )	NzVRAMdebug: free memory before: z,.0fr   zVRAMdebug: free memory after: zVRAMdebug: freed memory: rc   xr   result)r   get_free_memorylogginginfosoft_empty_cachere  gccollect)
r)   rd  rc  re  ri  rj  rh  ro  rz  rp  s
             r   rq  VRAM_Debug.VRAMdebug  s    )99;6~d6KLM--/..0JJL(88:5mD5IJK01OPT0UVWt,AmD-ABCE j-X
 	
r    r   NNN)r-   r.   r/   r0   r1   r   r   rl  r2   r3   r4   r5   r   rq  r7   r   r    r   ra  ra  e  sE      FFGGE5:L`LHHK
r    ra  c                   >    \ rS rSr\S 5       rSrSrSrSr	S
S jr
Srg	)SomethingToStringi  c                 D    S[         R                  40SSS04SSS04S.S.$ )NinputrZ   r   r[   )prefixsuffixr   rk  r   s    r   r   SomethingToString.INPUT_TYPES  s=    
 	"&& i_-i_-	 r    ra   rl   r   z 
Converts any type to a string.
c                     [        U[        [        [        [        45      (       a  [	        U5      nO1[        U[
        5      (       a  SR                  S U 5       5      nOU4$ U(       a  X$-   nU(       a  XC-   nU4$ )Nr   c              3   8   #    U  H  n[        U5      v   M     g 7fr'   )str).0items     r   	<genexpr>.SomethingToString.stringify.<locals>.<genexpr>  s     #@%$CII%s   )r   r   rP   boolr  r   r   )r)   r  r  r  stringifieds        r   rl   SomethingToString.stringify  sg    ec5$455e*Kt$$))#@%#@@K6M .K%.K~r    r   Nr   )r-   r.   r/   r0   r1   r   r2   r4   r5   r   rl   r7   r   r    r   r  r    s1    	 	 LHHKr    r  c                   P    \ rS rSr\S 5       r\R                  4rSr	Sr
SrS rSrg)	Sleepi  c           	      J    S[         R                  4SSSSS.4SSSSS	S
.4S.0$ )Nr   r<   r   i  r?   rJ   rK   gQM@r)  rL   )r  minutessecondsrk  r   s    r   r   Sleep.INPUT_TYPES  s@     &&!q4#HI#SX\%]^
 	
r    
sleepdelayrw   z4
Delays the execution for the input amount of time.
c                 D    US-  U-   n[         R                  " U5        U4$ )N<   )timesleep)r)   r  r  r  total_secondss        r   r  Sleep.sleepdelay  s#    "w.

=!vr    r   N)r-   r.   r/   r0   r1   r   r   rl  r2   r4   r5   r   r  r7   r   r    r   r  r    s7    
 
 FF9LHHKr    r  c                   :    \ rS rSr\S 5       rSrSrSrSr	S r
Srg	)
EmptyLatentImagePresetsi  c                 2    S/ SQSS04SSS04SSSS	S
.4S.0$ )Nr   )
512 x 512 (1:1)z768 x 512 (1.5:1)z960 x 512 (1.875:1)z1024 x 512 (2:1)z1024 x 576 (1.778:1)z1536 x 640 (2.4:1)z1344 x 768 (1.75:1)z1216 x 832 (1.46:1)z1152 x 896 (1.286:1)z1024 x 1024 (1:1)r   r  r   Fr<   r{   r|   r?   
dimensionsinvert
batch_sizer   r^   s    r   r   #EmptyLatentImagePresets.INPUT_TYPES  sR     	 (" !9e"45 # '

 	
r    r   r<   r<   LatentWidthHeightgenerater   c                 >   SSK Jn  UR                  S5       Vs/ s H  oUR                  5       PM     nnUS   R                  S5      S   R                  5       US'   US   R                  S5      S   R                  5       US'   U(       a/  [	        US   R                  S5      S   5      n[	        US   5      nO.[	        US   5      n[	        US   R                  S5      S   5      nU" 5       R                  XxU5      S   n	U	[	        U5      [	        U5      4$ s  snf )Nr   EmptyLatentImagers  (r{   r   )r   r  r   rp   r   r  )
r)   r  r  r  r  rs  ru  widthheightlatents
             r   r   EmptyLatentImagePresets.generate  s    *%/%5%5c%:;%:'')%:; 1IOOC(+113q	1IOOC(+113q	q	,Q/0E^Fq	NE-a01F!#,,UJGJE
CK11 <s   Dr   N)r-   r.   r/   r0   r1   r   r2   r3   r4   r5   r  r7   r   r    r   r  r    s/    
 
: ,L0LH H2r    r  c                   >    \ rS rSr\S 5       rSrSrSrSr	Sr
S rS	rg
)EmptyLatentImageCustomPresetsi  c                 H    [        [        R                  R                  [        S5      5       n[
        R                  " U5      nS S S 5        SW Vs/ s H  o3S    SUS    3PM     sn4SSS04S	S
S
SS.4S.0$ ! , (       d  f       N<= f! [         a    / n NMf = fs  snf )Nzcustom_dimensions.jsonr   label - r   r   r   Fr<   r{   r|   r?   r  )openospathr   script_directoryjsonloadFileNotFoundError)r_   fdimensions_dictds       r   r   )EmptyLatentImageCustomPresets.INPUT_TYPES  s    	!bggll#35MNOST"&))A, P
 	:IJ/QwZLAgJ<0/J !9e"45 # 

 	
	 PO  	! O	!
 Ks4   -B A<B B<
B
B 
B BBr  r  r  r   z
Generates an empty latent image with the specified dimensions.  
The choices are loaded from 'custom_dimensions.json' in the nodes folder.
c                 :   SSK Jn  UR                  S5      u  pVUR                  S5       Vs/ s H  owR                  5       PM     snu  pU(       a  XpU" 5       R	                  [        U5      [        U	5      U5      S   n
U
[        U5      [        U	5      4$ s  snf )Nr   r  r  rs  )r   r  r   rp   r  r   )r)   r  r  r  r  r  r   rs  r  r  r  s              r   r  &EmptyLatentImageCustomPresets.generate"  s    ) &&u-|u+0;;s+;<+;a	+;<}u
!& "++CJFZPQRSvs5z3v;00 =s   Br   N)r-   r.   r/   r0   r1   r   r2   r3   r4   r5   r   r  r7   r   r    r   r  r    s6    
 
* ,L0LH HK
1r    r  c                   N    \ rS rSr\S 5       r\S 5       rSrSrSr	Sr
SS	 jrS
rg)WidgetToStringi0  c                :    Ub  US:w  d  US:w  a  [        S5      $ g g )Nr   r[   NaN)rP   )r_   id
node_titlerh  r   s        r   
IS_CHANGEDWidgetToString.IS_CHANGED1  s(     bAgr1A< 2B r    c           	      x    SSSSSS.4SSS04S	S
S04S.[         R                  4SSS04SSSSSS.4S.SSSS.S.$ )Nr<   r   i r{   rL   rZ   r]   Fr   r   )r  widget_name
return_allr   
   z4Number of decimal places to display for float values)r   r@   rA   tooltip)rh  r  allowed_float_decimalsEXTRA_PNGINFOPROMPT	UNIQUE_ID)extra_pnginfoprompt	unique_id)r   r   hiddenrk  r^   s    r   r   WidgetToString.INPUT_TYPES6  s     !AfaPQ (;*>?(9e*<= (*vvj(0;2F'G49qQR[]  ka  <b  4c
 )8!)$/2
 	
r    ra   get_widget_valuer   a  
Selects a node and it's specified widget and outputs the value as a string.  
If no node id or title is provided it will use the 'any_input' link and use that node.  
To see node id's, enable "Node ID Badge Mode" in main settings.
Alternatively you can search with the node title. Node titles ONLY exist if they  
are manually edited!
'widget_name' can be a comma separated list.
The 'any_input' is required for making sure the node you want the value from exists in the workflow.
Nc
           	      
   US   n
/ nS =n=p0 n0 n[        U[        5      (       a:  SU;   a4  UR                  S5      n[        US   5      nSR	                  US S 5      nO[        U5      n[        U
R                  S/ 5      5      nU
R                  S0 5      nUR                  S/ 5      n0 nU
R                  S/ 5       H6  nUR                  SS5      nS	U;   d  M  [        U5      S
:X  d  M.  US   UU'   M8     U H  nUR                  SS5      nUR                  U5      nUR                  S/ 5      nU H  nUc  M  UUUS   '   M     UR                  U5        UR                  S/ 5      nU HX  n[        U[        5      (       a  US   UUS   '   M%  [        U[
        5      (       d  M<  [        U5      S:  d  MM  US   UUS   '   MZ     M     U H  nU(       a0  SU;   a  US   U:X  a  US   n  OM"  [        R                  " S5        M:  US:w  a  US   U:X  a  Un  OMO  Uc  MT  US   S:X  a,  US   U:X  a#  U(       d  US    H  nUS   S:X  d  M  US   nM     UR                  SS 5      n U (       d  M  U  HA  n!U!R                  SS 5      n"U"(       d  M  U" H  nUS   UU'   U(       d  M  UU:X  d  M    M?     MC     M     U(       a  UR                  US 5      nUc  [        S5      eUR                  U5      n#U#b  U# SU 3n$OUb  U SU 3n$O[        U5      n$U$U;  a  [        U5      n$U$U;  a  [        SU# SU SU S35      eUU$   n%SU%;   Ga  U%S   n&/ n'U(       aF  UR                  S5       V(s/ s H*  n(U(R                  5       (       d  M  U(R                  5       PM,     n'n(U(       a  / n)U&R                  5        HI  u  n*n+[        U+[         5      (       a  U* SU+SU	 S 3 3n,OU* S[        U+5       3n,U)R#                  U,5        MK     UR#                  S!R	                  U)5      5        O[        U'5      S:X  aO  U'S   n-U-U&;   a3  U&U-   n+[        U+[         5      (       a  U+SU	 S 3 n+U+4$ [        U+5      n+U+4$ [%        S"U SU- 35      e[        U'5      S:  ax  / n)U' H^  n-U-U&;  a  [%        S"U SU- 35      eU&U-   n+[        U+[         5      (       a	  U+SU	 S 3 n+O[        U+5      n+U)R#                  U- SU+ 35        M`     S!R	                  U)5      4$ [%        S"U SU 35      eS!R	                  U5      R                  S!5      4$ s  sn(f )#Nworkflow:r   definitions	subgraphstyper[   -$   r  links	origin_idr   r{   r   titlezNode title not found.r  inputsnamerh  linkoutputsz0No matching node found for the given title or idz'Node not found in prompt. Tried keys: 'z' and ''r   : .r  r   zWidget not found: )r   r  r   r   r   r   r   r=  extendr   rw  warning
ValueErrorKeyErrorrp   r   rP   r   	NameError).r)   r  r  r  r  r  r  rh  r  r  r  resultsnode_idlink_idsubgraph_prefixlink_to_node_mapnode_to_subgraph_mapunique_id_partsunique_id_int	all_nodesr  r  subgraph_id_to_parentnode	node_typesubgraphsubgraph_idparent_node_idsubgraph_nodessubgraph_linksr  
node_inputnode_outputsoutput
node_linkstarget_subgraph_parent
prompt_keyvaluesr  widget_namesr   formatted_itemsr   r   r  r  s.                                                 r   r  WidgetToString.get_widget_valueU  s    ,.222'! i%%#*:'ooc2O 34M!hhs';<O	NM gr23	ll="5OOK4	 !#LL"-D,IiC	Nb$837:%i0	 . "H",,tR0K266{CN%\\'26N&!-7E(d4 ' ^, &\\'26N&dD))373D$T$Z0d++D	Q04Q$T!W- ' "( Dd?G}
2"&t* 3 OO$;<q:# G $ &<#33T
m8S\c&*8n
%f-<&0&8G '5
  $xx	48#*F!'GT!:J%  *15d(."7tw! !+	 +- > &**7D9G?OPP "6!9!9'!B!-231WI>J(+,AgY7JWJ V#WJV#DE[D\\]^e]ffmnumvvwxyy
#vH%F L3>3D3DS3IW3IaQWWY		3IW"$"LLNDAq!!U++"#Bq+A*B!(C&DE"#Bs1vh/#**40 + tyy9: \"a'#A6>tA!!U++ #9":! ;< 5L  F5L#&8	4&$IJJ \"Q&"$(D6)'*<WIQtf(MNNtA!!U++ #9":! ;<F#**dV2aS>: ) 		/255  "4WIQ{m LMM		'"((.11Y  Xs   0UUr   )FNr[   r   )r-   r.   r/   r0   r1   r  r   r2   r4   r5   r   r  r7   r   r    r   r  r  0  sF        
 
"  L!HHK]2r    r  c                   T    \ rS rSr\S 5       r\R                  4rSr	Sr
SrSrS rSrg	)
DummyOuti  c                 ,    SS[         R                  400$ )Nr   rh  rk  r^   s    r   r   DummyOut.INPUT_TYPES  s!     "&&
 	
r    dummyrw   Tz}
Does nothing, used to trigger generic workflow output.    
A way to get previews in the UI without saving anything to disk.
c                     U4$ r'   r   )r)   rh  s     r   r  DummyOut.dummy  s
    |r    r   N)r-   r.   r/   r0   r1   r   r   rl  r2   r4   r5   OUTPUT_NODEr   r  r7   r   r    r   r  r    s<    
 
 FF9LHHKK
r    r  c                   :    \ rS rSr\S 5       rSrSrSrSr	S r
Srg	)
FlipSigmasAdjustedi  c           
      8    SSSSS04SSSSS	S
.4SSSSSS
.4S.0$ )Nr   SIGMASr   r   FrJ   r{   r   r)  rL   r<   id   )sigmasdivide_by_last_sigma	divide_by	offset_byr   r   s    r   r   FlipSigmasAdjusted.INPUT_TYPES  sH    +.7)U9K-L#*3X\,]"^#(atCYZ*["\ 	r    )r  rZ   )r  sigmas_stringKJNodes/noiseget_sigmas_adjustedc                    UR                  S5      nUS   S:X  a  SUS'   UR                  5       n[        S[        U5      5       H,  nXd-
  nSUs=::  a  [        U5      :  a  O  OX   XV'   M(  SXV'   M.     US   S:X  a  SUS'   U(       a  XUS   -  nUR	                  5       n[
        R                  " USS[
        R                  S9n	XS-  nXY4$ )Nr   -C6?r{   r  r   r   )	precision	separator	threshold)flipcloner   r=  numpynparray2stringinf)
r)   r  r  r  r   adjusted_sigmasioffset_indexsigma_np_arrayarray_strings
             r   r$  &FlipSigmasAdjusted.get_sigmas_adjusted  s    Q!9>F1I ,,.q#f+&A=LL.3v;.%+%9"%+" ' 1"!'OA-0CCO(..0~d^`^d^de)5//r    r   N)r-   r.   r/   r0   r1   r   r2   r3   r5   r4   r$  r7   r   r    r   r  r    s/      )L/LH$H0r    r  c                   D    \ rS rSr\S 5       rSrSrSrSr	Sr
S rS rS	rg
)CustomSigmasi1  c                 (    SSSSS.4SSSS	S
S.4S.0$ )Nr   rZ   zL14.615, 6.475, 3.861, 2.697, 1.886, 1.396, 0.963, 0.652, 0.399, 0.152, 0.029Tr\   r<   r  r   r   r{   rL   )r"  interpolate_to_stepsr   r   s    r   r   CustomSigmas.INPUT_TYPES2  sC    '/  >L  Z^  2_  '`.31UXbc5d-e 	r    r  r#  customsigmasa  
Creates a sigmas tensor from a string of comma separated values.  
Examples: 
   
Nvidia's optimized AYS 10 step schedule for SD 1.5:  
14.615, 6.475, 3.861, 2.697, 1.886, 1.396, 0.963, 0.652, 0.399, 0.152, 0.029  
SDXL:   
14.615, 6.315, 3.771, 2.181, 1.342, 0.862, 0.555, 0.380, 0.234, 0.113, 0.029  
SVD:  
700.00, 54.5, 15.886, 7.977, 4.248, 1.789, 0.981, 0.403, 0.173, 0.034, 0.002  
c                    UR                  S5      nU Vs/ s H  n[        U5      PM     nn[        R                  " U5      n[	        U5      US-   :w  a  U R                  XbS-   5      nSUS'   UR                  5       4$ s  snf )Nr   r{   r   r  )r   rP   r   FloatTensorr=  loglinear_interp)r)   r"  r9  sigmas_listsigmasigmas_float_listsigmas_tensors          r   r;  CustomSigmas.customsigmasI  s    #))$/7BC{eU5\{C))*;<}!5!99 11-XYAYZMb##%'' Ds   A?c                 ~   UR                  5       n[        R                  " SS[        U5      5      n[        R                  " USSS2   5      n[        R                  " SSU5      n[        R
                  " XdU5      n[        R                  " U5      SSS2   R                  5       n[        R                  " U5      n	U	$ )zK
Performs log-linear interpolation of a given array of decreasing numbers.
r   r{   Nr  )
r,  r-  linspacer=  loginterpexpr   r   r   )
r)   t_steps	num_steps
t_steps_npxsysnew_xsnew_ysinterped_ysinterped_ys_tensors
             r   r>  CustomSigmas.loglinear_interpR  s     ]]_
[[As:/VVJtt$%Q9-6r*ffVnTrT*//1"\\+6!!r    r   N)r-   r.   r/   r0   r1   r   r2   r3   r5   r4   r   r;  r>  r7   r   r    r   r7  r7  1  s;      LLHH
K("r    r7  c                   :    \ rS rSr\S 5       rSrSrSrSr	S r
Srg)	StringToFloatListib  c                     SSSSSS.400$ )Nr   rY   rZ   z1, 2, 3Tr\   r   r   s    r   r   StringToFloatList.INPUT_TYPESc  s#    id*ST 	r    rO   rw   
createlistc                     UR                  S5       Vs/ s H  n[        UR                  5       5      PM     nnU4$ s  snf )Nr   )r   rP   rp   )r)   rY   rs  
float_lists       r   rW  StringToFloatList.createlisto  s:    06S0AB0A1eAGGI&0A
B} Cs   #<r   N)r-   r.   r/   r0   r1   r   r2   r3   r5   r4   rW  r7   r   r    r   rT  rT  b  s/      LLHHr    rT  c                   :    \ rS rSr\S 5       rSrSrSrS	S jr	Sr
g)
InjectNoiseToLatentit  c           	      Z    SSSSSSS.4SSS	S
04SS	S
04S.SSSSSSS.4SSSSSS.4S.S.$ )Nr   rJ   皙?rK   g      i@r&  rL   r   r   F)r   r  noise	normalizeaverager%       @@MbP?r<   {   r   r>   r{   )r  mix_randn_amountseedr   r   r   s    r   r   InjectNoiseToLatent.INPUT_TYPESu  su     " c#eU["\]!#i%78!Iu#56 #%,#cRXbg.h$iCqAS]^ _` 	r    r   injectnoiser#  Nc	           	         US   R                  5       R                  5       n	US   R                  5       R                  5       nU	R                  U	R                  :w  a  [        S5      eU(       a  X-   S-  n
OXU-  -   n
U(       a  XR	                  5       -  n
UGb  [
        R                  R                  R                  UR                  SSUR                  S   UR                  S   45      U
R                  S   U
R                  S   4SS	9nUR                  SU
R                  S   SS45      nUR                  S
   U
R                  S
   :  aG  UR                  U
R                  S
   S-
  UR                  S
   -  S-   SSS5      S U
R                  S
    nX-  SU-
  U	-  -   n
US
:  aZ  UbW  [
        R                  " U5      n[
        R                  " U
R                  5       U
R                  U
R                   USS9nXU-  -   n
SU
04$ )Nr   z>InjectNoiseToLatent: Latent and noise must have the same shaper   r  r{   r;  bilinear)sizemoder   cpur   layout	generatordevice)r+  rn  r  r  stdr   nn
functionalinterpolatereshapeexpandrepeatmanual_seedrandnrl  r   rp  )r)   r   r  r_  r`  ra  re  rf  r  r   noisedrq  
rand_noises                r   rh  InjectNoiseToLatent.injectnoise  s   )$**,002i &&(,,.==GMM)]^^o*Fx//Fjjl*F88&&224<<Q

SUX\XbXbceXf@g3hpvp|p|}~p  BH  BN  BN  OP  BQ  pR  Yc2  dD;;6<<?2b9:Dzz!}v||A.{{FLLOQ$64::a=#H1#LaQRTUVWgX^XdXdefXgh]af%77Fa!--d3	"[[fllSYS`S`lu  D  E
j#@A6"$$r    r   )r   NN)r-   r.   r/   r0   r1   r   r2   r4   r5   rh  r7   r   r    r   r\  r\  t  s*      LHH%r    r\  c                   >    \ rS rSr\S 5       rSrSrSrSr	Sr
S rS	rg
)SoundReactivei  c                 f    SSSSSSS.4SS	S
SSS.4SSS
SSS.4SSSSSS.4SSSSSS.4SSS04S.0$ )Nr   rJ   r'  rK   i r)  rL   r<      r   i'  r{   i        ?r   r   F)sound_levelstart_range_hzend_range_hz
multipliersmoothing_factorr`  r   r   s    r   r   SoundReactive.INPUT_TYPES  s{    #SX\%]^$#aVW&XY"QtUV$WX"DX\$]^!(c#c[_*` a#i%78  	r    )rJ   r<   )r  sound_level_intreactKJNodes/audioz
Reacts to the sound level of the input.  
Uses your browsers sound input options and requires.  
Meant to be used with realtime diffusion with autoqueue.
c                 >    X-  nU(       a  US-  n[        U5      nX4$ )Nr   )r   )r)   r  r  r  r  r  r`  r  s           r   r  SoundReactive.react  s*    !3Kk*//r    r   N)r-   r.   r/   r0   r1   r   r2   r3   r4   r5   r   r  r7   r   r    r   r  r    s6    	 	 $L5LHHK0r    r  c                   >    \ rS rSr\S 5       rSrSrSrSr	S
S jr
S	rg)GenerateNoisei  c           
          SSSSSS.4SSSSSS.4SSSSS.4SSS	S
SS.4SSSSSS.4SSS04SSS04S.SSSS/4/ SQ4S.S.$ )Nr<         r|   r{   rL   r?   rd  r   r>   rJ   r'  rK   r)  r   r   F)r  r  r  rf  r  constant_batch_noiser`  r  r  416)r   r   r   )r  r  latent_channelsr  r   r   r   s    r   r   GenerateNoise.INPUT_TYPES  s     BtQOP#RaPQ a$"GH1=OYZ[\"3tUY$Z[%.E0B$C#i%78 %&%($M#346	
 	
r    r   generatenoiser#  z^
Generates noise for injection or to be used as empty latents on samplers with add_noise off.
Nc                    [         R                  " U5      nUS:X  aH  [         R                  " U[        U
5      US-  US-  /[         R                  [         R
                  USS9nOUS:X  aH  [         R                  " S[        U
5      XS-  US-  /[         R                  [         R
                  USS9nONUS:X  aH  [         R                  " SU[        U
5      US-  US-  /[         R                  [         R
                  USS9nUb2  US   US	   -
  nXR                  R                  R                  -  nWU-  nWU-  nU(       a  XR                  5       -  nU(       a  US   R                  USSS5      nS
U04$ )Nr      rn  ro  r   r{   r   r   r  r   )r   rz  r{  r   float32stridedr  r   scale_factorrs  ry  )r)   r  r  r  rf  r  r  r`  r  r  r  r  rq  r_  r@  s                  r   r  GenerateNoise.generatenoise  s   %%d+	F?KKS-A6Q;PUYZPZ [chcpcpy~  zG  zG  S\  ej  kEgKKC$8*q[RW[\R\ ]ejerer  |A  |I  |I  U^  gl  mEgKKJO0DfPQkSX\]S] ^fkfsfs  }B  }J  }J  V_  hm  nE1Ir
*E[[..;;;EUNE
IIK'E!HOOJ1a8E 5!$$r    r   )NN   r   )r-   r.   r/   r0   r1   r   r2   r4   r5   r   r  r7   r   r    r   r  r    s1    
 
$ LHHK%r    r  c                    [         R                  " U /5      n [         R                  " U/5      n[         R                  " [         R                  " SU -
  S-
  5      [         R                  " [         R                  " U5      5      [         R
                  " [         R                  " U5      5      [         R                  " S[         R                  " U S5      -
  5      /SS9R                  S5      nU$ )NZ   r   r  dimr{   )r   	as_tensorstackdeg2radsincos	full_liker>  )	elevationazimuth
embeddingss      r   camera_embeddingsr    s    ,Ioowi(G)^+ 		%--01		%--01A66		
 
 9Q<  r    c                 @    X-
  S-   S-  S-
  nXU-  -   nUS-   S-  S-
  $ )Ni  ih     r   )startendfractiondiffinterpolateds        r   interpolate_angler    s9    K#$s*Dd?*L3#%++r    c                   :    \ rS rSr\S 5       rSrSrSrSr	S r
Srg	)
StableZero123_BatchSchedulei  c                 p    SSSSSSS[         SS	.4SSS[         SS	.4SS
S
SS.4/ SQ4SSSS.4SSSS.4S.	0$ )Nr   CLIP_VISIONrf  VAEr<      r  r  rL   r{   r|   r?   linearease_inease_outease_in_outrZ   ry   Tr\   z0:(0.0),
7:(0.0),
15:(0.0)
	clip_vision
init_imagevaer  r  r  interpolationazimuth_points_stringelevation_points_stringr   r   s    r   r   'StableZero123_BatchSchedule.INPUT_TYPES  s    -=,6%-(-3rR`jk/l'm).CSakl0m(n-2!TX4Y,Z0`/b8@Nn  ~B  CC  8D:BPp  @D  EE  :F	 	  		 r    r   r   r   r  r  r  encodeKJNodes/experimentalc
           	      	   UR                  U5      n
U
R                  R                  S5      n[        UR	                  SS5      XESS5      R	                  SS5      nUS S 2S S 2S S 2S S24   nUR                  U5      nS nS nS	 n/ nUR                  S
5      nUR                  S5       H_  nUR                  S5      u  nn[        UR                  5       5      n[        UR                  5       SS 5      nUR                  UU45        Ma     UR                  S S9  / nUR                  S
5      nUR                  S5       H_  nUR                  S5      u  nn[        UR                  5       5      n[        UR                  5       SS 5      nUR                  UU45        Ma     UR                  S S9  SnSn/ n/ n/ n/ n [        U5       GHn  n!U[        U5      :  a.  U!UU   S   :  a"  US-  nU[        U5      :  a  U!UU   S   :  a  M"  U[        U5      :X  a  US-  n[        US-
  S5      n"UU   S   UU"   S   :w  ac  U!UU"   S   -
  UU   S   UU"   S   -
  -  n#U	S:X  a	  U" U#5      n#OU	S:X  a	  U" U#5      n#OU	S:X  a  U" U#5      n#[!        UU"   S   UU   S   U#5      n$OUU"   S   n$SnU[        U5      :  a.  U!UU   S   :  a"  US-  nU[        U5      :  a  U!UU   S   :  a  M"  U[        U5      :X  a  US-  n[        US-
  S5      n%UU   S   UU%   S   :w  ac  U!UU%   S   -
  UU   S   UU%   S   -
  -  n#U	S:X  a	  U" U#5      n#OU	S:X  a	  U" U#5      n#OU	S:X  a  U" U#5      n#[!        UU%   S   UU   S   U#5      n&OUU%   S   n&[#        U&U$5      n'[$        R&                  " UU'R)                  UR*                  S   SS45      /SS9n(UR                  U5        UR                  U(5        U R                  [$        R,                  " U5      5        UR                  [$        R,                  " U5      5        GMq     [$        R&                  " USS9n)[$        R&                  " USS9n*[$        R&                  " USS9n+[$        R&                  " U SS9n,U)SU*0//n-U+SU,0//n.[$        R.                  " USUS-  US-  /5      n/U-U.SU/04$ )Nr   r  r{   rk  centerr;  c                 
    X -  $ r'   r   r  s    r   r  3StableZero123_BatchSchedule.encode.<locals>.ease_in*  	    5Lr    c                     SSU -
  SU -
  -  -
  $ Nr{   r   r  s    r   r  4StableZero123_BatchSchedule.encode.<locals>.ease_out,      A!a%(((r    c                 *    SU -  U -  SU -  U -  U -  -
  $ Nr;  r   r   r  s    r   r  7StableZero123_BatchSchedule.encode.<locals>.ease_in_out.  !    q519q1uqy1},,r    ,
r   r  c                     U S   $ Nr   r   rs  s    r   <lambda>4StableZero123_BatchSchedule.encode.<locals>.<lambda>:      !A$r    keyc                     U S   $ r  r   r  s    r   r  r  E      AaDr    r  r  r  r  concat_latent_imager  r  r   )encode_imageimage_embedsr>  r   movedimr  rstripr   r   rp   rP   r   sortr   r=  rA   r  r  r   catry  r  
zeros_likezeros)0r)   r  r  r  r  r  r  r  r  r  r  pooledpixelsencode_pixelsr  r  r  r  azimuth_points	point_str	frame_strazimuth_strframer  elevation_pointselevation_strelevation_val
next_pointnext_elevation_pointpositive_cond_outpositive_pooled_outnegative_cond_outnegative_pooled_outr1  
prev_pointr  interpolated_azimuthprev_elevation_pointinterpolated_elevation
cam_embedsr   final_positive_condfinal_positive_pooledfinal_negative_condfinal_negative_pooledfinal_positivefinal_negativer  s0                                                   r   r  "StableZero123_BatchSchedule.encode#  s   ))*5$$..q1
 2 22a 8%U]^ffghiklq1RaRx(JJ}%		)	-  5 < <U C.44S9I%.__S%9"I{	)*EK--/"56G!!5'"23	 : 	/ "9"@"@"G066s;I'0s';$I}	)*E!-"5"5"7""=>M##UM$:;	 < 	.1 
    z"As>22qN:<VWX<Y7Ya
 s>22qN:<VWX<Y7Y S00a
Z!^Q/J j)!,z0J10MMz :1 ==.Q[B\]^B_bpq{b|}~bB  A I-&x0H"j0'1H"m3*84H (9
9STU9VXfgqXrstXuw  (A$'5j'A!'D$#$ &-=)>>1HXYmHnopHqCq$)$ '-=)>>1HXYmHnopHqCq#s+;'<<$)$#&';a'?#C  45a8<LMa<bcd<ee 01E Fq IIN^_sNtuvNw  {K  L`  {a  bc  {d  Od  e I-&x0H"j0'1H"m3*84H):;KL`;abc;dfv  xL  gM  NO  gP  RZ  *[&)9:N)OPQ)R&*+ACWXJ99fj&7&7a!Q8O&PQWYZD&&q)$$T*&&u'7'7':;$$U%5%5f%=>e #j $ii(9qA %		*=1 E#ii(9qA %		*=1 E /1FH]0^_`.1FH]0^_`j!Vq[%1*EFF0CDDr    r   Nr-   r.   r/   r0   r1   r   r2   r3   r4   r5   r  r7   r   r    r   r  r    s1    
  
  >L5LH%HmEr    r  c                     XU -
  U-  -   $ r'   r   )r  r  r  s      r   linear_interpolater    s    %K8+++r    c                   >    \ rS rSr\S 5       rSrSrSrSr	Sr
S rS	rg
)SV3D_BatchSchedulei  c                 p    SSSSSSS[         SS	.4SSS[         SS	.4SS
SSS.4/ SQ4SSSS.4SSSS.4S.	0$ )Nr   r  rf  r  r<   i@  r  r  rL      r{   r|   r?   r  rZ   z0:(0.0),
9:(180.0),
20:(360.0)
Tr\   z0:(0.0),
9:(0.0),
20:(0.0)
r  r   r   s    r   r   SV3D_BatchSchedule.INPUT_TYPES  s    -=,6%-(-3rR`jk/l'm).CSakl0m(n-21UY4Z,[0`/b8@Nr  BF  CG  8H:BPp  @D  EE  :F	 	  		 r    r  r  r  r  z
Allow scheduling of the azimuth and elevation conditions for SV3D.  
Note that SV3D is still a video model and the schedule needs to always go forward  
https://huggingface.co/stabilityai/sv3d
c
                    UR                  U5      n
U
R                  R                  S5      n[        UR	                  SS5      XESS5      R	                  SS5      nUS S 2S S 2S S 2S S24   nUR                  U5      nS nS nS	 n/ nUR                  S
5      nUR                  S5       H_  nUR                  S5      u  nn[        UR                  5       5      n[        UR                  5       SS 5      nUR                  UU45        Ma     UR                  S S9  / nUR                  S
5      nUR                  S5       H_  nUR                  S5      u  nn[        UR                  5       5      n[        UR                  5       SS 5      nUR                  UU45        Ma     UR                  S S9  SnSn/ n/ n[        U5       GH  nU[        U5      :  a.  UUU   S   :  a"  US-  nU[        U5      :  a  UUU   S   :  a  M"  U[        U5      :X  a  US-  n[        US-
  S5      n UU   S   UU    S   :w  ac  UUU    S   -
  UU   S   UU    S   -
  -  n!U	S:X  a	  U" U!5      n!OU	S:X  a	  U" U!5      n!OU	S:X  a  U" U!5      n![!        UU    S   UU   S   U!5      n"OUU    S   n"SnU[        U5      :  a.  UUU   S   :  a"  US-  nU[        U5      :  a  UUU   S   :  a  M"  U[        U5      :X  a  US-  n[        US-
  S5      n#UU   S   UU#   S   :w  ac  UUU#   S   -
  UU   S   UU#   S   -
  -  n!U	S:X  a	  U" U!5      n!OU	S:X  a	  U" U!5      n!OU	S:X  a  U" U!5      n![!        UU#   S   UU   S   U!5      n$OUU#   S   n$UR                  U"5        UR                  U$5        GM     XUUS.//n%["        R$                  " U5      ["        R$                  " U5      UUS.//n&["        R&                  " USUS-  US-  /5      n'U%U&SU'04$ )Nr   r  r{   rk  r  r;  c                 
    X -  $ r'   r   r  s    r   r  *SV3D_BatchSchedule.encode.<locals>.ease_in  r  r    c                     SSU -
  SU -
  -  -
  $ r  r   r  s    r   r  +SV3D_BatchSchedule.encode.<locals>.ease_out  r  r    c                 *    SU -  U -  SU -  U -  U -  -
  $ r  r   r  s    r   r  .SV3D_BatchSchedule.encode.<locals>.ease_in_out  r  r    r  r   r  c                     U S   $ r  r   r  s    r   r  +SV3D_BatchSchedule.encode.<locals>.<lambda>  r  r    r  c                     U S   $ r  r   r  s    r   r  r    r  r    r  r  r  )r  r  r  r  r  r   )r  r  r>  r   r  r  r  r   r   rp   rP   r   r  r   r=  rA   r  r   r  r  )(r)   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  
elevationsazimuthsr1  r  r  r  r  r  r  r  r  s(                                           r   r  SV3D_BatchSchedule.encode  s,   ))*5$$..q1
 2 22a 8%U]^ffghiklq1RaRx(JJ}%		)	-  5 < <U C.44S9I%.__S%9"I{	)*EK--/"56G!!5'"23	 : 	/ "9"@"@"G066s;I'0s';$I}	)*E!-"5"5"7""=>M##UM$:;	 < 	.1 
 
z"As>22qN:<VWX<Y7Ya
 s>22qN:<VWX<Y7YS00a
Z!^Q/Jj)!,z0J10MMz :1 ==.Q[B\]^B_bpq{b|}~bB  A I-&x0H"j0'1H"m3*84H'9.:TUV:WYghrYstuYv  yA  (B$'5j'A!'D$ $% &-=)>>1HXYmHnopHqCq$)$ '-=)>>1HXYmHnopHqCq#s+;'<<$)$#&';a'?#C  45a8<LMa<bcd<ee 01E Fq IIN^_sNtuvNw  {K  L`  {a  bc  {d  Od  e I-&x0H"j0'1H"m3*84H);<LMa<bcd<egw  yM  hN  OP  hQ  S[  *\&)9:N)OPQ)R&OO0145[ #f ":bj#klm ++F3UM]M]^_M`nx  FN  6O  P  Qj!Vq[%1*EFF0CDDr    r   N)r-   r.   r/   r0   r1   r   r2   r3   r4   r5   r   r  r7   r   r    r   r  r    s8    
  
  >L5LH%HKaEr    r  c                   :    \ rS rSr\S 5       rSrSrSrSr	S r
Srg	)
Superprompti  c           	      6    SSSSS.4SSSSS.4SS	S
SS
S.4S.0$ )Nr   rZ   z.Expand the following prompt to add more detailTr\   r[   )r   r]   rz   r<      r{   r|   rL   )instruction_promptr  max_new_tokensr   r   s    r   r   Superprompt.INPUT_TYPES  sQ     '/=m  }A  2B  'C#$VZ%[\#(c!DZ[*\"]
 	
r    ra   processr   a   
# SuperPrompt
A T5 model fine-tuned on the SuperPrompt dataset for  
upsampling text prompts to more detailed descriptions.  
Meant to be used as a pre-generation step for text-to-image  
models that benefit from more detailed prompts.  
https://huggingface.co/roborovski/superprompt-v1
c                 `   [         R                  " 5       nSSKJnJn  [
        R                  R                  [        SS5      n[
        R                  R                  U5      (       d'  [        R                  " SU 35        SSKJn  U" SUSS	9  UR                  S
SS9n	UR                  XtS9n
U
R                  U5        US-   U-   nU	" USS9R                   R                  U5      nU
R#                  XS9nU	R%                  US   5      nUR'                  SS5      nUR'                  SS5      nU4$ )Nr   )T5TokenizerT5ForConditionalGenerationmodelszsuperprompt-v1zDownloading model to: )snapshot_downloadzroborovski/superprompt-v1F)repo_id	local_dirlocal_dir_use_symlinkszgoogle/flan-t5-small)legacy)
device_mapr  pt)return_tensors)r)  z<pad>r[   z</s>)r   get_torch_devicetransformersr-  r.  r  r  r   r  existsrw  rx  huggingface_hubr0  from_pretrainedto	input_idsr  decodero   )r)   r(  r  r)  rr  r-  r.  checkpoint_pathr0  	tokenizerr  
input_textr>  r  outs                  r   r+  Superprompt.process(  s   !224H'',,'7BRSww~~o..5o5FGH=!*E,;9>@  //0Fu/U	*::?:^'$.7
j>HHKKFS	...K
+kk'2&kk&"%wr    r   N)r-   r.   r/   r0   r1   r   r2   r4   r5   r   r+  r7   r   r    r   r%  r%    s1    
 
 LHHKr    r%  c                   T    \ rS rSr\S 5       rSrSrSrSr	SS jr
SS	 jrS
 rS rSrg)CameraPoseVisualizeriB  c           	      t    SSSS.4SSSSS	S
.4SSSSS	S
.4SSS	SS	S
.4SSS04SSS04SSS04S.SSSS 040S.$ )NrZ   r[   Fr\   rJ   g?r   r  r)  rL   333333?r'  r(  r   r   T)pose_file_path	base_xvalzvalscaleuse_exact_fxrelative_c2w
use_viewercameractrl_posesCAMERACTRL_POSESr   r   r   s    r   r    CameraPoseVisualizer.INPUT_TYPESD  s      (Re)LM!s!CQU#VW#QsDQR3d4QUVW&E(:;&D(9:$y%&89 #%7)T9J$K 	r    rf  plotrw   z
Visualizes the camera poses, from Animatediff-Evolved CameraCtrl Pose  
or a .txt file with RealEstate camera intrinsics and coordinates, in a 3D plot. 
Nc	                    SS K n	SS KJn
  SSKJn  SU-  nSU-  nSU-  nSU-  nSU-  nSU-  nSU
R
                  S'   U
R                  SS9U l        U R                  R                  R                  S	5        U R                  R                  S
S9U l        U R                  R                  S	5        U R                  R                  SSSS9  S U l        U R                  R                  S5        U R                  R                  X5        U R                  R!                  X5        U R                  R#                  UU5        U R                  R%                  SSS9  U R                  R'                  SSS9  U R                  R)                  SSS9  U R                  R+                  5       U R                  R-                  5       -   U R                  R/                  5       -    H  nUR1                  S5        M     [2        R4                  " S5        US:w  a  [7        US5       nUR9                  5       nUSS   VVs/ s Hc  n[:        R<                  " UR?                  5       RA                  S5      SS   Vs/ s H  n[C        U5      PM     sn5      RE                  SS5      PMe     nnnUSS   Vs/ s H.  n[C        UR?                  5       RA                  S5      S   5      PM0     nnS S S 5        O_UbQ  UnU Vs/ s H,  n[:        RF                  " USS  5      RE                  SS5      PM.     nnU Vs/ s H  nUS   PM
     nnO[I        S5      e[K        W5      n[:        R<                  " / SQ/ SQ/ SQ/ S Q/5      RE                  SS5      n[:        RL                  " S!5      nS"US#'   U Vs/ s H  n[:        RN                  " UU4SS$9PM     nnU RQ                  UUU5      n[S        U5       H(  u  nnU RU                  UUU-  S"UU(       a  WU   OUS%9  M*     U	RV                  RX                  n U	RZ                  R]                  SUS&9n!U R                  R_                  U	RV                  Ra                  U!U S'9U R                  S(S)9n"U"Rc                  S*SS9  U"R                  Rd                  Rg                  SS+9  [:        Rh                  " SUS,5      n#U"R                  Rd                  Rk                  U#5        U
Rm                  S5        U
Ro                  5         [q        5       n$U
Rs                  U$S-S.SS/9  U$Ru                  S5        [v        R6                  " U$5      n%U" 5       " U%5      n&U$Ry                  5         U&R{                  SS0S5      R}                  S5      n&U(       a&  [~        R                  " S5        U
R                  5         U&4$ s  snf s  snnf s  snf ! , (       d  f       GN= fs  snf s  snf s  snf )1Nr   )ToTensorg       g       @z#999999z
text.color)      )figsize#3535353d)
projectionr  r  )color	linestyle	linewidthautors  r\  yzz!initialize camera pose visualizerr[   rr{   r   rW  r;  r  z8Please provide either pose_file_path or cameractrl_posesr{   r   r   r   r   r   r{   r   )r   r  r   r   r   r   r   r{   )r{   r  r'  r   r  )axis)hw_ratiorJ  rK  )vminvmax)normcmapvertical)axorientationFrame)colorsr  pngtight)formatbbox_inches
pad_inchesr   )B
matplotlibmatplotlib.pyplotpyplottorchvision.transformsrU  rcParamsfigurefigpatchset_facecoloradd_subplotro  gridplotly_data
set_aspectset_xlimset_ylimset_zlim
set_xlabel
set_ylabel
set_zlabelget_xticklabelsget_yticklabelsget_zticklabels	set_colorrw  rx  r  	readlinesr-  asarrayrp   r   rP   rw  arrayr  r=  r  concatenateget_c2w	enumerateextrinsic2pyramidcmrainbowrr  	NormalizecolorbarScalarMappable	set_labelyaxisset_tick_paramsarange	set_ticksr  drawr   savefigseekr   closepermuter>  r  r  show)'r)   rI  rL  rJ  rK  rM  rN  rO  rP  mplpltrU  x_minx_maxy_miny_maxz_minz_maxrc   r  posesposepw2csfxstotal_framestransform_matrixlast_roww2cc2ws	frame_idxc2wrm  rl  r  ticksbufimg
tensor_imgs'                                          r   rS  CameraPoseVisualizer.plot\  s    '3ueueue%.\"::g:.$$Y/((&&$&7i(9sC6"&&&3i03i03i0GG++-0G0G0IIDGGLcLcLeeDNN9% f89Rnc*anstutvnwxnwfj

djjl6H6H6Mab6Q#R6QE!H6Q#RS[[\]_`anwxEJ12YOYTuTZZ\//4Q78YO +*
 )$EAQRAQBHHT!"X&..q!4AQDR'78'7t47'7C8CWXX4y::|\=R^&_`hhijlmn88F#CGH4CXQ74H||D"2LA'oNIs""3	L(@3Zc<H#i.d # U .
 vv~~zz###>88$$SVV%:%:4%:%PUYU\U\jt$u 	7)4 	))); 		!\2.##E*		"
iC7qIjjoZ_
		''1a0::1=
JJqMHHJ}e $SxO +* S8 IsN   W6:W0WW 
W*5WW33W$,W)%!W.WW
W!c                 `   SS K Jn  SSKJn  [        R
                  " / SQXD* U-  US/XDU-  US/U* XC-  US/U* U* U-  US//5      nXR                  -  n	U	SS S24   U	S   S S U	SS S24   /U	SS S24   U	SS S24   U	SS S24   /U	SS S24   U	SS S24   U	SS S24   /U	SS S24   U	SS S24   U	SS S24   /U	SS S24   U	SS S24   U	SS S24   U	SS S24   //n
[        U[        5      (       a  UOUR                  R                  U5      nU R                  R                  U" XS	US
S95        g )Nr   )Poly3DCollectionrf  r{   r  r   r;  r  rH  g      ?)
facecolors
linewidths
edgecolorsalpha)ry  rz  mpl_toolkits.mplot3d.art3dr  r-  r  Tr   r  r  r  ro  add_collection3d)r)   	extrinsic	color_mapri  rJ  rK  r  r  
vertex_stdvertex_transformedmeshesr\  s               r   r  &CameraPoseVisualizer.extrinsic2pyramid  s   '?XX|&
X(=tQG&H(<dAF'Z)=tQG'Z)h)>aH	J K

 (++5%a"f-/A!/DSb/IK]^_adbdad^dKef/3B379KAsPRsF9SUghiknlnknhnUop/3B379KAsPRsF9SUghiknlnknhnUop/3B379KAsPRsF9SUghiknlnknhnUop/3B379KAsPRsF9SUghiknlnknhnUo  rD  EF  HK  IK  HK  EK  rL  M	N (	377	SVV^^I=V  V#RW_cd	fr    c                     SSK Jn  SS KJn  / n[	        U5       HC  u  pVUR
                  R                  U[        U5      -  5      nU" XvS9nUR                  U5        ME     UR                  SSUS9  g )Nr   )Patch)r\  r  right)?r  )locbbox_to_anchorhandles)
matplotlib.patchesr  ry  rz  r  r  r  r=  r   legend)	r)   
list_labelr  r  list_handleidxr  r\  r  s	            r   customize_legend%CameraPoseVisualizer.customize_legend  se    ,'#J/JCFFNN3Z#89E3Eu% 0 	

wz;
Or    c                    U(       ac  [         R                  " / SQ/ SQ/ SQ/ SQ/5      nXAS   -  nU/USS   Vs/ s H$  oe[         R                  R                  U5      -  PM&     sn-   nO/U Vs/ s H"  n[         R                  R                  U5      PM$     nnU Vs/ s H  oU-  PM	     nn[         R                  " U[         R                  S9$ s  snf s  snf s  snf )Nrd  )r   r{   r   r   re  rf  r   r{   r   )r-  r  linalginvr  )	r)   r  r  rN  target_cam_c2wabs2relr  	ret_posesrs  s	            r   r  CameraPoseVisualizer.get_c2w  s    XX	' N %Aw.G'*VZ[\[]V^-_V^s		c8J.JV^-__I7;<ts+tI<3<=9a)9	=xx	44	 .`<=s   +C/)CC)ro  r~  r  r'   )redr'  r{   r;  )r-   r.   r/   r0   r1   r   r2   r4   r5   r   rS  r  r  r  r7   r   r    r   rF  rF  B  sD      LHHK
Rhf(P5r    rF  c                   :    \ rS rSr\S 5       rSrSrSrSr	S r
Srg	)
CheckpointPerturbWeightsi  c                 N    SSSSSSSS.4SSSSSS.4SSSSSS.4SS	S
SSS.4S.0$ )Nr   r  rJ   g{Gz?rc  r(  rL   r<   rd  r   r>   r{   )r  joint_blocksfinal_layerrest_of_the_blocksrf  r   r   s    r   r   $CheckpointPerturbWeights.INPUT_TYPES  sa    $$uT[`&ab#eDZ_%`a#*USWaf,g"h1=OYZ[\ 
 	
r    r  modTr  c           
      *   SS K n[        R                  " U5        [        R                  R	                  U5        [
        R                  " 5       nUR                  U5      nUR                  R                  U5        UR                  R                  R                  5       R                  5       n	0 n
U	 H,  nUR                  R                  R                  5       U   X'   M.     [        [        U	5      5      nU	 H  nX   n[        R                   " U SUR#                  5        35        UR%                  S5      (       a  UnOUR%                  S5      (       a  UnOUnX==   [        R&                  " [        R(                  " U5      UR+                  5       -  [        R,                  " U5      UR#                  5       -  U-  5      R                  U5      -  ss'   UR/                  S5        M     UR                  R                  R1                  U
5        U4$ )Nr   r  r  r  r{   )r   r   rz  cudamanual_seed_allr   r8  deepcopyr  r=  diffusion_model
state_dictkeysr   r=  rw  rx  rs  
startswithnormalr  mean	ones_likeupdateload_state_dict)r)   rf  r  r  r  r  r   rr  
model_copyr  r   r  pbarr   r   r  s                   r   r  CheckpointPerturbWeights.mod  s   $

""4(!224]]5)
F#//::<AACC"((88CCEcJDI  3t9%AALLA3b	*+||N++)
m,,(
/
Gu||E$4$4Q$7!&&($BEOOTUDVYZY^Y^Y`D`cmDmnqqrxyyGKKN  	((88>{r    r   N)r-   r.   r/   r0   r1   r   r2   r4   r  r5   r  r7   r   r    r   r  r    s/    
 
 LHK%Hr    r  c                   x    \ rS rSr\S 5       rSrSrSrSr	S r
S\R                  S	\R                  S
\4S jrSrg)DifferentialDiffusionAdvancedi  c           
      "    SSSSSSSSS	S
.4S.0$ )Nr   r  r   r%  rJ   r'        $r(  rc  rL   )r  r   r  r  r   r   s    r   r   )DifferentialDiffusionAdvanced.INPUT_TYPES  s0    (*%#*ERV`e,f"g	  	r    )r  r   apply_for_testingFc                     X@l         UR                  5       nUR                  U R                  5        UR	                  5       nUR                  SSUR                  S   UR                  S   45      US'   X4$ )Nr  r{   rj  
noise_mask)r  r+  set_model_denoise_mask_functionforwardr   rw  r  )r)   r  r   r  r  r   s         r   r  #DifferentialDiffusionAdvanced.apply  sb    $--dll;LLN,,Atzz"~tzz"~'NO,zr    r@  denoise_maskextra_optionsc                    US   nUS   nUR                   R                  R                  nUS   U:  a  US   nUS   nUR                   R                  R                  U5      nUR                   R                  R                  U5      n	UR                   R                  R                  US   5      n
X-
  X-
  -  U R                  -  nX+:  R                  UR                  5      $ )Nr  r  r  r   )inner_modelmodel_sampling	sigma_mintimestepr  r=  r   )r)   r@  r  r	  r  step_sigmassigma_to
sigma_fromts_fromts_to
current_tsr)  s               r   r  %DifferentialDiffusionAdvanced.forward#  s    g&#H-$$33==r?X%"2H ^
##22;;JG!!0099(C&&55>>uQxH
'GO<tN	)--l.@.@AAr    )r  N)r-   r.   r/   r0   r1   r   r2   r4   r5   INITr  r   Tensorr   r  r7   r   r    r   r  r    sV      'LHHDBU\\ B BVZ Br    r  c                   H    \ rS rSrS r\S 5       rSrSrSr	Sr
SrS	rS
 rSrg)FluxBlockLoraSelecti3  c                     S U l         g r'   loaded_lorar)   s    r   __init__FluxBlockLoraSelect.__init__4  
    r    c                     0 nSSSSSS.4n[        S5       H  nX!SR                  U5      '   M     [        S5       H  nX!S	R                  U5      '   M     S
U0$ )NrJ   rK   rb  r)  rL      double_blocks.{}.&   single_blocks.{}.r   r   ru  r   arg_dictargumentr1  s       r   r   FluxBlockLoraSelect.INPUT_TYPES7  n    SQUVWrA6>(//23  rA6>(//23  H%%r    SELECTEDDITBLOCKSblocksThe modified diffusion model.	load_lorar  MSelect individual block alpha values, value of 0 removes the block altogetherc                     U4$ r'   r   r)   r   s     r   r2  FluxBlockLoraSelect.load_loraL  
    yr    r  N)r-   r.   r/   r0   r  r1   r   r2   r3   OUTPUT_TOOLTIPSr4   r5   r   r2  r7   r   r    r   r  r  3  s@      
& 
& +LL8OH%HaKr    r  c                   B    \ rS rSr\S 5       rSrSrSrSr	Sr
SrS	 rS
rg)HunyuanVideoBlockLoraSelectiO  c                     0 nSSSSSS.4n[        S5       H  nX!SR                  U5      '   M     [        S5       H  nX!S	R                  U5      '   M     S
U0$ )NrJ   rK   rb  r)  rL   r   r#  (   r%  r   r&  r'  s       r   r   'HunyuanVideoBlockLoraSelect.INPUT_TYPESP  r+  r    r,  r.  r0  r2  KJNodes/hunyuanvideor3  c                     U4$ r'   r   r5  s     r   r2  %HunyuanVideoBlockLoraSelect.load_lorae  r7  r    r   Nr-   r.   r/   r0   r1   r   r2   r3   r8  r4   r5   r   r2  r7   r   r    r   r:  r:  O  s9    
& 
& +LL8OH%HaKr    r:  c                   B    \ rS rSr\S 5       rSrSrSrSr	Sr
SrS	 rS
rg)Wan21BlockLoraSelectih  c                 j    0 nSSSSSS.4n[        S5       H  nX!SR                  U5      '   M     SU0$ )	NrJ   rK   rb  r)  rL   r<  
blocks.{}.r   r&  r'  s       r   r    Wan21BlockLoraSelect.INPUT_TYPESi  sI    SQUVWrA/7\((+,  H%%r    r,  r.  r0  r2  KJNodes/wanr3  c                     U4$ r'   r   r5  s     r   r2  Wan21BlockLoraSelect.load_lora{  r7  r    r   NrA  r   r    r   rC  rC  h  s9    & & +LL8OHHaKr    rC  c                   B    \ rS rSr\S 5       rSrSrSrSr	Sr
SrS	 rS
rg)LTX2BlockLoraSelecti~  c                 j    0 nSSSSSS.4n[        S5       H  nX!SR                  U5      '   M     SU0$ )	NrJ   rK        @r)  rL   0   rE  r   r&  r'  s       r   r   LTX2BlockLoraSelect.INPUT_TYPES  sI    SRVWXrA/7\((+,  H%%r    r,  r.  r0  r2  zKJNodes/ltxvr3  c                     U4$ r'   r   r5  s     r   r2  LTX2BlockLoraSelect.load_lora  r7  r    r   NrA  r   r    r   rK  rK  ~  s9    & & +LL8OHHaKr    rK  c                   H    \ rS rSrS r\S 5       rSrSrSr	Sr
SrSS
 jrSrg	)DiTBlockLoraLoaderi  c                     S U l         g r'   r  r  s    r   r  DiTBlockLoraLoader.__init__  r   r    c                 l    SSS04SSSSSS	S
.4S.[         R                  " S5      SS04SSSS.4SS.S.$ )Nr  r  z0The diffusion model the LoRA will be applied to.rJ   r'  g      Y      Y@r)  zGHow strongly to modify the diffusion model. This value can be negative.r   r@   rA   rM   r  )r  strength_modelloraszThe name of the LoRA.rZ   TzAbsolute path of the LoRA.)rz   r  r,  )	lora_nameopt_lora_pathr/  r   )folder_pathsget_filename_listr   s    r   r   DiTBlockLoraLoader.INPUT_TYPES  sr     "I/a#bc#*FSXbf  t}  -~  # #/"@"@"IIWnKo!p&.tPl0m%n4
 
	r    )r  rZ   )r  rank)r1  zpossible rank of the LoRA.r2  zKJNodes/loraNc           	         SS K nU(       a  UnO[        R                  " SU5      nS nU R                  b*  U R                  S   U:X  a  U R                  S   nOS U l        Uc  [	        USS9nXx4U l        Sn	[        S UR                  5        5       S 5      n
U
(       aC  [        R                  " SU
 S	X   R                   35        [        X   R                  S   5      n	O[        R                  " S
5        Sn	Xx4U l        0 nUb&  UR                  R                  UR                  U5      nUR                  R                  X5      nUGb  / nU GH  n[!        UR                  5       5       H  nSn[#        U[        5      (       a  X;   a  SnO([#        U[$        5      (       a  U H  nUU;   d  M  Sn  O   U(       d  MS  X^   nUS:X  a  UR'                  U5        Mp  X   n[)        US5      (       aG  [        R                  " SU 35        [!        UR*                  5      nUUS'   [%        U5      X   l        M  [        R                  " SU 35        M     GM	     U H  nX	 M     [        R                  " S5        UR-                  5        Hg  u  nn[)        US5      (       a+  [        R                  " SU SUR*                  S    35        MB  [        R                  " SU S[/        U5       35        Mi     Ub!  UR1                  5       nUR3                  X5      n[5        W5      nU H$  nUU;  d  M  [        R                  " SU 35        M&     WU	4$ )Nr   rZ  r{   T)	safe_loadunknownc              3   T   #    U  H  oR                  S 5      (       d  M  Uv   M      g7f)weightN)endswith)r  r  s     r   r  /DiTBlockLoraLoader.load_lora.<locals>.<genexpr>  s     P+3h9O33+s   (	(z!Shape of the first 'weight' key (z): z"No key ending with 'weight' found.zCouldn't find rankFweightsz Modifying LoRA adapter for key: r   z!Skipping non-LoRA entry for key: zloading lora keys:zKey: z	, Alpha: z, Type: zNOT LOADED )
comfy.lorar]  get_full_pathr  r	   nextr  rw  rx  r  r  r  loramodel_lora_keys_unetr  r2  r   r   tupler   hasattrrh  r   r  r+  add_patchesset)r)   r  rY  r[  r\  r/  comfy	lora_pathrl  r`  
weight_keykey_maploadedkeys_to_deleteblockr  matchr   ratior   weights_listnew_modelpatcherrs  s                          r   r2  DiTBlockLoraLoader.load_lora  s    %I$227IFI'"i/''*#' <"9=D )0D P$))+PRVW
LL<ZLDL\LbLbKcdet'--a01DOO@A'D%,jj55ekk7KG%%d4N.C!E!#s++ $#C//!$A$z(, % "%
 u & A:*11#6 %+KE&ui88 '/OPSu-U V/3EMM/B27Q6;L6I 3 '/PQTPU-V W/ /  4 &K & LL-.$lln
U5),,LL5Yu}}Q7G6H!IJLL5Xd5k]!CD	 - ${{} ,,VDAFA
+aS 12  !$''r    r  r}  )r-   r.   r/   r0   r  r1   r   r2   r3   r8  r4   r5   r2  r7   r   r    r   rS  rS    s<        )L&LUOHHV(r    rS  c                   b    \ rS rSr\S 5       rSrSrSrSr	Sr
S0 4S	\\   S
\S\\   4S jjrSrg)#CustomControlNetWeightsFluxFromListi  c                 6    SSSS040SSSSSS.4S	S
SS04S.S.$ )Nlist_of_floatsrJ   rz   Tr'  rK   r)  rL   )CN_WEIGHTS_EXTRASACNAUTOSIZEpaddingr   )uncond_multiplier	cn_extrasautosizer   r   r   s    r   r   /CustomControlNetWeightsFluxFromList.INPUT_TYPES  sK     !7\4,@"C '.3sSV`d/e%h3*YN;		
 		
r    )CONTROL_NET_WEIGHTSTIMESTEP_KEYFRAME)
CN_WEIGHTSTK_SHORTCUTload_weightszHCreates controlnet weights from a list of floats for Advanced-ControlNetzKJNodes/controlnetr'  r  r  r  c                 >   [         R                  " S5      nUR                  R                  nUR                  R                  nUR                  R
                  nUR                  XUS9n[        R                  " UR                  5        XR                  U" US95      4$ )Nz'ComfyUI-Advanced-ControlNet.adv_control)weights_inputr  extras)control_weights)	importlibimport_moduleutilsControlWeightsTimestepKeyframeGroupTimestepKeyframe
controlnetrw  rx  r  r   )	r)   r  r  r  adv_controlr  r  r  rh  s	            r   r  0CustomControlNetWeightsFluxFromList.load_weights  s      --.WX$**99 + 1 1 G G&,,== ++.v+  AW**+667GX_7`abbr    r   N)r-   r.   r/   r0   r1   r   r2   r3   r4   r   r5   r   rP   r   r  r  r7   r   r    r   r  r    se    

 

 AL0LH\K#H /2
c4; 
c(-
c>B3i
c 
cr    r  r{   r   r;  r     rR   )cannytiledepthblurr  grayzlow qualityc                   6    \ rS rSr\S 5       rSrSrSrS r	Sr
g)	!SetShakkerLabsUnionControlNetTypei0  c                 P    SSS/[        [        R                  5       5      -   4S.0$ )Nr   CONTROL_NETr_  )control_netr  )r   "SHAKKERLABS_UNION_CONTROLNET_TYPESr  r   s    r   r   -SetShakkerLabsUnionControlNetType.INPUT_TYPES1  s3    ,='-h6X6]6]6_1`&`%b   	 r    zconditioning/controlnetr  set_controlnet_typec                     UR                  5       n[        R                  US5      nUS:  a  UR                  SU/5        U4$ UR                  S/ 5        U4$ )Nr  r   control_type)r   r  r   set_extra_arg)r)   r  r  type_numbers       r   r  5SetShakkerLabsUnionControlNetType.set_controlnet_type<  s`    !&&(8<<T2F!%%n{mD ~ %%nb9~r    r   N)r-   r.   r/   r0   r1   r   r5   r2   r4   r  r7   r   r    r   r  r  0  s*       
 )H#L$Hr    r  c                   D    \ rS rSrS r\S 5       rSrSrSr	Sr
SS	 jrS
rg)ModelSaveKJiF  c                 8    [         R                  " 5       U l        g r'   )r]  get_output_directory
output_dirr  s    r   r  ModelSaveKJ.__init__G  s    &;;=r    c                 *    SSSS04SSS04S.SSS	.S
.$ )Nr  rZ   r   zdiffusion_models/ComfyUImodel.diffusion_model.)r  filename_prefixmodel_key_prefixr  r  )r  r  )r   r  r   r   s    r   r   ModelSaveKJ.INPUT_TYPESJ  s<    '12:YHb<c1d3;iIa=b2c  &.P	S 	Sr    r   saveTzadvanced/model_mergingNc                    [         R                  " X R                  5      u  pgpnU SUS S3n
[        R                  R                  Xj5      n
U/n[        R                  " U5        SnUR                  S S S 5      n0 nU HZ  nUR                  U5      (       a  X?[        U5      S  -   nOUnX   nUR                  5       (       d  UR                  5       nUUU'   M\     [        R                  " SU 35        [        R                  R                  U5      (       d  [        R                   " U5        [#        U[        R                  R                  Xj5      5        0 $ )Nr  05z_.safetensorsr  zfull_output_folder: )r]  get_save_image_pathr  r  r  r   r   load_models_gpustate_dict_for_savingr  r=  is_contiguous
contiguousrw  rx  r:  makedirsr
   )r)   r  r  r  r  r  full_output_folderfilenamecounter	subfolderoutput_checkpointload_modelsdefault_prefixsdnew_sdr   new_keyr  s                     r   r  ModelSaveKJ.saveW  s:   LXLlLlm|  N  N  MOIg/'j'"]CGGLL);Og((51((tT:A||N++*s>/B/C-DDA??$$LLNF7O  	+,>+?@Aww~~011KK*+-? ST	r    )r  r
  )r-   r.   r/   r0   r  r1   r   r2   r4   r  r5   r  r7   r   r    r   r  r  F  s8    > S S LHK'Hr    r  c                   >    \ rS rSr\S 5       rSrSrSrSr	S
S jr
Srg	)StyleModelApplyAdvancedit  c           
      "    SSSSSSSSS	S
.4S.0$ )Nr   r   )STYLE_MODEL)CLIP_VISION_OUTPUTrJ   r'  r  r(  rc  rL   )conditioningstyle_modelclip_vision_outputr  r   r   s    r   r   #StyleModelApplyAdvanced.INPUT_TYPESu  s0    -?,=3K*1s5Y]gl3m)n   	 r    r   apply_stylemodelr  z+StyleModelApply but with strength parameterc                     UR                  U5      R                  SSS9R                  SS9nXE-  n/ nU HA  n[        R                  " US   U4SS9US   R                  5       /nUR                  U5        MC     U4$ )Nr   r{   )	start_dimend_dimr  )get_condflattenr>  r   r  r   r   )	r)   r  r  r  r  r   r   r  r  s	            r   r  (StyleModelApplyAdvanced.apply_stylemodel  s    ##$67??!UV?WaafgahAAaD$<Q/1=AHHQK  ur    r   N)r'  )r-   r.   r/   r0   r1   r   r2   r4   r5   r   r  r7   r   r    r   r  r  t  s/        %L!H%H?Kr    r  c                   :    \ rS rSr\S 5       rSrSrSrSr	S r
Srg	)
AudioConcatenatei  c                     SSSSS/SS04S.0$ )Nr   AUDIOr  leftr   )audio1audio2	directionr   r   s    r   r   AudioConcatenate.INPUT_TYPES  s6       w	

 
 
	r    r  	concanater  z?
Concatenates the audio1 to audio2 in the specified direction.
c                     US   nUS   nXE:w  a  [        S5      eUS   nUS   nUS:X  a  [        R                  " Xg4SS9nOUS:X  a  [        R                  " Xv4SS9nWUS.4$ )	Nsample_ratez+Sample rates of the two audios do not matchwaveformr  r   r  r  r  r  )r  r   r  )	r)   r  r  r  sample_rate_1sample_rate_2
waveform_1
waveform_2concatenated_audios	            r   r  AudioConcatenate.concanate  s    }-}-)JKKJ'
J'
 !&J+C!K&  %		:*B J/NPPr    r   N)r-   r.   r/   r0   r1   r   r2   r4   r5   r   r  r7   r   r    r   r  r    s2      LHHKQr    r  c                   6    \ rS rSr\S 5       rSrSrSrS r	Sr
g)	LeapfusionHunyuanI2Vi  c                 V    SSSSSSSSS	S
.4SSSSSSS
.4SSSSSSS
.4SSSSSS.4S.0$ )Nr   r  r   r<   r   r  r   r{   zIThe index of the latent to be replaced. 0 for first frame and -1 for lastrX  rJ   rK   r'  r)  z&The start percentage of steps to applyz$The end percentage of steps to applyr  r(  rc  rL   )r  r  r   start_percentend_percentr  r   r   s    r   r    LeapfusionHunyuanI2V.INPUT_TYPES  s     #%Qr$PQ  ^i  "j  k")s3s\`  nV  ,W  "X 'SSZ^  lR  *S   T$#eDZ_&`a	
 		
r    r  r  r>  c                 t    S nUS   S-  U-  nUR                  5       n	U	R                  U" XXV5      5        U	4$ )Nc                     ^ ^^^ UUU U4S jnU$ )Nc                 *  > US   S   S   nUS   US   US   pTnX$:H  R                  5       n[        U5      S:  a  UR                  5       nO@[        [        U5      S-
  5       H#  nX(   US   -
  X(S-      US   -
  -  S::  d  M!  Un  O   SnU[        U5      S-
  -  n	Tbk  TU	s=::  a  T
::  a7  O  O4TS S 2S S 2S/S S 2S S 24   R	                  U5      US S 2S S 2T/S S 2S S 24'   O'[
        R                  " S5      US S 2S S 2T/S S 2S S 24'   U " X440 UD6$ )Nr   transformer_optionssample_sigmasr  r  r   r{   )nonzeror=  r  r   r=  r   r  )apply_modelargsstepsinpr  r   matched_step_indexcurrent_step_indexr1  current_percentr  r   r   r  s             r   unet_wrapperGLeapfusionHunyuanI2V.patch.<locals>.outer_wrapper.<locals>.unet_wrapper  s5   S	"78I#'=$z2BDIq&+&7%@%@%B")*Q.);)@)@)B&"3u:>2!Hx{2uU|hqk7QRVWW12.!	 3 ./*"4E
Q"G&$F;F3:1a!a?3K3N3Ns3SAq5'1a/038;;q>Aq5'1a/0"36A66r    r   )r   r   r  r  r  s   ```` r   outer_wrapper1LeapfusionHunyuanI2V.patch.<locals>.outer_wrapper  s    7 7*  r    r   g>I?)r+  set_model_unet_function_wrapper)
r)   r  r  r   r  r  r  r  r   ms
             r   r  LeapfusionHunyuanI2V.patch  sD    	 0 #h.9KKM	))-*cdtr    r   N)r-   r.   r/   r0   r1   r   r2   r4   r5   r  r7   r   r    r   r  r    s*    

 

 LH%Hr    r  c                   :    \ rS rSr\S 5       rSrSrSrSr	S r
Srg	)
ImageNoiseAugmentationi  c           	      .    SSSS SSSS.4SS	S
SSS.4S.0$ )Nr   rf  rJ   rK   rW  rc  rL   r<   rd  r   r>   r{   )imagenoise_aug_strengthrf  r   r   s    r   r   "ImageNoiseAugmentation.INPUT_TYPES  s?     #'.DUZdi0j&kCqAS]^ _`
 	
r    rf  	add_noisezKJNodes/imagez"
    Add noise to an image.  
    c                 t   [         R                  " U5        [         R                  " UR                  S   45      R	                  UR
                  UR                  5      U-  n[         R                  " U5      US S 2S S S 4   -  n[         R                  " US:H  [         R                  " U5      U5      nX-   nU4$ )Nr   r  )
r   rz  onesr  r=  rr  r   
randn_likewherer  )r)   r  r  rf  r@  image_noise	image_outs          r   r   ImageNoiseAugmentation.add_noise  s    $

EKKN,-00u{{KN``&&u-atT6I0JJkk%)U-=-=e-DkR'	zr    r   N)r-   r.   r/   r0   r1   r   r2   r4   r5   r   r  r7   r   r    r   r  r    s1    
 
 LHHKr    r  c                   f    \ rS rSr/ SQr/ SQr\S 5       r\S 5       r\	S 5       r
SrSrS	rS
 rSrg)VAELoaderKJi  )taehvlighttaew2_2lighttaew2_1lighttaehy1_5)taesdtaesdxltaesd3taef1c                    [         R                  " S5      n[         R                  " S5      nSnSnSnSnSnSnSn	Sn
U GH  nUR                  S5      (       a  SnM  UR                  S5      (       a  SnM8  UR                  S5      (       a  SnMR  UR                  S5      (       a  SnMl  UR                  S	5      (       a  SnM  UR                  S
5      (       a  SnM  UR                  S5      (       a  Sn
M  UR                  S5      (       a  Sn	M  U R                   H,  nUR                  U5      (       d  M  UR	                  U5        M.     GM     U(       a  U(       a  UR	                  S5        U(       a  U(       a  UR	                  S5        U(       a  U(       a  UR	                  S5        U
(       a  U	(       a  UR	                  S5        UR	                  S5        U$ )Nr  
vae_approxFztaesd_decoder.Tztaesd_encoder.ztaesdxl_decoder.ztaesdxl_encoder.ztaesd3_decoder.ztaesd3_encoder.ztaef1_encoder.ztaef1_decoder.r!  r"  r#  r$  pixel_space)r]  r^  r  
video_taesr   )r   vaesapprox_vaessdxl_taesd_encsdxl_taesd_decsd1_taesd_encsd1_taesd_decsd3_taesd_encsd3_taesd_decf1_taesd_encf1_taesd_decr   taes                r   vae_listVAELoaderKJ.vae_list 	  s{   --e4"44\BA||,-- $.// $011!%011!%/00 $/00 $.//#.//#<<C||C((A (% , ]KK nKK	"]KK!LKK M"r    c                 d  ^  0 n[         R                  " S5      n[        [        U 4S jU5      5      n[        [        U 4S jU5      5      n[	        [         R
                  " SU5      5      nU H  nXV   USR                  U5      '   M     [	        [         R
                  " SU5      5      nU H  nXv   USR                  U5      '   M     T S:X  a4  [        R                  " S5      US'   [        R                  " S	5      US
'   U$ T S:X  a4  [        R                  " S5      US'   [        R                  " S	5      US
'   U$ T S:X  a4  [        R                  " S5      US'   [        R                  " S5      US
'   U$ T S:X  a2  [        R                  " S5      US'   [        R                  " S5      US
'   U$ )Nr&  c                 D   > U R                  SR                  T5      5      $ )Nz{}_encoder.r  ru  ar  s    r   r  (VAELoaderKJ.load_taesd.<locals>.<lambda>3	      ]5I5I$5O(Pr    c                 D   > U R                  SR                  T5      5      $ )Nz{}_decoder.r8  r9  s    r   r  r;  4	  r<  r    ztaesd_encoder.{}ztaesd_decoder.{}r!  g{P?	vae_scalerK   	vae_shiftr"  gy&1?r#  grh|?gH.?r$  gxz,C?g=U?)	r]  r^  rk  filterr	   get_full_path_or_raiseru  r   r   )r  r  r*  encoderdecoderencr   decs   `       r   
load_taesdVAELoaderKJ.load_taesd.	  s   "44\BvPR]^_vPR]^_lAA,PWXYA/2vB!((+,  lAA,PWXYA/2vB!((+,  7?#ll73B{O#ll3/B{O 	 Y#ll73B{O#ll3/B{O 	 X#ll62B{O#ll62B{O 	 W_#ll62B{O#ll62B{O	r    c                 >    SU R                  U 5      4SS/4/ SQ4S.0$ )Nr   main_devicern  bf16fp16fp32)vae_namerr  weight_dtype)r4  r   s    r   r   VAELoaderKJ.INPUT_TYPESL	  s4     qzz!}&7&3U%;$=+D*F 	r    r  load_vaeKJNodes/vaec                    SSK Jn  S n[        R                  [        R                  [        R
                  S.U   nUS:X  a  [        R                  " 5       nOUS:X  a  [        R                  " S5      nUS:X  a  0 n[        R                  " S5      US'   OXR                  ;   a  U R                  U5      nOk[        R                  R                  U5      S   U R                  ;   a  [         R"                  " S	U5      nO[         R"                  " S
U5      n[%        USS9u  puSU;   =(       d    SU;   =(       d    SU;   =(       d    SU;   n	U	(       a  ['        [)        U5      SSS.SS9n
U" XS9nOU" XrXeS9nUR+                  5         U4$ )Nr   r  rJ  rI  rn  r'  r'  pixel_space_vaer&  r  T)return_metadatazvocoder.conv_post.weightz vocoder.vocoder.conv_post.weightz#vocoder.resblocks.0.convs1.0.weightz+vocoder.vocoder.resblocks.0.convs1.0.weightzautoencoder.vocoder.)z
audio_vae.rV  )filter_keys)r  metadata)r  rr  r   rX  )comfy.sdr  r   bfloat16float16r  r   r8  rr  r   
image_taesrF  r  r  splitextr(  r]  rA  r	   r   r   throw_exception_if_invalid)r)   rN  rr  rO  r  rX  r   r  vae_pathis_audio_vaesd_audior  s               r   rQ  VAELoaderKJ.load_vaeY	  sg    VWcd]"%668Fu_\\%(F}$B$)LL$5B !(*Bww)!,?'>>|XV'>>uhO*8TJLB '", C1R7C4:C =B	 	 0b.fp;q  @D  EH5C%KC&&(vr    r   N)r-   r.   r/   r0   r(  r\  staticmethodr4  rF  r1   r   r2   r4   r5   rQ  r7   r   r    r   r  r    s]    KJ8J+ +Z  :   LHH"r    r  )sampling_function	CFGGuiderc                   (    \ rS rSrS r0 S4S jrSrg)Guider_ScheduledCFGi~	  c                 (    Xl         X l        X0l        g r'   )cfgr  r  )r)   ri  r  r  s       r   set_cfgGuider_ScheduledCFG.set_cfg	  s    *&r    Nc                     US   S   n[        U[        R                  5      (       a$  UR                  S5      S   R	                  U5      nO)[        R
                  " X%R                  UR                  S9n[        R                  " XV5      R                  5       n[        U R                  [        5      (       a,  [        U R                  5      [        U5      S-
  :w  a   S5       e[        U5      S:  a  UR                  5       nO:[        [        U5      S-
  5       H  n	XY   U-
  XYS-      U-
  -  S::  d  M  U	n  O   SnU[        U5      S-
  -  n
U R                  U
s=::  a  U R                   ::  a[  O  OX[        U R                  [        5      (       a  U R                  U   nOU R                  nU R"                  R%                  SS 5      nOS nS	n['        U R(                  XXR"                  R%                  S
S 5      XUS9$ )Nr  r  r  r   rr  r   r{   z%cfg list length must match step countr  r'  r  )model_optionsrf  )r   r   r  rw  r=  r   rr  r   iscloser  ri  r   r=  r  r   r  r  condsr   rd  r  )r)   rs  r  rn  rf  r  timestep_valuer  r  r1  r  ri  unconds                r   predict_noise!Guider_ScheduledCFG.predict_noise	  s   34_Eh--%--b1!477>N"\\(<<u{{[N"]]5AIIKtxx..3txx=SZRS^3T~W~~U!"Q&!3!8!8!:3u:>*H~-%A,2OPTUU)*&	 + &'",E
Q?DD4D4DD$((D))hh12hhZZ^^J5FFC !1!11

WacgHhjm  RV  W  	Wr    )ri  r  r  )r-   r.   r/   r0   rj  rs  r7   r   r    r   rg  rg  ~	  s    '
 8: Wr    rg  c                   :    \ rS rSr\S 5       rSrSrSrSr	S r
Srg	)
ScheduledCFGGuidancei	  c                 B    SSSSSSSSSS	.4SSSS
SS	.4SS
SS
SS	.4S.0$ )Nr   r  r   rJ   g      @rK   rW  r)  rL   r'  )r  r  r  ri  r  r  r   r   s    r   r    ScheduledCFGGuidance.INPUT_TYPES	  sU    ' 2 2#SX\%]^&-3sSV_c/d%e$+SQT]a-b#c  	r    )GUIDER
get_guiderr  z
CFG Guider that allows for scheduled CFG changes over steps, the steps outside the range will use CFG 1.0 thus being processed faster.  
cfg input can be a list of floats matching step count, or a single float for all steps.  
c                 d    [        U5      nUR                  X45        UR                  X%U5        U4$ r'   )rg  	set_condsrj  )r)   r  ri  r  r  r  r  guiders           r   rz  ScheduledCFGGuidance.get_guider	  s0    $U+,s;7zr    r   N)r-   r.   r/   r0   r1   r   r2   r4   r5   DESCRiPTIONrz  r7   r   r    r   rv  rv  	  s1    	 	 LH%HK
r    rv  c                   >    \ rS rSr\S 5       rSrSrSrSr	Sr
S rS	rg
)ApplyRifleXRoPE_WanVideoi	  c           
      *    SSSSS04SSSS	SS
S.4S.0$ )Nr   r  r   r  !Only used to get the latent countr<   rR   r{   r  Index of intrinsic frequencyrX  r  r  r   r   r   s    r   r   $ApplyRifleXRoPE_WanVideo.INPUT_TYPES	  ;     ##i1T%UV1S!Xvwx
 	
r    r  r  rG  TeExtends the potential frame count of HunyuanVideo using this method: https://github.com/thu-ml/RIFLExc           	         UR                   R                  nUR                  5       nUS   R                  S   nUR                  UR
                  -  n[        USUSUS-  -  -
  SUS-  -  SUS-  -  /UU5      nUR                  SU5        U4$ )Nr   r   rM  r  rR   zdiffusion_model.rope_embedder)r  r  r+  r  r  	num_headsEmbedND_RifleXadd_object_patch)	r)   r  r  r   model_classmodel_clone
num_framesr  rope_embedders	            r   r  ApplyRifleXRoPE_WanVideo.patch	  s    kk11kkmI&,,Q/
OO{444&a1fqAF|Q!q&\: 	$$'D}Ur    r   Nr-   r.   r/   r0   r1   r   r2   r4   r5   EXPERIMENTALr   r  r7   r   r    r   r  r  	  s4    
 
 LHHLyKr    r  c                   >    \ rS rSr\S 5       rSrSrSrSr	Sr
S rS	rg
)ApplyRifleXRoPE_HunuyanVideoi	  c           
      *    SSSSS04SSSS	SS
S.4S.0$ )Nr   r  r   r  r  r<   r  r{   r  r  rX  r  r   r   s    r   r   (ApplyRifleXRoPE_HunuyanVideo.INPUT_TYPES	  r  r    r  r  r>  Tr  c                 `   UR                   R                  nUR                  5       nUS   R                  S   n[	        UR
                  R                  UR
                  R                  -  UR
                  R                  UR
                  R                  UU5      nUR                  SU5        U4$ )Nr   r   zdiffusion_model.pe_embedder)r  r  r+  r  r  paramshidden_sizer  thetaaxes_dimr  )r)   r  r  r   r  r  r  pe_embedders           r   r  "ApplyRifleXRoPE_HunuyanVideo.patch	  s    kk11kkmI&,,Q/
$**k.@.@.J.JJ$$'' 	$$'B[Qr    r   Nr  r   r    r   r  r  	  s4    
 
 LH%HLyKr    r  c                 x   SSK Jn  US-  S:X  d   e[        R                  " U R                  5      (       d4  [        R
                  " 5       (       d  [        R                  " 5       (       a  [        R                  " S5      nOU R                  n[        R                  " SUS-
  U-  US-  [        R                  US9nSX'-  -  nU(       a"  U(       a  S[        R                  -  U-  XS-
  '   [        R                  " S	U R                  [        R                  US
9U5      n	[        R                  " [        R                  " U	5      [        R                   " U	5      * [        R                   " U	5      [        R                  " U	5      /SS9n	U" U	SSSS9n	U	R                  [        R                  U R                  S
9$ )Nr   )	rearranger   rn  )r  r   rr  r'  r  r{   z...n,d->...ndr   rr  r  r  zb n d (i j) -> b n d i j)r1  j)einopsr  r   is_device_mpsrr  is_intel_xpuis_directml_enabledr   rE  float64pieinsumr=  r  r  r  r  )
posr  r  L_testr   r  rr  rL  omegarC  s
             r   rope_riflexr  
  s?    7a<<%%cjj115E5R5R5T5TXhX|X|X~X~e$NN1sQw#oS!V5==Y_`E5< E 	Vuxx'&0c

,,U]]6(RTY
ZC
++uyy~		#		#		RUW]_
`C
C3qA
>C66cjj699r    c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )r  i
  c                 ^   > [         TU ]  5         Xl        X l        X0l        X@l        XPl        g r'   )superr  r  r  r  r  r   )r)   r  r  r  r  r   	__class__s         r   r  EmbedND_RifleX.__init__
  s'    
 $r    c                 4   UR                   S   n[        R                  " [        U5       Vs/ s HJ  n[	        USU4   U R
                  U   U R                  U R                  US:X  a  U R                  OS5      PML     snSS9nUR                  S5      $ s  snf )Nr  .r   r  r{   )
r  r   r  r   r  r  r  r  r   r>  )r)   idsn_axesr1  embs        r   r  EmbedND_RifleX.forward$
  s    2iiw|  ~D  xE  F  xErs[S!VdmmA&6

DOO_`de_eUYU[U[klm  xE  F
 }}Q Fs   AB)r  r  r   r  r  )r-   r.   r/   r0   r  r  r7   __classcell__)r  s   @r   r  r  
  s       r    r  c                       \ rS rSrS rSrg)Timeri-
  c                 ,    Xl         S U l        SU l        g r  )r  
start_timeelapsed)r)   r  s     r   r  Timer.__init__.
  s    	r    )r  r  r  N)r-   r.   r/   r0   r  r7   r   r    r   r  r  -
  s    r    r  c                   X    \ rS rSr\S 5       r\R                  SS4rSr	Sr
SrSS	 jrS
rg)TimerNodeKJi3
  c                 D    [         R                  4SS/4SSS04S.SS0S	.$ )
Nr  stoprZ   r   r  )rh  rm  r  timer)TIMERr   rk  r   s    r   r   TimerNodeKJ.INPUT_TYPES4
  s@    
 &&v&(	734
 Z
	 	r    r  r<   )rn  r  r  r  rw   Nc                 .   Uc?  US:X  a8  [        US9n[        R                  " 5       Ul        SUR                   /0X4S4S.$ g US:X  aM  UbI  [        R                  " 5       n[        XTR                  -
  S-  5      Ul        S Ul        X4UR                  4$ g g )Nr  )r  rc   r   rt  r  r   )r  r  r  r   r  )r)   rm  r  rh  r  end_times         r   r  TimerNodeKJ.timerG
  s    =w4(#'99; E,,-/1$Q/   V^ 1yy{H,<,<!< DEEM#Eemm44	 !2^r    r   r
  )r-   r.   r/   r0   r1   r   r   rl  r2   r3   r4   r5   r  r7   r   r    r   r  r  3
  s:    
 
 FFGU-L2LHH5r    r  c                   >    \ rS rSr\S 5       rSrSrSrSr	S
S jr
S	rg)!HunyuanVideoEncodeKeyframesToCondiV
  c                 p    SSSSSSSSSS	S
.4SSSSSS
.4SSSSSS
.4SSSSSSS.4SSSSSSS.4S.
SS0S.$ )Nr  r   r  rf  r<   !   r   r|   r{   rL   r  @   r       r  r  z?Only used for video VAEs: Amount of frames to encode at a time.rX  z6Only used for video VAEs: Amount of frames to overlap.)
r  r  r  start_frame	end_framer  	tile_sizeoverlaptemporal_sizetemporal_overlapr  r   r   r   s    r   r   -HunyuanVideoEncodeKeyframesToCond.INPUT_TYPESW
  s     ( 2$#.!,#(b4YZ*["\"'SDZ\)]!^ %2aVX'YZ&+Ad\]  kl  .m  &n).AaPT^_  me  1f  )g #$6! 	r    )r  r   r   r   )r  r  r  r  r  r>  Nc           	         UR                  5       nUR                  SS5        UR                  S   S-  S-  nUR                  S   S-  S-  nUR                  S   U:w  d  UR                  S   U:w  a@  UR                  S   S-  S-  nUR                  S   S-  S-  nUS S 2XU-   2UUU-   2S S 24   nUR                  S   U:w  d  UR                  S   U:w  a@  UR                  S   S-  S-  nUR                  S   S-  S-  nUS S 2XU-   2UUU-   2S S 24   n[        R                  " US-
  UR                  S   UR                  S   UR                  S   UR
                  UR                  S9n[        R                  " UUU/SS	9nUR                  US S 2S S 2S S 2S S24   XwXU
S
9n0 n[        R                  " U5      US'   / nX+b  UO/ 4 HO  n/ nU H3  nUS   R                  5       nUUS'   US   U/nUR                  U5        M5     UR                  U5        MQ     [        U5      S:X  a  UR                  US   5        UUS   US   U4$ )Nconcat_keys)concat_imager{   r  r   r;  rm  r   r  )tile_xtile_yr  tile_t	overlap_tr   r  )r+  r  r  r   r  rr  r   r  encode_tiledr  r   r   r=  )r)   r  r  r  r  r  r  r  r  r  r  r  r  rs  ra  x_offsety_offsetvideo_framesconcat_latent
out_latentrC  r  r   r  r  r  s                             r   r  (HunyuanVideoEncodeKeyframesToCond.encodep
  s   kkm$$]4EF q!Q&!+q!Q&!+Q1$(9(9!(<(A#))!,q0Q6H#))!,q0Q6H%aX(=xH?TUV&VWK??1"iooa&8A&=#))!,q0Q6H#))!,q0Q6H!!H\$98AL;PQR"RSI{{:a<1B1B11E{GXGXYZG[]h]n]nop]q  {F  {M  {M  U`  Uf  Uf  gyy+|Y!GQO((a!BQBh)?	mt  Wg(  h
 % 0 0 ?
9%3GxRPLA!aDIIK+8'(qT1I	 "
 JJqM Q s8q=JJs1vSVSVZ88r    r   r'   r  r   r    r   r  r  V
  s0     $ EL>LH%H&9r    r  c                   d    \ rS rSrS r\S 5       r\R                  4r	Sr
SrSrSS jrSS	 jrS
rg)LazySwitchKJi
  c                     g r'   r   r  s    r   r  LazySwitchKJ.__init__
  s    r    c                 Z    SS[         R                  SS04[         R                  SS04S.0$ )Nr   r!   lazyT)switchon_falseon_truerk  r^   s    r   r   LazySwitchKJ.INPUT_TYPES
  s9     &VVfd^4FFVTN3
 	
r    r  rw   z5Controls flow of execution based on a boolean switch.Nc                 :    U(       a  Uc  S/$ U(       d  Uc  S/$ g g )Nr  r  r   )r)   r  r  r  s       r   check_lazy_statusLazySwitchKJ.check_lazy_status
  s(    go;(*< +vr    c                 $    U(       a  UnU4$ UnU4$ r'   r   )r)   r  r  r  r   s        r   r  LazySwitchKJ.switch
  s    !x (0xr    r   r
  )r-   r.   r/   r0   r  r1   r   r   rl  r2   r4   r5   r   r  r  r7   r   r    r   r  r  
  sA     
 
 FF9LHHIK r    r  )
WrappersMP)prepare_maskc                        \ rS rSrS rS rSrg)TTM_OuterSampleWrapperi
  c                     Xl         X l        g r'   r  r  )r)   r  r  s      r   r  TTM_OuterSampleWrapper.__init__
  s    	
r    c                    UR                   nUR                    UR                  S   S   nUR                  [        R                  0 5      nU R
                  bh  U R
                  R                  SSU R
                  R                  S   U R
                  R                  S   45      nU
S   n[        XUR                  5      nUR                  R                  R                  n[        X2WU R                  U5      /US'   U" X#XEXgXU
S9	nU$ )	Nr  wrappersr  r{   rj  r   TTM_ApplyModel_Wrapper)latent_shapes)	class_objrn  
setdefaultr  APPLY_MODELr  rw  r  r  rr  model_patcherr  scale_latent_inpaintr  r  )r)   executorr_  latent_imagesamplerr  r  callbackdisable_pbarrf  r  r}  r  r   motion_maskr  r  rC  s                     r   __call__TTM_OuterSampleWrapper.__call__
  s   ##''(=>zJ
 6 6;99 ))++RDIIOOB4GY[I\,]^K!!$E&{5<<HK%3399NN'=lS^`d`j`j  mA  (B  'C
"#uG\Ua  xE  F
r    r  Nr-   r.   r/   r0   r  r
  r7   r   r    r   r  r  
  s    r    r  c                        \ rS rSrS rS rSrg)r  i
  c                 @    Xl         X l        X0l        X@l        XPl        g r'   )reference_samplesr_  r	  r  r  )r)   r  r_  r	  r  r  s         r   r  TTM_ApplyModel_Wrapper.__init__
  s    !2
&
$8!r    c                    US   n	X:H  R                  SS9S   n
U
R                  5       S:  a  U
R                  5       nOJU	S S U-
  U	SS  U-
  -  S:*  R                  SS9S   nUR                  5       S:  a  UR                  5       OSnU[        U	5      S-
  :  a  XS-      OX   nUS:w  a  XR                  :  a  U R                  U[        R                  " U/5      U R                  R                  U5      U R                  R                  U5      S9nU R                  b@  USU R                  -
  R                  U5      -  XR                  R                  U5      -  -   nOUnU" X#XEXg40 UD6$ )Nr  Tas_tupler   r  r{   )rs  r@  r_  r  )r  numelr  r=  r  r  r   r   r_  r=  r  r	  )r)   r  rs  r  c_concatc_crossattncontrolr  r   r  matchedr  crossing
next_sigmanoisy_latents                  r   r
  TTM_ApplyModel_Wrapper.__call__
  s   $_5;'''6q9==?Q!(qVABZ!^<AJJTXJYZ[\H4<NN4Dq4Ha7ICPVKZ[O7[V23aga{
"'9JJ'F44qj\@Zbfblblbobopqbr  BF  BX  BX  B[  B[  \]  B^4  _L+4+++//22\DTDTDWDWXYDZ5ZZ hW\U[\\r    )r	  r_  r  r  r  Nr  r   r    r   r  r  
  s    9]r    r  c                   H    \ rS rSr\S 5       rSrSrSrSr	S/r
SrSS
 jrSrg	)LatentInpaintTTMi
  c                 .    SSSSSSSS.4S	.S
SSS040S.$ )Nr  r<   rW  r   ix  r{   z,Number of steps to apply TTM inpainting for.rX  )r  r  r  r&  r  zcLatent mask where white (1.0) is the area to inpaint and black (0.0) is the area to keep unchanged.r   r   r   s    r   r   LatentInpaintTTM.INPUT_TYPES
  sU     "-"'QqVW  eS  *T  "U
 )  6[  *\  !]	 	r    r  r  Tz#https://github.com/time-to-move/TTMztime to mover  Nc                 |    UR                  5       nUR                  [        R                  S[	        X25      5        U4$ )Nr  )r+  add_wrapper_with_keyr  OUTER_SAMPLEr  )r)   r  r  r  r  s        r   r  LatentInpaintTTM.patch  s4    KKM	z668PRhimRuvur    r   r'   )r-   r.   r/   r0   r1   r   r2   r4   r  r   r6   r5   r  r7   r   r    r   r  r  
  s<      LHL7K$%N%Hr    r  c                   T    \ rS rSr\S 5       r\SS\R                  4S jj5       rSr	g)SimpleCalculatorKJi  c                 2   [         R                  R                  [         R                  R	                  S[         R
                  [         R                  [         R                  /SS9/ SQSS9n[         R                  " SSS	/ S
Q[         R                  R	                  SSSS9[         R                  R	                  SUS9/[         R                  R                  5       [         R
                  R                  5       [         R                  R                  5       /S9$ )NvarTr   )r:  br   r  er  gr  r1  r  r   r   )r  namesr@   r&  rw   a  
Calculator node that evaluates a mathematical expression using inputs a and b.  
    Supported operations: +, -, *, /, //, %, **, <<, >>, unary +/-  
    Supported comparisons: ==, !=, <, <=, >, >=  
    Supported logic: and, or, not  
    Supported functions: abs(), round(), min(), max(), pow(), sqrt(), sin(), cos(), tan(), log(), log10(), exp(), floor(), ceil()  
    Supported constants: pi, euler, True, False  
)math
arithmetic
expressionlogicr0  za + br\   	variables)template)r  categorydescriptionsearch_aliasesr  r  )r   AutogrowTemplateNames	MultiTypeInputIntFloatBooleanSchemaStringOutput)r_   r3  s     r   define_schema SimpleCalculatorKJ.define_schema  s    ;;,,2<<3E3EebffVXV^V^`b`j`jMkvz3E3{  D{  AB,  Cyy(# I		gN!!+!A
 !

!!#!
 	
r    Nreturnc                    ^^^^^ SS K mSS Kn0 TR                  UR                  _TR                  UR
                  _TR                  UR                  _TR                  UR                  _TR                  UR                  _TR                  UR                  _TR                  UR                  _TR                   UR"                  _TR$                  UR&                  _TR(                  UR*                  _TR,                  UR.                  _TR0                  UR2                  _TR4                  UR6                  _TR8                  UR:                  _TR<                  UR>                  _TR@                  URB                  _TRD                  URF                  _TRH                  URJ                  TRL                  URN                  TRP                  URR                  0Em[T        [V        [X        [Z        [        [\        R^                  [\        R`                  [\        Rb                  [\        Rd                  [\        Rf                  [\        Rh                  [\        Rj                  [\        Rl                  [\        Rn                  S.m[\        Rp                  [\        Rr                  SSS.mURu                  5        H
  u  pgUTU'   M     Ub  UTS'   Ub  UTS'   UUUUU4S jm TRw                  US	S
9nT" URx                  5      n	[z        R|                  " [        U	5      [        U	5      [        U	5      5      $ ! [         aD  n
[        R                  " S[        U
5       35        [z        R|                  " SSS5      s S n
A
$ S n
A
ff = f)Nr   )absrS   r@   rA   powsqrtr  r  tanrF  log10rH  floorceilTF)r  eulerTrueFalser:  r*  c                 d  > [        U TR                  5      (       a  U R                  $ [        U TR                  5      (       a8  U R                  T;   a  TU R                     $ [        SU R                   S35      e[        U TR                  5      (       a  [        U R                  5      T;  a,  [        S[        U R                  5      R                   S35      eT" U R                  5      nT" U R                  5      nT[        U R                  5         " X5      $ [        U TR                  5      (       au  [        U R                  5      T;  a,  [        S[        U R                  5      R                   S35      eT" U R                  5      nT[        U R                  5         " U5      $ [        U TR                  5      (       a  T" U R                  5      n[        U R                   U R"                  5       H]  u  pE[        U5      T;  a"  [        S[        U5      R                   S35      eT" U5      nT[        U5         " X5      nU(       d    gUnM_     g[        U TR$                  5      (       a  [        U R                  5      T;  a,  [        S[        U R                  5      R                   S35      eU R&                   Vs/ s H  nT" U5      PM     nn[        U R                  TR(                  5      (       a  [+        U5      $ [        U R                  TR,                  5      (       a  [/        U5      $ g [        U TR0                  5      (       a  [        U R2                  TR                  5      (       d  [        S5      eU R2                  R                  T;  a#  [        SU R2                  R                   S35      eU R4                   V	s/ s H  n	T" U	5      PM     n
n	TU R2                  R                     " U
6 $ [        S	[        U 5      R                   S35      es  snf s  sn	f )
NzName 'z' is not allowedz	Operator z is not allowedFTz&Only simple function calls are allowedz
Function 'z
Node type )r   Constantr   Namer  r  BinOpr  opr-   r  r  UnaryOpoperandComparezipopscomparatorsBoolOpr  AndallOranyCallfuncr   )r  r  r  rU  rS  
comparatorru  r   r  argr   allowed_functionsallowed_namesallowed_operatorsast	eval_nodes              r   rg  -SimpleCalculatorKJ.execute.<locals>.eval_nodeG  s@   $--zz!D#((++77m+(11 6$''2B!CDDD#)),,=(99$ydgg1G1G0H%XYY +!$**-(dgg7DDD#++..=(99$ydgg1G1G0H%XYY#DLL1(dgg7@@D#++.. +&)$((D4D4D&ENBBx'88(9T"X5F5F4G)WXX%j1E.tBx8EF!$ D 'F D#**--=(99$ydgg1G1G0H%XYY8<Du)E*Ddggsww//v;&00v;& 1D#((++!$))SXX66$%MNN99<<'88$z$)),,?O%PQQ26))<)3	#)<(6== :d4j.A.A-B/!RSS E =s   P(P-eval)rm  zCalculatorKJ Error: rK   )Frf  operatorAddaddSubsubMultmulDivtruedivFloorDivfloordivModr  PowrF  USubnegUAddr  LShiftlshiftRShiftrshiftEqeqNotEqneLtltLtEleGtgtGtEger[  and_r]  or_Notnot_rE  rS   r@   rA   r.  rG  r  r  rH  rF  rI  rH  rJ  rK  r  r+  r   parsebodyr   
NodeOutputrP   r   r  	Exceptionrw  errorr  )r_   r2  r0  r:  r*  rj  var_name	var_valuetreeru  r+  rc  rd  re  rf  rg  s              @@@@@r   executeSimpleCalculatorKJ.execute"  s   
GGX\\
#&77HLL
:=((HLL
RURYRY[c[k[k
LL(++
-0WWhll
DGGGX\\
 HHhll
 %(HHhll
 =@JJ
 JJ	
 *-	
 ?Bii	
 WZV\V\^f^i^i	

 GGX[[

 #&&&(++

 8;ww

 NQWWV^VcVcFFHLL#''8==
 s3		$((88DHHTXXZZ4::II
  $wwPUV $-??#4H&/M(# $5 =!"M#=!"M#-	T -	T^	099Zf95Dtyy)F==vFT&\JJ 	0MM0Q9:==a//	0s   AL/ /
M=99M82M=8M=r   r
  
r-   r.   r/   r0   r1   rA  r   r  r  r7   r   r    r   r&  r&    s6    
 
2 Y0r}} Y0 Y0r    r&  c                   P    \ rS rSr\S 5       r\S\R                  4S j5       rSr	g)GetTrackRangei  c                 &   [         R                  " SS[         R                  R                  S5      [         R                  R                  SSSSSS	9[         R                  R                  S
SSSSS	9/[         R                  R                  5       /S9$ )Nr  conditioning/video_modelstracksstart_index   ii'  r{   rL   r  r  r  r4  r  r  )r   r>  Tracksr:  r;  r@  r^   s    r   rA  GetTrackRange.define_schema  sz    yy#0		)]BFTUV\21%aP 		  "
 	
r    rC  c                     US   nUS   nUR                   S   nUS:  a  Xb-   n[        S[        X&5      5      n[        S[        X#-   U5      5      nXBU2S4   nXRU2S4   n	UU	S.n
[        R                  " U
5      $ )N
track_pathtrack_visibilityr   .r  r  )r  rA   r@   r   r  )r_   r  r  r  r  r  r  	end_index
tracks_outmask_out	out_tracks              r   r  GetTrackRange.execute  s    L)
()!''*?&4K!S;< 3{7FG	I 5s :;
I-s23 % (
	 }}Y''r    r   Nr  r   r    r   r  r    s3    
 
 ( ( (r    r  c                   P    \ rS rSr\S 5       r\S\R                  4S j5       rSr	g)AddNoiseToTrackPathi  c                    [         R                  " SS[         R                  R                  S5      [         R                  R                  SSSSSS	9[         R
                  R                  S
SSSSS	9[         R                  R                  SSSSSSS9[         R                  R                  SSSSSSS9[         R                  R                  SSSSSSS9/[         R                  R                  5       /S9$ )Nr  r  r  r  r'  rK   rW  r)  rL   rf  r   r>   r{   noise_x_ratioz)Multiplier for horizontal noise componentrX  noise_y_ratioz'Multiplier for vertical noise componentnoise_temporal_ratioz.Multiplier for temporal (frame-to-frame) noiser  )r   r>  r  r:  r<  r;  r@  r^   s    r   rA  !AddNoiseToTrackPath.define_schema  s    yy)0		)z3CUQUVVQA;MTUV%VZ%P  R%VZ%N  P5sQV]a%U  W
 		  "
 	
r    rC  c                 0   US   R                  5       nUS   n[        R                  " U5        [        R                  " U5      U-  n	U	S==   U-  ss'   U	S==   U-  ss'   US:  a  UR                  S   n
U	R                  5       n[        S[        SU-
  S-  5      5      n[        U
5       H;  n[        SXS	-  -
  5      n[        XUS	-  -   S-   5      nXU R                  SS
9X'   M=     X-  U	SU-
  -  -   n	Xy-   nUUS.n[        R                  " U5      $ )Nr  r  ).r   ).r{   r'  r   r{   r  r   r  r  )r+  r   rz  r  r  rA   r   r   r@   r  r   r  )r_   r  r  rf  r  r  r  r  r  r_  r  smoothed_noisekernel_sizer1  	start_idxend_idxr  s                    r   r  AddNoiseToTrackPath.execute  s;   L)//1
()$  ,x7 	f&f&  #%#))!,J"[[]Nac,@&@B%F!GHK:&1a'7#78	jkQ.>*>*BC$)G$<$A$Aa$A$H! '
 #9EQI]E]<^^E'
 % $
	 }}Y''r    r   Nr  r   r    r   r  r    s6    
 
( (dfdqdq ( (r    r  c                   >    \ rS rSr\S 5       rSrSrSrSr	Sr
S rS	rg
)VAEDecodeLoopKJi  c           
      2    SSSS04SSS04SSSS	S
SS.4S.0$ )Nr   r   r  zThe latent to be decoded.r  z+The VAE model used for decoding the latent.r<   r   r  r{   z^Number of frames to blend for seamless loop, for Wan 2 works and HunyuanVideo 1.5 should use 4rX  )r   r  overlap_latent_framesr   r   s    r   r   VAEDecodeLoopKJ.INPUT_TYPES  sR     $y2M&NO	+XYZ*/QqQR\]  kK  2L  *M
 	
r    rf  )zThe decoded images.r?  rR  z9Video latent VAE decoding to fix artifacts on loop seams.c           
          US   nUR                  U5      nUS::  aW  [        UR                  5      S:X  a;  UR                  SUR                  S   UR                  S   UR                  S   5      nU4$ US-   nUnUR                  [        R
                  " US S 2S S 2U* S 24   /US S 2S S 2S U24   /-   SS	95      R                  5       R                  5       nXg-   n	U	S-  S-
  n
XS:  a  UOS-   n[        R
                  " US S 2U
S 24   R                  U5      US S 2US 24   /SS	9n[        UR                  5      S:X  a;  UR                  SUR                  S   UR                  S   UR                  S   5      nU4$ )
Nr   r   r  r  r  rj  r{   r   r  )	r?  r=  r  rw  r   r  rn  rP   r=  )r)   r  r   r  r   images
end_framesstart_framestemp_imagestotal_concat
temp_start
main_starts               r   r?  VAEDecodeLoopKJ.decode  s   )$G$ A%6<< A%FLL,<fll2>NPVP\P\]_P`a:*Q.
,jjGAq:+,4F,G+HGTUWXZg[gZgTgLhKi+iop!qrvvx~~  A!0!A%)
!VW>W%:]^_
K:;7::6BF1jk>DZ[abcv||!^^BR(8&,,r:JFLLY[L\]Fzr    r   N)r-   r.   r/   r0   r1   r   r2   r8  r4   r5   r   r?  r7   r   r    r   r  r    s4    
 
 L.OHHMKr    r  c                   T    \ rS rSr\S 5       r\SS\R                  4S jj5       rSr	g)WanImageToVideoSVIProi  c                 N   [         R                  " SS[         R                  R                  S5      [         R                  R                  S5      [         R                  R                  SSS[
        SS	9[         R                  R                  S
5      [         R                  R                  SSS9[         R                  R                  SSSSSS	9/[         R                  R                  SS9[         R                  R                  SS9[         R                  R                  SS9/S9$ )Nr  r  r  r  lengthQ   r{   r  rL   anchor_samplesprev_samplesTr)  motion_latent_countr   r'  display_namer  r  )r   r>  Conditioningr:  r;  r   r  r@  r^   s    r   rA  #WanImageToVideoSVIPro.define_schema  s    yy+0%%j1%%j1XrqnSTU		 01		>2A1#TUV &&J&?&&J&?		  h 7
 	
r    NrC  c           
         US   R                  5       nUR                  u  ppn[        R                  " USUS-
  S-  S-   X/[        R
                  " 5       S9nUS-
  S-  S-   nUR                  nUR                  nUb  US:X  a  XR                  S   -
  nUnOXUS   S S 2S S 2U* S 24   R                  5       nXR                  S   -
  UR                  S   -
  n[        R                  " UU/SS9n[        R                  " SU	UXUUS	9n[        R                  R                  5       R                  U5      n[        R                  " UU/SS9n[        R                  " SSUR                  S   X4UUS
9nSUS S 2S S 2S S24'   [        R                  " UUUS.5      n[        R                  " UUUS.5      n0 nUUS'   [         R"                  " XU5      $ )Nr   r  r{   r  )rr  r   r   r  r  rm  rK   )r  concat_mask)r+  r  r   r  r   intermediate_devicerr  r   r  rr  latent_formatsWan21process_outr  node_helpersconditioning_set_valuesr   r  )r_   r  r  r  r  r  r  anchor_latentBCr  HWempty_latenttotal_latentsrr  r   padding_sizeimage_cond_latentmotion_latentr  r  r  s                          r   r  WanImageToVideoSVIPro.execute  s   &y1779%++aA{{ArVaZA,=+BA#IRbRvRvRxy!)A-%%###6!#;(+>+>q+AAL -(3Aq;N:N:O4OPVVXM(+>+>q+AAMDWDWXYDZZL %		=-*Ha P++aL!eFS&&,,.::7C!II'8'&BJzz1a!3!3A!6=fTYZQ2A2X77Zk  }A  CB  C77Zk  }A  CB  C
 ,
9}}X<<r    r   r'   r  r   r    r   r  r    s6    
 
& =lnlyly = =r    r  c                   P    \ rS rSr\S 5       r\R                  4rSr	Sr
SrS rSrg)	DeprecatedCompileNodeKJi;  c                 ,    SS[         R                  400$ )Nr   r  rk  r   s    r   r   #DeprecatedCompileNodeKJ.INPUT_TYPES<  s!     	bffY
 	r    r  zKJNodes/deprecatedzYThis node has been replaced with TorchCompileModelAdvanced node, please use that instead.c                     U4$ r'   r   r  s     r   r  #DeprecatedCompileNodeKJ.passthroughG  r+   r    r   N)r-   r.   r/   r0   r1   r   r   rl  r2   r4   r5   r   r  r7   r   r    r   r  r  ;  s5      FF9LH#HmKr    r  c                   T    \ rS rSr\S 5       r\SS\R                  4S jj5       rSr	g)VisualizeSigmasKJiK  c                 `   [         R                  " SS[         R                  R                  S5      [         R                  R                  SSSSSS	S
9[         R                  R                  SSSSSSS
9/[         R                  R                  SS9[         R                  R                  SS9/S9$ )Nr  rw   r  
start_stepr   r  r   r{   zMStep index to mark as the start of a range (inclusive). Set to -1 to disable.rX  end_stepzLStep index to mark as the end of a range (inclusive). Set to - 1 to disable.
sigmas_outr  r  r  )r   r>  Sigmasr:  r;  r@  r   r^   s    r   rA  VisualizeSigmasKJ.define_schemaL  s    yy'#		)\1"$Q%t  vZA%s  u	 		  l ;W5
 	
r    rC  c                 
   Sn[        U5      S-
  n[        U[        5      (       a7  X:*  R                  SS9S   n[        U5      S:  a  US   R	                  5       nO[        U[
        5      (       a  US:  a  Un[        U[        5      (       a7  X:  R                  SS9S   n[        U5      S:  a  US   R	                  5       nO [        U[
        5      (       a  US:w  a  US-
  nSS KnUR                  S5        SS KJ	n  UR                  5       R                  5       n	[        R                  " U	S   SSS	9(       d  [        R                  " U	S5      n	[        5       n
UR!                  S
S9nUR#                  S5      nUR%                  S
5        ['        S[        U	5      5      nUR)                  X5        UR+                  XSSSS9  [-        X5       Hp  u  p[        U	5      S:*  nUS:  =(       a    X:H  =(       d    US:g  =(       a    XS-   :H  nU(       d	  U(       d  MM  SnU(       a  SnUR/                  US X4SSSUSS9  Mr     UR1                  U5        UR3                  SSS9  UR5                  SSS9  UR7                  SSS9  UR9                  SSSS9  UR9                  S SSS9  US-  nUS:w  a/  SUs=::  a  [        U	5      S-
  :  a  O  OUR;                  US!S"S#S$S%9  US:  a,  SUs=::  a  [        U	5      :  a  O  OUR;                  US&S"S#S'S%9  US:w  a  SUs=::  a  [        U	5      :  d!  O  US:  aC  SUs=::  a  [        U	5      :  a-  O  O*UR=                  5       u  nnU(       a  UR?                  5         US:  a  UOSnUS:  a  U[        U	5      :  a  UO[        U	5      S-
  nUU:  a  URA                  UUS(S)S*S+9  URC                  5         URD                  RG                  5         URD                  RI                  5       u  nn [        RJ                  " URD                  RM                  5       [        RN                  S,9n
U
RQ                  UUS-5      n
U
S S 2S S 2/ S.Q4   n
[X        RZ                  " U
5      R                  5       S/-  nUR]                  S5      nUR_                  U5        US:w  a  XUS-    OXS  n[`        Rb                  " UU5      $ ! [R         a_    [        RJ                  " URD                  RU                  5       [        RN                  S,9n
U
RQ                  UUS5      RW                  5       n
 Nf = f)0Nr   r{   Tr  r  AggrK   gư>)atolrY  )	facecoloro   whiter   r;  )r\  r   zorderr  orangeyellowz.3fzoffset points)r  r{   r     )
textcoordsxytexthar\  fontsizer  r`  StepzSigma Valuers  )rh  rr  	labelsizera  r  z--r   zend_step split)r\  r]  r^  r  greenzstart_step split	lightbluer^  zSampled Range)r\  r  r  r   r  )r{   r   r;  g     o@)2r=  r   rP   r  r  r   rx  usery  rz  rn  r,  r-  ro  r   r   r}  r  r  r   rS  scatterrW  annotate
set_xticks	set_titler  r  tick_paramsaxvlineget_legend_handles_labelsr  axvspantight_layoutcanvasr  get_width_height
frombuffertostring_argbuint8rw  AttributeErrortostring_rgbr   r   
from_numpyr>  r  r   r  )r_   r  r  r  r  r  idxsrx  r  	sigmas_npr  r~  ro  x_valuesrs  ra  show_annotationis_split_stepr\  r  labelsrange_start_idxrange_end_idxr   r  r  r  s                              r   r  VisualizeSigmasKJ.execute^  s    	f+/j%(((1141@CD4y1} GLLN	
C((A~&	h&&&///>qAD4y1}r(--/#&&2~"Q,u'JJL&&(	zz)B-48		)S1Iijj9j-__S!
#C	N+
$


8gA
F,DA!)n2O&]=q~f7b=CeUVdeZeUeM--  $Eqg?SZ_got  @B  C - 	h
XW-
fG,
m73
C2>
C2>1b=Q'>C	NQ,>>JJwetqP`Jaq=Q)<c)n<JJy41TfJgrMa7;S^;QSTXaSrdghqdrSr ::<OGV		'01})!#*Q;7S^3KQTU^Q_bcQc]*JJ[PS[jJk 	

zz**,1	.--

 8 8 :"((KC++aA&CaIo&C   %++-5"		#6=mVgk2PZI[
}}Z..  	.--

 7 7 9JC++aA&++-C	.s   AS A&UUr   Nrg  r  r   r    r   r  r  K  s6    
 
" U/2== U/ U/r    r  c                   P    \ rS rSr\S 5       r\S\R                  4S j5       rSr	g)PreviewLatentNoiseMaski  c           
          [         R                  " SSS[         R                  R                  S5      /[         R                  R                  SS9/S9$ )Nr"  r   zPreviews the latent noise maskr  r  r  )r  r4  r5  r  r  )r   r>  r  r:  Maskr@  r^   s    r   rA  $PreviewLatentNoiseMask.define_schema  sJ    yy,&8		* F3

 
	
r    rC  c                     UR                  SS 5      nUc*  [        R                  " [        R                  " S5      5      $ UR                  5       nUR                  S:X  a  US   n[        R                  " U5      $ )Nr  )r{   r  r  r  )r   r   )r   r   r  r   r  r+  ndim)r_   r  r  s      r   r  PreviewLatentNoiseMask.execute  sc    ZZd3
==[!9::%%'
??a#D)J}}Z((r    r   Nr  r   r    r   r"  r"    s3    
 
 	) 	) 	)r    r"  c                   x    \ rS rSrSr\S 5       r\S 5       r\S 5       r	\S
S\
R                  4S jj5       rS	rg)PlaySoundKJi  z<Plays audio in the browser when execution reaches this node.c                    [         R                  " SSS[         R                  R                  SSS9[         R                  R                  SSS9[         R
                  R                  SS	S
S9[         R                  R                  S/ SQSS9[         R                  R                  SSSSSS9[         R                  R                  SSSSSSS9/[         R                  R                  SSS9/SS9$ )Nr*  r  zPlays the input audio in the browser. Modes: 'always' plays on every execution, 'on_empty_queue' plays only when the queue finishes, 'on_change' plays only when the audio content changes. Duration limits playback length (0 = full audio).rh  Tr)  audio
audio_pathr[   z>Path to an audio file. Used when audio input is not connected.)r   r  rm  )alwayson_empty_queue	on_changer.  )optionsr   volumer  rK   r'  r)  rL   duration      @g     r@r^  z1Duration in seconds to play. 0 = play full audio.rX  rn  r  )r  r4  r5  r  r  is_output_node)	r   r>  AnyTyper:  Audior?  Combor<  r@  r^   s    r   rA  PlaySoundKJ.define_schema  s    yy!$ H

  t <w6		b  CC  Dv/Xbjkx#3TRz3CUQT  _R  S 

!!,\!J  
 	
r    c                 D    UR                  S5      S:X  a  g[        S5      $ )Nrm  r0  Fr  )r   rP   )r_   r   s     r   fingerprint_inputsPlaySoundKJ.fingerprint_inputs  s     ::f,U|r    c                  f   Sn Su  pnSnSu  pVnXU4XU4XU4XS-  U4X$S-  U4X4S-  U4XS-  U4X4U4XS-  U4/	n[         R                  " [         R                  " SSS	5      S-  * 5      n	XR                  5       -  R	                  S
S
S5      n	/ n
U H  u  pn[         R                  " SU[        X-  5      5      n[         R                  " S[         R                  " S[        R                  -  U-  U-  5      -  5      n[         R                  R                  R                  UR	                  S
S
S5      U	SS9R                  5       nU
R                  U[         R                  " U* U-  5      -  5        M     [         R                  " U
5      S-  nUR!                  S5      R!                  S5      U S.$ )Ni }  )gGzZ@gTz@g(\"}@gQ?)r  rW  g      @r;  r   r  rj     r{   r  r   rW  )r  g?r  )r   rH  rE  sumrw  r   tanhr  r.  r  rt  ru  conv1dsqueezer   r  r>  )srr  AbBbr+  SMr  melodyr   partsfreqdurdecayr  tonewavs                    r   _generate_chimePlaySoundKJ._generate_chime  s   *	raGa!Wq1gA#ay!AJaC
Qs1IQx!aC
 IIu~~b!R0A556[!!!Q+ &Duq#s28}5A::a%))AK$,>,B"CCDD88&&--dll1a.DaQR-S[[]DLL		1"u* 556	 !'
 ii%MM!,66q9"MMr    NrC  c                 p   UGc;  U(       Ga#  SS K nUR                  U5       nUR                  R                  S   n	U	R                  R
                  n
/ nUR                  U	R                  S9 H  n[        R                  " UR                  5       5      nUR                  S   U	R                  :w  a*  UR                  SU	R                  5      R                  5       nUR                  U5        M     [        R                   " USS9R#                  5       nS S S 5        WR%                  S5      W
S.nOU R'                  5       n[(        R*                  " XS9nUR-                  5       n[/        US   R1                  5       R3                  5       5      /US	'   [4        R6                  " UUS
9$ ! , (       d  f       N= f)Nr   )streamsr  r{   r  r  r^   r  
audio_hash)r   )avr  rR  r,  codec_contextr  r?  r   r   r  
to_ndarrayr  channelsviewr  r   r  rP   r>  rO  r   PreviewAudioas_dicthashr?  r  r   r  )r_   r,  r-  rm  r2  r3  rh  rT  afstreamrC  framesr  r  rN  previewui_dicts                    r   r  PlaySoundKJ.execute  s[   =WWZ(BZZ--a0F--99BF!#6<<!@#..u/?/?/AB99Q<6??:"%((2v"?"A"A"CCc*	 "A
  ))F288:C ) &)]]1%5bI++-//%1//#!%eJ&7&;&;&=&B&B&D!E F}}
 	
# )(s   C1F''
F5r   )Nr[   r.  r  r4  N)r-   r.   r/   r0   __doc__r1   rA  r;  rc  rO  r   r  r  r7   r   r    r   r*  r*    sc    F
 
&  
 N N( 
lnlyly 
 
r    r*  )}r   torch.nnrt  r,  r-  PILr   r  r   r  r  r.  r  rw  rr  r   r]  r   r   comfy.utilsr   r   r	   r
   r   comfy.comfy_types.node_typingr   comfy_api.latestr   r   comfy.latent_formatsr  r   r  dirnameabspath__file__r  add_model_folder_pathr   r   r9   rG   rV   rg   rt   r   r   r   r   r   r   r  r!  r#  rC  rM  rW  ra  r  r  r  r  r  r  r  r7  rT  r\  r  r  r  r  r  r  r  r%  rF  r  r  r  r:  rC  rK  rS  r  r  r  r  r  r  r  r  r  comfy.samplersrd  re  rg  rv  r  r  r  Moduler  r  r  r  r  comfy.patcher_extensionr  comfy.sampler_helpersr  r  r  r  	ComfyNoder&  r  r  r  r  r  r  r"  r*  r   r    r   <module>rr     s        	 	     "    p p , #   77??277??277??83L#MN   " "?BGGLLAQSZ4[ \    " ""   ,) )X' 'T #  #D! !,! !() )V% %0 .+ +Z5 5n? ?BI IV-
 -
^   D ,42 42l,1 ,1\B2 B2J ,$0 $0L/" /"b $,% ,%\0 0B1% 1%f",@E @ED,yE yEx. .bY5 Y5z, ,\$B $BL 8 2 , .n( n(`c cD & " ,, ,\ ,$Q $QL1 1f 4~ ~@ 8%W) %WN 6" "H! !F:( RYY  $ !5 !5F@9 @9F < / . 0] ]< 0u0 u0p$(BLL $(L5(",, 5(p& &P4=BLL 4=l  i/ i/V)R\\ )8K
",, K
r    