
    ^(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y)    )OptionalN)	BaseModelField)override)IOComfyExtension)ApiEndpointdownload_url_to_video_outputget_number_of_imagespoll_opsync_optensor_to_bytesioc                   v    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<   y)Sora2GenerationRequest.promptmodelsecondssizeN)
__name__
__module____qualname__r   r   str__annotations__r   r   r        D/Users/danicosta/Desktop/Flux2/ComfyUI/comfy_api_nodes/nodes_sora.pyr   r      s:    *FCsE3:GSc
D#r   r   c                   h    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<   y)Sora2GenerationResponse.idNerrorstatus)r   r   r   r   r   r   r   r    r   dictr!   r   r   r   r   r      s4    CjB!$KE8D>'!$KFHSM'r   r   c                   j    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
y)OpenAIVideoSora2c                 8   t        j                  ddddt         j                  j                  dddgd      t         j                  j                  d	d
dd      t         j                  j                  dg dd      t         j                  j                  dg dd      t         j
                  j                  dd
      t         j                  j                  dddddt         j                  j                  d
d
d	      gt         j                  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}   yy&;)G
 %|4$  
 		"V	     '  	 &  
 !   "!#!1!1!8!8+/!N  ?+Z ! 		..		++		##
 //8UV}P
 P	
r   Nr   r   r   r0   r6   r4   c                 h  K   |dk(  r|dvrt        d      d }|)t        |      dk7  rt        d      ddt        |      dfi}t        | t	        d	d
      t        ||t        |      |      |t        d       d {   }|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 {    t        j                  t        d|j                   d|        d {         S 7 7 <7 w)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    qxxr   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   se     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   A;D2=D,>A3D21D.21D2#D0$	D2.D20D2)r-   r2   r   N)r   r   r   classmethodr[   r   rs   r   torchTensorrx   r   r   r   r$   r$      s|    Q
 Q
f 
 (,+
+
 +
 	+

 +
 +
 %+
 +
r   r$   c                   B    e Zd Zedeeej                        fd       Zy)OpenAISoraExtensionreturnc                    K   t         gS wri   )r$   )selfs    r   get_node_listz!OpenAISoraExtension.get_node_list   s      
 	
s   
N)	r   r   r   r   listtyper   	ComfyNoder   r   r   r   r}   r}      s)    
T$r||*<%= 
 
r   r}   r~   c                     K   t               S wri   )r}   r   r   r   comfy_entrypointr      s       s   )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      sb      % & / Y (i (A
r|| A
H
. 
! 3 !r   