Ë
    r›Xjò  ã                  óX   — d dl mZ d dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
  G d„ d«      Zy)é    )ÚannotationsN)ÚPath)ÚOpenAI)ÚretryÚstop_after_attemptÚwait_exponentialc                  óÒ   — e Zd ZdZ	 dddddœ	 	 	 	 	 	 	 	 	 dd„Zddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd	„Zddd„Z e ed«       e	dd¬«      d¬«      ddd
dœ	 	 	 	 	 	 	 	 	 	 	 dd„«       Z
y)ÚSoraVideoGeneratoru
  OpenAI Sora (Videos API) â€” original short-form marketing clips.

    Generates fully new motion footage from a storyboard prompt.
    Does NOT animate static images. Audio is intentionally omitted
    (see src/generators/audio.py for a future modular add-on).
    Ú12g      @g      Œ@)Údefault_secondsÚpoll_intervalÚtimeoutc               óp   — t        |¬«      | _        || _        t        |«      | _        || _        || _        y )N)Úapi_key)r   ÚclientÚmodelÚstrr   r   r   )Úselfr   r   r   r   r   s         ú=/var/www/html/content_generation/src/generators/sora_video.pyÚ__init__zSoraVideoGenerator.__init__   s3   € ô  WÔ-ˆŒØˆŒ
Ü" ?Ó3ˆÔØ*ˆÔØˆ�ó    N)Úbeatsc               ón  — g }	|rz|D ]u  }
|	j                  d|
j                  dd«      › d|
j                  dd«      › d|
j                  d«      xs |
j                  d	«      xs d› d
|
j                  dd«      › �«       Œw |	rdj                  |	«      nd|› d|› d|› d|› d�	}d|xs |› d|› d|› d|› d�	dd S )z8Compress cinematic reel storyboard into one Sora prompt.z- ÚbeatÚscenez: on-screen feel 'Ú	on_screenÚ z
'; visual ÚvisualÚ	voiceoverz; camera/motion Úmotionzcinematic moveÚ
z- hook: z	
- news: z
- why it matters: z
- key fact: z1
- ending CTA energy: follow for daily tech dropsuÖ  Premium vertical short-form marketing reel for an AI/tech media brand (Instagram Reels / TikTok / YouTube Shorts quality). Cinematic, original motion footage â€” NOT a slideshow, NOT animating a still poster, NOT PowerPoint. Multiple dynamic scenes with camera moves, parallax, light streaks, kinetic energy, product/UI showcases, futuristic AI environments. NO readable text overlays, NO real company logos, NO watermarks, NO voiceover requirement. Creative direction: z. Visual genre: z	. Style: z. Narrative arc:
z³
Pacing: punchy hook first 2 seconds, then explanatory visuals, then impactful ending. Photoreal + high-end motion graphics hybrid, rich lighting, depth, professional color grade.Né   )ÚappendÚgetÚjoin)r   ÚhookÚtopicÚwhy_it_mattersÚkey_factÚcreative_directionÚvideo_styleÚnews_categoryr   Ú
beat_linesÚbÚbeats_blocks               r   Úbuild_promptzSoraVideoGenerator.build_prompt!   s!  € ð ˆ
ÙÛ�Ø×!Ñ!Ø˜Ÿ™˜v wÓ/Ð0Ð0BÀ1Ç5Á5ÈÐVXÓCYÐBZð [ØŸe™e H›oÒI°·±°{Ó1CÒIÀrÐJð K%Ø%&§U¡U¨8Ð5EÓ%FÐ$GðIõð ñ 0:�d—i‘i 
Ô+Ø�t�fð Ø�gð !Ø!/Ð 0ð 1Ø#˜*ð %?ð@ð 	ð#ð $6Ò#D¸Ð"Eð FØ*˜O¨9°[°Mð BØ*˜mð ,kð
kð ˆ4ðð 	r   Úportraitc                ó   — |dk(  ryy)NÚ	landscapeÚ1280x720Ú720x1280© )r   Úaspects     r   Úsize_for_aspectz"SoraVideoGenerator.size_for_aspectL   s   € à�[Ò ØØr   é   é   é   )ÚminÚmaxT)ÚstopÚwaitÚreraise)ÚsecondsÚsizer7   c               óÖ  — |j                   j                  dd¬«       |xs | j                  }|dvrd}|xs | j                  |«      }| j                  j
                  j                  | j                  |d d ||¬«      }|j                  }	t        |dd«      }
