o
    iA                     @   s   d dl mZ d dlmZmZ d dlmZ d dlmZm	Z	m
Z
mZ d dlmZmZmZmZmZ dddZG d	d
 d
eZejejg d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 )    )BytesIO)	BaseModelField)override)IOComfyExtensionInput	InputImpl)ApiEndpointget_number_of_imagessync_op_rawupload_images_to_comfyapivalidate_stringz	ltx-2-proz
ltx-2-fast)zLTX-2 (Pro)LTX-2 (Fast)c                   @   s   e Zd ZU edZeed< edZeed< edZe	ed< edZ
eed< edZe	dB ed< ed	ZedB ed
< edZedB ed< dS )ExecuteTaskRequest.promptmodelduration
resolution   NfpsTgenerate_audio	image_uri)__name__
__module____qualname__r   r   str__annotations__r   r   intr   r   r   boolr    r    r    8/mnt/c/Users/fbmor/ComfyUI/comfy_api_nodes/nodes_ltxv.pyr      s   
 r   )r   r   r   )widgetsaw  
    (
      $prices := {
        "ltx-2 (pro)": {"1920x1080":0.06,"2560x1440":0.12,"3840x2160":0.24},
        "ltx-2 (fast)": {"1920x1080":0.04,"2560x1440":0.08,"3840x2160":0.16}
      };
      $modelPrices := $lookup($prices, $lowercase(widgets.model));
      $pps := $lookup($modelPrices, widgets.resolution);
      {"type":"usd","usd": $pps * widgets.duration}
    )
    )
depends_onexprc                   @   sJ   e Zd Zedd Ze		ddedededed	ed
edej	fddZ
dS )TextToVideoNodec                 C   s   t jddddt jjdtt dt jjddd	d
t jjdg dddt jjdg ddt jjdddgddt jjddddddgt j	
 gt jjt jjt jjgdtd	S )NLtxvApiTextToVideozLTXV Text To Videoapi node/video/LTXVzFProfessional-quality videos with customizable duration and resolution.r   optionsr   T 	multilinedefaultr         
                  r0   r)   r-   r   	1920x1080	2560x1440	3840x2160r   r   2   r   FRWhen true, the generated video will include AI-generated audio matching the scene.r-   optionaltooltipadvanced	node_iddisplay_namecategorydescriptioninputsoutputshiddenis_api_nodeprice_badge)r   SchemaCombor   list
MODELS_MAPkeysStringBooleanVideoOutputHiddenauth_token_comfy_orgapi_key_comfy_org	unique_idPRICE_BADGEclsr    r    r!   define_schema0   sD   zTextToVideoNode.define_schemar   Fr   r   r   r   r   r   returnc                    s~   t |ddd |dkr|dks|dks|dkrtdt| td	d
t|t| ||||ddddI d H }tt	t
|S )N   '  
min_length
max_lengthr1   r   r9   r   \Durations over 10s are only available for the Fast model at 1920x1080 resolution and 25 FPS.z/proxy/ltx/v1/text-to-videoPOST)r   r   r   r   r   r   Tdata	as_binarymax_retries)r   
ValueErrorr   r
   r   rO   r   
NodeOutputr	   VideoFromFiler   )r[   r   r   r   r   r   r   responser    r    r!   execute\   s*   
 zTextToVideoNode.executeNr   F)r   r   r   classmethodr\   r   r   r   r   rj   rm   r    r    r    r!   r%   /   s*    
+r%   c                   @   sP   e Zd Zedd Ze		ddejdededed	ed
ede	de
jfddZdS )ImageToVideoNodec                 C   s   t jddddt jjdddt jjdtt d	t jjd
dddt jjdg dddt jjdg dd	t jjdddgddt j	jddddddgt j
 gt jjt jjt jjgdtd	S )NLtxvApiImageToVideozLTXV Image To Videor'   z[Professional-quality videos with customizable duration and resolution based on start image.imagez%First frame to be used for the video.)r@   r   r(   r   Tr*   r+   r   r.   r0   r7   r   r8   r   r   r<   r   Fr=   r>   rB   )r   rL   Imager   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r    r    r!   r\   }   sF   zImageToVideoNode.define_schemar   Frr   r   r   r   r   r   r   r]   c           	         s   t |ddd |dkr|dks|dks|dkrtdt|dkr&td	t| td
dtt| |dddI d H d |t| ||||ddddI d H }t	t
t|S )Nr^   r_   r`   r1   r   r9   r   rc   z,Currently only one input image is supported.z/proxy/ltx/v1/image-to-videord   z	image/png)
max_images	mime_typer   )r   r   r   r   r   r   r   Tre   )r   ri   r   r   r
   r   r   rO   r   rj   r	   rk   r   )	r[   rr   r   r   r   r   r   r   rl   r    r    r!   rm      s0    	zImageToVideoNode.executeNrn   )r   r   r   ro   r\   r   rs   r   r   r   r   rj   rm   r    r    r    r!   rp   |   s.    
,	rp   c                   @   s(   e Zd Zedeeej  fddZdS )LtxvApiExtensionr]   c                    s
   t tgS N)r%   rp   )selfr    r    r!   get_node_list   s   zLtxvApiExtension.get_node_listN)	r   r   r   r   rN   typer   	ComfyNodery   r    r    r    r!   rv      s    rv   r]   c                      s   t  S rw   )rv   r    r    r    r!   comfy_entrypoint   s   r|   N)ior   pydanticr   r   typing_extensionsr   comfy_api.latestr   r   r   r	   comfy_api_nodes.utilr
   r   r   r   r   rO   r   
PriceBadgePriceBadgeDependsrY   r{   r%   rp   rv   r|   r    r    r    r!   <module>   s"    	
MR	