§
    ÐbÉjôw  ã                   ó‚  — d Z ddlZddlZddlZddlZddlZddlZddlm	Z	m
Z
mZ dZdZdZdZ eeez  ¦  «        Zdd	„Zd d„Zd!d„Zd"d„Zd#d„Z G d„ d¦  «        Zd„ Zd„ Zedk    rW ej        dd¬¦  «         dZdZdZdZdZ  ee¦  «          e¦   «         Z!e! "                    e¦  «          eeeeee ¦  «         dS dS )$a  
Historical 2D Studio - Seven Nguyen Intro Video Generator (2026 Engine)
Produces high-impact, professional 1080p channel intro featuring Seven Nguyen.
Hardware Accelerated with NVIDIA NVENC (GTX 1660 Super) / Multi-threaded CPU fallback.
100% Copyright-Free, Zero-Cost Assets.
é    N)ÚImageÚ	ImageDrawÚ	ImageFonti€  i8  é   g      ?@Fc                 óâ   — |rdnd|rdnd|rdndg}|D ]I}t           j                             |¦  «        r(	 t          j        || ¦  «        c S # t
          $ r Y ŒEw xY wŒJt          j        ¦   «         S )uF   Láº¥y font chá»¯ há»‡ thá»‘ng há»— trá»£ Unicode / Serif Ä‘iá»‡n áº£nhzC:\Windows\Fonts\georgiab.ttfzC:\Windows\Fonts\georgia.ttfzC:\Windows\Fonts\timesbd.ttfzC:\Windows\Fonts\times.ttfzC:\Windows\Fonts\arialbd.ttfzC:\Windows\Fonts\arial.ttf)ÚosÚpathÚexistsr   ÚtruetypeÚ	ExceptionÚload_default)ÚsizeÚboldÚcandidate_fontsÚ	font_paths       úFC:\Projects\Historical 2d\src/tactical_engine\seven_intro_generator.pyÚget_fontr      s³   € ð /3ÐYÐ*Ð*Ð8YØ-1ÐVÐ)Ð)Ð7VØ-1ÐVÐ)Ð)Ð7Vð€Oð
 %ð ð ˆ	ÝŒ7�>Š>˜)Ñ$Ô$ð 	ðÝ Ô)¨)°TÑ:Ô:Ð:Ð:Ð:øÝð ð ð Ø�ðøøøð	õ
 Ô!Ñ#Ô#Ð#s   ¶AÁ
AÁAé   é   c                 óR  — | d                               t          j        ¦  «        }t          j                             |                       t          j        ¦  «        |z
  d¬¦  «        }t          j        |j        t          j        ¬¦  «        dz  }||k     }||k    |||z   k     z  }d||<   t          j        ||         |z
  t          |¦  «        z  dz  dd¦  «                              t          j        ¦  «        ||<   t          j        | t          j        ¦  «        }||dd…dd…df<   |S )	uS   Táº¡o sprite cÃ³ kÃªnh alpha trong suá»‘t tá»« áº£nh cÃ³ ná»�n studio gáº§n tráº¯ng)é   r   é   ©Úaxis©Údtypeéÿ   r   Né   )ÚastypeÚnpÚfloat32ÚlinalgÚnormÚonesÚshapeÚuint8ÚclipÚfloatÚcv2ÚcvtColorÚCOLOR_BGR2BGRA)	Úbgr_imgÚ	thresholdÚfeatherÚcornerÚdistÚalphaÚmask_bgÚ
mask_transÚbgras	            r   Úmake_transparent_cutoutr5   %   s  € à�TŒ]×!Ò!¥"¤*Ñ-Ô-€FÝŒ9�>Š>˜'Ÿ.š.­¬Ñ4Ô4°vÑ=ÀAˆ>ÑFÔF€DÝŒG�D”J¥b¤hÐ/Ñ/Ô/°#Ñ5€EØ�YÒ€GØ˜)Ò#¨°	¸GÑ0CÒ(DÑE€JØ€Eˆ'�NÝœ  jÔ!1°IÑ!=ÅÀwÁÄÑ OÐRUÑ UÐWXÐZ]Ñ^Ô^×eÒeÕfhÔfnÑoÔo€Eˆ*ÑÝŒ<˜¥Ô!3Ñ4Ô4€DØ€DˆˆˆˆAˆAˆAˆqˆ�MØ€Kó    ç      ð?c                 óR  — |dk    r‹t          dt          |j        d         |z  ¦  «        ¦  «        }t          dt          |j        d         |z  ¦  «        ¦  «        }t          j        |||f|dk     rt          j        nt          j        ¬¦  «        }|j        \  }}	}
| j        \  }}}
t          d|¦  «        t          d|¦  «        }}t          |||	z   ¦  «        t          |||z   ¦  «        }}||k    s||k    r| S ||z
  }||z
  }|||z
  z   }|||z
  z   }|||…||…f         }|dd…dd…df                              t          j
        ¦  «        dz  |z  }t          j        |dd…dd…t          j        f         dd¬	¦  «        }| ||…||…f                              t          j
        ¦  «        }|dd…dd…dd…f                              t          j
        ¦  «        }||z  |d|z
  z  z   }t          j        |dd
¦  «                             t          j        ¦  «        | ||…||…f<   | S )uV   ChÃ¨n sprite BGRA vÃ o frame BGR vá»›i vá»‹ trÃ­, tá»· lá»‡ vÃ  Ä‘á»™ má»� mong muá»‘nr7   é   r   ©ÚinterpolationNr   g     ào@r   r   r   )ÚmaxÚintr%   r)   ÚresizeÚ
INTER_AREAÚINTER_LINEARÚminr   r    r!   ÚrepeatÚnewaxisr'   r&   )Údst_bgrÚsrc_bgraÚxÚyÚscaleÚopacityÚnew_wÚnew_hÚshÚswÚ_ÚdhÚdwÚx1Úy1Úx2Úy2Úsx1Úsy1Úsx2Úsy2Úsrc_cropr1   Úalpha_3dÚdst_cropÚsrc_rgbÚblendeds                              r   Úoverlay_alpha_imager^   2   s/  € à�‚|€|Ý�A•s˜8œ>¨!Ô,¨uÑ4Ñ5Ô5Ñ6Ô6ˆÝ�A•s˜8œ>¨!Ô,¨uÑ4Ñ5Ô5Ñ6Ô6ˆÝ”:˜h¨°¨ÐX]Ð`cÒXcÐXcÅcÄnÀnÕilÔiyÐzÑzÔzˆà”�I€BˆˆAØ”�I€BˆˆAå��A‰YŒY�˜A˜q™	œ	ˆ€BÝ��Q˜‘V‰_Œ_�c " a¨"¡f™oœoˆ€Bà	ˆR‚x€x�2˜’8�8Øˆà
ˆq‰&€CØ
ˆq‰&€CØ
��b‘‰/€CØ
��b‘‰/€Cà˜˜C˜  S Ð(Ô)€HØ�a�a�a˜˜˜˜A�gÔ×%Ò%¥b¤jÑ1Ô1°EÑ9¸WÑD€EÝŒy˜˜q˜q˜q ! ! !¥R¤ZÐ/Ô0°!¸!Ð<Ñ<Ô<€Hà�r˜"�u˜b ˜e�|Ô$×+Ò+­B¬JÑ7Ô7€HØ�q�q�q˜!˜!˜!˜R˜a˜R�xÔ ×'Ò'­¬
Ñ3Ô3€Gà˜Ñ  8¨s°X©~Ñ#>Ñ>€GÝœG G¨Q°Ñ4Ô4×;Ò;½B¼HÑEÔE€GˆBˆrˆE�2�b�5ˆLÑØ€Nr6   c           
      ó„  — d}t          dt          ||z  ¦  «        ¦  «        }	g }
t          |	dz   ¦  «        D ]Ø}|t          |¦  «        z  }d|z
  }|dz  |d         z  d|dz  z  |z  |d         z  z   d|z  |dz  z  |d         z  z   |dz  |d         z  z   }|dz  |d         z  d|dz  z  |z  |d         z  z   d|z  |dz  z  |d         z  z   |dz  |d         z  z   }|
                     t          |¦  «        t          |¦  «        f¦  «         ŒÙt          j        |
