o
    i                     @   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	 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	j
ZG dd de	j
ZG dd deZdefddZdS )    N)AudioVAE)ComfyExtensionioc                   @   8   e Zd ZedejfddZededejfddZ	dS )LTXVAudioVAELoaderreturnc              	   C   s6   t jdddt jjdtdddgt jjdd	gd
S )Nr   zLTXV Audio VAE Loaderaudio	ckpt_namecheckpointszAudio VAE checkpoint to load.)optionstooltip	Audio VAEdisplay_namenode_idr   categoryinputsoutputs)r   SchemaComboInputfolder_pathsget_filename_listVaeOutputcls r   9/mnt/c/Users/fbmor/ComfyUI/comfy_extras/nodes_lt_audio.pydefine_schema   s   z LTXVAudioVAELoader.define_schemar	   c                 C   s0   t d|}tjj|dd\}}tt||S )Nr
   T)return_metadata)r   get_full_path_or_raisecomfyutilsload_torch_filer   
NodeOutputr   )r   r	   	ckpt_pathsdmetadatar   r   r   execute   s   zLTXVAudioVAELoader.executeN)
__name__
__module____qualname__classmethodr   r   r    strr&   r*   r   r   r   r   r   
   s
    r   c                   @   r   )LTXVAudioVAEEncoder   c              
   C   s>   t jdddt jjdddt jjdddd	gt jjd
dgdS )Nr0   zLTXV Audio VAE Encoder   zThe audio to be encoded.r   	audio_vaer   z(The Audio VAE model to use for encoding.idr   r   zAudio Latentr   r   )r   r   Audior   r   Latentr   r   r   r   r   r    #      z LTXVAudioVAEEncode.define_schemar2   c                 C   s"   | |}t|t|jddS )Nr   samplessample_ratetype)encoder   r&   intr:   )r   r   r2   audio_latentsr   r   r   r*   4   s   
zLTXVAudioVAEEncode.executeN
r+   r,   r-   r.   r   r   r    r   r&   r*   r   r   r   r   r0   "   
    r0   c                   @   r   )LTXVAudioVAEDecoder   c              
   C   s>   t jdddt jjdddt jjddd	d
gt jjddgdS )NrA   zLTXV Audio VAE Decoder   r9   zThe latent to be decoded.r1   r2   r   z1The Audio VAE model used for decoding the latent.r3   r5   r   r   )r   r   r6   r   r   r5   r   r   r   r   r   r    A   r7   z LTXVAudioVAEDecode.define_schemar2   c                 C   sF   |d }|j r| d }|||j}|j}t|t|dS )Nr9   )waveformr:   )		is_nestedunbinddecodetodeviceoutput_sample_rater   r&   r=   )r   r9   r2   audio_latentr   output_audio_sample_rater   r   r   r*   R   s   zLTXVAudioVAEDecode.executeNr?   r   r   r   r   rA   @   r@   rA   c                   @   sD   e Zd ZedejfddZedededededej	f
dd	Z
d
S )LTXVEmptyLatentAudior   c                 C   s   t jdddt jjdddddt jjdd	t jjd
ddddt jjdd	t jjddddt jjddt jjddddgt jjddgdS )NrL   zLTXV Empty Latent Audiozlatent/audioframes_numbera      i  zNumber of frames.)defaultminmaxstepdisplay_moder   
frame_rate   zNumber of frames per second.
batch_sizei   z0The number of latent audio samples in the batch.)rP   rQ   rR   rT   r   r2   r   z.The Audio VAE model to get configuration from.r3   r6   r   r   )	r   r   Intr   NumberDisplaynumberr   r6   r   r   r   r   r   r    b   sL   		!z"LTXVEmptyLatentAudio.define_schemarM   rU   rW   r2   c           
      C   s`   |dusJ d|j }|j}t|j}|||}tj||||ftj	 d}	t
|	|ddS )zGGenerate empty audio latents matching the reference pipeline structure.NzAudio VAE model is required)rH   r   r8   )latent_channelslatent_frequency_binsr=   r:   num_of_latents_from_framestorchzerosr#   model_managementintermediate_devicer   r&   )
r   rM   rU   rW   r2   
z_channels
audio_freqsampling_ratenum_audio_latentsr>   r   r   r   r*      s   


zLTXVEmptyLatentAudio.executeN)r+   r,   r-   r.   r   r   r    r=   r   r&   r*   r   r   r   r   rL   a   s    )rL   c                   @   s.   e Zd ZedejfddZedddZdS )	LTXAVTextEncoderLoaderr   c                 C   sZ   t jddddt jjdtddt jjdtd	dt jjd
ddgddgt j gdS )Nrf   zLTXV Audio Text Encoder Loaderzadvanced/loadersz[Recipes]

ltxav: gemma 3 12Btext_encodertext_encoders)r   r	   r
   rH   rP   cpuT)r   advanced)r   r   r   descriptionr   r   )r   r   r   r   r   r   Clipr   r   r   r   r   r       s*   
z$LTXAVTextEncoderLoader.define_schemarP   c           	      C   sl   t jjj}td|}td|}i }|dkr"td |d< |d< t jj||gt	d||d}t
|S )Nrh   r
   ri   load_deviceoffload_device
embeddings)
ckpt_pathsembedding_directory	clip_typemodel_options)r#   r(   CLIPTypeLTXVr   r"   r^   rH   	load_clipget_folder_pathsr   r&   )	r   rg   r	   rH   rr   
clip_path1
clip_path2rs   clipr   r   r   r*      s   

zLTXAVTextEncoderLoader.executeN)rP   )r+   r,   r-   r.   r   r   r    r*   r   r   r   r   rf      s
    rf   c                   @   s$   e Zd Zdeeej  fddZdS )LTXVAudioExtensionr   c                    s   t ttttgS N)r   r0   rA   rL   rf   )selfr   r   r   get_node_list   s   z LTXVAudioExtension.get_node_listN)r+   r,   r-   listr;   r   	ComfyNoder~   r   r   r   r   r{      s    r{   r   c                      s   t  S r|   )r{   r   r   r   r   comfy_entrypoint   s   r   )r   comfy.utilsr#   comfy.model_managementr^   "comfy.ldm.lightricks.vae.audio_vaer   comfy_api.latestr   r   r   r   r0   rA   rL   rf   r{   r   r   r   r   r   <module>   s    !K)