Ë
    o›Xjd/  ã                  ó”   — d dl mZ d dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
mZ d dlmZ d dlmZ d d	lmZ d d
lmZmZ  G d„ d«      Zy)é    )ÚannotationsN)ÚPath)ÚImageGenerator)ÚAudioModule)ÚFetchedImageÚfetch_news_image)ÚSoraVideoGenerator)ÚVideoDirector)ÚVisualRenderer)Ú	PLATFORMSÚContentIdeac                  óv   — e Zd Zddddddddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zddd	„Zdd
„Zdd„Zdd„Zdd„Z	y)ÚAssetProducerNTÚsoraé   F)Úimage_generatorÚsora_generatorÚenable_videoÚvideo_engineÚvideo_max_secondsÚenable_ai_imagesÚenable_audioc               óê   — || _         || _        || _        || _        |xs dj	                  «       j                  «       | _        |xr |d u| _        t        ||¬«      | _	        t        |¬«      | _        y )Nr   )Úmax_secondsr   )Úenabled)Úrendererr   r   r   ÚstripÚlowerr   r   r
   Úffmpeg_videor   Úaudio)	Úselfr   r   r   r   r   r   r   r   s	            ú9/var/www/html/content_generation/src/generators/assets.pyÚ__init__zAssetProducer.__init__   sp   € ð !ˆŒØ.ˆÔØ"ˆŒ	Ø(ˆÔØ)Ò3¨V×:Ñ:Ó<×BÑBÓDˆÔØ 0Ò P°_ÈDÐ5PˆÔÜ)Ð6GÐVbÔcˆÔÜ ¨Ô6ˆ�
ó    c           
     ó†  — |j                  dd¬«       i d|j                  “d|j                  “d|j                  “d|j                  “d|j
                  “d|j                  “d	|j                  “d
|j                  “d|j                  “d|j                  “d|j                  “d|j                  “d|j                  “d|j                  “d|j                  “d|j                   “d|j"                  “|j$                  i d d d d | j&                  j)                  «       j*                  g dœ¥}|j                  |j                  |j                  |j                  › d|j                  › d|j                  › �dœ}|j,                  dk(  rdnd}|j                  dk(  r(|d   j/                  | j1                  |||||«      «       nÉ|j                  dk(  rQ| j2                  rE|d   j/                  | j5                  ||||«      «       |j6                  |d<   |j8                  |d<   ni| j;                  ||||«      }|j<                  |d<   | j>                  rtA        | j>                  d d «      nd |d!<   |d   jC                  |jD                  «       tF        D ]p  }|jI                  |«      }|› d"�}	||	z  jK                  |jM                  «       d#¬$«       |jN                  |jP                  |	d%œ|d&   |<   |d   jC                  |	«       Œr |d'z  jK                  tS        jT                  |d(d)¬*«      d#¬$«       |d   jC                  d'«       |S )+NT)ÚparentsÚexist_okÚidÚformatÚtopicÚhookÚnews_urlÚ
news_titleÚnews_categoryÚcreative_directionÚlayoutÚpaletteÚpalette_nameÚ
typographyÚbackground_styleÚillustration_styleÚwhy_it_mattersÚkey_factÚvisual_brief)Úsource_refsÚ	platformsÚimage_sourceÚimage_modelr   Úvideo_modelr    ÚfilesÚ-)r0   r1   r3   Úcreative_keyÚportrait)é8  iF  )rB   rB   Úcarouselr>   ÚvideoÚvideo_scriptÚvideo_styler;   Úmodelr<   z.txtúutf-8©Úencoding)ÚpostÚhashtagsÚfiler:   z	copy.jsonFé   )Úensure_asciiÚindent)+Úmkdirr(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r    ÚplanÚ__dict__ÚaspectÚextendÚ_produce_carouselr   Ú_produce_videorE   rF   Ú_produce_singleÚsourcer   ÚgetattrÚappendÚpathr   ÚplatformÚ
write_textÚas_publish_textrK   rL   ÚjsonÚdumps)
r!   ÚideaÚout_dirÚmetaÚstyle_kwargsÚsizeÚheror]   rK   Úfnames
             r"   ÚproducezAssetProducer.produce%   sa  € Ø�‰˜d¨TˆÔ2ð