t
          j        ¦  «                             d¦  «        }t          d„ |D ¦   «         ¦  «        }t          j        | |gd	||d
z   t          j        ¦  «         t          j        | |gd	||t          j        ¦  «         t          |
¦  «        dk    �r†|
d         }|
d         }|d         |d         z
  |d         |d         z
  }}t          j        ||¦  «        }|dz  }t          |d         |t          j        |t          j        d
z  z
  ¦  «        z  z
  ¦  «        t          |d         |t          j        |t          j        d
z  z
  ¦  «        z  z
  ¦  «        f}t          |d         |t          j        |t          j        d
z  z   ¦  «        z  z
  ¦  «        t          |d         |t          j        |t          j        d
z  z   ¦  «        z  z
  ¦  «        f}t          j        |||gt
          j        ¦  «        }t          j        | |g|t          j        ¦  «         dS dS )uX   Váº½ mÅ©i tÃªn BÃ©zier xung lá»±c mÆ°á»£t mÃ  theo tiáº¿n Ä‘á»™ thá»�i gian (0.0 -> 1.0)é2   r   r9   r7   r   r   )éÿÿÿÿr9   r   c              3   óV   K  — | ]$}t          d t          |dz  ¦  «        ¦  «        V — Œ%dS )r   çš™™™™™Ù?N)rA   r=   )Ú.0Úcs     r   ú	<genexpr>z$draw_bezier_arrow.<locals>.<genexpr>`   s6   è è € ÐAÐA°!•s˜3¥ A¨¡G¡¤Ñ-Ô-ÐAÐAÐAÐAÐAÐAr6   Fé   ra   éþÿÿÿgffffff@N)r<   r=   Úranger(   Úappendr    ÚarrayÚint32ÚreshapeÚtupler)   Ú	polylinesÚLINE_AAÚlenÚmathÚatan2ÚcosÚpiÚsinÚfillPoly)ÚimgÚp0Úp1Úp2Úp3Ú	color_bgrÚ	thicknessÚprogressÚ	num_stepsÚsteps_to_drawÚpointsÚiÚtÚinvrF   rG   ÚptsÚ
glow_colorÚtipÚprevÚdxÚdyÚangleÚhead_lenÚleftÚrightÚhead_ptss                              r   Údraw_bezier_arrowr‘   R   s/  € à€IÝ˜�3˜y¨8Ñ3Ñ4Ô4Ñ5Ô5€MØ€FÝ�= 1Ñ$Ñ%Ô%ð (ð (ˆØ•�iÑ Ô Ñ ˆØ�A‰gˆØ�‰F�R˜”U‰N˜Q  a¡™Z¨!™^¨b°¬eÑ3Ñ3°a¸#±gÀÀ1Á±nÀrÈ!ÄuÑ6LÑLÈqÐRSÉtÐVXÐYZÔV[É|Ñ[ˆØ�‰F�R˜”U‰N˜Q  a¡™Z¨!™^¨b°¬eÑ3Ñ3°a¸#±gÀÀ1Á±nÀrÈ!ÄuÑ6LÑLÈqÐRSÉtÐVXÐYZÔV[É|Ñ[ˆØ�Š•s˜1‘v”v�s 1™vœvÐ&Ñ'Ô'Ð'Ð'å
Œ(�6�2œ8Ñ
$Ô
$×
,Ò
,¨ZÑ
8Ô
8€CåÐAÐA°yÐAÑAÔAÑAÔA€JÝ„M�#˜�u˜e Z°¸Q±ÅÄÑLÔLÐLå„M�#˜�u˜e Y°	½3¼;ÑGÔGÐGõ ˆ6�{„{�aÒÑØ�RŒjˆØ�bŒzˆØ�Q”˜$˜qœ'Ñ! 3 q¤6¨D°¬GÑ#3ˆBˆÝ”
˜2˜rÑ"Ô"ˆØ˜s‘?ˆÝ�C˜”F˜X­¬°½¼À1¹Ñ1DÑ(EÔ(EÑEÑEÑFÔFÍÈCÐPQÌFÐU]Õ`dÔ`hÐinÕquÔqxÐ{|Ñq|Ñi|Ñ`}Ô`}ÑU}ÑL}ÑH~ÔH~ÐˆÝ�S˜”V˜h­¬°%½$¼'ÀA¹+Ñ2EÑ)FÔ)FÑFÑFÑGÔGÍÈSÐQRÌVÐV^ÕaeÔaiÐjoÕrvÔryÐ|}Ñr}Ñj}Ña~Ôa~ÑV~ÑM~ÑIÔIð  AˆÝ”8˜S $¨Ð.µ´Ñ9Ô9ˆÝŒ�S˜8˜* iµ´Ñ=Ô=Ð=Ð=Ð=ð Ðr6   Úinfantryc                 ó  — ||dz  z
  ||dz  z
  }	}||dz  z   ||dz  z   }}
t          j        | |dz   |	dz   f|
dz   |dz   fdd¦  «         t          j        | ||	f|
|fdd¦  «         t          j        | |dz   |	dz   f|
dz
  |dz
  f|d¦  «         t          j        | ||	f|
|fddt           j        ¦  «         |dk    rht          j        | |d	z   |	d	z   f|
d	z
  |d	z
  fd
dt           j        ¦  «         t          j        | |d	z   |d	z
  f|
d	z
  |	d	z   fd
dt           j        ¦  «         dS |dk    r5t          j        | |d	z   |d	z
  f|
d	z
  |	d	z   fd
dt           j        ¦  «         dS |dk    r't          j        | ||fdd
dt           j        ¦  «         dS dS )u@   Váº½ khá»‘i quÃ¢n bÃ i gá»—/sÆ¡n mÃ i chuáº©n sa bÃ n NATO APP-6r   é   )r   r   r   ra   )é   é   r   )éæ   r—   r—   r9   r’   rg   ©r   r   r   ÚcavalryÚ	artilleryr   N)r)   Ú	rectanglerp   ÚlineÚcircle)rx   ÚcxÚcyÚwÚhÚnameÚside_color_bgrÚsymbol_typerQ   rR   rS   rT   s               r   Údraw_tactical_counterr¥   q   sÛ  € à�!�q‘&‰[˜"˜q A™v™+ˆ€BØ�!�q‘&‰[˜"˜q A™v™+ˆ€Bå„M�#˜˜Q™  Q¡Ð'¨"¨q©&°"°q±&Ð)9¸9ÀbÑIÔIÐIå„M�#˜˜B�x " b ¨<¸Ñ<Ô<Ð<Ý„M�#˜˜Q™  Q¡Ð'¨"¨q©&°"°q±&Ð)9¸>È2ÑNÔNÐNÝ„M�#˜˜B�x " b ¨?¸A½s¼{ÑKÔKÐKð �jÒ Ð ÝŒ��r˜A‘v˜r A™vÐ&¨¨a©°°a±Ð(8¸/È1ÍcÌkÑZÔZÐZÝŒ��r˜A‘v˜r A™vÐ&¨¨a©°°a±Ð(8¸/È1ÍcÌkÑZÔZÐZÐZÐZØ	˜	Ò	!Ð	!ÝŒ��r˜A‘v˜r A™vÐ&¨¨a©°°a±Ð(8¸/È1ÍcÌkÑZÔZÐZÐZÐZØ	˜Ò	#Ð	#ÝŒ
�3˜˜R˜ ! _°b½#¼+ÑFÔFÐFÐFÐFð 
$Ð	#r6   c                   ó>   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	S )
ÚSevenIntroEnginec                 óä  — t          d¦  «         d}t          j        t          j                             |d¦  «        ¦  «        | _        t          j        t          j                             |d¦  «        ¦  «        | _        t          j        t          j                             |d¦  «        ¦  «        | _        t          d¦  «         t          j        dt          j	        ¦  «        | _
        t          j        dt          j	        ¦  «        | _        t          j        d	t          j	        ¦  «        | _        t          j        d
t          j	        ¦  «        | _        t          j        dt          j	        ¦  «        | _        t          | j        dd…dd…f         ¦  «        | _        t          | j        dd…dd…f         ¦  «        | _        t          | j        dd…dd…f         ¦  «        | _        t          | j        dd…dd…f         ¦  «        | _        t          | j        dd…dd…f         ¦  «        | _        t*          j                             d¦  «         d„ t1          d¦  «        D ¦   «         | _        d S )Nz%[INIT] Loading Seven Nguyen assets...zassets/Seven Nguyenz'seven_nguyen_tactical_war_room_host.jpgz*seven_nguyen_animation_presenter_poses.jpgz-seven_nguyen_animation_facial_expressions.jpgz)[INIT] Loading clean presenter sprites...zoutput/final_sprite_p1.pngzoutput/final_sprite_p2.pngzoutput/final_sprite_p3.pngzoutput/final_sprite_p4.pngzoutput/final_sprite_p6.pngé(   éh  r`   éJ  iŠ  iš  iÚ  i  i<  é*   c                 óœ  — g | ]É}t           j                             d t          ¦  «        t           j                             d t          ¦  «        t           j                             dd¦  «        t           j                             dd¦  «        t           j                             dd¦  «        t           j                             dd¦  «        dœ‘ŒÊS )	r   g333333Ó¿g333333Ó?g      à¿gš™™™™™¹¿ç      ø?g      @çš™™™™™é?)rF   rG   ÚvxÚvyr   r1   )r    ÚrandomÚuniformÚWIDTHÚHEIGHT)rd   rN   s     r   ú
<listcomp>z-SevenIntroEngine.__init__.<locals>.<listcomp>ž   s¯   € ð 

