o
    iN                     @   s   d dl mZ d dlZd dlZd dlZd dlZd dlZd dlm	Z	m
Z
 G dd de
jZdddZG dd	 d	e
jZG d
d de
jZG dd de	ZdefddZdS )    )overrideN)ComfyExtensionioc                   @   s6   e Zd ZedejfddZeddejfddZdS )	EmptyCosmosLatentVideoreturnc                 C   sn   t jddt jjdddtjddt jjdddtjddt jjd	d
dtjddt jjdddddgt j gdS )Nr   zlatent/videowidth      defaultminmaxstepheight  lengthy         
batch_size   r   r   r   node_idcategoryinputsoutputs)r   SchemaIntInputnodesMAX_RESOLUTIONLatentOutputcls r&   7/mnt/c/Users/fbmor/ComfyUI/comfy_extras/nodes_cosmos.pydefine_schema   s   
z$EmptyCosmosLatentVideo.define_schemar   c                 C   s@   t j|d|d d d |d |d gtj d}td|iS )Nr	   r   r   devicesamples)torchzeroscomfymodel_managementintermediate_devicer   
NodeOutput)r%   r   r   r   r   latentr&   r&   r'   execute   s   2zEmptyCosmosLatentVideo.executeNr   	__name__
__module____qualname__classmethodr   r   r(   r1   r3   r&   r&   r&   r'   r      s
    r   c                 C   s   t j|dd df dd||dddd}t|jd |}t||d d d | d d	 }t|||dfd
 }	|d | |	d |< |d d d }
| |	}|d d d d d |
f S )N.   r   bilinearcenterr   r      g      ?)	r.   utilscommon_upscalemovedimr   shaper,   onesencode)vaeimager   r   r   paddingpixels	pixel_lenpadded_lengthpadded_pixels
latent_lenlatent_tempr&   r&   r'   vae_encode_with_padding    s   0"
rN   c                   @   6   e Zd ZedejfddZeddejfddZdS )CosmosImageToVideoLatentr   c                 C      t jddt jdt jjdddtjddt jjdd	dtjddt jjd
ddtjddt jjdddddt jjdddt jjdddgt j	 gdS )NrP   conditioning/inpaintrE   r   r   r	   r
   r   r   r   r   r   r   r   r   r   start_imageToptional	end_imager   
r   r   Vaer   r   r    r!   Imager"   r#   r$   r&   r&   r'   r(   ,      

	z&CosmosImageToVideoLatent.define_schemaNc                 C   s  t jdd|d d d |d |d gtj d}|d u r,|d u r,i }	||	d< t|	S t j|jd d|d d d |jd |jd gtj d}
|d ur|t	|||||dd	}||d d d d d |jd
 f< |
d d d d d |jd
 f  d9  < |d urt	|||||dd	}||d d d d |jd
  d f< |
d d d d |jd
  d f  d9  < i }	|
|fd|jd   |	d< |

|fd|
jd   |	d< t|	S )Nr   r	   r   r)   r+   r   r;   rG           r4   
noise_mask)r,   r-   r.   r/   r0   r   r1   rC   rB   rN   repeatndim)r%   rE   r   r   r   r   rS   rV   r2   
out_latentmaskrM   r&   r&   r'   r3   =   s$   2
< ("*
z CosmosImageToVideoLatent.executeNNr5   r&   r&   r&   r'   rP   +   
    rP   c                   @   rO   ) CosmosPredict2ImageToVideoLatentr   c                 C   rQ   )Nrf   rR   rE   r   iP  r	   r
   r   i  r   ]   r      r   r   r   rS   TrT   rV   r   rW   r$   r&   r&   r'   r(   W   rZ   z.CosmosPredict2ImageToVideoLatent.define_schemaNc                 C   s  t jdd|d d d |d |d gtj d}|d u r,|d u r,i }	||	d< t|	S t j|jd d|d d d |jd |jd	 gtj d}
|d ur|t	|||||dd
}||d d d d d |jd f< |
d d d d d |jd f  d9  < |d urt	|||||dd
}||d d d d |jd  d f< |
d d d d |jd  d f  d9  < i }	tj
 }|||
 |d|
   }||fd|jd   |	d< |
|fd|
jd   |	d< t|	S )Nr   r	   rh   r   r)   r+   r   r[   r;   r\   r]   r^   g      ?r4   r_   )r,   r-   r.   r/   r0   r   r1   rC   rB   rN   latent_formatsWan21process_outr`   ra   )r%   rE   r   r   r   r   rS   rV   r2   rb   rc   rM   latent_formatr&   r&   r'   r3   h   s(   2
< ("*

z(CosmosPredict2ImageToVideoLatent.executerd   r5   r&   r&   r&   r'   rf   V   re   rf   c                   @   s(   e Zd Zedeeej  fddZdS )CosmosExtensionr   c                    s   t ttgS N)r   rP   rf   )selfr&   r&   r'   get_node_list   s
   zCosmosExtension.get_node_listN)	r6   r7   r8   r   listtyper   	ComfyNoderp   r&   r&   r&   r'   rm      s    rm   r   c                      s   t  S rn   )rm   r&   r&   r&   r'   comfy_entrypoint   s   rt   )r   )typing_extensionsr   r    r,   comfy.model_managementr.   comfy.utilscomfy.latent_formatscomfy_api.latestr   r   rs   r   rN   rP   rf   rm   rt   r&   r&   r&   r'   <module>   s    
+.