Ø�$—'‘'ð
à�d—k‘kð
ð �T—Z‘Zð
ð �D—I‘Ið	
ð
 ˜Ÿ™ð
ð ˜$Ÿ/™/ð
ð ˜T×/Ñ/ð
ð ! $×"9Ñ"9ð
ð �d—k‘kð
ð �t—|‘|ð
ð ˜D×-Ñ-ð
ð ˜$Ÿ/™/ð
ð  × 5Ñ 5ð
ð ! $×"9Ñ"9ð
ð ˜d×1Ñ1ð
ð  ˜Ÿ™ð!
ð" ˜D×-Ñ-ð#
ð$  ×+Ñ+ØØ ØØ ØØ—Z‘Z—_‘_Ó&×/Ñ/Øò3
ˆð: —k‘kØ—|‘|ØŸ/™/Ø#Ÿw™w˜i q¨×):Ñ):Ð(;¸1¸T¿[¹[¸MÐJñ	
ˆð  $Ÿ{™{¨jÒ8‰|¸lˆà�;‰;˜*Ò$Ø�‰M× Ñ  ×!7Ñ!7¸¸gÀ|ÐUYÐ[_Ó!`ÕaØ�[‰[˜GÒ#¨×(9Ò(9Ø�‰M× Ñ  ×!4Ñ!4°T¸7ÀLÐRVÓ!WÔXØ#'×#4Ñ#4ˆD�Ñ Ø"&×"2Ñ"2ˆD�Òà×'Ñ'¨¨g°|ÀTÓJˆDØ#'§;¡;ˆD�Ñ ØRV×RfÒRf¤'¨$×*>Ñ*>ÀÈÔ"NÐlpˆD�ÑØ�‰M× Ñ  §¡Ô+ç!ˆHØ—=‘= Ó*ˆDØ�j Ð%ˆEØ�u‰_×(Ñ(¨×)=Ñ)=Ó)?È'Ð(ÔRàŸ	™	Ø ŸM™MØñ+ˆD�Ñ˜hÑ'ð
 �‰M× Ñ  Õ'ð "ð 
�;Ñ	×*Ñ*¬4¯:©:°dÈÐWXÔ+YÐdkÐ*ÔlØˆW‰×Ñ˜[Ô)Øˆr$   c                ó¬  — |xs( |j                   xs |j                  xs |j                  j                  «       }| j                  r¸|r¶|dt        t        |«      «      dz  › d�z  }	 | j                  j                  ||j                  |j                  |j                  |j                  |j                  ¬«      }| j                  j                  |||j                  xs d¬«       || j                  j                  fS |d
z  }t'        |j(                  |«      }	|	r|dfS y# t         $ r)}|dz  j#                  t%        |«      d¬	«       Y d }~ŒOd }~ww xY w)NÚbg_ai_i€–˜ ú.png)Úbase_promptÚcategoryr5   r4   r1   r+   Úsquare)rT   zai_image_error.txtrH   rI   zbg_news.jpgÚnews_og)NÚ	generated)Úimage_promptr8   r+   r   r   ÚabsÚhashr   Úbuild_promptr.   r5   r4   r1   ÚgeneraterT   rG   Ú	Exceptionr^   Ústrr   r,   )
r!   rb   rc   ÚpromptÚprompt_textÚai_pathÚfullÚexcÚrawÚfetcheds
             r"   Ú_generate_bgzAssetProducer._generate_bgf   sH  € ØÒT ×!2Ñ!2ÒT°d×6GÑ6GÒTÈ4Ï9É9×[Ñ[Ó]ˆØ× Ò ¡[Ø &¬¬T°+Ó->Ó)?À*Ñ)LÐ(MÈTÐ RÑRˆGðXØ×+Ñ+×8Ñ8Ø +Ø!×/Ñ/Ø'+×'>Ñ'>Ø%)×%:Ñ%:Ø ŸL™LØŸ™ð 9ó �ð ×$Ñ$×-Ñ-¨d°GÀDÇKÁKÒD[ÐS[Ð-Ô\Ø × 4Ñ 4× :Ñ :Ð:Ð:ð ˜Ñ%ˆÜ" 4§=¡=°#Ó6ˆÙØ˜	�>Ð!Ø øô ò XØÐ/Ñ/×;Ñ;¼CÀ»HÈwÐ;×WÑWûðXús   Á(BD! Ä!	EÄ*EÅEc           	     óL  — | j                  ||«      \  }}|dz  }|j                  xs( |j                  xs |j                  xs |j                  } | j
                  j                  |f|j                  |d d |j                  «       ||dœ|¤Ž t        |j                  |¬«      S )Nzhero.pngé    )r+   ÚbodyÚfooterÚbg_imagerf   )r\   rY   )r€   r6   r7   r8   r*   r   Úcompose_heror+   Únews_source_labelr   Úname)	r!   rb   rc   re   rf   ÚbgrY   Úoutrƒ   s	            r"   rX   zAssetProducer._produce_single~   s¥   € Ø×&Ñ& t¨WÓ5‰
ˆˆFØ˜
Ñ"ˆØ×"Ñ"ÒV d§m¡mÒV°t×7HÑ7HÒVÈDÏJÉJˆØ"ˆ�‰×"Ñ"Øð	
à—‘Ø�d�s�Ø×)Ñ)Ó+ØØñ	
ð ò	
ô  §¡°&Ô9Ð9r$   c                óB  — |j                   xsM |j                  |j                  ddœd|j                  ddœd|j                  ddœd|j                  ddœd	d
ddœg}| j                  ||«      \  }}||d<   |dv r|n||d<   d }	| j                  rdt        |«      dk\  rV|t        |«      dz     }
|
j                  d«      xs |j                  › d|j                  › �}| j                  |||¬«      \  }	}ddl
m} g }|j                  |v r|j                  |j                  «      nd}t        |«      D ]ë  \  }}|d|dz   d›d�z  }|||z   t        |«      z     }|	r|t        |«      dz  k\  r|	n|}| j                  j!                  ||j                  dd«      |j                  dd«      d d |dz   › dt        |«      › d|j#                  «       d d  › �||j$                  |j&                  ||j(                  › d!|› d"|› �|¬#«
       |j+                  |j,                  «       Œí |S )$Nr+   )Útitlerƒ   ÚrolezWhat happenedÚwhatzWhy it mattersÚwhyzThe numbersÚstatsz	Your movezSave this for later.Úctar;   >   rp   rq   r<   é   rN   rr   u    â€” visual metaphor, )ry   r   ©ÚLAYOUTSÚslide_é   Ú02drl   rŒ   Ú rƒ   é´   Ú/u    Â· é$   z-cr?   )	r+   rƒ   r„   r0   r1   r3   r…   r@   rf   )Úslidesr+   r6   r*   r7   r€   r   ÚlenÚgetr5   Úsrc.services.creativer”   r0   ÚindexÚ	enumerater   r†   r‡   r1   r3   r(   r[   rˆ   )r!   rb   rc   re   rd   rf   rœ   Ú	shared_bgrY   Úalt_bgÚmidÚ
alt_promptÚ_r”   r>   ÚstartÚiÚslider\   r0   r‰   s                        r"   rV   zAssetProducer._produce_carousel�   s?  € Ø—‘ò 
Ø—i‘i¨×)<Ñ)<ÀfÑMØ%¨t¯z©zÀ6ÑJØ&°×0CÑ0CÈUÑSØ#¨T¯]©]ÀGÑLØ!Ð+AÈ5ÑQð!
ˆð !×-Ñ-¨d°GÓ<Ñˆ	�6Ø%ˆˆ^ÑØ(.Ð2JÑ(J™fÐPVˆˆ]ÑØˆØ× Ò ¤S¨£[°AÒ%5Øœ˜V›¨Ñ)Ñ*ˆCØŸ™ Ó0Òr°t·z±z°lÐBXÐY]×YpÑYpÐXqÐ4rˆJØ×)Ñ)¨$°À
Ð)ÓK‰IˆF�Aå1àˆØ.2¯k©k¸WÑ.D�—‘˜dŸk™kÔ*È!ˆÜ! &Ö)‰HˆAˆuØ˜v a¨!¡e¨C [°Ð5Ñ5ˆDØ˜e a™i¬3¨w«<Ñ7Ñ8ˆFÙ" q¬C°«K¸1Ñ,<Ò'<‘À9ˆBØ�M‰M×&Ñ&ØØ—Y‘Y˜w¨Ó+Ø—Y‘Y˜v rÓ*¨4¨CÐ0Ø˜a™%˜ ¤# f£+ ¨d°4×3IÑ3IÓ3KÈCÈRÐ3PÐ2QÐRØØŸ™ØŸ?™?ØØ $§¡˜y¨¨1¨#¨Q¨v¨hÐ7Øð 'ô ð �L‰L˜Ÿ™Õ#ð! *ð" ˆr$   c           
     óX  — |j                   xs g }|dz  }| j                  dk(  �r| j                  ��	 | j                  j                  |j                  |j
                  |j                  |j                  |j                  |j                  |j                  |¬«      }|dz  j                  |d¬«       | j                  j                  ||d|j                  d	k7  rd
nd	¬«      }| j                  j                  |d   |«      }	d|d<   |j!                  d«      |d<   |j!                  d«      |d<   d|d<   |	j"                  dgS | j)                  ||||«      S # t$        $ rJ}
|dz  j                  t'        |
«      d¬«       t'        |
«      dd |d<   | j                  dk(  r‚ Y d}
~
Œbd}
~
ww xY w)zGPrefer Sora original footage; optional ffmpeg fallback (not preferred).ú	short.mp4r   N)r+   r*   r6   r7   r/   rF   r.   Úbeatszsora_prompt.txtrH   rI   Ú12Ú	landscaperA   )ÚsecondsrT   r\   r   rG   r=   Úvideo_idÚsora_video_idÚsora_nativer;   zsora_error.txtiô  Ú
sora_error)rE   r   r   ru   r+   r*   r6   r7   r/   rF   r.   r^   rv   rT   r    Úattachrž   rˆ   rw   rx   Ú_produce_video_ffmpeg_fallback)r!   rb   rc   re   rd   ÚscriptÚ
video_pathry   ÚresultÚfinalr}   s              r"   rW   zAssetProducer._produce_videoµ   s³  € à×"Ñ"Ò( bˆØ˜{Ñ*ˆ
à×Ñ Ó&¨4¯9©9Ñ+@ð ØŸ™×/Ñ/ØŸ™ØŸ*™*Ø#'×#6Ñ#6Ø!Ÿ]™]Ø'+×'>Ñ'>Ø $× 0Ñ 0Ø"&×"4Ñ"4Ø ð 0ó 	�ð Ð,Ñ,×8Ñ8¸È'Ð8ÔRàŸ™×+Ñ+ØØØ Ø)-¯©¸Ò)C™:Èð	 ,ó �ð Ÿ
™
×)Ñ)¨&°©.¸'ÓB�Ø'-��^Ñ$Ø&,§j¡j°Ó&9��]Ñ#Ø(.¯
©
°:Ó(>��_Ñ%Ø'4��^Ñ$ØŸ
™
Ð$5Ð6Ð6ð ×2Ñ2°4¸À,ÐPTÓUÐUøô ò ØÐ+Ñ+×7Ñ7¼¸C»È7Ð7ÔSÜ%(¨£X¨d¨s ^��\Ñ"à×$Ñ$¨Ò.àô /ûð	ús   ´DE Å	F)ÅA F$Æ$F)c                ó¾  — |j                   xsP d|j                  |j                  |j                  dddœd|j                  xs d|j
                  ddd	dœd
ddddddœg}|dz  }|j                  d¬«       | j                  ||«      \  }}||d<   ddlm	}	 g g g g f\  }
}}}|j                  |	v r|	j                  |j                  «      nd}t        |«      D �]9  \  }}|d|dz   d›d�z  }| j                  j                  ||j                  d«      xs |j                  |j                  d«      xs dd d |j!                  «       |	||dz  z   t#        |	«      z     |j$                  |j&                  ||j(                  › d|› �¬«	       |
j+                  |«       |j+                  |j                  d«      xs dd d «       |j+                  |j                  d«      xs d«       |j+                  t-        |j                  d «      xs d!«      «       �Œ< |d"z  }| j.                  j1                  |
|||j2                  xs d#||¬$«       d%|d&<   d |d'<   |j4                  gS )(Nr+   Úpunch_ing      @)ÚbeatÚ	on_screenÚ	voiceoverÚvisualÚmotionr¯   ÚdetailsÚDetailsr˜   Úzoom_iné   r‘   zFollow for daily AI dropsÚzoom_outé   ÚframesT)r'   r;   r   r“   Úframe_r–   r—   rl   r½   r¾   éx   rN   z-v)r+   rƒ   r„   r0   r1   r3   r…   r@   éF   rÀ   r¯   r’   r«   Ú	cinematic)Úmotion_styleÚmotionsÚ	durationsÚffmpeg_fallbackr   r=   )rE   r+   r6   rr   r7   r*   rQ   r€   rŸ   r”   r0   r    r¡   r   r†   rž   r‡   r�   r1   r3   r(   r[   Úfloatr   ÚbuildrF   rˆ   )r!   rb   rc   re   rd   r¶   Ú
frames_dirr¢   rY   r”   Úframe_pathsÚcaptionsrÍ   rÎ   r§   r¨   r¼   Úframer·   s                      r"   rµ   z,AssetProducer._produce_video_ffmpeg_fallbackß   sŽ  € Ø×"Ñ"ò 
Ø¨$¯)©)À$×BUÑBUÐae×arÑarð  Ið  VYñ  ZØ¨T¯]©]Ò-G¸iÐVZ×V`ÑV`Ðlnð  {Dð  QRñ  SØÐ)DÐSUÐacÐoyð  GHñ  Ið'
ˆð
 ˜xÑ'ˆ
Ø×Ñ $ÐÔ'Ø ×-Ñ-¨d°GÓ<Ñˆ	�6Ø%ˆˆ^ÑÝ1à46¸¸BÀ°NÑ1ˆ�X˜w¨	Ø.2¯k©k¸WÑ.D�—‘˜dŸk™kÔ*È!ˆÜ  ×(‰GˆAˆtØ 6¨!¨a©%°¨°DÐ!9Ñ9ˆEØ�M‰M×&Ñ&ØØ—X‘X˜kÓ*Ò7¨d¯i©iØ—h‘h˜{Ó+Ò1¨r°4°CÐ8Ø×-Ñ-Ó/Ø ¨¨A©¡´°W³Ñ=Ñ>ØŸ™ØŸ?™?Ø"Ø $§¡˜y¨¨1¨#Ð.ð 'ô 
ð ×Ñ˜uÔ%Ø�O‰O˜TŸX™X kÓ2Ò8°b¸#¸2Ð>Ô?Ø�N‰N˜4Ÿ8™8 HÓ-Ò:°Ô;Ø×ÑœU 4§8¡8¨IÓ#6Ò#;¸!Ó<Ö=ð! )ð$ ˜{Ñ*ˆ
à×Ñ×ÑØ˜ :Ø×)Ñ)Ò8¨[Ø yð 	 ô 	
ð
  1ˆˆ^ÑØ"ˆˆ]ÑØ—‘Ð Ð r$   )r   r   r   zImageGenerator | Noner   zSoraVideoGenerator | Noner   Úboolr   rx   r   Úintr   rÖ   r   rÖ   )rb   r   rc   r   ÚreturnÚdict)N)rb   r   rc   r   ry   z
str | NonerØ   ztuple[Path | None, str])
rb   r   rc   r   re   rÙ   rf   ztuple[int, int]rØ   r   )
rb   r   rc   r   re   rÙ   rd   rÙ   rØ   ú	list[str])rØ   rÚ   )
Ú__name__Ú
__module__Ú__qualname__r#   ri   r€   rX   rV   rW   rµ   © r$   r"   r   r      sŽ   „ ð
 26Ø48Ø!Ø"Ø!#Ø!%Ø"ñ7à ð7ð /ð	7ð
 2ð7ð ð7ð ð7ð ð7ð ð7ð ó7ó*?ôB!ó0:ó&óP(VôT)!r$   r   )Ú
__future__r   r`   Úpathlibr   Úsrc.generators.ai_imager   Úsrc.generators.audior   Úsrc.generators.image_sourcer   r   Úsrc.generators.sora_videor	   Úsrc.generators.videor
   Úsrc.generators.visualsr   Úsrc.services.ideationr   r   r   rÞ   r$   r"   Ú<module>rè      s/   ðÝ "ã Ý å 2Ý ,ß FÝ 8Ý .Ý 1ß 8÷y!ò y!r$   