ð 

ð 

ð õ ”Y×&Ò& q­%Ñ0Ô0Ý”Y×&Ò& q­&Ñ1Ô1Ý”i×'Ò'¨¨cÑ2Ô2Ý”i×'Ò'¨¨dÑ3Ô3Ýœ	×)Ò)¨#¨sÑ3Ô3Ýœ×*Ò*¨3°Ñ4Ô4ðð ð

ð 

ð 

r6   éK   )Úprintr)   Úimreadr   r	   ÚjoinÚwar_room_masterÚposes_sheetÚexpressions_sheetÚIMREAD_UNCHANGEDÚsprite_welcomeÚsprite_pointing_rightÚsprite_pointing_leftÚsprite_crossedÚsprite_leaningr5   Úviseme_neutralÚviseme_smileÚviseme_speak_ahÚviseme_speak_ohÚviseme_thinkerr    r²   Úseedri   Ú	particles)ÚselfÚ
assets_dirs     r   Ú__init__zSevenIntroEngine.__init__†   s  € ÝÐ5Ñ6Ô6Ð6Ø*ˆ
Ý"œz­"¬'¯,ª,°zÐClÑ*mÔ*mÑnÔnˆÔÝœ:¥b¤g§l¢l°:Ð?kÑ&lÔ&lÑmÔmˆÔÝ!$¤­B¬G¯LªL¸ÐEtÑ,uÔ,uÑ!vÔ!vˆÔõ 	Ð9Ñ:Ô:Ð:Ý!œjÐ)EÅsÔG[Ñ\Ô\ˆÔÝ%(¤ZÐ0LÍcÔNbÑ%cÔ%cˆÔ"Ý$'¤JÐ/KÍSÔMaÑ$bÔ$bˆÔ!Ý!œjÐ)EÅsÔG[Ñ\Ô\ˆÔÝ!œjÐ)EÅsÔG[Ñ\Ô\ˆÔõ 6°dÔ6LÈRÐPSÈVÐUWÐX[ÐU[È^Ô6\Ñ]Ô]ˆÔÝ3°DÔ4JÈ2ÈcÈ6ÐSVÐWZÐSZÈ?Ô4[Ñ\Ô\ˆÔÝ6°tÔ7MÈcÐRUÈgÐWYÐZ]ÐW]ÈoÔ7^Ñ_Ô_ˆÔÝ6°tÔ7MÈcÐRUÈgÐWZÐ[^ÐW^ÐN^Ô7_Ñ`Ô`ˆÔÝ5°dÔ6LÈSÐQTÈWÐVZÐ[_ÐV_ÐM_Ô6`ÑaÔaˆÔõ 	Œ	�Š�rÑÔÐð

ð 

õ ˜2‘Y”Yð

ñ 

ô 

ˆŒˆˆr6   c           	      óü  — | j         D ]ó}|d         |d         z   t          z  |d<   |d         |d         z   t          z  |d<   t          |d         ¦  «        t          |d         ¦  «        }}t	          dt          |d         ¦  «        ¦  «        }t          d|d         z  ¦  «        t          d	|d         z  ¦  «        t          d
|d         z  ¦  «        f}t          j        |||f||dt
          j        ¦  «         ŒôdS )u_   Cáº­p nháº­t vÃ  váº½ cÃ¡c háº¡t bá»¥i vÃ ng lÆ¡ lá»­ng trong chÃ¹m sÃ¡ng (War Room Dust Motes)rF   r°   rG   r±   r9   r   é7   r1   é¯   éÔ   ra   N)rÊ   r´   rµ   r=   r<   r)   r�   rp   )rË   rx   ÚpÚixÚiyÚradÚcolors          r   Úupdate_particlesz!SevenIntroEngine.update_particlesª   sî   € à”ð 	Cð 	CˆAØ˜”f˜q œwÑ&­%Ñ/ˆAˆc‰FØ˜”f˜q œwÑ&­&Ñ0ˆAˆc‰FÝ˜˜3œ‘[”[¥# a¨¤f¡+¤+�ˆBÝ�a�˜Q˜vœY™œÑ(Ô(ˆCÝ˜˜a œj™Ñ)Ô)­3¨s°Q°w´ZÑ/?Ñ+@Ô+@Å#ÀcÈAÈgÌJÑFVÑBWÔBWÐXˆEÝŒJ�s˜R ˜H c¨5°"µc´kÑBÔBÐBÐBð	Cð 	Cr6   c                 óJ  — |t          |¦  «        z  }dd|z  z   }| j        j        dd…         \  }}t          ||z  ¦  «        }t          ||z  ¦  «        }t          ||z
  dz  ¦  «        }	t          ||z
  dz  ¦  «        }
| j        |
|
|z   …|	|	|z   …f         }t	          j        |t          t          ft          j        ¬¦  «        }|  	                    |¦  «         t          d|dz  ¦  «        }|d	k    �r®|                     ¦   «         }d
\  }}}}t	          j        |||f||fdd¦  «         t	          j        |d|z  |dd|z  z
  d	|¦  «         t	          j        |||f||fddt          j        ¦  «         t	          j        ||dz   |dz   f|dz
  |dz   fddt          j        ¦  «         t!          j        t	          j        |t          j        ¦  «        ¦  «        }t)          j        |¦  «        }t-          dd¬¦  «        }t-          dd¬¦  «        }|                     |dz   |dz   fd|d¬¦  «         |                     |dz   |dz   fd|d ¬¦  «         |                     |dz   |d!z   fd"|d#¬¦  «         t	          j        t1          j        |¦  «        t          j        ¦  «        }|S )$zµ
        Scene 1 (0.0s - 4.9s):
        Welcome to The Historical Vault. I am Seven Nguyen.
        Master shot in War Room, slow cinematic zoom in, glowing tactical table.
        r7   g¸…ëQ¸®?Nr   g333333ã?rc   r:   g      4@r   )éP   iH  éÐ  iÞ  )é   é   é   ra   ç333333ë?©rÏ   rÐ   rÑ   é
   é&   )é-   éx   é–   r9   é"   T©r   é   Fé   rg   úTHE HISTORICAL VAULT©rÑ   rÐ   rÏ   ©ÚfontÚfillr   râ   zHOST: SEVEN NGUYEN©éë   rï   rï   rÙ   zWAR ROOM TACTICAL SANDBOX)é    rÐ   é¾   )r(   r»   r%   r=   r)   r>   r´   rµ   r@   r×   rA   Úcopyr›   ÚaddWeightedrp   rœ   r   Ú	fromarrayr*   ÚCOLOR_BGR2RGBr   ÚDrawr   Útextr    rk   ÚCOLOR_RGB2BGR)rË   Ú	frame_idxÚtotal_scene_framesr„   ÚzoomÚh_origÚw_origÚcrop_wÚcrop_hÚx_startÚy_startÚcroppedÚframeÚ	hud_alphaÚhud_overlayrQ   rR   rS   rT   Úpil_imgÚdrawÚ
font_titleÚfont_subs                          r   Úrender_scene_1zSevenIntroEngine.render_scene_1´   s·  € ð �Ð0Ñ1Ô1Ñ1ˆØ�T˜A‘X‰~ˆð Ô-Ô3°B°Q°BÔ7‰ˆ�Ý�V˜d‘]Ñ#Ô#ˆÝ�V˜d‘]Ñ#Ô#ˆå�v ‘¨#Ñ-Ñ.Ô.ˆÝ�v ‘¨#Ñ-Ñ.Ô.ˆàÔ& w¨w°v©~Ð'=¸wÀwÈvÁ~Ð?UÐ'UÔVˆÝ”
˜7¥U­F OÅ3ÔCSÐTÑTÔTˆð 	×Ò˜eÑ$Ô$Ð$õ ˜˜Y¨Ñ-Ñ.Ô.ˆ	Ø�qŠ=‰=ØŸ*š*™,œ,ˆKØ.‰NˆB��B˜ÝŒM˜+¨¨B x°"°b°¸<ÈÑLÔLÐLÝŒO˜K¨°	Ñ)9¸5À#ÈÈyÑHXÑBXÐZ[Ð]bÑcÔcÐcõ ŒM˜% " b ¨B°¨8°^ÀQÍÌÑTÔTÐTÝŒH�U˜R "™W b¨2¡gÐ.°°b±¸"¸r¹'Ð0BÀNÐTUÕWZÔWbÑcÔcÐcõ ”o¥c¤l°5½#Ô:KÑ&LÔ&LÑMÔMˆGÝ”> 'Ñ*Ô*ˆDÝ! "¨4Ð0Ñ0Ô0ˆJÝ ¨Ð/Ñ/Ô/ˆHà�IŠI�r˜B‘w  Q¡Ð'Ð)?ÀjÐWeˆIÑfÔfÐfØ�IŠI�r˜B‘w  R¡Ð(Ð*>ÀXÐTcˆIÑdÔdÐdØ�IŠI�r˜B‘w  R¡Ð(Ð*EÈHÐ[jˆIÑkÔkÐkÝ”L¥¤¨'Ñ!2Ô!2µCÔ4EÑFÔFˆEàˆr6   c                 ó$  — |t          |¦  «        z  }t          j        t          t          dfg d¢t          j        ¬¦  «        }t          dt          d¦  «        D ].}t          j        ||df|t          fddt          j	        ¦  «         Œ/t          dt          d¦  «        D ].}t          j        |d|ft          |fddt          j	        ¦  «         Œ/t          j        t          j        |t          j        ¦  «        ¦  «        }t          j        |¦  «        }t!          dd	¬
¦  «        }	t!          dd¬
¦  «        }
t!          dd¬
¦  «        }|                     dd|	d¬¦  «         |                     dd|d¬¦  «         g d¢}t%          |¦  «        D ]¾\  }\  }}d|dz  z   }t'          dt)          d|dz  |dz  z
  ¦  «        ¦  «        }|dk    r�t+          d|z  ¦  «        }|                     d|f||
|||f¬¦  «         |                     d|dz   f||t+          d|z  ¦  «        t+          d |z  ¦  «        t+          d!|z  ¦  «        f¬¦  «         Œ¿t          j        t          j        |¦  «        t          j        ¦  «        }|d"k    rPt'          d|d"z
  d#z  ¦  «        }t+          d|d$z  z   ¦  «        }t          j        |d%|d&fd'dt          j	        ¦  «         t1          || j        d(dd)t'          d|d*z  ¦  «        ¬+¦  «         |                      |¦  «         |S ),z¶
        Scene 2 (4.9s - 8.5s):
        Here, history is not just dates and dust.
        Parchment transition, fading chronological dates, Seven Nguyen thoughtful analysis.
        r   )r•   é   é    r   r   rã   )r  rá   é.   r9   é4   Træ   r¬   Fr   )rã   rð   zBEYOND DATES & DUSTrê   rë   )rã   r—   zRECONSTRUCTING TACTICAL REALITY)é´   rñ   éÍ   ))z216 BCzBattle of Cannae)z1288 ADzBattle of Bach Dang)z1815 ADzBattle of Waterloo)z1942 ADzBattle of Stalingradr«   én   r7   ç        g      @r¯   éÜ   éŒ   rª   rg   rð   r  rc   ç      à?él  )é‚   é  r  )é#   râ   é¹   iP  gffffff @g      @©rH   rI   )r(   r    Úfullrµ   r´   r&   ri   r)   rœ   rp   r   rô   r*   rõ   r   rö   r   r÷   Ú	enumeraterA   r<   r=   rk   rø   r^   rÂ   r×   )rË   rù   rú   r„   r  rF   rG   r  r  Úfont_bigÚ
font_datesr	  ÚdatesÚidxÚyrÚbattleÚy_posÚ
alpha_dateÚc_valÚprogÚend_xs                        r   Úrender_scene_2zSevenIntroEngine.render_scene_2ä   sA  € ð �Ð0Ñ1Ô1Ñ1ˆå”�¥¨Ð*¨L¨L¨LÅÄÐIÑIÔIˆõ �q�% Ñ%Ô%ð 	Oð 	OˆAÝŒH�U˜Q ˜F Q­ K°¸qÅ#Ä+ÑNÔNÐNÐNÝ�q�& #Ñ&Ô&ð 	Nð 	NˆAÝŒH�U˜Q ˜F¥U¨A J°¸aÅÄÑMÔMÐMÐMõ ”/¥#¤,¨uµcÔ6GÑ"HÔ"HÑIÔIˆÝŒ~˜gÑ&Ô&ˆÝ˜B TÐ*Ñ*Ô*ˆÝ˜b uÐ-Ñ-Ô-ˆ
Ý˜B UÐ+Ñ+Ô+ˆà�	Š	�*Ð3¸(Èˆ	ÑXÔXÐXØ�	Š	�*Ð?ÀhÐUdˆ	ÑeÔeÐeð
ð 
ð 
ˆõ "+¨5Ñ!1Ô!1ð 	Oð 	OÑˆC‘�"�fØ˜# ™)‘OˆEå˜S¥# c¨A°©G°s¸S±yÑ+@Ñ"AÔ"AÑBÔBˆJØ˜AŠ~ˆ~Ý˜C *Ñ,Ñ-Ô-�Ø—	’	˜3 ˜,¨°À5È%ÐQVÐBW�	ÑXÔXÐXØ—	’	˜3 ¨¡	Ð*¨F¸ÍÈSÐS]ÑM]ÑI^ÔI^Õ`cÐdgÐjtÑdtÑ`uÔ`uÕwzÐ{~ð  BLñ  |Lñ  xMô  xMð  IN�	ñ  Oô  Oð  Oøå”�RœX gÑ.Ô.µÔ0AÑBÔBˆð ˆsŠ7ˆ7Ý�s˜Q ™W¨™OÑ,Ô,ˆDÝ˜˜d S™jÑ(Ñ)Ô)ˆEÝŒH�U˜J¨°¨°mÀQÍÌÑTÔTÐTõ 	˜E 4Ô#6¸¸cÈÕWZÐ[^Ð`aÐdgÑ`gÑWhÔWhÐiÑiÔiÐiØ×Ò˜eÑ$Ô$Ð$Øˆr6   c                 ó¾	  — |t          |¦  «        z  }t          j        t          t          dfg d¢t          j        ¬¦  «        }d\  }}}}t          j        |||f||fdd¦  «         t          ||d¦  «        D ])}	t          j	        ||	|f|	|fdd	t          j
        ¦  «         Œ*t          ||d¦  «        D ])}
