o
    i2                     @   s   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZG dd dZ	G dd dZ
G dd dZG dd	 d	ZG d
d dejjZG dd dZe	e
eeeedZddiZdS )    Nc                   @   s.   e Zd Zedd ZdZdZdZd
ddZd	S )ImageOnlyCheckpointLoaderc                 C   s   ddt dfiiS )Nrequired	ckpt_namecheckpoints)folder_pathsget_filename_lists r
   </mnt/c/Users/fbmor/ComfyUI/comfy_extras/nodes_video_model.pyINPUT_TYPES   s   z%ImageOnlyCheckpointLoader.INPUT_TYPES)MODELCLIP_VISIONVAEload_checkpointzloaders/video_modelsTc                 C   s>   t d|}tjj|dddt dd}|d |d |d fS )	Nr   TF
embeddings)
output_vaeoutput_clipoutput_clipvisionembedding_directoryr         )r   get_full_path_or_raisecomfysdload_checkpoint_guess_configget_folder_paths)selfr   r   r   	ckpt_pathoutr
   r
   r   r      s   z)ImageOnlyCheckpointLoader.load_checkpointN)TT)	__name__
__module____qualname__classmethodr   RETURN_TYPESFUNCTIONCATEGORYr   r
   r
   r
   r   r   
   s    
r   c                   @   s0   e Zd Zedd ZdZdZdZdZdd Z	d	S )
SVD_img2vid_Conditioningc                 C   sr   dddddddt jdd	fdd
dt jdd	fdddddfddddddfdddddfdddddddfd	iS )Nr   r   )IMAGEr   INTi         defaultminmaxstepi@        i   )r/   r0   r1      i  T)r/   r0   r1   advanced   FLOAT              $@{Gz?)r/   r0   r1   r2   r6   )	clip_vision
init_imagevaewidthheightvideo_framesmotion_bucket_idfpsaugmentation_level)nodesMAX_RESOLUTIONr   r
   r
   r   r      s   z$SVD_img2vid_Conditioning.INPUT_TYPES)CONDITIONINGrG   LATENT)positivenegativelatentencodezconditioning/video_modelsc
                 C   s   | |}
|
jd}tj|dd||dddd}|d d d d d d d df }|	dkr:|t||	 7 }|	|}||||	|dgg}t
||||	t
|dgg}t|d|d	 |d	 g}||d
|ifS )Nr   r4   bilinearcenterr   )rB   rC   rD   concat_latent_image   r-   samples)encode_imageimage_embeds	unsqueezer   utilscommon_upscalemovedimtorch
randn_likerL   
zeros_likezeros)r   r<   r=   r>   r?   r@   rA   rB   rC   rD   outputpooledpixelsencode_pixelstrI   rJ   rK   r
   r
   r   rL   .   s   
$ 
 zSVD_img2vid_Conditioning.encodeN)
r    r!   r"   r#   r   r$   RETURN_NAMESr%   r&   rL   r
   r
   r
   r   r'      s    
r'   c                   @   ,   e Zd Zedd ZdZdZdZdd ZdS )	VideoLinearCFGGuidancec              
   C       ddddddddd	d
fdiS Nr   r   r8         ?r9   g      Y@      ?r;   T)r/   r0   r1   r2   roundr6   )modelmin_cfgr
   r   r
   r
   r   r   <      z"VideoLinearCFGGuidance.INPUT_TYPESrg   patchsampling/video_modelsc                    $    fdd}|  }|| |fS )Nc                    sV   | d }| d }| d }t j ||jd |jd|jd dddf}||||   S )Nconduncond
cond_scaler   devicer4   )rY   linspaceshaperu   reshape)argsrq   rr   rs   scalerl   r
   r   
linear_cfgG   s
   .z0VideoLinearCFGGuidance.patch.<locals>.linear_cfgcloneset_model_sampler_cfg_functionr   rk   rl   r|   mr
   r{   r   rn   F   s   
zVideoLinearCFGGuidance.patchN	r    r!   r"   r#   r   r$   r%   r&   rn   r
   r
   r
   r   rd   ;       
rd   c                   @   rc   )	VideoTriangleCFGGuidancec              
   C   re   rf   r
   r   r
   r
   r   r   T   rm   z$VideoTriangleCFGGuidance.INPUT_TYPESrg   rn   ro   c                    rp   )Nc                    s   | d }| d }| d }d}t jdd|jd |jd}d|| t || d	    }||     |jd dddf}||||   S )
Nrq   rr   rs   rh   r   r4   rt   r   ri   )rY   rv   rw   ru   floorabsrx   )ry   rq   rr   rs   periodvaluesrz   r{   r
   r   r|   _   s   "$z2VideoTriangleCFGGuidance.patch.<locals>.linear_cfgr}   r   r
   r{   r   rn   ^   s   
zVideoTriangleCFGGuidance.patchNr   r
   r
   r
   r   r   S   r   r   c                   @   s&   e Zd ZdZedd ZdddZdS )ImageOnlyCheckpointSavezadvanced/model_mergingc                 C   s"   ddddddifddd	d
dS )Nrg   r(   r*   STRINGr/   zcheckpoints/ComfyUI)rk   r<   r>   filename_prefixPROMPTEXTRA_PNGINFO)promptextra_pnginfo)r   hiddenr
   r   r
   r
   r   r   q   s   
z#ImageOnlyCheckpointSave.INPUT_TYPESNc              	   C   s    t jj||||| j||d i S )N)r<   r>   r   
output_dirr   r   )comfy_extrasnodes_model_mergingsave_checkpointr   )r   rk   r<   r>   r   r   r   r
   r
   r   savey   s   zImageOnlyCheckpointSave.save)NN)r    r!   r"   r&   r#   r   r   r
   r
   r
   r   r   n   s
    
r   c                   @   rc   )	"ConditioningSetAreaPercentageVideoc                 C   s|   ddddddddfddddddfddddddfddddddfddddddfddddddfdddd	ddfd
iS )Nr   rG   r8   rh   r   r;   r.   r9   r:   )conditioningr?   r@   temporalxyzstrengthr
   r   r
   r
   r   r      s   z.ConditioningSetAreaPercentageVideo.INPUT_TYPESr   appendr   c	           
   
   C   s(   t |d||||||f|dd}	|	fS )N
percentageF)arear   set_area_to_bounds)node_helpersconditioning_set_values)
r   r   r?   r@   r   r   r   r   r   cr
   r
   r   r      s
   z)ConditioningSetAreaPercentageVideo.appendN)	r    r!   r"   r#   r   r$   r%   r&   r   r
   r
   r
   r   r   ~   s    

r   )r   r'   rd   r   r   r   z,Image Only Checkpoint Loader (img2vid model))rE   rY   comfy.utilsr   comfy.sdr    comfy_extras.nodes_model_mergingr   r   r   r'   rd   r   r   CheckpointSaver   r   NODE_CLASS_MAPPINGSNODE_DISPLAY_NAME_MAPPINGSr
   r
   r
   r   <module>   s,    !
