
    +j                         S SK Jr  S SKrS SKJrJr  S SKJr  S SKJ	r	J
r
  S SKJrJrJrJrJrJr   " S S\5      r " S	 S
\5      r " S S\	R(                  5      r " S S\
5      rS\4S jrg)    )OptionalN)	BaseModelField)override)IOComfyExtension)ApiEndpointdownload_url_to_video_outputget_number_of_imagespoll_opsync_optensor_to_bytesioc                   ~    \ rS rSr% \" S5      r\\S'   \" S5      r\\S'   \" S5      r	\\S'   \" S5      r
\\S'   Srg)	Sora2GenerationRequest   .promptmodelsecondssize N)__name__
__module____qualname____firstlineno__r   r   str__annotations__r   r   r   __static_attributes__r       :/home/wildlama/comfy/ComfyUI/comfy_api_nodes/nodes_sora.pyr   r      s:    *FCsE3:GSc
D#r   r   c                   p    \ rS rSr% \" S5      r\\S'   \" S5      r\	\
   \S'   \" S5      r\	\   \S'   Srg)Sora2GenerationResponse   .idNerrorstatusr   )r   r   r   r   r   r#   r   r   r$   r   dictr%   r   r   r   r   r!   r!      s4    CjB!$KE8D>'!$KFHSM'r   r!   c                   v    \ rS rSr\S 5       r\    SS\S\S\S\S\S	\\	R                     4S
 jj5       rSrg)OpenAIVideoSora2   c                    [         R                  " SSSS[         R                  R                  SSS/SS9[         R                  R                  S	S
SSS9[         R                  R                  S/ SQSS9[         R                  R                  S/ SQSS9[         R
                  R                  SS
S9[         R                  R                  SSSSS[         R                  R                  S
S
SS9	/[         R                  R                  5       /[         R                  R                  [         R                  R                  [         R                  R                  /S
[         R                  " [         R                   " / SQS9SS9S 9	$ )!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	1792x1024r2   duration)         r7   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_generater:   r0   )r   r   r5   )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_schemaOpenAIVideoSora2.define_schema    s}   yy&;)G
 %|4$  
 		"V	     '  	 &  
 !   "!#!1!1!8!8+/!N  ?+Z ! 		..		++		##
 //8UV}P
 P	
r   Nr   r   r   r5   r;   r9   c                 \  #    US:X  a  US;  a  [        S5      eS nUb*  [        U5      S:w  a  [        S5      eSS[        U5      S40n[        U [	        S	S
S9[        UU[        U5      US9U[        SS9I S h  vN nUR                  (       a  [        UR                  S   5      eUS:X  a  SOSn	[        U [	        SUR                   3S9[        S S[        SUS-  -  U	-  5      S9I S h  vN   [        R                  " [        SUR                   S3U S9I S h  vN 5      $  N N: N7f)Nr+   )r1   r2   zHInvalid size for sora-2 model, only 720x1280 and 1280x720 are supported.r<   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/)re   c                     U R                   $ N)r%   )xs    r   <lambda>*OpenAIVideoSora2.execute.<locals>.<lambda>   s    qxxr   g       @-   r6   )poll_endpointrj   status_extractorpoll_intervalestimated_durationz/contentr^   )
ValueErrorr   r   r   r	   r   r   r!   r$   	Exceptionr   r#   intr   
NodeOutputr
   )
r_   r   r   r   r5   r;   r9   files_inputinitial_responsemodel_time_multipliers
             r   executeOpenAIVideoSora2.executet   sb     H-E!Eghh#E*a/ !OPP,{<Me<TVa.bcK!( &?O'H	 2."
 
 !!,229=>>%*h%6A%-EFVFYFYEZ+[\2/"2A#69N#NO
 	
 	
 }}.1IJZJ]J]I^^f/gmpqq
 	
3
"	
 rs7   A7D,9D&:A3D,-D(./D,D*	D,(D,*D,r   )r2   r7   r   N)r   r   r   r   classmethodr`   r   rz   r   torchTensorr   r   r   r   r   r(   r(      s|    Q
 Q
f 
 (,+
+
 +
 	+

 +
 +
 %+
 +
r   r(   c                   L    \ rS rSr\S\\\R                        4S j5       r	Sr
g)OpenAISoraExtension   returnc                    #    [         /$ 7fro   )r(   )selfs    r   get_node_list!OpenAISoraExtension.get_node_list   s      
 	
s   
r   N)r   r   r   r   r   listtyper   	ComfyNoder   r   r   r   r   r   r      s)    
T$r||*<%= 
 
r   r   r   c                     #    [        5       $ 7fro   )r   r   r   r   comfy_entrypointr      s       s   )typingr   r   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      sb      % & / Y (i (A
r|| A
H
. 
! 3 !r   