t          j	        |||
f||
fdd	t          j
        ¦  «         Œ*d
dg}|D ]/\  }}dD ]'}t          j        |||f|dd	t          j
        ¦  «         Œ(Œ0g }t          ||d¦  «        D ]^}
t          ddt          j        |
dz  ¦  «        z  z   dt          j        |
dz  ¦  «        z  z   ¦  «        }	|                     |	|
f¦  «         Œ_t          j        |t          j        |t          j        ¦  «        gdddt          j
        ¦  «         t          j        |t          j        |t          j        ¦  «        gdddt          j
        ¦  «         t'          d|dz  ¦  «        }t)          |dddddd|¦  «         t)          |d d!d"d#dd|¦  «         t)          |d$d%d&d'd(d)|d*z  ¦  «         t)          |d+d,d-d.d/d0|d1z  ¦  «         t+          |d2d3d4d5d6dd7¦  «         t+          |d8d3d4d5d6dd7¦  «         t+          |d9d:d;d<d=dd>¦  «         t+          |d?d:d;d<d=dd>¦  «         t+          |d@dAdBdCdDdEd>¦  «         t+          |dFdAdBdCdGdEd>¦  «         t+          |dHdIdBdCdJdEd>¦  «         t          j        |||f||fddKt          j
        ¦  «         g dL¢}|d         dK         |d         d         }}|D ]\  }}}}||cxk    r|k     r	n Œ||}} nŒt-          j        t          j        |t          j        ¦  «        ¦  «        }t5          j        |¦  «        }t9          d<dM¬N¦  «        }t9          dOd¬N¦  «        }|                     |dOz   |dOz   f|d@z   |dPz   fgdQ¬R¦  «         |                     |dSz   |dTz   f||dU¬V¦  «         |                     |dWz   |dXz   f||dY¬V¦  «         t          j        t          j        |¦  «        t          j        ¦  «        }t          j        ||dOz   |dOz   f|d@z   |dPz   fdd	t          j
        ¦  «         t?          || j         dZd[d\d¬]¦  «         |  !                    |¦  «         |S )^u  
        Scene 3 (8.5s - 18.2s):
        We step directly into the war room, reconstructing the greatest battles...
        Dynamic Tactical Battle Map with BÃ©zier flanking maneuvers, wooden counters,
        and Seven Nguyen pointing directly at the tactical screen.
        r   )r   r•   r   r   )rÙ   éd   i   iÔ  )r–   é   é$   ra   rÙ   ©r  rá   é0   r9   )iÂ  éà  )iR  r  )éZ   rð   éð   )r©   r0  é:   rÛ   é@  gü©ñÒMb€?r   g{®Gáz”?F)éA   rÙ   éF   é   )r,  r  és   r”   r7   r®   )r1  rÚ   )r5  éX  )é,  é|  )r  r5  rß   é   )i¶  rÚ   )i`  r:  )it  r<  )i˜  r5  )rÚ   r1  )rÚ   r  )rÚ   i0  )rÚ   r  )râ   é‡   éª   rg   r¯   )rÚ   r;  )rÚ   rª   )rÚ   é¤  )rÚ   iÖ  )r©   râ   rñ   rà   gÍÌÌÌÌÌì?r<  r@  r0  r   ÚCavalryr™   i$  i€  r  é<   r  ÚCenterr’   i   i¨  iÌ  é@   rå   zLegion I)r  r©   r  iø  z	Legion IIrÚ   i�  z
Legion IIIr   ))r  çffffffÖ?zBATTLE OF CANNAE (216 BC)z&HANNIBAL'S TACTICAL DOUBLE ENVELOPMENT)rE  çffffffæ?zBATTLE OF BACH DANG (1288)z"TRAN HUNG DAO'S TIDAL STAKE AMBUSH)rF  r7   zBATTLE OF WATERLOO (1815)z NAPOLEON VS WELLINGTON & BLUCHERTræ   rç   é_   )é   é   r   ©rí   r  r  rê   rë   rá   r6  )r  r  r  i°  iå  ç333333@r  )"r(   r    r  rµ   r´   r&   r)   r›   ri   rœ   rp   r�   r=   rr   rv   rj   ro   rk   rl   rA   r‘   r¥   r   rô   r*   rõ   r   rö   r   r÷   rø   r^   rÁ   r×   )rË   rù   rú   r„   r  Úmap_x1Úmap_y1Úmap_x2Úmap_y2rF   rG   Ú
center_ptsrž   rŸ   ÚrÚ	river_ptsÚarrow_progressÚbattles_infoÚ	cur_titleÚcur_subÚstart_tÚend_tÚtitleÚsubr  r  Úfont_bannerr	  s                               r   Úrender_scene_3zSevenIntroEngine.render_scene_3  s¬  € ð �Ð0Ñ1Ô1Ñ1ˆå”�¥¨Ð*¨L¨L¨LÅÄÐIÑIÔIˆð *<Ñ&ˆ�˜ ÝŒ�e˜f fÐ-°¸Ð/?ÀÈrÑRÔRÐRõ �v˜v rÑ*Ô*ð 	Tð 	TˆAÝŒH�U˜Q ˜K¨!¨V¨°lÀAÅsÄ{ÑSÔSÐSÐSÝ�v˜v rÑ*Ô*ð 	Tð 	TˆAÝŒH�U˜V Q˜K¨&°!¨°lÀAÅsÄ{ÑSÔSÐSÐSð ! *Ð-ˆ
Ø ð 	Mð 	M‰FˆB�Ø#ð Mð M�Ý”
˜5 2 r (¨A¨|¸QÅÄÑLÔLÐLÐLðMð ˆ	Ý�v˜v rÑ*Ô*ð 	%ð 	%ˆAÝ�C˜"�tœx¨¨E©	Ñ2Ô2Ñ2Ñ2°R½$¼(À1ÀtÁ8Ñ:LÔ:LÑ5LÑLÑMÔMˆAØ×Ò˜a ˜VÑ$Ô$Ð$Ð$ÝŒ�e�bœh yµ"´(Ñ;Ô;Ð<¸eÀ\ÐSUÕWZÔWbÑcÔcÐcÝŒ�e�bœh yµ"´(Ñ;Ô;Ð<¸eÀ_ÐVWÕY\ÔYdÑeÔeÐeõ ˜S 1 s¡7Ñ,Ô,ˆå˜% ¨Z¸ÀZÐQ_ÐabÐdrÑsÔsÐså˜% ¨[¸+ÀzÐSaÐcdÐftÑuÔuÐuå˜% ¨Z¸ÀZÐQ_ÐabÐdrÐuxÑdxÑyÔyÐyå˜% ¨Z¸ÀZÐQ^Ð`bÐdrÐuxÑdxÑyÔyÐyõ 	˜e S¨#¨r°2°yÀ.ÐR[Ñ\Ô\Ð\Ý˜e T¨3°°B¸	À>ÐS\Ñ]Ô]Ð]Ý˜e S¨#¨r°2°xÀÐQ[Ñ\Ô\Ð\Ý˜e S¨#¨r°2°xÀÐQ[Ñ\Ô\Ð\õ 	˜e S¨#¨r°2°zÀ=ÐR\Ñ]Ô]Ð]Ý˜e S¨#¨r°2°{ÀMÐS]Ñ^Ô^Ð^Ý˜e S¨#¨r°2°|À]ÐT^Ñ_Ô_Ð_õ 	Œ�e˜f fÐ-°¸Ð/?ÀÐQRÕTWÔT_Ñ`Ô`Ð`ð
ð 
ð 
ˆð *¨"Ô-¨aÔ0°,¸rÔ2BÀ1Ô2E�7ˆ	Ø*6ð 	ð 	Ñ&ˆG�U˜E 3Ø˜!Ð#Ð#Ò#Ð#˜eÒ#Ð#Ð#Ð#Ð#Ø%*¨C˜7�	Ø�ð $õ ”/¥#¤,¨uµcÔ6GÑ"HÔ"HÑIÔIˆÝŒ~˜gÑ&Ô&ˆÝ˜r¨Ð-Ñ-Ô-ˆÝ˜B UÐ+Ñ+Ô+ˆð 	�Š˜ "™ f¨r¡kÐ2°V¸c±\À6ÈBÁ;Ð4OÐPÐWcˆÑdÔdÐdØ�	Š	�6˜B‘; ¨¡Ð,¨i¸kÐP^ˆ	Ñ_Ô_Ð_Ø�	Š	�6˜B‘; ¨¡Ð,¨g¸HÈ?ˆ	Ñ[Ô[Ð[Ý”�RœX gÑ.Ô.µÔ0AÑBÔBˆÝŒ�e˜f r™k¨6°B©;Ð7¸&À3¹,ÈÐQSÉÐ9TÐVdÐfgÕilÔitÑuÔuÐuõ 	˜E 4Ô#<¸dÀCÈtÐ]`ÐaÑaÔaÐaØ×Ò˜eÑ$Ô$Ð$Øˆr6   c           	      ój  — |t          |¦  «        z  }t          j        t          t          dfg d¢t          j        ¬¦  «        }t          dt          d¦  «        D ].}t          j        ||df|t          fddt          j	        ¦  «         Œ/t          dt          d¦  «        D ].}t          j        |d|ft          |fddt          j	        ¦  «         Œ/t          || j        dd	d
d¬¦  «         d\  }}}	}
t          j        |||f|	|
fdd¦  «         t          j        |||f|	|
fddt          j	        ¦  «         t          j        t          j        |t          j        ¦  «        ¦  «        }t#          j        |¦  «        }t'          dd¬¦  «        }t'          dd¬¦  «        }t'          dd¬¦  «        }|                     |dz   |dz   fd|d¬¦  «         |                     |dz   |dz   fd|d¬¦  «         d d!d"t+          d|d#z  ¦  «        fd$d%g}t-          |¦  «        D ]Ø\  }\  }}}|d&z   |d'z  z   }|                     |dz   |f||d(¬¦  «         |                     |	d)z
  |f||d¬¦  «         d*}|                     |dz   |d+z   f|dz   |z   |d,z   fgd-¬.¦  «         t/          ||z  t+          d|d/z  ¦  «        z  ¦  «        }d0|vrdnd1}|                     |dz   |d+z   f|dz   |z   |d,z   fg|¬.¦  «         ŒÙt          j        t          j        |¦  «        t          j        ¦  «        }|                      |¦  «         |S )2z×
        Scene 4 (18.2s - 24.5s):
        Analyzed move by move, casualty by casualty, right on the tactical sandbox.
        Telemetry HUD, casualty ratio charts, Seven Nguyen leaning at the command table.
        r   )r8  é   r–   r   r   r,  )rè   r   rá   r9   rB  iþ  rK  r7   r  )iä  r  i0  i¬  )rç   r–   r   ra   rß   r   r.  Træ   r  r–   Fr©   r  zTACTICAL SANDBOX TELEMETRYrê   rë   rÙ   zTURN-BY-TURN FORCE DYNAMICS©rð   rÐ   éÃ   )zENGAGEMENT EFFICIENCYz94.8%g¼t“Vî?zFLANKING ENCIRCLEMENTz100%gÍÌÌÌÌÌô?)zCASUALTY PROJECTION (ROMAN)z67,500 FALLENg=
