o
    i                     @   s   d dl Z d dlZd dlZd dlmZ d dlmZmZ dd Z	G dd dej
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 )    N)override)ComfyExtensionioc                 C   sp   t | g} t |g}t jt d|  d t t |t t |t dt | d gddd}|S )NZ   r   dim   )torch	as_tensorstackdeg2radsincos	full_like	unsqueeze)	elevationazimuth
embeddings r   9/mnt/c/Users/fbmor/ComfyUI/comfy_extras/nodes_stable3d.pycamera_embeddings   s"   
	
r   c                   @   ,   e Zd Zedd ZedejfddZdS )StableZero123_Conditioningc                 C   s   t jddt jdt j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ddt j	jdddddddt j	jdddddddgt j
jddt j
jddt jjddgdS )Nr   conditioning/3d_modelsclip_vision
init_imagevaewidth         defaultminmaxstepheight
batch_sizer	      r#   r$   r%   r                f     f@皙?Fr#   r$   r%   r&   roundr   positivedisplay_namenegativelatentnode_idcategoryinputsoutputsr   Schema
ClipVisionInputImageVaeIntnodesMAX_RESOLUTIONFloatConditioningOutputLatentclsr   r   r   define_schema   s"   


z(StableZero123_Conditioning.define_schemareturnc	                 C   s   | |}	|	jd}
tj|dd||dddd}|d d d d d d d df }||}t||}t	j
|
||
j|
jd ddfgdd}|d|igg}t	|
dt	|igg}t	|d	|d
 |d
 g}t||d|iS )Nr   r   r	   bilinearcenter   r   concat_latent_image   r!   samples)encode_imageimage_embedsr   comfyutilscommon_upscalemovedimencoder   r
   cattodevicerepeatshape
zeros_likezerosr   
NodeOutput)rI   r   r   r   r   r'   r(   r   r   outputpooledpixelsencode_pixelst
cam_embedscondr1   r4   r5   r   r   r   execute0   s   
$ 

,z"StableZero123_Conditioning.executeN__name__
__module____qualname__classmethodrJ   r   r`   rh   r   r   r   r   r      s
    
r   c                   @   r   )"StableZero123_Conditioning_Batchedc                 C   s   t jddt jdt j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ddt j	jdddddddt j	jdddddddt j	jddddddddt j	jddddddddg
t j
jddt j
jddt jjddgd S )!Nrn   r   r   r   r   r   r   r    r!   r"   r'   r(   r	   r)   r*   r   r+   r,   r-   r.   Fr/   r   elevation_batch_incrementT)r#   r$   r%   r&   r0   advancedazimuth_batch_incrementr1   r2   r4   r5   r6   r;   rH   r   r   r   rJ   @   s&   


z0StableZero123_Conditioning_Batched.define_schemarK   c                 C   s  | |}|jd}tj|dd||dddd}|d d d d d d d df }||}g }t|D ]}|	t
|| ||	7 }||
7 }q8tj|dd}tjtj|||gdd}|d|igg}t|dt|igg}t|d	|d
 |d
 g}t|||dg| dS )Nr   r   r	   rL   rM   rN   r   rO   rP   r!   )rQ   batch_index)rR   rS   r   rT   rU   rV   rW   rX   rangeappendr   r
   rY   repeat_to_batch_sizer^   r_   r   r`   )rI   r   r   r   r   r'   r(   r   r   ro   rq   ra   rb   rc   rd   re   rf   irg   r1   r4   r5   r   r   r   rh   X   s    
$ 

z*StableZero123_Conditioning_Batched.executeNri   r   r   r   r   rn   ?   s
    
rn   c                   @   r   )SV3D_Conditioningc                 C   s   t jddt jdt j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ddt j	jdddddddgt j
jddt j
jddt jjddgdS )Nrw   r   r   r   r   r   i@  r    r!   r"   r'   video_frames   r	   r)   r*   r   r+   g     Vg     V@r.   Fr/   r1   r2   r4   r5   r6   r;   rH   r   r   r   rJ   o   s    



zSV3D_Conditioning.define_schemarK   c                 C   s  | |}|jd}	tj|dd||dddd}
|
d d d d d d d df }||}d}dt|dd  }g }g }t	|D ]}|
| |
| ||7 }qE|	|||d	gg}t|	t|||d	gg}t|d
|d |d g}t||d|iS )Nr   r   r	   rL   rM   rN   ih     )rO   r   r   rP   r!   rQ   )rR   rS   r   rT   rU   rV   rW   rX   r%   rs   rt   r
   r^   r_   r   r`   )rI   r   r   r   r   r'   rx   r   ra   rb   rc   rd   re   r   azimuth_increment
elevationsazimuthsrv   r1   r4   r5   r   r   r   rh      s"   
$ 



zSV3D_Conditioning.executeNri   r   r   r   r   rw   n   s
    
rw   c                   @   s(   e Zd Zedeeej  fddZdS )Stable3DExtensionrK   c                    s   t ttgS N)r   rn   rw   )selfr   r   r   get_node_list   s
   zStable3DExtension.get_node_listN)	rj   rk   rl   r   listtyper   	ComfyNoder   r   r   r   r   r~      s    r~   rK   c                      s   t  S r   )r~   r   r   r   r   comfy_entrypoint   s   r   )r
   rB   comfy.utilsrT   typing_extensionsr   comfy_api.latestr   r   r   r   r   rn   rw   r~   r   r   r   r   r   <module>   s    &/.	