o
    iR                     @   s   d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZm	Z	m
Z
mZ d dlmZ 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 )    N)override)IOUIComfyExtension	InputImplTypes)Pathc                 C   s   |  ddS )N\/)replace)path r   8/mnt/c/Users/fbmor/ComfyUI/comfy_extras/nodes_load_3d.pynormalize_path   s   r   c                   @   s0   e Zd Zedd ZedejfddZeZdS )Load3Dc                    s  t jt d}t j|dd t|}tt   fdd|dD }tj	dddd	dtj
jd
t|tjjdtjdtjjddddddtjjddddddgtjjddtjjddtjjddtjjddtjjddtjjddtjjddgdS )N3dT)exist_okc                    s,   g | ]}|j  d v rtt| qS )>	   .fbx.glb.obj.ply.spz.stl.gltf.splat.ksplat)suffixlowerr   strrelative_to).0	file_path	base_pathr   r   
<listcomp>   s
    z(Load3D.define_schema.<locals>.<listcomp>*r   zLoad 3D & AnimationBasics
model_file)optionsuploadimagewidthi      i   )defaultminmaxstepheight)display_namemask	mesh_pathnormalcamera_inforecording_videomodel_3d)node_idr2   categoryessentials_categoryis_experimentalinputsoutputs)osr   joinfolder_pathsget_input_directorymakedirsr   rglobr   SchemaComboInputsorted
UploadTypemodelr   IntImageOutputMaskStringLoad3DCameraVideo	File3DAny)cls	input_dir
input_pathfilesr   r"   r   define_schema   s6   

zLoad3D.define_schemareturnc              	   K   s   t |d }t |d }t |d }t }|j|d\}}	|j|d\}
}|j|d\}}d }|d dkrEt |d }t|}tt |}t	
|||||d ||S )Nr*   r3   r5   )r*   	recording r6   )rA   get_annotated_filepathnodes	LoadImage
load_imager   VideoFromFiler   File3Dr   
NodeOutput)rS   r'   r*   kwargs
image_path	mask_pathnormal_pathload_image_nodeoutput_imageignore_maskignore_imageoutput_masknormal_imageignore_mask2videorecording_video_pathfile_3dr   r   r   execute5   s   
zLoad3D.executeN)	__name__
__module____qualname__classmethodrW   r   ra   rp   processr   r   r   r   r      s    
$r   c                   @   s:   e Zd Zedd ZedeejB dej	fddZ
e
ZdS )	Preview3Dc                 C   sx   t jdddgddddt jjt jjddd	d
t jt jt jt jt j	t j
t jgddt jjddddt jjddddgg dS )Nrv   z	view meshz	3d viewerzPreview 3D & Animationr   Tr'   rZ   F)r-   	multilinez3D model file or path string)typestooltipr6   )optionaladvancedbg_image)r9   search_aliasesr2   r:   r<   is_output_noder=   r>   )r   rE   	MultiTyperG   rO   	File3DGLB
File3DGLTF	File3DFBX	File3DOBJ	File3DSTL
File3DUSDZrR   rP   rL   )rS   r   r   r   rW   N   s0   	zPreview3D.define_schemar'   rX   c                 K   sr   t |tjrdt j d|j }|tj	
t | n|}|dd }|dd }tjtj|||ddS )N
preview3d_.r6   r|   )r|   )ui)
isinstancer   r`   uuiduuid4hexformatsave_tor?   r   r@   rA   get_output_directorygetr   ra   r   PreviewUI3D)rS   r'   rb   filenamer6   r|   r   r   r   rp   k   s   zPreview3D.executeN)rq   rr   rs   rt   rW   r   r   r`   r   ra   rp   ru   r   r   r   r   rv   M   s    

rv   c                   @   s(   e Zd Zedeeej  fddZdS )Load3DExtensionrX   c                    s
   t tgS N)r   rv   )selfr   r   r   get_node_listz   s   zLoad3DExtension.get_node_listN)	rq   rr   rs   r   listtyper   	ComfyNoder   r   r   r   r   r   y   s    r   rX   c                      s   t  S r   )r   r   r   r   r   comfy_entrypoint   s   r   )r\   rA   r?   r   typing_extensionsr   comfy_api.latestr   r   r   r   r   pathlibr   r   r   r   rv   r   r   r   r   r   r   <module>   s    >,	