×£p=ê?)zCARTHAGINIAN RETENTIONz91.2% INTACTgÉv¾Ÿ/í?rð   r  rî   r5  iÀ  râ   r6  r/  rJ  r®   ÚROMAN)r`  râ   râ   )r(   r    r  rµ   r´   r&   ri   r)   rœ   rp   r^   rÃ   r›   r   rô   r*   rõ   r   rö   r   r÷   rA   r  r=   rk   rø   r×   )rË   rù   rú   r„   r  rF   rG   Úhud_x1Úhud_y1Úhud_x2Úhud_y2r  r  Úfont_headerÚfont_metricÚfont_valÚmetricsr"  ÚlabelÚval_strÚ	bar_ratioÚy_baseÚbar_wÚfill_wÚ	bar_colors                            r   Úrender_scene_4zSevenIntroEngine.render_scene_4v  s“  € ð �Ð0Ñ1Ô1Ñ1ˆÝ”�¥¨Ð*¨L¨L¨LÅÄÐIÑIÔIˆõ �q�% Ñ%Ô%ð 	Oð 	OˆAÝŒH�U˜Q ˜F Q­ K°¸qÅ#Ä+ÑNÔNÐNÐNÝ�q�& #Ñ&Ô&ð 	Nð 	NˆAÝŒH�U˜Q ˜F¥U¨A J°¸aÅÄÑMÔMÐMÐMõ 	˜E 4Ô#6¸¸CÀtÐUXÐYÑYÔYÐYð *=Ñ&ˆ�˜ ÝŒ�e˜f fÐ-°¸Ð/?ÀÈrÑRÔRÐRÝŒ�e˜f fÐ-°¸Ð/?ÀÐQRÕTWÔT_Ñ`Ô`Ð`õ ”/¥#¤,¨uµcÔ6GÑ"HÔ"HÑIÔIˆÝŒ~˜gÑ&Ô&ˆÝ˜r¨Ð-Ñ-Ô-ˆÝ˜r¨Ð-Ñ-Ô-ˆÝ˜B UÐ+Ñ+Ô+ˆà�	Š	�6˜B‘; ¨¡Ð,Ð.JÐQ\Ðcqˆ	ÑrÔrÐrØ�	Š	�6˜B‘; ¨¡Ð,Ð.KÐRZÐapˆ	ÑqÔqÐqð 6Ø$ f­c°#°q¸3±wÑ.?Ô.?Ð@ØBØ=ð	
ˆõ 1:¸'Ñ0BÔ0Bð 	nð 	nÑ,ˆCÑ,�%˜ )Ø˜c‘\ C¨#¡IÑ-ˆFØ�IŠI�v ‘{ FÐ+¨U¸È?ˆIÑ[Ô[Ð[Ø�IŠI�v ‘| VÐ,¨g¸KÈnˆIÑ]Ô]Ð]ð ˆEØ�NŠN˜V b™[¨&°2©+Ð6¸À"¹ÀuÑ9LÈfÐWYÉkÐ8ZÐ[ÐbnˆNÑoÔoÐoå˜ Ñ*­S°°a¸#±gÑ->Ô->Ñ>Ñ?Ô?ˆFØ*1¸Ð*>Ð*>˜˜ÀMˆIØ�NŠN˜V b™[¨&°2©+Ð6¸À"¹ÀvÑ9MÈvÐXZÉ{Ð8[Ð\ÐclˆNÑmÔmÐmÐmå”�RœX gÑ.Ô.µÔ0AÑBÔBˆØ×Ò˜eÑ$Ô$Ð$Øˆr6   c                 óˆ  — |t          |¦  «        z  }t          j        | j        t          t
          ft          j        ¬¦  «        }t          j        t
          t          dfdt          j	        ¬¦  «        }t          j
        |d|dd¦  «        }t          || j        dd	d