t        j                  «       }|
d	vr–t        j                  «       |z
  | j                  kD  rt        d
|	› d| j                  › d�«      ‚t        j                  | j                  «       | j                  j
                  j                  |	«      }t        |dd«      }
|
d	vrŒ–|
dk7  rt        |dd «      }t!        d|xs |
› �«      ‚| j                  j
                  j#                  |	«      }t%        |d«      r|j'                  «       n
t)        |«      }|j+                  d«      }|j-                  |«       ||	| j                  |||
dœS )NT)ÚparentsÚexist_ok>   Ú4Ú8r   r   r"   )r   ÚpromptrA   rB   ÚstatusÚqueued>   ÚfailedÚ	completedz	Sora job z timed out after ÚsÚunknownrL   ÚerrorzSora generation failed: Úreadz.mp4)ÚpathÚvideo_idr   rA   rB   rI   )ÚparentÚmkdirr   r8   r   ÚvideosÚcreater   ÚidÚgetattrÚtimer   ÚTimeoutErrorÚsleepr   ÚretrieveÚRuntimeErrorÚdownload_contentÚhasattrrP   ÚbytesÚwith_suffixÚwrite_bytes)r   rH   Úout_pathrA   rB   r7   ÚsecsÚszÚvideorR   rI   ÚstartedÚerrÚcontentÚdatas                  r   ÚgeneratezSoraVideoGenerator.generateR   sÑ  € ð 	�‰×Ñ d°TÐÔ:ØÒ.˜$×.Ñ.ˆØÐ'Ñ'ØˆDØÒ1�T×)Ñ)¨&Ó1ˆà—‘×"Ñ"×)Ñ)Ø—*‘*Ø˜%˜4�=ØØð	 *ó 
ˆð —8‘8ˆÜ˜ ¨(Ó3ˆÜ—)‘)“+ˆàÐ3Ñ3Ü�y‰y‹{˜WÑ$ t§|¡|Ò3Ü" Y¨x¨jÐ8IÈ$Ï,É,ÈÐWXÐ#YÓZÐZÜ�J‰J�t×)Ñ)Ô*Ø—K‘K×&Ñ&×/Ñ/°Ó9ˆEÜ˜U H¨iÓ8ˆFð Ð3Ò3ð �[Ò Ü˜% ¨$Ó/ˆCÜÐ!9¸#º-À¸ÐIÓJÐJð —+‘+×$Ñ$×5Ñ5°hÓ?ˆÜ!(¨°&Ô!9ˆw�|‰|Œ~¼uÀW»~ˆØ×'Ñ'¨Ó/ˆØ×Ñ˜TÔ"ð Ø Ø—Z‘ZØØØñ
ð 	
r   )zsora-2)
r   r   r   r   r   r   r   Úfloatr   rl   )r&   r   r'   r   r(   r   r)   r   r*   r   r+   r   r,   r   r   zlist[dict] | NoneÚreturnr   )r1   )r7   r   rm   r   )rH   r   rc   r   rA   ú
str | NonerB   rn   r7   r   rm   Údict)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r0   r8   r   r   r   rk   r6   r   r   r
   r
   
   s-  „ ñð ðð
  $Ø"Øñàðð ðð
 ðð ðð óð2 $(ñ)ð ð)ð ð	)ð
 ð)ð ð)ð  ð)ð ð)ð ð)ð !ð)ð 
ó)ôVñ Ñ" 1Ó%Ñ,<ÀÈÔ,KÐUYÔZð #ØØ ñ1
àð1
ð ð1
ð
 ð1
ð ð1
ð ð1
ð 
ò1
ó [ñ1
r   r
   )Ú
__future__r   rY   Úpathlibr   Úopenair   Útenacityr   r   r   r
   r6   r   r   Ú<module>rx      s#   ðÝ "ã Ý å ß @Ñ @÷z
ò z
r   