
    +j                        d dl Z d dlZd dlZd dlZd dlmZmZ d dlm	Z	  G d dej
                  Z G d de	          Z G d d	ej
                  Z G d
 dej
                  Z G d dej
                  Z G d de          ZdefdZdS )    N)ComfyExtensionio)VAEEncodeAudioc                   ^    e Zd Zedej        fd            Zededej        fd            Z	dS )LTXVAudioVAELoaderreturnc                     t          j        dddt           j                            dt	          j        d          d          gt           j                            d	          g
          S )Nr   zLoad LTXV Audio VAEzmodel/loaders	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clss    ;/home/wildlama/comfy/ComfyUI/comfy_extras/nodes_lt_audio.pydefine_schemaz LTXVAudioVAELoader.define_schema
   sm    y(.$(:=II;    V]]]<<=
 
 
 	
    r
   c                 P   t          j        d|          }t          j                            |d          \  }}t          j                            |dddd          }t          j                            ||          }|                                 t          j
        |          S )	Nr   T)return_metadatazautoencoder.vocoder.)z
audio_vae.r$   )filter_keys)sdmetadata)r   get_full_path_or_raisecomfyutilsload_torch_filestate_dict_prefix_replacer&   VAEthrow_exception_if_invalidr   
NodeOutput)r   r
   	ckpt_pathr&   r'   vaes         r   executezLTXVAudioVAELoader.execute   s     7yQQ	{229d2SSH[222nbl7m7m{2  A  Ahllb8l44&&(((}S!!!r!   N)
__name__
__module____qualname__classmethodr   r   r    strr/   r2    r!   r   r   r   	   sk        
bi 
 
 
 [
 " " " " " [" " "r!   r   c                   d     e Zd Zedej        fd            Zedej        f fd            Z xZ	S )LTXVAudioVAEEncoder   c                     t          j        dddt           j                            dd          t           j                            ddd	
          gt           j                            d          g          S )Nr:   zLTXV Audio VAE Encodemodel/latent/audioaudioz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   s    r   r    z LTXVAudioVAEEncode.define_schema&   s{    y(0)w0JKK"!,F    Y%%>%BBC
 
 
 	
r!   c                 H    t                                          ||          S N)superr2   )r   r=   r?   	__class__s      r   r2   zLTXVAudioVAEEncode.execute7   s    wwy%000r!   )
r3   r4   r5   r6   r   r   r    r/   r2   __classcell__)rG   s   @r   r:   r:   %   sy        
bi 
 
 
 [
  1"- 1 1 1 1 1 [1 1 1 1 1r!   r:   c                   Z    e Zd Zedej        fd            Zedej        fd            ZdS )LTXVAudioVAEDecoder   c                     t          j        dddt           j                            dd          t           j                            ddd	
          gt           j                            d          g          S )NrJ   zLTXV Audio VAE Decoder<   sampleszThe latent to be decoded.r>   r?   r   z1The Audio VAE model used for decoding the latent.r@   rB   r   r   )r   r   rC   r   r   rB   r   r   s    r   r    z LTXVAudioVAEDecode.define_schema=   sx    y(0)		3NOO"!,O    X__'_::;
 
 
 	
r!   c                 6   |d         }|j         r|                                d         }|                    |                              dd                              |j                  }|j        j        }t          j	        |t          |          d          S )NrL      )waveformsample_rate)	is_nestedunbinddecodemovedimtodevicefirst_stage_modeloutput_sample_rater   r/   int)r   rL   r?   audio_latentr=   output_audio_sample_rates         r   r2   zLTXVAudioVAEDecode.executeN   s    y)! 	5'..004L  ..66r1==@@ATUU#,#>#Q }!"#;<< 
 
 	
r!   N)	r3   r4   r5   r6   r   r   r    r/   r2   r8   r!   r   rJ   rJ   <   sd        
bi 
 
 
 [
  
BM 
 
 
 [
 
 
r!   rJ   c            	       f    e Zd Zedej        fd            Zededededej        fd            Z	dS )LTXVEmptyLatentAudior   c                    t          j        dddt           j                            dddddt           j        j        d	          t           j                            d
ddddt           j        j        d	          t           j                            ddddt           j        j        d          t           j                            ddd          gt           j                            d          g          S )Nr^   zLTXV Empty Latent Audior<   frames_numbera   rO   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.)rb   rc   rd   rf   r   r?   r   z.The Audio VAE model to get configuration from.r@   rC   r   r   )	r   r   Intr   NumberDisplaynumberr   rC   r   r   s    r   r    z"LTXVEmptyLatentAudio.define_schema^   s   y*2)#!#!1!8/     !#!1!8:     !#!1!8N    "!,L   7 B Y%%8%<<=K&
 &
 &
 &	