d¬¦  «         d\  }}}}	|                     ¦   «         }
t          j        |
||f||	fdd¦  «         t          j
        |
d|dd|¦  «         t          j        |||f||	fddt          j        ¦  «         t!          j        t          j        |t          j        ¦  «        ¦  «        }t)          j        |¦  «        }t-          dd¬¦  «        }t-          dd¬¦  «        }t-          dd¬¦  «        }|                     |dz   |dz   fd|d¬¦  «         |                     |dz   |dz   fd |d!¬¦  «         |                     |dz   |d"z   fd#|d$¬¦  «         |dz   |d%z   |d&z   |d'z   f\  }}}}d(d(t1          j        |d)z  ¦  «        z  z   }t5          d*d+|z  z   ¦  «        t5          d+d,|z  z   ¦  «        t5          d+d,|z  z   ¦  «        f}|                     ||f||fgd-|¬.¦  «         |                     |dz   |dz   fd/|d0¬¦  «         |                     |dz   |d1z   fd2|d3¬¦  «         t          j        t          j        |¦  «        t          j        ¦  «        }|d4k    r-|d4z
  d5z  }|d|z
  z                       t          j	        ¦  «        }|                      |¦  «         |S )6zå
        Scene 5 (24.5s - 31.0s):
        Take your seat at the command table. Subscribe, and let us unlock history together.
        Seven Nguyen welcoming open-arms pose, glowing Imperial Crest, YouTube Subscribe Card.
        r:   r   )rH  rÛ   rç   r   gÍÌÌÌÌÌÜ?gš™™™™™á?r   rã   r  gš™™™™™õ?r7   r  )i4  éÈ   i  ip  )rI  r8  r•   ra   g)\�Âõ(ì?g¸…ëQ¸¾?rß   r   r  Træ   r   Frå   rB  ré   rê   rë   r6  r>  z#TAKE YOUR SEAT AT THE COMMAND TABLE)éá   rt  rt  r  z-NEW 2D TACTICAL BATTLE RECONSTRUCTIONS WEEKLYr_  i  r  r<  r  g      (@rñ   r  rç   rI  )Úradiusrí   Ú	SUBSCRIBEr˜   i®  z0Presented by Seven Nguyen | Historical 2D Studio)r?  r  rs  rÞ   g333333Ã?) r(   r)   r>   r»   r´   rµ   r@   r    r  r&   ró   r^   r¿   rò   r›   rp   r   rô   r*   rõ   r   rö   r   r÷   rr   rv   r=   Úrounded_rectanglerk   rø   r   r×   )rË   rù   rú   r„   r  ÚdarkÚcard_x1Úcard_y1Úcard_x2Úcard_y2Úcard_overlayr  r  Ú
font_vaultr	  Úfont_btnÚbtn_x1Úbtn_y1Úbtn_x2Úbtn_y2ÚpulseÚ	btn_colorÚ
fade_blacks                          r   Úrender_scene_5zSevenIntroEngine.render_scene_5°  s„  € ð �Ð0Ñ1Ô1Ñ1ˆå”
˜4Ô/µ%½°ÕPSÔP`ÐaÑaÔaˆåŒw�¥ qÐ)¨<½r¼xÐHÑHÔHˆÝ”  t¨T°4¸Ñ;Ô;ˆõ 	˜E 4Ô#6¸¸SÈÐVYÐZÑZÔZÐZð .AÑ*ˆ�˜' 7Ø—z’z‘|”|ˆÝŒ�l W¨gÐ$6¸À'Ð8JÈLÐZ\Ñ]Ô]Ð]ÝŒ˜ d¨E°4¸¸EÑBÔBÐBÝŒ�e˜g wÐ/°'¸7Ð1CÀ^ÐUVÕX[ÔXcÑdÔdÐdõ ”/¥#¤,¨uµcÔ6GÑ"HÔ"HÑIÔIˆÝŒ~˜gÑ&Ô&ˆÝ˜b tÐ,Ñ,Ô,ˆ
Ý˜B UÐ+Ñ+Ô+ˆÝ˜B TÐ*Ñ*Ô*ˆà�	Š	�7˜R‘< ¨2¡Ð.Ð0FÈZÐ^lˆ	ÑmÔmÐmØ�	Š	�7˜R‘< ¨3¡Ð/Ð1VÐ]eÐl{ˆ	Ñ|Ô|Ð|Ø�	Š	�7˜R‘< ¨3¡Ð/Ð1`Ðgoð  wFˆ	ñ  	Gô  	Gð  	Gð *1°2©°wÀ±}ÀgÐPSÁmÐU\Ð_bÑUbÐ)bÑ&ˆ�˜ Ø�c�DœH Q¨¡XÑ.Ô.Ñ.Ñ.ˆÝ˜˜r E™zÑ)Ñ*Ô*­C°°R¸%±Z±Ñ,@Ô,@Å#ÀbÈ2ÐPUÉ:ÁoÑBVÔBVÐWˆ	Ø×Ò ¨Ð 0°6¸6Ð2BÐCÈBÐU^ÐÑ_Ô_Ð_Ø�	Š	�6˜B‘; ¨¡Ð,¨kÀÈˆ	Ñ_Ô_Ð_ð 	�	Š	�7˜R‘< ¨3¡Ð/Ð1cÐjrð  zIˆ	ñ  	Jô  	Jð  	JÝ”�RœX gÑ.Ô.µÔ0AÑBÔBˆð ˆtŠ8ˆ8Ø˜d™( dÑ*ˆJØ˜c JÑ.Ñ/×7Ò7½¼ÑAÔAˆEà×Ò˜eÑ$Ô$Ð$Øˆr6   c                 óŠ  — t          dt          › dt          › dt          › dt          › �¦  «         t          dt          z  ¦  «        }t          dt          z  ¦  «        }t          dt          z  ¦  «        }t          dt          z  ¦  «        }t          }d	d
dddddt          › dt          › �dddt          t          ¦  «        dddddddddddd|g}	 t          j        |t          j	        t          j
        ¬¦  «        }nÉ# t          $ r¼ t          d¦  «         d||                     d¦  «        <   |                     d¦  «         |                     d¦  «         |                     |                     d¦  «        ¦  «         |                     d¦  «         t          j        |t          j	        t          j
        ¬¦  «        }Y nw xY wt          t          ¦  «        D �]'}	|	|k     r|                      |	|¦  «        }
