
    +j                         d dl mZ d dlZd dlmZmZ d dlmZ d dlm	Z	m
Z
 d dlmZmZmZmZmZmZ  G d de          Z G d	 d
e          Z G d de	j                  Z G d de
          ZdefdZdS )    )OptionalN)	BaseModelField)override)IOComfyExtension)ApiEndpointdownload_url_to_video_outputget_number_of_imagespoll_opsync_optensor_to_bytesioc                       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<   dS )Sora2GenerationRequest.promptmodelsecondssizeN)
__name__
__module____qualname__r   r   str__annotations__r   r   r        :/home/wildlama/comfy/ComfyUI/comfy_api_nodes/nodes_sora.pyr   r      sr         %**FCsE35::GSc

D#r   r   c                       e Zd ZU  ed          Zeed<    ed          Zee	         ed<    ed          Z
ee         ed<   dS )Sora2GenerationResponse.idNerrorstatus)r   r   r   r   r   r   r   r    r   dictr!   r   r   r   r   r      sb         eCjjB!E$KKE8D>'''!E$KKFHSM'''''r   r   c                   t    e Zd Zed             Ze	 	 	 	 ddededed	ed
edeej	                 fd            Z
dS )OpenAIVideoSora2c                    t          j        ddddt           j                            dddgd          t           j                            d	d
dd          t           j                            dg dd          t           j                            dg dd          t           j                            dd
          t           j                            dddddt           j        j        d
d
d	  	        gt           j	        
                                gt           j        j        t           j        j        t           j        j        gd
t          j        t          j        g d          d           	  	        S )!Nr$   z OpenAI Sora - Video (DEPRECATED)zpartner/video/SorazOpenAI video and audio generation.

DEPRECATION NOTICE: OpenAI will stop serving the Sora v2 API in September 2026. This node will be removed from ComfyUI at that time.r   sora-2z
sora-2-pro)optionsdefaultr   T z8Guiding text; may be empty if an input image is present.)	multiliner(   tooltipr   )720x12801280x720	1024x1792	1792x1024r-   duration)         r2   image)optionalseedr   i   z`Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.)r(   minmaxstepdisplay_modecontrol_after_generater5   r+   )r   r   r0   )widgetsaY  
                (
                  $m := widgets.model;
                  $size := widgets.size;
                  $dur := widgets.duration;
                  $isPro := $contains($m, "sora-2-pro");
                  $isSora2 := $contains($m, "sora-2");
                  $isProSize := ($size = "1024x1792" or $size = "1792x1024");
                  $perSec :=
                    $isPro ? ($isProSize ? 0.5 : 0.3) :
                    $isSora2 ? 0.1 :
                    ($isProSize ? 0.5 : 0.1);
                  {"type":"usd","usd": $round($perSec * $dur, 2)}
                )
                )
depends_onexpr)	node_iddisplay_namecategorydescriptioninputsoutputshiddenis_api_nodeprice_badge)r   SchemaComboInputStringImageIntNumberDisplaynumberVideoOutputHiddenauth_token_comfy_orgapi_key_comfy_org	unique_id
PriceBadgePriceBadgeDependsclss    r   define_schemazOpenAIVideoSora2.define_schema    s   y&;)G
 %|4$   
 	"V	        '  	 	 &JJ   
 !    "!#!1!8+/!N   ?+Z !! 	.	+	#
 /8U8U8UVVV  }P
 P
 P
 P	
r   r-   r2   r   Nr   r   r   r0   r6   r4   c                   K   |dk    r|dvrt          d          d }|6t          |          dk    rt          d          ddt          |          dfi}t          | t	          d	d
          t          ||t          |          |          |t          d           d {V }|j        rt          |j        d                   |dk    rdnd}	t          | t	          d|j                   t          d dt          d|dz  z  |	z                       d {V  t          j        t          d|j         d|            d {V           S )Nr&   )r,   r-   zHInvalid size for sora-2 model, only 720x1280 and 1280x720 are supported.r7   z,Currently only one input image is supported.input_referencez	image.pngz	image/pngz/proxy/openai/v1/videosPOST)pathmethod)r   r   r   r   zmultipart/form-data)endpointdatafilesresponse_modelcontent_typemessage   z/proxy/openai/v1/videos/)r_   c                     | j         S N)r!   )xs    r   <lambda>z*OpenAIVideoSora2.execute.<locals>.<lambda>   s    qx r   g       @-   r1   )poll_endpointrd   status_extractorpoll_intervalestimated_durationz/contentrY   )
ValueErrorr   r   r   r	   r   r   r   r    	Exceptionr   r   intr   
NodeOutputr
   )
rZ   r   r   r   r0   r6   r4   files_inputinitial_responsemodel_time_multipliers
             r   executezOpenAIVideoSora2.executet   s      H-E!E!Eghhh#E**a// !OPPP,{<Me<T<TVa.bcK!( &?OOO'H	   2."
 "
 "
 
 
 
 
 
 
 ! 	?,29=>>>%*h%6%6A%+[FVFY+[+[\\\2//"2A#69N#NOO
 
 
 	
 	
 	
 	
 	
 	
 	
 }./gJZJ]/g/g/gmpqqqqqqqqq
 
 	
r   )r-   r2   r   N)r   r   r   classmethodr[   r   rs   r   torchTensorrx   r   r   r   r$   r$      s        Q
 Q
 [Q
f 
 (,+
 +
+
 +
 	+

 +
 +
 %+
 +
 +
 [+
 +
 +
r   r$   c                   L    e Zd Zedeeej                          fd            ZdS )OpenAISoraExtensionreturnc                    K   t           gS ri   )r$   )selfs    r   get_node_listz!OpenAISoraExtension.get_node_list   s       
 	
r   N)	r   r   r   r   listtyper   	ComfyNoder   r   r   r   r}   r}      sE        
T$r|*<%= 
 
 
 X
 
 
r   r}   r~   c                  "   K   t                      S ri   )r}   r   r   r   comfy_entrypointr      s         r   )typingr   rz   pydanticr   r   typing_extensionsr   comfy_api.latestr   r   comfy_api_nodes.utilr	   r
   r   r   r   r   r   r   r   r$   r}   r   r   r   r   <module>r      s          % % % % % % % % & & & & & & / / / / / / / /                   Y   ( ( ( ( (i ( ( (A
 A
 A
 A
 A
r| A
 A
 A
H
 
 
 
 
. 
 
 
! 3 ! ! ! ! ! !r   