
    +j!                        S SK r S SKJr  S SKJr  S SKrS SKrS SKrS SKJr  S SK	J
r
Jr  S SKJr  S SKJrJr  \R"                  " S5      r " S	 S
\R&                  5      r " S S\R&                  5      r " S S\5      rS\4S jrg)    N)tqdm)override)model_management)IFNetdetect_rife_config)FILMNet)ComfyExtensionioINTERP_MODELc                   `    \ rS rSr\S 5       r\S\R                  4S j5       r\S 5       r	Sr
g)FrameInterpolationModelLoader   c                     [         R                  " SSS[         R                  R                  S[        R
                  " S5      SS9/[        R                  5       /S9$ )	Nr   zLoad Frame Interpolation Modelzmodel/loaders
model_nameframe_interpolationzfSelect a frame interpolation model to load. Models must be placed in the 'frame_interpolation' folder.)optionstooltip)node_iddisplay_namecategoryinputsoutputs)r
   SchemaComboInputfolder_pathsget_filename_listFrameInterpolationModelOutputclss    F/home/wildlama/comfy/ComfyUI/comfy_extras/nodes_frame_interpolation.pydefine_schema+FrameInterpolationModelLoader.define_schema   s`    yy39$|\5S5STi5j (P  Q
 (..0
 	
    returnc                    [         R                  " SU5      n[        R                  R	                  USS9nU R                  U5      n[        R                  " [        R                  " 5       5      (       a  [        R                  O[        R                  nUR                  5       R                  U5        [        R                  R                  U[        R                  " 5       [        R                   " 5       S9n["        R$                  " U5      $ )Nr   T)	safe_load)load_deviceoffload_device)r   get_full_path_or_raisecomfyutilsload_torch_file_detect_and_loadr   should_use_fp16get_torch_devicetorchfloat16float32evaltomodel_patcherCoreModelPatcherunet_offload_devicer
   
NodeOutput)r!   r   
model_pathsdmodeldtypepatchers          r"   execute%FrameInterpolationModelLoader.execute    s    !889NPZ[
[[((t(D$$R(!1!A!ABRBcBcBe!f!flqlyly

%%66(99;+??A 7 

 }}W%%r%   c                    SU;   a  [        5       nUR                  U5        U$ [        R                  R	                  USSS.5      n0 nU HK  n[        S5       H9  nUR                  SU S35      (       d  M  SU SU[        SU S35      S   3X4'   M;     MM     U(       a4  UR                  5        VVs0 s H  u  pFUR                  XD5      U_M     nnnUR                  5        VVs0 s H  u  pFUR                  S5      (       a  M  XF_M!     nnn [        U5      u  px[        XxS
9nUR                  U5        U$ s  snnf s  snnf ! [        [        4 a    [        S	5      ef = f)Nz/extract.extract_sublevels.convs.0.0.conv.weight )zmodule.zflownet.   block.zblocks.)zteacher.zcaltime.z-Unrecognized frame interpolation model format)head_chchannels)r   load_state_dictr,   r-   state_dict_prefix_replacerange
startswithlenitemsgetr   KeyError
ValueErrorr   )	r!   r<   r=   key_mapkivrG   rH   s	            r"   r/   .FrameInterpolationModelLoader._detect_and_load/   s[    =BIE!!"%L [[2222SU7VWA1X<<%s!--#*1#QquQCq\1B1C/D.E!FGJ   3588:>:41'++a#Q&:B>!xxzXztq>V1WdadzX	N 22 6G g9b! ?X *% 	NLMM	Ns   4D;(EEE E# N)__name__
__module____qualname____firstlineno__classmethodr#   r
   r:   r@   r/   __static_attributes__rW   r%   r"   r   r      sG    
 
 &BMM & &  r%   r   c                   P    \ rS rSr\S 5       r\S\R                  4S j5       rSr	g)FrameInterpolateK   c                    [         R                  " SSS/ SQ[        R                  S5      [         R                  R                  S5      [         R
                  R                  SSSS	S
9/[         R                  R                  5       /S9$ )Nr_   zFrame Interpolatevideo)rifefilmzframe interpolationzslow motionzinterpolate framesvfiinterp_modelimages
multiplier   r   )defaultminmax)r   r   r   search_aliasesr   r   )r
   r   r   r   ImageIntr   r    s    r"   r#   FrameInterpolate.define_schemaL   so    yy&,n'--n=x(\1!D !
 	
r%   r&   c           	      	  ^^'^(^) [         R                  " 5       nTR                  S   nUS:  d  US:  a  [        R                  " T5      $ UR
                  m(UR                  5       m)UR                  nUR                  TR                  T)5      n[         R                  " U/US9  [        USS5      m'TR                  S   TR                  S   pU'U(U)U4S jn
US-
  nUS-
  nX-  n[        R                  R                  U5      n[        USS9nUn[        SU5       Vs/ s H  nUU-  PM
     nn[         R                   " 5       nX-  S-   n["        R$                  " US	X4UUS
9nTS   R'                  SS5      R)                  U5      US'   SnU
" S5      nUR                  S   UR                  S	   nn["        R*                  " UT(T)S9R-                  USSS5      nUR/                  SSUU5      nA[        USS 5      n0 nS n [        U5       GH  nUb  UOU
" U5      nU
" US-   5      n U nSU;   a  UR1                  S5      OUR3                  U5      US'   UR3                  U 5      US'   US   US'   Sn!UbY   U" UU UUS9n"U"S S 2S S 2S U2S U	24   R)                  U5      UUUU-   & UU-  nUR5                  U5        UR5                  U5        Sn!U!(       d  Sn#U#U:  a  [;        UUU#-
  5      n$ UR/                  U$SSS5      n%U R/                  U$SSS5      n&U" U%U&UU#U#U$-    US9n"U"S S 2S S 2S U2S U	24   R)                  U5      UUUU$-   & UU$-  nUR5                  U$5        UR5                  U$5        U#U$-  n#U#U:  a  M  TUS-      R'                  SS5      R)                  U5      UU'   US-  nGM     UR?                  5         UR'                  SS5      RA                  SS5      n[        R                  " U5      $ s  snf ! [         R6                   a    [         R8                  " 5         S n GN_f = f! [         R6                   a.    US::  a  e [=        SUS-  5      n[         R8                  " 5          Nf = f! UR?                  5         f = f)Nr   ri   )memory_required	pad_align   c                 ~   > TX S-    R                  SS5      R                  TTS9nTS:  a  SSKJn  U" UTT4SS9nU$ )Nrt   r>   devicer   )pad_to_patch_sizereflect)padding_mode)movedimr6   comfy.ldm.common_ditry   )idxframery   alignrx   r>   rg   s      r"   prepare_frame/FrameInterpolate.execute.<locals>.prepare_framen   sO    3Qw'//A699f9UEqyB)%%iXLr%   zFrame interpolation)totaldesc   rw   rv   )rx   r>   forward_multi_timestepnextimg0img1F)cacheT)timestepr   g        g      ?)!r   intermediate_deviceshaper
   r:   r)   model_dtyper=   memory_used_forwardload_models_gpugetattrr,   r-   ProgressBarr   rK   intermediate_dtyper2   emptyr|   r6   tensorreshapeexpandpopextract_featuresupdateOOM_EXCEPTIONsoft_empty_cacherk   rl   closeclamp_)*r!   rf   rg   rh   r*   
num_framesinference_modelactivation_memHWr   total_pairs
num_interptotal_stepspbartqdm_barbatchtt_values	out_dtypetotal_out_framesresultout_idxsamplepHpWts_fullmulti_fn
feat_cache
prev_framerT   img0_singleimg1_single
used_multimidsjbr   r   r   rx   r>   s*     `                                    @@@r"   r@   FrameInterpolate.execute]   s   )==?\\!_
>Z!^==(())((*&,,(<<V\\5Q((,Xa8||AQ1	 	 !1n!^
!.{{&&{3k0EF,1!Z,@A,@qA
N,@A$779	&3a7.18	R`a1I%%b!,//	:q	 q!a&,,q/B,,xeDLLZYZ\]_`a..QB/?,DdK

/	;',6,BjVWHX+AE2(
 @F?SZ^^F%;YhYyYy  {F  ZG
6"%4%E%Ek%R
6"%/%7
6""
'	('[(R\]?CAq"1"bqbL?Q?T?TU^?_ww';<:-J/ 
3%)

 "Aj.zA~6@#.#5#5aR#DD#.#5#5aR#DD#24PQRSVWRWHX`j#kD:>q!RaR!|:L:O:OPY:ZF77Q;7#qLG KKN$OOA.FA j." #)Q-"7"7A">"A"A)"Lw1Y (\ NN 2&--c37}}V$$M BP ,99 ((99;#'("  0== @$z %$'5A:$6E,==?	@ NNsc   O=A5Q9 9APQ9 0B	P49Q9 4Q9 +P1-Q9 0P11Q9 4?Q63Q9 5Q66Q9 9RrW   N)
rX   rY   rZ   r[   r\   r#   r
   r:   r@   r]   rW   r%   r"   r_   r_   K   s6    
 
  e%"-- e% e%r%   r_   c                   L    \ rS rSr\S\\\R                        4S j5       r	Sr
g)FrameInterpolationExtension   r&   c                 "   #    [         [        /$ 7fN)r   r_   )selfs    r"   get_node_list)FrameInterpolationExtension.get_node_list   s      *
 	
s   rW   N)rX   rY   rZ   r[   r   listtyper
   	ComfyNoder   r]   rW   r%   r"   r   r      s)    
T$r||*<%= 
 
r%   r   r&   c                     #    [        5       $ 7fr   )r   rW   r%   r"   comfy_entrypointr      s     &((s   )r2   r   typing_extensionsr   comfy.model_patcherr,   comfy.utilsr   r   -comfy_extras.frame_interpolation_models.ifnetr   r   0comfy_extras.frame_interpolation_models.film_netr   comfy_api.latestr	   r
   Customr   r   r   r_   r   r   rW   r%   r"   <module>r      so      &    " S D /))N3 8BLL 8vx%r|| x%v
. 
) ; )r%   