n…|	|k     r|                      |	|z
  ||z
  ¦  «        }
nb|	|k     r|                      |	|z
  ||z
  ¦  «        }
n?|	|k     r|                      |	|z
  ||z
  ¦  «        }
n|                      |	|z
  ||z
  ¦  «        }
|j                             |
                     ¦   «         ¦  «         |	d z  d!k    s|	t          d"z
  k    r?t          d#|	d"z   › d$t          › d%|	d"z   t1          t          ¦  «        z  d&z  d'›d(�d)¬*¦  «         �Œ)|j                             ¦   «          |                     ¦   «          t          d+|› �d)¬*¦  «         |S ),u;   Render toÃ n bá»™ cÃ¡c frame video qua FFmpeg Hardware Pipez$[RENDER] Starting video generation: rF   z @ zfps, Total Frames: gš™™™™™@g      !@g3333332@g     €8@Úffmpegú-yz-fÚrawvideoz-vcodecz-sz-pix_fmtÚbgr24z-rú-iú-ú-c:vÚ
h264_nvencú-presetÚp4ú-cqÚ19ú-bfÚ0Úyuv420p)ÚstdinÚstderrz8[WARN] NVENC unavailable, falling back to libx264 CPU...Úlibx264rB  r   r9   z  -> Rendered frame ú/z (r,  z.1fz%)T)Úflushz+[OK] Video frames rendered successfully to )r¸   r´   rµ   ÚFPSÚTOTAL_FRAMESr=   ÚstrÚ
subprocessÚPopenÚPIPEÚDEVNULLr   ÚindexÚremoveÚpopri   r
  r*  r\  rq  r‡  r˜  ÚwriteÚtobytesr(   ÚcloseÚwait)rË   Úoutput_raw_mp4Ús1_endÚs2_endÚs3_endÚs4_endÚs5_endÚ
ffmpeg_cmdÚprocrƒ   r  s              r   Úrender_full_videoz"SevenIntroEngine.render_full_videoå  sT  € åÐnµUÐnÐn½VÐnÐnÍÐnÐnÕ`lÐnÐnÑoÔoÐoõ �S�3‘Y‘”ˆÝ�S�3‘Y‘”ˆÝ�T�C‘Z‘”ˆÝ�T�C‘Z‘”ˆÝˆð �dØ�*Ø�zØ•UÐ%Ð%�VÐ%Ð%Ø˜Ø•#•c‘(”(Ø�#Ø�LØ�tØ�4Ø�3Ø˜	Øð
ˆ
ð 
	bÝÔ# Jµj´oÍjÔN`ÐaÑaÔaˆDˆDøÝð 	bð 	bð 	båÐLÑMÔMÐMØ9BˆJ�z×'Ò'¨Ñ5Ô5Ñ6Ø×Ò˜eÑ$Ô$Ð$Ø×Ò˜cÑ"Ô"Ð"Ø�NŠN˜:×+Ò+¨EÑ2Ô2Ñ3Ô3Ð3Ø×Ò˜dÑ#Ô#Ð#ÝÔ# Jµj´oÍjÔN`ÐaÑaÔaˆDˆDˆDð	bøøøõ •|Ñ$Ô$ð 	vñ 	vˆAØ�6ŠzˆzØ×+Ò+¨A¨vÑ6Ô6��Ø�V’�Ø×+Ò+¨A°©J¸À¹ÑHÔH��Ø�V’�Ø×+Ò+¨A°©J¸À¹ÑHÔH��Ø�V’�Ø×+Ò+¨A°©J¸À¹ÑHÔH��à×+Ò+¨A°©J¸À¹ÑHÔH�àŒJ×Ò˜UŸ]š]™_œ_Ñ-Ô-Ð-à�2‰v˜Š{ˆ{˜a¥<°!Ñ#3Ò3Ð3ÝÐh¨Q¨q©SÐhÐhµ<ÐhÐhÀAÀaÁCÍÍ|ÑI\ÔI\ÑC\Ð]`ÑC`ÐhÐhÐhÐhÐptÐuÑuÔuÐuùàŒ