r!   r`   rg   ri   c                    |
J d            |j         }|j        j        }|j                            ||          }t	          j        ||||ft          j                                                  }t          j
        |dd          S )zGGenerate empty audio latents matching the reference pipeline structure.NzAudio VAE model is required)rW   r=   )rL   type)latent_channelsrX   latent_frequency_binsnum_of_latents_from_framestorchzerosr)   model_managementintermediate_devicer   r/   )	r   r`   rg   ri   r?   
z_channels
audio_freqnum_audio_latentsaudio_latentss	            r   r2   zLTXVEmptyLatentAudio.execute   s     $$&C$$$.
0F
%7RRS`blmm%6
C)==??
 
 

 }( 
 
 	
r!   N)
r3   r4   r5   r6   r   r   r    rZ   r/   r2   r8   r!   r   r^   r^   ]   s        '
bi '
 '
 '
 ['
R 

 
 	
 

 
 
 [
 
 
r!   r^   c                   L    e Zd Zedej        fd            Zedd            ZdS )LTXAVTextEncoderLoaderr   c                 ~   t          j        ddddt           j                            dt	          j        d                    t           j                            dt	          j        d	                    t           j                            d
ddgd          gt           j                                        g          S )Nr{   zLTXV Audio Text Encoder Loaderzadvanced/loadersz[Recipes]

ltxav: gemma 3 12Btext_encodertext_encoders)r   r
   r   rW   rb   cpuT)r   advanced)r   r   r   descriptionr   r   )r   r   r   r   r   r   Clipr   r   s    r   r    z$LTXAVTextEncoderLoader.define_schema   s    y,9'9"(:?KK    (:=II    &.!    W^^%%&)
 
 
 	
r!   rb   c                 `   t           j        j        j        }t	          j        d|          }t	          j        d|          }i }|dk    rt          j        d          x|d<   |d<   t           j                            ||gt	          j	        d          ||          }t          j        |          S )Nr~   r   r   load_deviceoffload_device
embeddings)
ckpt_pathsembedding_directory	clip_typemodel_options)r)   r&   CLIPTypeLTXVr   r(   rr   rW   	load_clipget_folder_pathsr   r/   )	r   r}   r
   rW   r   
clip_path1
clip_path2r   clips	            r   r2   zLTXAVTextEncoderLoader.execute   s    H%*	!8,WW
!8	RR
U??MR\Z_M`M``M-(=9I+Jx!!j*-E[g[x  zF  \G  \G  S\  ly!  z  z}T"""r!   N)rb   )r3   r4   r5   r6   r   r   r    r2   r8   r!   r   r{   r{      s[        
bi 
 
 
 [
0 # # # [# # #r!   r{   c                   <    e Zd Zdeeej                          fdZdS )LTXVAudioExtensionr   c                 F   K   t           t          t          t          t          gS rE   )r   r:   rJ   r^   r{   )selfs    r   get_node_listz LTXVAudioExtension.get_node_list   s       "
 	
r!   N)r3   r4   r5   listrn   r   	ComfyNoder   r8   r!   r   r   r      s;        
T$r|*<%= 
 
 
 
 
 
r!   r   r   c                  "   K   t                      S rE   )r   r8   r!   r   comfy_entrypointr      s      r!   )r   comfy.utilsr)   comfy.model_managementrr   comfy_api.latestr   r   comfy_extras.nodes_audior   r   r   r:   rJ   r^   r{   r   r   r8   r!   r   <module>r      s                / / / / / / / / 3 3 3 3 3 3" " " " " " " "81 1 1 1 1 1 1 1.
 
 
 
 
 
 
 
BF
 F
 F
 F
 F
2< F
 F
 F
R&# &# &# &# &#R\ &# &# &#R
 
 
 
 
 
 
 
             r!   