×ÒÑÔÐØ�	Š	‰ŒˆÝÐL¸NÐLÐLÐTXÐYÑYÔYÐYØÐs   Ã+C< Ã<CGÇGN)Ú__name__Ú
__module__Ú__qualname__rÍ   r×   r
  r*  r\  rq  r‡  r³  © r6   r   r§   r§   …   s�   € € € € € ð"
ð "
ð "
ðHCð Cð Cð.ð .ð .ð`5ð 5ð 5ðnYð Yð Yðv8ð 8ð 8ðt3ð 3ð 3ðjAð Að Að Að Ar6   r§   c                 ó¬   — d}t          | dd¬¦  «        5 }|                     |¦  «         ddd¦  «         n# 1 swxY w Y   t          d| › �¦  «         | S )u5   Táº¡o file phá»¥ Ä‘á»� kinetic ASS chuáº©n hoÃ ng giaaÞ  [Script Info]
Title: The Historical Vault - Seven Nguyen Intro Subtitles
ScriptType: v4.00+
WrapStyle: 0
ScaledBorderAndShadow: yes
YCbCr Matrix: TV.709
PlayResX: 1920
PlayResY: 1080

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: WarRoomDefault,Georgia,46,&H00FFFFFF,&H000000FF,&H00000000,&HA0000000,-1,0,0,0,100,100,1.2,0,1,3,4,2,80,80,95,1

[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:00.10,0:00:02.75,WarRoomDefault,,0,0,0,,Welcome to {\c&H0037AFD4&\b1}The Historical Vault{\c&H00FFFFFF&\b0}.
Dialogue: 0,0:00:02.75,0:00:04.90,WarRoomDefault,,0,0,0,,I am {\c&H0037AFD4&\b1}Seven Nguyen{\c&H00FFFFFF&\b0}.
Dialogue: 0,0:00:04.90,0:00:08.50,WarRoomDefault,,0,0,0,,Here, history is not just dates and dust.
Dialogue: 0,0:00:08.50,0:00:13.50,WarRoomDefault,,0,0,0,,We step directly into the {\c&H0037AFD4&\b1}war room{\c&H00FFFFFF&\b0}, reconstructing the {\c&H0037AFD4&\b1}greatest battles{\c&H00FFFFFF&\b0},
Dialogue: 0,0:00:13.50,0:00:18.24,WarRoomDefault,,0,0,0,,military masterstrokes, and geopolitical turning points that forged our world.
Dialogue: 0,0:00:18.24,0:00:24.50,WarRoomDefault,,0,0,0,,Analyzed move by move, casualty by casualty, right on the {\c&H0037AFD4&\b1}tactical sandbox{\c&H00FFFFFF&\b0}.
Dialogue: 0,0:00:24.50,0:00:27.17,WarRoomDefault,,0,0,0,,Take your seat at the {\c&H0037AFD4&\b1}command table{\c&H00FFFFFF&\b0}.
Dialogue: 0,0:00:27.17,0:00:30.90,WarRoomDefault,,0,0,0,,{\c&H0037AFD4&\b1}Subscribe{\c&H00FFFFFF&\b0}, and let us unlock history together.
r    zutf-8)ÚencodingNz&[OK] Kinetic ASS Subtitles generated: )Úopenr§  r¸   )Úoutput_ass_pathÚass_contentÚfs      r   Úgenerate_kinetic_assr¾  (  s¡   € ð€Kõ0 
ˆo˜s¨WÐ	5Ñ	5Ô	5ð ¸Ø	�Š�ÑÔÐðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð å	Ð
D°?Ð
DÐ
DÑEÔEÐEØÐs   •7·;¾;c                 ó�  — t          d¦  «         |                     dd¦  «                             dd¦  «        }ddd| d|d|d	d
|› d�ddddddddddddddddddd|g}	 t          j        |d¬¦  «         n¾# t          $ r±}t          d |› �¦  «         d!||                     d¦  «        <   |                     d¦  «         |                     d¦  «         |                     |                     d¦  «        ¦  «         |                     d¦  «         t          j        |d¬¦  «         Y d"}~nd"}~ww xY wt          d#|› �¦  «         |S )$u’   
    HÃ²a trá»™n video, lá»“ng tiáº¿ng Seven Nguyen, Ã¢m thanh ná»�n vÃ  nhÃºng phá»¥ Ä‘á»� ASS
    Báº£o toÃ n chuáº©n EBU R128 (-14.0 LUFS)
    zJ[FINAL] Assembling master video with audio mixing and kinetic subtitles...ú\r›  ú:z\:r‰  rŠ  r�  z-filter_complexz[0:v]subtitles='zm'[v_sub];[1:a]volume=1.0[v_voice];[2:a]volume=0.32[v_bgm];[v_voice][v_bgm]amix=inputs=2:duration=first[a_out]z-mapz[v_sub]z[a_out]r�  r�  r‘  r’  r“  r”  r•  r–  z-c:aÚaacz-b:aÚ192kz	-movflagsz
+faststartz	-shortestT)Úcheckz?[WARN] Error with hardware subtitle burn, falling back to CPU: rš  Nz'[SUCCESS] Final Master Video saved at: )r¸   Úreplacer   Úrunr   r¤  r¥  r¦  )Úraw_video_mp4Úvoice_audio_mp3Úambience_audio_wavÚass_subtitles_pathÚfinal_master_mp4Úescaped_assÚcmdÚes           r   Úfinalize_master_videorÏ  G  s£  € õ
 
Ð
VÑWÔWÐWà$×,Ò,¨T°3Ñ7Ô7×?Ò?ÀÀUÑKÔK€Kð 	�$ØˆmØˆoØÐ Øð	?˜;ð 	?ð 	?ð 	?ð 	�	Ø�	Ø�Ø�4ØˆtØˆsØ�Ø�Ø�\ØØð)€Cð.	(ÝŒ�s $Ð'Ñ'Ô'Ð'Ð'øÝð (ð (ð (ÝÐSÐPQÐSÐSÑTÔTÐTØ'0ˆˆC�IŠI�lÑ#Ô#Ñ$Ø�
Š
�5ÑÔÐØ�
Š
�3‰ŒˆØ�Š�—	’	˜%Ñ Ô Ñ!Ô!Ð!Ø�
Š
�4ÑÔÐÝŒ�s $Ð'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'øøøøð(øøøõ 
Ð
FÐ4DÐ
FÐ
FÑGÔGÐGØÐs   ÁA6 Á6
D1Â B'D,Ä,D1Ú__main__ÚoutputT)Úexist_okz output/seven_intro_video_raw.mkvzoutput/seven_intro_voice_en.mp3z(output/seven_intro_war_room_ambience.wavzoutput/seven_intro_kinetic.assz,output/the_historical_vault_intro_master.mp4)F)r   r   )r7   r7   )r7   )r’   )#Ú__doc__r   Úsysrr   r   Únumpyr    r)   ÚPILr   r   r   r´   rµ   r�  ÚTOTAL_DURATIONr=   rž  r   r5   r^   r‘   r¥   r§   r¾  rÏ  r´  ÚmakedirsÚ	raw_videoÚvoice_audioÚambience_audioÚass_subsÚmaster_videoÚenginer³  r·  r6   r   ú<module>rß     sé  ððð ð 
€	€	€	Ø 
€
€
€
Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ø 
€
€
€
Ø +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +à€Ø	€Ø€Ø€Øˆs�> CÑ'Ñ(Ô(€ð$ð $ð $ð $ðð ð ð ðð ð ð ð@>ð >ð >ð >ð>Gð Gð Gð Gð(að að að að añ aô að aðFð ð ð>,ð ,ð ,ð\ ˆzÒÐØ€B„K� 4Ð(Ñ(Ô(Ð(Ø2€IØ3€KØ?€NØ/€HØA€Lð Ð˜Ñ"Ô"Ð"ð ÐÑÔ€FØ
×Ò˜YÑ'Ô'Ð'ð Ð˜) [°.À(ÈLÑYÔYÐYÐYÐYð! Ðr6   