§
    ~HÇjÄy  ã            	       ó>
  — U 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Zd dlZd dlZd dl	m
Z
 d dlmZmZmZmZ d dlmZmZ d dlZd dlmZmZmZmZ d dlmZ d dlmZmZmZ d dlm Z  d	Z!d
Z" e
e#¦  «         $                    ¦   «         j%        j%        j%        j%        Z&e&dz  Z'e&dz  dz  Z(e&dz  Z)e&dz  dz  Z*e&dz  dz  Z+e&dz  dz  Z,e&dz  Z-e&dz  dz  Z. e
e j/         0                    d¦  «        ¦  «        dz  Z1 e2e'¦  «         e2e&¦  «        fD ]&Z3e3ej/        vrej/         4                    d e3¦  «         Œ'e( 5                    dd¬¦  «         e) 5                    dd¬¦  «          edd¬¦  «        Z6e6 7                    e dgddgdg¬¦  «         e6 8                    d e e2e(¦  «        ¬ ¦  «        d¬!¦  «         e6 8                    d" e e2e*¦  «        ¬ ¦  «        d¬!¦  «         e+ 9                    ¦   «         r+e6 8                    d# e e2e+¦  «        ¬ ¦  «        d¬!¦  «         e) 9                    ¦   «         r+e6 8                    d$ e e2e)¦  «        ¬ ¦  «        d%¬!¦  «         d&d'd'd( ej        ¦   «         g d)œa:ej;        d*k    rC	 ej<         =                    d+¬,¦  «         ej>         =                    d+¬,¦  «         n# e?$ r Y nw xY wd-e2fd.„Z@ G d/„ d0e¦  «        ZA G d1„ d2e¦  «        ZBd3d4d5d6d7d8d9œZCi aDee2ef         eEd:<   d;aFeGeEd<<   drd>e
d?e2d@e2dAe2fdB„ZHdAee2ef         fdC„ZIe6 J                    dDe¬E¦  «        dF„ ¦   «         ZKe6 J                    dG¦  «        dH„ ¦   «         ZLe6 J                    dI¦  «        dsdJee2         fdK„¦   «         ZMe6 J                    dL¦  «        dM„ ¦   «         ZNe6 J                    dN¦  «        dO„ ¦   «         ZOe6 J                    dP¦  «         eddQ¬R¦  «         eddS¬R¦  «        fdTee2         dUee2         fdV„¦   «         ZPe6 J                    dW¦  «         eddS¬R¦  «        fdUee2         fdX„¦   «         ZQe6 J                    dY¦  «        dZ„ ¦   «         ZRe6 J                    d[¦  «        d\e2fd]„¦   «         ZSe6 J                    d^¦  «        d_„ ¦   «         ZTd`e2dae2fdb„ZUdceAfdd„ZVdtdfe2dgee2         dheGfdi„ZWe6 X                    dj¦  «        dceAdkefdl„¦   «         ZYe6 X                    dm¦  «        dceBdkefdn„¦   «         ZZe[dok    r ej\        e6e!e"dp¬q¦  «         dS dS )ué    N)ÚPath)ÚOptionalÚDictÚAnyÚList)Ú	BaseModelÚmodel_validator)ÚFastAPIÚBackgroundTasksÚHTTPExceptionÚQuery)ÚStaticFiles)ÚHTMLResponseÚFileResponseÚJSONResponse)ÚCORSMiddlewarez0.0.0.0ië  Ú05_Production_PipelineÚ	04_AssetsÚvideosÚ
06_ExportsÚ
charactersÚ	keyframesÚ02_AI_Promptszmuse_ai_video_prompts.jsonÚ	FilmMakerÚ
web_reviewÚ	templatesú~Ú	DownloadsT©ÚparentsÚexist_oku(   Tháº­p NgÅ© NiÃªn - Cinema Review Studioz2.0)ÚtitleÚversionÚ*)Úallow_originsÚallow_credentialsÚallow_methodsÚallow_headersz/assets/videos)Ú	directory)Únamez/assets/charactersz/assets/keyframesz/assets/exportsÚexportsÚidleÚ z@thap_ngu_nien_ep01_to_ep06_grand_feature_master_1060s_17m40s.mp4)ÚstatusÚprogress_textÚcurrent_promptÚ
last_videoÚ
updated_atÚlogsÚwin32úutf-8©ÚencodingÚmsgc                 óŽ  — t          j        d¦  «        }d|› d| › �}t          d                              |¦  «         t          d         dd …         t          d<   	 t	          |¦  «         d S # t
          $ rN 	 t	          |                     dd¬¦  «                             d¦  «        ¦  «         Y d S # t
          $ r Y Y d S w xY ww xY w)	Nz%H:%M:%Sú[z] r3   iâÿÿÿÚasciiÚreplace)Úerrors)ÚtimeÚstrftimeÚ	gen_stateÚappendÚprintÚ	ExceptionÚencodeÚdecode)r8   ÚtsÚentrys      úGC:\Projects\KieuStory\.agents\teamwork\explorer_m4_1\proposed_server.pyÚlog_msgrI   N   sà   € Ý	Œ�zÑ	"Ô	"€BØ�ˆOˆO�cˆOˆO€EÝˆfÔ×Ò˜UÑ#Ô#Ð#Ý! &Ô)¨#¨$¨$Ô/…IˆfÑðÝˆe‰ŒˆˆˆøÝð ð ð ð	Ý�%—,’,˜w¨y�,Ñ9Ô9×@Ò@ÀÑIÔIÑJÔJÐJÐJÐJÐJøÝð 	ð 	ð 	ØˆDˆDˆDð	øøøðøøøs*   ÁA, Á,
CÁ77B1Â1
C Â;CÂ?C Ã Cc                   óÖ   — e Zd ZU dZee         ed<   dZee         ed<   dZee         ed<   dZ	ee         ed<   dZ
ee         ed<   dZee         ed<    ed	¬
¦  «        d„ ¦   «         ZdS )ÚGenerateRequestNÚpromptÚshot_idÚscene_idr"   Úinput_frameFÚforceÚafter)Úmodec                 ó@   — | j         s| j        st          d¦  «        ‚| S )Nz)Either prompt or shot_id must be provided)rL   rM   Ú
ValueError)Úselfs    rH   Úcheck_prompt_or_shotz$GenerateRequest.check_prompt_or_shotd   s+   € àŒ{ð 	J 4¤<ð 	JÝÐHÑIÔIÐIØˆó    )Ú__name__Ú
__module__Ú__qualname__rL   r   ÚstrÚ__annotations__rM   rN   r"   rO   rP   Úboolr	   rV   © rW   rH   rK   rK   \   sµ   € € € € € € Ø €FˆH�SŒMÐ Ð Ñ Ø!€GˆX�cŒ]Ð!Ð!Ñ!Ø"€Hˆh�sŒmÐ"Ð"Ñ"Ø€Eˆ8�CŒ=ÐÐÑØ!%€K�˜#”Ð%Ð%Ñ%Ø!€Eˆ8�DŒ>Ð!Ð!Ñ!à€_˜'Ð"Ñ"Ô"ðð ñ #Ô"ðð ð rW   rK   c                   óN   — e Zd ZU eed<   dZee         ed<   dZee         ed<   dS )ÚConcatRequestrN   NÚoutput_pathç      ð?Úcrossfade_dur)	rX   rY   rZ   r[   r\   ra   r   rc   Úfloatr^   rW   rH   r`   r`   j   sC   € € € € € € Ø€M€M�MØ!%€K�˜#”Ð%Ð%Ñ%Ø%(€M�8˜E”?Ð(Ð(Ñ(Ð(Ð(rW   r`   u0   Táº­p 1: Phong Tráº§n Nháº­p Cuá»™c (Gia Biáº¿n)u?   Táº­p 2: Thanh LÃ¢u Nháº­p Má»™ng (MÃ£ GiÃ¡m Sinh & Sá»Ÿ Khanh)u5   Táº­p 3: Hoa Láº¡c VÃ´ Ä�oan (Ä�Ã²n Ghen Hoáº¡n ThÆ°)u:   Táº­p 4: HoÃ nh Ä�ao Tráº£m LÃ£ng (Tá»« Háº£i Khá»Ÿi Binh)uF   Táº­p 5: Ä�oáº¡n TrÆ°á»�ng Tháº­p NgÅ© (Tiá»�n Ä�Æ°á»�ng Tráº§m ThÃ¢n)u:   Táº­p 6: HoÃ n NguyÃªn TÃ¡i Ngá»™ (Kim Kiá»�u Ä�oÃ n Tá»¥)©é   é   é   é   é   é   Ú_library_cacheg        Ú_cache_timeú.mp4Úbase_dirÚstemÚsuffixÚreturnc           	      ó„  — t          j        dt          j        |¦  «        › dt          j        |¦  «        › d�t           j        ¦  «        }d}|                      |› d|› �¦  «        D ]N}|                     |j        ¦  «        }|r0t          |t          | 	                    d¦  «        ¦  «        ¦  «        }ŒO|› d|dz   › |› �S )uK   Tá»± Ä‘á»™ng xÃ¡c Ä‘á»‹nh tÃªn file version tiáº¿p theo (_v1, _v2, _v3...).ú^z_v(\d+)ú$r   r$   rf   Ú_v)
ÚreÚcompileÚescapeÚ
IGNORECASEÚglobÚmatchr*   ÚmaxÚintÚgroup)ro   rp   rq   ÚpatternÚ	highest_vÚfÚms          rH   Úresolve_next_versionr„   |   sÁ   € åŒjÐJ�bœi¨™oœoÐJÐJµb´iÀÑ6GÔ6GÐJÐJÐJÍBÌMÑZÔZ€GØ€IØ�]Š]˜dÐ-Ð- VÐ-Ð-Ñ.Ô.ð 8ð 8ˆØ�MŠM˜!œ&Ñ!Ô!ˆØð 	8Ý˜I¥s¨1¯7ª7°1©:¬:¡¤Ñ7Ô7ˆIøØÐ-Ð-�i !‘mÐ- VÐ-Ð-Ð-rW   c                  óŠ  ‡.— t          j         ¦   «         } t          r| t          z
  dk     rt          S t          t                               d¦  «        ¦  «        }t          t                               d¦  «        ¦  «        }g }g }g }g }i }t          d„ |D ¦   «         ¦  «        }t          d„ |D ¦   «         ¦  «        }	|D �]t}
|
 	                    ¦   «         }|
j
        }|                     ¦   «         Š.|
                     t          ¦  «                             ¦   «         }t          |j        dz  d¦  «        }t          j        dt          j        |j        ¦  «        ¦  «        }d|› �}t'          |
                     ¦   «         ¦  «        }t+          j        d	‰.¦  «        }|r"t/          |                     d
¦  «        ¦  «        nd
}d‰.v sd|v rït+          j        d‰.¦  «        }|r"t/          |                     d
¦  «        ¦  «        nd
}|                     dd¦  «                             dd¦  «                             dd¦  «                             dd¦  «                             ¦   «         }dddddddœ}d|› d|                     ||¦  «        › �}|                     ||||||d|› �|dd d!d|› �|d"œ¦  «         �Œút;          ˆ.fd#„d$D ¦   «         ¦  «        rÛt+          j        d%‰.¦  «        }|r|                     d
¦  «        nd}|                     d&d'¦  «                             d(d)¦  «                             d*d+¦  «        }d,}d-}d.}d/}d0‰.v r	d1}d2}d3}d4}n3d5‰.v r	d6}d7}d8}d9}n&d:‰.v r	d;}d<}d=}d>}nd?‰.v r	d@}dA}dB}dC}ndD‰.v rdE}dF}dG}dH}|                     |||||||dI|pdJ||dK|dLœ¦  «         �ŒðdM‰.v sdN‰.v r¹t+          j        d%‰.¦  «        }|r|                     d
¦  «        nd}|                     d&d'¦  «                             d(d)¦  «                             d*d+¦  «        }dO|› dP�}dQ}dR}dS‰.v rdT}dU}dV}n
dW‰.v rdX}dY}dV}|                     ||dZ|› d[�||||dI|p|› d\�||d]|dLœ¦  «         �Œ±d^‰.v sd_‰.v rýt+          j        d‰.¦  «        }|r"t/          |                     d
¦  «        ¦  «        nd
}t+          j        d`‰.¦  «        }|r|                     d
¦  «        nd}|                     d&d'¦  «                             d(d)¦  «                             d*d+¦  «        }t<                               |da|› �¦  «        }|                     |d|› �||› db�dc|› dd�||||dI|p|› d\�de|› �df|dgœ¦  «         �Œ¶dh‰.v sdi‰.v r¶dj‰.v r²t+          j        d‰.¦  «        }t+          j        dk‰.¦  «        }|r"t/          |                     d
¦  «        ¦  «        nd
}|r"t/          |                     d
¦  «        ¦  «        nd
} |                     |d|› �|dj| dl›�| da|› dm| dl›dn�||||dIda|› do| dl›�dp|dqœ¦  «         �Œt�Œv|                     dr„ ds¬t¦  «         |                     du„ ¬v¦  «         |                     dw„ ¬v¦  «         |                     dx„ ¬v¦  «         g }!|D �]\}
|
 	                    ¦   «         }|
j
        }|                     ¦   «         Š.t          |j        dz  d¦  «        }t          j        dt          j        |j        ¦  «        ¦  «        }dy|› �}t'          |
                     ¦   «         ¦  «        }t+          j        d	‰.¦  «        }|r"t/          |                     d
¦  «        ¦  «        nd
}t+          j        d‰.¦  «        }t+          j        dk‰.¦  «        }t+          j        dz‰.¦  «        }"|r"t/          |                     d
¦  «        ¦  «        nd
}|r"t/          |                     d
¦  «        ¦  «        nd
} |"r"t/          |"                     d
¦  «        ¦  «        nd{}#d|› d|| dl›�}$|$|vrg ||$<   d}‰.v }%|rd~|› �nd}&|%rda|› do| dl›d|#dl›|&› d€�n)|                     dd¦  «                             dd¦  «        }'i d�|“d‚d|› �“dƒ|“djdj| dl›�“d„| “d}|%rd}|#dl›�nd…“d†|#“d‡|'“dˆ|“d‰|“dŠ|“d‹|“dŒ|%rd�ndŽ“d�dI“d�|%rd‘nd’“d“|“}(||$                              |(¦  «         |!                     |(¦  «         �Œ^|D ]})||)                              d”„ ¬v¦  «         Œ g }*tA          | !                    ¦   «         ¦  «        D ]Á}+||+         },t+          j        d|+¦  «        }t+          j        dk|+¦  «        }|r"t/          |                     d
¦  «        ¦  «        nd
}|r"t/          |                     d
¦  «        ¦  «        nd
} |*                     |+|| da|› dm| dl›d•tE          |,¦  «        › d–�tE          |,¦  «        |,d—œ¦  «         ŒÂtE          |¦  «        tE          |¦  «        z   tE          |¦  «        tE          |¦  «        tE          |¦  «        tE          |¦  «        tE          |¦  «        t          |d˜z  d¦  «        t          |	d˜z  d¦  «        t          ||	z   d˜z  d¦  «        d™œ	}-|-|||||*|!dš„ tG          d
d›¦  «        D ¦   «         dœœa| at          S )�Ng      @ú*.mp4c              3   óH   K  — | ]}|                      ¦   «         j        V — Œd S ©N©ÚstatÚst_size©Ú.0Úps     rH   ú	<genexpr>z%build_library_data.<locals>.<genexpr>•   s-   è è € ÐCÐC°!˜QŸVšV™XœXÔ-ÐCÐCÐCÐCÐCÐCrW   c              3   óH   K  — | ]}|                      ¦   «         j        V — Œd S rˆ   r‰   rŒ   s     rH   r�   z%build_library_data.<locals>.<genexpr>–   s-   è è € Ð;Ð;¨a˜Ÿš™œÔ)Ð;Ð;Ð;Ð;Ð;Ð;rW   é   rg   z%Y-%m-%d %H:%M:%Sz/assets/exports/z_v(\d+)\.mp4$rf   Ú9x16Úshorts_1m_9x16z	ep0?(\d+)rn   r-   Ú_9x16Úshort_zShort Ú_ú u&   KhuÃª PhÃ²ng & Gia Biáº¿n (Ä�Ãªm MÆ°a)u+   Cáº¡m Báº«y Sá»Ÿ Khanh & Láº§u NgÆ°ng BÃ­chu)   Ä�Ã²n Ghen Hoáº¡n ThÆ° & Tiá»‡c Hoa ViÃªnu%   Oai Danh Tá»« Háº£i & PhÃ¡ VÃ²ng VÃ¢yu4   Tiá»‡c Say Phá»¥c KÃ­ch & Ná»—i Oan Tiá»�n Ä�Æ°á»�ngu/   TrÃ¹ng PhÃ¹ng Ä�áº¡i Káº¿t (15 NÄƒm LÆ°u Láº¡c)re   u   Shorts Táº­p ú: Úep0z9:16u   60 GiÃ¢y (9:16)Ú
short_9x16)r*   r"   ÚurlÚpathÚsize_mbÚmodifiedÚepisodeÚepisode_numÚaspectÚduration_strÚcategoryÚbadger#   c              3   ó    •K  — | ]}|‰v V — Œ	d S rˆ   r^   )r�   ÚkÚlowers     €rH   r�   z%build_library_data.<locals>.<genexpr>Ç   s?   øè è € ð  Ið  I˜aˆq�Eˆzð  Ið  Ið  Ið  Ið  Ið  IrW   )Úep01_to_ep06Úep01_to_ep05Úep01_to_ep04Úep01_ep02_ep03Úep01_ep02_roadshowÚroadshowz(\d+s|\d+min|\d+m\d+s)Úminu    PhÃºtrƒ   u    PhÃºt Úsu    GiÃ¢yzGrand Roadshow Masterul   Tuyá»ƒn táº­p dÃ i káº¿t ná»‘i Ä‘a táº­p hoÃ n chá»‰nh, chuáº©n Ã¢m thanh AAC vÃ  hÃ¬nh áº£nh Ä‘iá»‡n áº£nh.é2   zRoadshow Cutr¨   u9   Ä�áº I Báº¢N MASTER TOÃ€N Bá»˜ 6 Táº¬P (FULL FEATURE CUT)uÊ   Báº£n tá»•ng há»£p tá»‘i thÆ°á»£ng 17 phÃºt 40 giÃ¢y káº¿t ná»‘i toÃ n bá»™ 6 táº­p phim Tháº­p NgÅ© NiÃªn, tá»« Kinh ká»³, Trao duyÃªn, Ä�Ã²n ghen, Khá»Ÿi binh Tá»« Háº£i Ä‘áº¿n Báº¿n Tiá»�n Ä�Æ°á»�ng.éd   zFull Feature Master (17m40s)r©   u.   Roadshow Tuyá»ƒn Táº­p: Táº­p 1 Ä‘áº¿n Táº­p 5u‚   Tá»•ng há»£p liÃªn hoÃ n 5 táº­p Ä‘áº§u tiÃªn (16 phÃºt 20 giÃ¢y) - Tá»« há»™i Thanh Minh Ä‘áº¿n trÆ°á»›c thá»�m Tiá»�n Ä�Æ°á»�ng.éZ   u   Roadshow Táº­p 1-5 (16m20s)rª   u.   Roadshow Tuyá»ƒn Táº­p: Táº­p 1 Ä‘áº¿n Táº­p 4uw   Tá»•ng há»£p liÃªn hoÃ n 4 táº­p (15 phÃºt) - Khá»Ÿi sáº¯c gia Ä‘Ã¬nh há»� VÆ°Æ¡ng Ä‘áº¿n chiáº¿n trÆ°á»�ng Tá»« Háº£i.éU   u   Roadshow Táº­p 1-4 (15m)r«   u'   Roadshow Tuyá»ƒn Táº­p: Táº­p 1 - 2 - 3us   Cháº·ng Ä‘Æ°á»�ng Ä‘áº§u cá»§a ThÃºy Kiá»�u (13 phÃºt) - Kinh ká»³, Láº§u xanh LÃ¢m Tri vÃ  Ä�Ã²n ghen Hoáº¡n ThÆ°.éP   u   Roadshow Táº­p 1-3 (13m)Ú	ep01_ep02u)   Roadshow Tuyá»ƒn Táº­p: Táº­p 1 & Táº­p 2uk   Trá»�n váº¹n 2 táº­p Ä‘áº§u (10 phÃºt 40 giÃ¢y) - Biáº¿n cá»‘ gia Ä‘Ã¬nh vÃ  Ä‘Ãªm trao duyÃªn Ä‘áº«m lá»‡.éK   u   Roadshow Táº­p 1-2 (10m40s)z16:9u
   Báº£n DÃ iÚfeature_master)r*   r"   Údescriptionr›   rœ   r�   rž   r¡   r¢   r¤   Úpriorityr£   r#   Úcontinuous_masterÚintro_prologueu   Báº£n GhÃ©p Ná»‘i LiÃªn HoÃ n (ú)zContinuous Cuté(   Úintro_prologue_scenes01_02u2   LiÃªn HoÃ n Intro + Prologue + Cáº£nh 1 & Cáº£nh 2u   LiÃªn HoÃ n 160sé-   Úintro_prologue_scene01u'   LiÃªn HoÃ n Intro + Prologue + Cáº£nh 1u   LiÃªn HoÃ n 110suH   Báº£n ghÃ©p ná»‘i liá»�n máº¡ch Ã¢m thanh & hÃ¬nh áº£nh thá»�i lÆ°á»£ng ú.z MBÚcontinuous_cutÚgrand_feature_masterÚgrand_masterz(\d+min|\d+m\d+s|\d+s)u   Táº­p u    â€” Báº£n Grand Masteru7   Master trá»�n váº¹n toÃ n bá»™ cÃ¡c cáº£nh trong Táº­p uM   , báº£o toÃ n Ã¢m thanh ngÅ© cung vÃ  cháº¥t lÆ°á»£ng hÃ¬nh áº£nh cao nháº¥t.u   Master Táº­p Úepisode_master)r*   rŸ   r    r"   r¸   r›   rœ   r�   rž   r¡   r¢   r¤   r£   r#   Úcinematic_masterÚmasterÚscenezscene0?(\d+)Ú02du    â€” Cáº£nh z (Cinematic Master)u    â€¢ Cáº£nh Úscene_master)r*   rŸ   r    rÈ   Ú	scene_numr"   r›   rœ   r�   rž   r¡   r¤   r£   r#   c                 ó>   — |                       dd¦  «        | d         fS )Nr¹   r   r�   ©Úget©Úxs    rH   ú<lambda>z$build_library_data.<locals>.<lambda>V  s   € ¨¯ª¨j¸!Ñ(<Ô(<¸aÀ	¼lÐ'K€ rW   T©ÚkeyÚreversec                 ó$   — | d         | d          fS )Nr    r�   r^   rÏ   s    rH   rÑ   z$build_library_data.<locals>.<lambda>W  s   € ¨¨-Ô(8¸1¸Y¼<¸-Ð'H€ rW   )rÓ   c                 ó"   — | d         | d         fS )Nr    rË   r^   rÏ   s    rH   rÑ   z$build_library_data.<locals>.<lambda>X  s   €  a¨Ô&6¸¸+¼Ð%G€ rW   c                 ó   — | d         S )Nr    r^   rÏ   s    rH   rÑ   z$build_library_data.<locals>.<lambda>Y  s   € ˜a Ô.€ rW   z/assets/videos/zshot0?(\d+)r   Ú_sceneÚshotz vu
    â€¢ Shot z (10s)r*   rŸ   r    rË   ÚmiscÚshot_numr"   r›   rœ   r�   rž   r¢   Ú10szRaw/Cutr¡   r£   Úraw_shotÚ	raw_assetr#   c                 ó0   — | d         | d         | d         fS )NrÛ   r#   r*   r^   rÏ   s    rH   rÑ   z$build_library_data.<locals>.<lambda>Ž  s   € °1°Z´=À!ÀIÄ,ÐPQÐRXÔPYÐ2Z€ rW   z (z shots))Ú	scene_keyr    rË   r"   ÚcountÚshotsi   @)	Útotal_videosÚfeature_masters_countÚepisode_masters_countÚscene_masters_countÚshorts_countÚraw_shots_countÚtotal_exports_size_gbÚtotal_raw_size_gbÚtotal_storage_gbc                 ó6   — g | ]}d |› �|t           |         dœ‘ŒS )r™   )ÚidÚnumr"   )ÚEPISODE_TITLES)r�   Úis     rH   ú
<listcomp>z&build_library_data.<locals>.<listcomp>¶  s:   € ð 
ð 
ð 
ØHI�9˜�9�9 QµÀÔ1BÐCÐCð
ð 
ð 
rW   é   )ÚsummaryÚfeature_mastersÚepisode_mastersÚscene_mastersÚshortsÚ
raw_scenesÚ	raw_filesÚepisodes_meta)$r>   rl   rm   ÚlistÚEXPORTS_DIRÚrglobÚ
VIDEOS_DIRr{   ÚsumrŠ   r*   r§   Úrelative_toÚas_posixÚroundr‹   r?   Ú	localtimeÚst_mtimer[   Úresolverw   Úsearchr~   r   r<   r"   rÎ   rA   Úanyrï   ÚsortÚsortedÚkeysÚlenÚrange)/ÚnowÚall_exportsÚall_rawrô   rõ   rö   r÷   Úraw_shots_by_sceneÚtotal_exports_sizeÚtotal_raw_sizerŽ   rŠ   r*   Úrel_to_exportsr�   Úmtimer›   Úabs_pathÚv_mÚversion_numÚep_mÚep_numr"   Úshort_titlesÚcustom_titleÚdur_mÚdur_strÚdescr¹   r¤   Úep_nameÚsc_mÚsc_numÚraw_files_listÚsh_mÚsh_numrà   Úis_shotÚv_tagÚ
item_titleÚitemÚscÚsorted_raw_scenesÚsc_keyÚitemsró   r§   s/                                                 @rH   Úbuild_library_datar-  †   sû  ø€ å
Œ)‰+Œ+€CÝð ˜3¥Ñ,¨sÒ2Ð2ÝÐå•{×(Ò(¨Ñ1Ô1Ñ2Ô2€KÝ•:—?’? 7Ñ+Ô+Ñ,Ô,€Gà€OØ€OØ€MØ€FØ:<ÐåÐCÐC°{ÐCÑCÔCÑCÔCÐÝÐ;Ð;°7Ð;Ñ;Ô;Ñ;Ô;€Nàð {ñ {ˆØ�vŠv‰xŒxˆØŒvˆØ—
’
‘”ˆØŸš¥{Ñ3Ô3×<Ò<Ñ>Ô>ˆÝ˜œ¨Ñ4°aÑ8Ô8ˆÝ”Ð1µ4´>À$Ä-Ñ3PÔ3PÑQÔQˆØ1 Ð1Ð1ˆÝ�q—y’y‘{”{Ñ#Ô#ˆÝŒiÐ(¨%Ñ0Ô0ˆØ+.Ð5•c˜#Ÿ)š) A™,œ,Ñ'Ô'Ð'°Aˆð �Uˆ?ˆ?Ð.°.Ð@Ð@Ý”9˜\¨5Ñ1Ô1ˆDØ+/Ð6•S˜Ÿš A™œÑ'Ô'Ð'°QˆFØ—L’L ¨Ñ,Ô,×4Ò4°W¸bÑAÔA×IÒIÈ(ÐT\Ñ]Ô]×eÒeÐfiÐknÑoÔo×uÒuÑwÔwˆEð <Ø@Ø>Ø:ØIØDðð ˆLð W¨6ÐVÐV°\×5EÒ5EÀfÈeÑ5TÔ5TÐVÐVˆLà�MŠMØØ%ØØ Ø"Ø!Ø) ˜>˜>Ø%Ø Ø 1Ø(Ø1¨Ð1Ð1Ø&ðð ñ ô ð ñ õ ð  Ið  Ið  Ið  Ið  $Hð  Iñ  Iô  Iñ  Iô  Ið 3	Ý”IÐ7¸Ñ?Ô?ˆEØ(-Ð5�e—k’k !‘n”n�n°2ˆGØ—o’o e¨XÑ6Ô6×>Ò>¸sÀIÑNÔN×VÒVÐWZÐ\dÑeÔeˆGà+ˆEð BˆDØˆHØ"ˆEà Ð&Ð&ØS�ð d�Ø�Ø6��Ø 5Ð(Ð(ØH�ð \�Ø�Ø5��Ø 5Ð(Ð(ØH�ð Q�Ø�Ø2��Ø! UÐ*Ð*ØA�ð M�Ø�Ø2��Ø Ð%Ð%ØC�ð E�Ø�Ø5�à×"Ò"ØØØ#ØØ Ø"Ø!Ø Ø 'Ð 7¨<ØØ$Ø,Ø&ð$ð $ñ ô ð ñ ð  %Ð'Ð'Ð+;¸uÐ+DÐ+DÝ”IÐ7¸Ñ?Ô?ˆEØ(-Ð5�e—k’k !‘n”n�n°2ˆGØ—o’o e¨XÑ6Ô6×>Ò>¸sÀIÑNÔN×VÒVÐWZÐ\dÑeÔeˆGà@°gÐ@Ð@Ð@ˆEØ$ˆEØˆHà+¨uÐ4Ð4ØL�Ø*�Ø��Ø)¨UÐ2Ð2ØA�Ø*�Ø�à×"Ò"ØØØtÐjqÐtÐtÐtØØ Ø"Ø!Ø Ø 'Ð :¨g¨?¨?¨?ØØ$Ø,Ø&ð$ð $ñ ô ð ñ ð " UÐ*Ð*¨nÀÐ.EÐ.EÝ”9˜\¨5Ñ1Ô1ˆDØ+/Ð6•S˜Ÿš A™œÑ'Ô'Ð'°QˆFÝ”IÐ7¸Ñ?Ô?ˆEØ(-Ð5�e—k’k !‘n”n�n°2ˆGØ—o’o e¨XÑ6Ô6×>Ò>¸sÀIÑNÔN×VÒVÐWZÐ\dÑeÔeˆGå$×(Ò(¨Ð1B¸&Ð1BÐ1BÑCÔCˆGà×"Ò"ØØ) ˜>˜>Ø%Ø#Ð<Ð<Ð<ð  oÐY_ð   oð   oð   oØØ Ø"Ø!Ø Ø 'Ð :¨g¨?¨?¨?Ø1¨Ð1Ð1Ø,Ø&ð$ð $ñ ô ð ñ  ð  Ð&Ð&¨8°uÐ+<Ð+<ÀÈEÐAQÐAQÝ”9˜\¨5Ñ1Ô1ˆDÝ”9˜_¨eÑ4Ô4ˆDØ+/Ð6•S˜Ÿš A™œÑ'Ô'Ð'°QˆFØ+/Ð6•S˜Ÿš A™œÑ'Ô'Ð'°QˆFà× Ò ØØ) ˜>˜>Ø%Ø- Ð-Ð-Ð-Ø#ØU &ÐUÐU°fÐUÐUÐUÐUØØ Ø"Ø!Ø ØB &ÐBÐB°fÐBÐBÐBØ*Ø&ð"ð "ñ ô ð ñ  ùð ×ÒÐKÐKÐUYÐÑZÔZÐZØ×ÒÐHÐHÐÑIÔIÐIØ×ÒÐGÐGÐÑHÔHÐHØ
‡K‚KÐ.Ð.€KÑ/Ô/Ð/ð €NØð .$ñ .$ˆØ�vŠv‰xŒxˆØŒvˆØ—
’
‘”ˆÝ˜œ¨Ñ4°aÑ8Ô8ˆÝ”Ð1µ4´>À$Ä-Ñ3PÔ3PÑQÔQˆØ& Ð&Ð&ˆÝ�q—y’y‘{”{Ñ#Ô#ˆÝŒiÐ(¨%Ñ0Ô0ˆØ+.Ð5•c˜#Ÿ)š) A™,œ,Ñ'Ô'Ð'°AˆåŒy˜ uÑ-Ô-ˆÝŒy˜¨%Ñ0Ô0ˆÝŒy˜¨Ñ/Ô/ˆà'+Ð2•�T—Z’Z ‘]”]Ñ#Ô#Ð#°ˆØ'+Ð2•�T—Z’Z ‘]”]Ñ#Ô#Ð#°ˆØ'+Ð2•�T—Z’Z ‘]”]Ñ#Ô#Ð#°ˆà4˜&Ð4Ð4¨Ð4Ð4Ð4ˆ	ØÐ.Ð.Ð.Ø,.Ð˜yÑ)à˜E�/ˆØ&)Ð1Ð"�[Ð"Ð"Ð"¨rˆØelð  ]Ða˜fÐaÐa°&ÐaÐaÐaÈÐaÐaÐTYÐaÐaÐaÐaÐrv×r~Òr~ð  @Fð  HJñ  sKô  sK÷  sSò  sSð  TWð  Y\ñ  s]ô  s]ˆ
ð
Ø�Dð
à�~˜V�~�~ð
ð ˜6ð
ð Ð)˜VÐ)Ð)Ð)ð	
ð
 ˜ð
ð ¨7Ð>Ð'˜6Ð'Ð'Ð'Ð'¸ð
ð ˜ð
ð �Zð
ð �3ð
ð �Hð
ð �wð
ð ˜ð
ð  WÐ;˜E˜E°)ð
ð �fð
ð  gÐ>˜
˜
°;ð
ð  �{ð!
ˆð$ 	˜9Ô%×,Ò,¨TÑ2Ô2Ð2Ø×Ò˜dÑ#Ô#Ð#Ñ#à ð \ð \ˆØ˜2Ô×#Ò#Ð(ZÐ(ZÐ#Ñ[Ô[Ð[Ð[ð ÐÝÐ+×0Ò0Ñ2Ô2Ñ3Ô3ð ð ˆØ" 6Ô*ˆÝŒy˜ vÑ.Ô.ˆÝŒy˜¨&Ñ1Ô1ˆØ'+Ð2•�T—Z’Z ‘]”]Ñ#Ô#Ð#°ˆØ'+Ð2•�T—Z’Z ‘]”]Ñ#Ô#Ð#°ˆà× Ò ØØ!ØØS˜fÐSÐS°&ÐSÐSÐSÅÀEÁ
Ä
ÐSÐSÐSÝ˜‘Z”ZØð"
ð "
ñ 	ô 	ð 	ð 	õ ˜KÑ(Ô(­3¨w©<¬<Ñ7Ý!$ _Ñ!5Ô!5Ý!$ _Ñ!5Ô!5Ý" =Ñ1Ô1Ý˜F™œÝ˜w™<œ<Ý!&Ð'9¸WÑ'EÀqÑ!IÔ!IÝ" >°WÑ#=¸qÑAÔAÝ!Ð#5¸Ñ#FÈ7Ñ"SÐUVÑWÔWð
ð 
€Gð Ø*Ø*Ø&ØØ'Ø#ð
ð 
ÝMRÐSTÐVWÉ[Ì[ð
ñ 
ô 
ðð €Nð €KÝÐrW   ú/)Úresponse_classc               ƒ   óª   K  — t           dz  } |                      ¦   «         st          dd¬¦  «        S t          |                      d¬¦  «        ¦  «        S )Nz
index.htmlz<h1>index.html not found</h1>é”  ©Ústatus_coder5   r6   )ÚTEMPLATES_DIRÚexistsr   Ú	read_text)Ú
index_paths    rH   Úserve_indexr8  ½  sX   è è € å Ñ-€JØ×ÒÑÔð NÝÐ;ÈÐMÑMÔMÐMÝ˜
×,Ò,°gÐ,Ñ>Ô>Ñ?Ô?Ð?rW   z/api/libraryc               ƒ   ó"   K  — t          ¦   «         S rˆ   )r-  r^   rW   rH   Úget_libraryr:  Ä  s   è è € åÑÔÐrW   z/api/videosr£   c              ƒ   ól  ‡ K  — t          ¦   «         }g }|                     |d         ¦  «         |                     |d         ¦  «         |                     |d         ¦  «         |                     |d         ¦  «         |                     |d         ¦  «         ‰ rˆ fd„|D ¦   «         }||d         dœS )	Nrô   rõ   rö   r÷   rù   c                 óF   •— g | ]}|                      d ¦  «        ‰k    ¯|‘ŒS )r£   rÍ   )r�   Úvr£   s     €rH   rñ   zlist_videos.<locals>.<listcomp>Ô  s/   ø€ ÐGÐGÐG˜¨¯ª¨zÑ):Ô):¸hÒ)FÐ)F�1Ð)FÐ)FÐ)FrW   ró   )r   ró   )r-  Úextend)r£   ÚlibÚordereds   `  rH   Úlist_videosrA  È  s¿   øè è € å
Ñ
Ô
€Cà€GØ‡N‚N�3Ð(Ô)Ñ*Ô*Ð*Ø‡N‚N�3Ð(Ô)Ñ*Ô*Ð*Ø‡N‚N�3�Ô'Ñ(Ô(Ð(Ø‡N‚N�3�x”=Ñ!Ô!Ð!Ø‡N‚N�3�{Ô#Ñ$Ô$Ð$àð HØGÐGÐGÐG˜gÐGÑGÔGˆà¨#¨i¬.Ð9Ð9Ð9rW   z/api/charactersc               ƒ   ó&  K  — i } t                                ¦   «         rñt          t                                ¦   «         ¦  «        D ]Ê}|                     ¦   «         r´|j        }g }t          |                     d¦  «        ¦  «        D ]ƒ}d|j        v }|                     |j        |j        d|› d|j        › �t          | 
                    ¦   «         ¦  «        |t          |                     ¦   «         j        dz  d¦  «        dœ¦  «         Œ„|| |<   ŒËd| iS )	Nz*.pngÚ720pz/assets/characters/r.  r‘   rg   )r*   rp   r›   rœ   Úis_720pr�   Úgroups)ÚCHARACTERS_DIRr5  r	  ÚiterdirÚis_dirr*   r{   rA   rp   r[   r  r  rŠ   r‹   )rE  Ú	group_dirÚ
group_namer,  ÚimgrD  s         rH   Úlist_charactersrL  Ø  s   è è € à€FÝ×ÒÑÔð +Ý¥× 6Ò 6Ñ 8Ô 8Ñ9Ô9ð 	+ð 	+ˆIØ×ÒÑ!Ô!ð +Ø&œ^�
Ø�Ý! )§.¢.°Ñ"9Ô"9Ñ:Ô:ð 	ð 	�CØ$¨¬Ð0�GØ—L’LØ #¤Ø #¤ØL°ZÐLÐLÀ#Ä(ÐLÐLÝ # C§K¢K¡M¤MÑ 2Ô 2Ø#*Ý#(¨¯ª©¬Ô);¸{Ñ)KÈQÑ#OÔ#Oð"ð "ñ ô ð ð ð &+��zÑ"øØ�fÐÐrW   z/api/promptsc               ƒ   óè   K  — t                                ¦   «         rV	 t          j        t                                d¬¦  «        ¦  «        S # t
          $ r} dt          | ¦  «        icY d } ~ S d } ~ ww xY wi S )Nr5   r6   Úerror)ÚPROMPTS_FILEr5  ÚjsonÚloadsr6  rC   r[   )Úes    rH   Úget_promptsrS  í  s„   è è € å×ÒÑÔð %ð	%Ý”:�l×4Ò4¸gÐ4ÑFÔFÑGÔGÐGøÝð 	%ð 	%ð 	%Ø�S ™VœVÐ$Ð$Ð$Ð$Ð$Ð$Ð$øøøøð	%øøøà€Is   �,A
 Á

A/ÁA*Á$A/Á*A/z
/api/shotsu&   Lá»�c theo Scene ID (vd: ep01_scene02))r¸   u    Lá»�c theo Episode ID (vd: ep01)rÈ   rŸ   c              ƒ   óF  ‡‡K  — i }t                                ¦   «         rn	 t          j        t                                d¬¦  «        ¦  «        }|                     di ¦  «        }n)# t          $ r}t          |¦  «        i dœcY d }~S d }~ww xY w| rG|                      ¦   «          	                    ¦   «         Šˆfd„| 
                    ¦   «         D ¦   «         }nH|rF|                     ¦   «          	                    ¦   «         Šˆfd„| 
                    ¦   «         D ¦   «         }d|iS )Nr5   r6   Úmotion_prompts)rN  râ   c                 óH   •— i | ]\  }}‰|                      ¦   «         v ¯||“ŒS r^   )r§   )r�   r¦   r=  Úsc_cleans      €rH   ú
<dictcomp>z"list_shots_api.<locals>.<dictcomp>  s1   ø€ ÐIÐIÐI™$˜!˜Q°8¸q¿wºw¹y¼yÐ3HÐ3H��AÐ3HÐ3HÐ3HrW   c                 ój   •— i | ]/\  }}|                      ¦   «                              ‰¦  «        ¯,||“Œ0S r^   )r§   Ú
startswith)r�   r¦   r=  Úep_cleans      €rH   rX  z"list_shots_api.<locals>.<dictcomp>  s:   ø€ ÐRÐRÐR™$˜!˜Q°1·7²7±9´9×3GÒ3GÈÑ3QÔ3QÐR��AÐRÐRÐRrW   râ   )rO  r5  rP  rQ  r6  rÎ   rC   r[   r§   Ústripr,  )rÈ   rŸ   râ   ÚdatarR  r[  rW  s        @@rH   Úlist_shots_apir^  ö  s5  øøè è € ð
 €EÝ×ÒÑÔð 2ð	2Ý”:�l×4Ò4¸gÐ4ÑFÔFÑGÔGˆDØ—H’HÐ-¨rÑ2Ô2ˆEˆEøÝð 	2ð 	2ð 	2Ý  ™VœV¨bÐ1Ð1Ð1Ð1Ð1Ð1Ð1Ð1øøøøð	2øøøð ð SØ—;’;‘=”=×&Ò&Ñ(Ô(ˆØIÐIÐIÐI %§+¢+¡-¤-ÐIÑIÔIˆˆØ	ð SØ—=’=‘?”?×(Ò(Ñ*Ô*ˆØRÐRÐRÐR %§+¢+¡-¤-ÐRÑRÔRˆà�UÐÐs   ¡AA% Á%
BÁ/BÂ BÂBz/api/scenesc              ƒ   óÄ   ‡K  — t          ¦   «         }|                     dg ¦  «        }| r4|                      ¦   «                              ¦   «         Šˆfd„|D ¦   «         }d|iS )Nrø   c                 óf   •— g | ]-}|                      d d¦  «                             ‰¦  «        ¯+|‘Œ.S )rà   r-   )rÎ   rZ  )r�   r)  r[  s     €rH   rñ   z#list_scenes_api.<locals>.<listcomp>  s;   ø€ Ð^Ð^Ð^˜R°·²¸ÀRÑ1HÔ1H×1SÒ1SÐT\Ñ1]Ô1]Ð^�bÐ^Ð^Ð^rW   Úscenes)r-  rÎ   r§   r\  )rŸ   r?  rø   r[  s      @rH   Úlist_scenes_apirb    sm   øè è € õ Ñ
Ô
€CØ—’˜ rÑ*Ô*€JØð _Ø—=’=‘?”?×(Ò(Ñ*Ô*ˆØ^Ð^Ð^Ð^ :Ð^Ñ^Ô^ˆ
Ø�jÐ!Ð!rW   z/api/episodesc            	   ƒ   óV  K  — g } t                                ¦   «         r‰t          t                                d¦  «        ¦  «        D ]a}|                      |j        |j                             dd¦  «        t          | 	                    ¦   «         j
        dz  d¦  «        dœ¦  «         Œbd| iS )NzTAP_*.mdr–   r—   i   rf   )Úfilenamer"   Úsize_kbÚepisodes)ÚFILMMAKER_DIRr5  r	  r{   rA   r*   rp   r<   r  rŠ   r‹   )rf  Úeps     rH   Úlist_episodesri    s«   è è € à€HÝ×ÒÑÔð Ý�×+Ò+¨JÑ7Ô7Ñ8Ô8ð 	ð 	ˆBØ�OŠOØœGØœŸš¨¨cÑ2Ô2Ý  §¢¡¤Ô!2°TÑ!9¸1Ñ=Ô=ðð ñ ô ð ð ð
 ˜Ð!Ð!rW   z/api/episode/{filename}rd  c              ƒ   óx  K  — t           | z                       ¦   «         }t                                ¦   «         }|                     |¦  «        r^|                     ¦   «         rJ|                     ¦   «         r6|j                             ¦   «         dk    r| |                     d¬¦  «        dœS t          dd¬¦  «        ‚)Nz.mdr5   r6   )rd  Úcontentr1  zEpisode not found©r3  Údetail)	rg  r  Úis_relative_tor5  Úis_filerq   r§   r6  r   )rd  Úep_pathÚfilm_dir_resolveds      rH   Úget_episode_contentrr  #  s¸   è è € å˜xÑ'×0Ò0Ñ2Ô2€GÝ%×-Ò-Ñ/Ô/ÐØ×ÒÐ/Ñ0Ô0ð V°W·^²^Ñ5EÔ5Eð VÈ'Ï/Ê/ÑJ[ÔJ[ð VÐ`gÔ`n×`tÒ`tÑ`vÔ`vÐzÒ`Ð`Ø$°×1BÒ1BÈGÐ1BÑ1TÔ1TÐUÐUÐUÝ
 CÐ0CÐ
DÑ
DÔ
DÐDrW   z/api/statusc               ƒ   ó   K  — t           S rˆ   )r@   r^   rW   rH   Ú
get_statusrt  +  s   è è € åÐrW   rL   Úscene_titlec           	      óð	  — 	 dt           d<   | t           d<   dt           d<   t          d|pd› �¦  «         t          j        dd	d
dd| gddt	          t
          ¦  «        ¬¦  «         t          j        g d¢ddt	          t
          ¦  «        ¬¦  «         t          d¦  «         d}d}t          t                               d¦  «        ¦  «        }t          |¦  «        D �]™}t          j        d¦  «         t          j        g d¢ddt	          t
          ¦  «        ¬¦  «        }|j        }d|v r'd|dz  › d�t           d<   t          d|dz  › d�¦  «         d|v �rdt           d<   t          d¦  «         d}|                     ¦   «         D ]@}	d|	v r:d|	v r6|	                     d¦  «        d                               d!¦  «        d"         } nŒAt          j        dd	d
d#d$|› �gddt	          t
          ¦  «        ¬¦  «         t          j        d%¦  «         t          t                               d¦  «        ¦  «        }
|
|z
  }|smt          t                               d¦  «        d&„ d¬'¦  «        }|r@t          j
        ¦   «         |d"                              ¦   «         j        z
  d(k     r	|d"         g}|�rËt%          |¦  «        d"         }d)}|rDd*                     d+„ |D ¦   «         ¦  «                             d,¦  «                             ¦   «         }t-          t.          |¦  «        }t.          |z  }t1          j        ||¦  «         	 d"d l}|                     t	          |¦  «        ¦  «        }t9          |                     |j        ¦  «        ¦  «        }|                     |j        tA          d"|d-z
  ¦  «        ¦  «         | !                    ¦   «         \  }}| "                    ¦   «          |rI|�GtF          |z  }| $                    dd¬.¦  «         | %                    t	          |d/z  ¦  «        |¦  «         n# tL          $ r Y nw xY w|t           d0<   d1t           d<   d2|› �t           d<   t          d3|› �¦  «         d}i a' n�Œ›|s%d4t           d<   d5t           d<   t          d6¦  «         d S d S # tL          $ rN}d4t           d<   d7t	          |¦  «        › �t           d<   t          d8t	          |¦  «        › �¦  «         Y d }~d S d }~ww xY w)9NÚ
generatingr.   r0   u$   Ä�ang gá»­i prompt Ä‘áº¿n Muse.ai...r/   u   Báº¯t Ä‘áº§u táº¡o video: ÚCustomúagent-browserú	--sessionÚmuseÚfillz@e14T)Úcapture_outputÚtextÚcwd)ry  rz  r{  Úclickz@e51u#   Ä�Ã£ gá»­i prompt lÃªn chat Muse.aié   Fr†   ri   )ry  rz  r{  Úsnapshotz-iu   Ä�ang táº¡o videou   Muse Ä‘ang render video... (zs)zRender progress: r¯   u   Táº£i video xuá»‘ngu,   Render hoÃ n táº¥t! Ä�ang táº£i file vá»�...u'   Render hoÃ n táº¥t! Báº¥m nÃºt táº£i...Úe79z[ref=éÿÿÿÿú]r   r€  ú@rh   c                 ó4   — |                       ¦   «         j        S rˆ   )rŠ   r  )r‚   s    rH   rÑ   z.run_agent_browser_generation.<locals>.<lambda>Z  s   € ÈqÏvÊvÉxÌxÔO`€ rW   rÒ   éx   Úcustom_generationr-   c              3   óF   K  — | ]}|                      ¦   «         r|nd V — ŒdS )r–   N)Úisalnum)r�   Úcs     rH   r�   z/run_agent_browser_generation.<locals>.<genexpr>b  s3   è è € Ð+[Ð+[È!°·²±´Ð,E¨A¨AÀ#Ð+[Ð+[Ð+[Ð+[Ð+[Ð+[rW   r–   rf   r   zclean_frame_239.jpgr1   Ú	completedu   Ä�Ã£ táº£i thÃ nh cÃ´ng: u   HoÃ n thÃ nh: Ä�Ã£ lÆ°u rN  u!   Timeout chá»� render tá»« Muse.aiu3   Timeout: KhÃ´ng phÃ¡t hiá»‡n file download sau 120sõ   Lá»—i: zException: )(r@   rI   Ú
subprocessÚrunr[   ÚBASE_DIRÚsetÚDOWNLOADS_DIRr{   r  r>   ÚsleepÚstdoutÚ
splitlinesÚsplitr	  rŠ   r  rû   Újoinr\  r§   r„   rþ   ÚshutilÚcopy2Úcv2ÚVideoCapturer~   rÎ   ÚCAP_PROP_FRAME_COUNTÚCAP_PROP_POS_FRAMESr}   ÚreadÚreleaseÚKEYFRAMES_DIRÚmkdirÚimwriterC   rl   )rL   ru  Úmax_attemptsÚvideo_downloadedÚinitial_downloadsrð   Úsnap_resÚoutputÚrefÚlineÚcurrent_downloadsÚ	new_filesÚrecentÚtarget_sourceÚ	safe_stemÚ
clean_nameÚtarget_destr›  ÚcapÚtotal_framesÚretÚ
tail_frameÚkf_dirrR  s                           rH   Úrun_agent_browser_generationr·  /  s·  € ðV(Ø*�	�(ÑØ&,�	Ð"Ñ#Ø%K�	�/Ñ"ÝÐF¨[Ð-D¸HÐFÐFÑGÔGÐGõ 	Œ˜¨°f¸fÀfÈfÐUÐfjÐquÕ{~õ  @Hñ  |Iô  |Ið  	Jñ  	Jô  	Jð  	JÝŒÐNÐNÐNÐ_cÐjnÕtwõ  yAñ  uBô  uBð  	Cñ  	Cô  	Cð  	CÝÐ5Ñ6Ô6Ð6ð ˆØ ÐÝ¥× 2Ò 2°7Ñ ;Ô ;Ñ<Ô<Ðå�|Ñ$Ô$ð <	ñ <	ˆAÝŒJ�q‰MŒMˆMÝ!”~Ð&^Ð&^Ð&^ÐosÐz~õ  EHõ  IQñ  ERô  ERð  Sñ  Sô  SˆHØ”_ˆFà" fÐ,Ð,Ø-SÈAÈaÉCÐ-SÐ-SÐ-S•	˜/Ñ*ÝÐ2¨A¨a©CÐ2Ð2Ð2Ñ3Ô3Ð3à$¨Ð.Ñ.Ø-[•	˜/Ñ*ÝÐAÑBÔBÐBà�Ø"×-Ò-Ñ/Ô/ð ð �DØ,°Ð4Ð4¸ÀD¸¸Ø"Ÿjšj¨Ñ1Ô1°"Ô5×;Ò;¸CÑ@Ô@ÀÔC˜Ø˜øå” °¸fÀgÈyÐSVÈyÈyÐYÐjnÐuyõ  @Cõ  DLñ  @Mô  @Mð  Nñ  Nô  Nð  NÝ”
˜1‘”�å$'­×(:Ò(:¸7Ñ(CÔ(CÑ$DÔ$DÐ!Ø-Ð0AÑA�	Ø ð 0Ý#¥M×$6Ò$6°wÑ$?Ô$?ÐE`ÐE`ÐjnÐoÑoÔo�FØð 0¥4¤9¡;¤;°¸´·²Ñ1AÔ1AÔ1JÑ#JÈSÒ#PÐ#PØ%+¨A¤Y K˜	àñ Ý$(¨¡O¤O°AÔ$6�MØ 3�IØ"ð oØ$&§G¢GÐ+[Ð+[È{Ð+[Ñ+[Ô+[Ñ$[Ô$[×$aÒ$aÐbeÑ$fÔ$f×$lÒ$lÑ$nÔ$n˜	å!5µjÀ)Ñ!LÔ!L�JÝ",¨zÑ"9�KÝ”L °Ñ<Ô<Ð<ðØ"˜
˜
˜
Ø!×.Ò.­s°;Ñ/?Ô/?Ñ@Ô@˜Ý'*¨3¯7ª7°3Ô3KÑ+LÔ+LÑ'MÔ'M˜ØŸš Ô 7½¸QÀÈqÑ@PÑ9QÔ9QÑRÔRÐRØ*-¯(ª(©*¬*™˜˜ZØŸš™œ˜Øð Y :Ð#9Ý%2°YÑ%>˜FØ"ŸLšL°À˜LÑEÔEÐEØŸKšK­¨FÐ5JÑ,JÑ(KÔ(KÈZÑXÔXÐXøøÝ$ð ð ð Ø˜ðøøøð /9•I˜lÑ+Ø*5•I˜hÑ'Ø1YÈZÐ1YÐ1Y•I˜oÑ.ÝÐC°zÐCÐCÑDÔDÐDØ'+Ð$Ø%'�NØ�Eùàð 	KØ")�I�hÑØ)L�I�oÑ&ÝÐIÑJÔJÐJÐJÐJð	Kð 	Køõ
 ð (ð (ð (Ø%�	�(ÑØ%7­s°1©v¬vÐ%7Ð%7�	�/Ñ"ÝÐ&�c !™fœfÐ&Ð&Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'øøøøð(øøøs?   ‚L6R Ì9C/P)Ð(R Ð)
P6Ð3R Ð5P6Ð6A#R Ò
S5Ò'AS0Ó0S5Úreqc           	      óä  — | j         }| j        }| j        }| j        p|p|r|nd}|�r4	 ddlm}m} dt          d<   |pd|› d�t          d<   d	|› d
�t          d<   t          d|› �¦  «          ||| j	        |¬¦  «        }|rS ||¦  «        }|r|j
        n|› d�}	dt          d<   |	t          d<   d|	› �t          d<   t          d|› d|	› �¦  «         i adS dt          d<   d|› �t          d<   t          d|› �¦  «         dS # t          $ rQ}
dt          d<   dt          |
¦  «        › �t          d<   t          d|› dt          |
¦  «        › �¦  «         Y d}
~
dS d}
~
ww xY w|rt          ||¦  «         dS dS )uh   Ä�iá»�u phá»‘i sinh video: Æ°u tiÃªn orchestrator náº¿u cÃ³ shot_id, fallback prompt náº¿u tÃ¹y chá»‰nh.rx  r   )Úrender_single_shotÚfind_rendered_videorw  r.   z[Shot: r…  r0   u   Ä�ang render shot z qua Production Orchestrator...r/   u   Báº¯t Ä‘áº§u render shot: )rO   Úprompt_overridez_10s.mp4r�  r1   u   Ä�Ã£ render thÃ nh cÃ´ng: u   HoÃ n thÃ nh shot r˜   NrN  u   Lá»—i render shot rŽ  zException render shot )rM   rL   rN   r"   Úproduction_orchestratorrº  r»  r@   rI   rO   r*   rl   rC   r[   r·  )r¸  rM   rL   rN   r"   rº  r»  ÚsuccessÚv_pathÚv_namerR  s              rH   Úrun_unified_generationrÁ  ‰  s#  € ð Œk€GØŒZ€FØŒ|€HØŒIÐG˜ÐG°Ð&F g g¸h€Eàñ ð	ØWÐWÐWÐWÐWÐWÐWÐWØ".�I�hÑØ*0Ð*HÐ4H¸gÐ4HÐ4HÐ4H�IÐ&Ñ'Ø)f¸gÐ)fÐ)fÐ)f�I�oÑ&ÝÐ:°Ð:Ð:Ñ;Ô;Ð;à(Ð(ØØœOØ &ðñ ô ˆGð
 ð Ø,Ð,¨WÑ5Ô5�Ø(.ÐH˜œ˜°wÐ4HÐ4HÐ4H�Ø&1•	˜(Ñ#Ø*0•	˜,Ñ'Ø-RÈ&Ð-RÐ-R•	˜/Ñ*ÝÐ@¨WÐ@Ð@¸Ð@Ð@ÑAÔAÐAØ!#�Ø�à&-•	˜(Ñ#Ø-KÀ'Ð-KÐ-K•	˜/Ñ*ÝÐ6¨WÐ6Ð6Ñ7Ô7Ð7Ø�øÝð 	ð 	ð 	Ø")�I�hÑØ);µ3°q±6´6Ð);Ð);�I�oÑ&ÝÐ@¨WÐ@Ð@½¸A¹¼Ð@Ð@ÑAÔAÐAØˆFˆFˆFˆFˆFøøøøð		øøøð ð 4Ý$ V¨UÑ3Ô3Ð3Ð3Ð3ð4ð 4s   ©B(C> Ã)C> Ã>
EÄAEÅErb   rN   ra   rc   c           	      ó  — 	 dt           d<   d| › d�t           d<   t          d| › �¦  «         	 ddlm}  || ||¬	¦  «        }n!# t          $ r d
}t          d¦  «         Y nw xY w|r”t          |¦  «                             ¦   «         rsdt           d<   t          |¦  «        j        t           d<   d| › dt          |¦  «        j        › �t           d<   t          d| › dt          |¦  «        j        › �¦  «         i ad
S dt           d<   d| › d�t           d<   t          d| › �¦  «         d
S # t          $ rQ}dt           d<   dt          |¦  «        › �t           d<   t          d| › dt          |¦  «        › �¦  «         Y d
}~d
S d
}~ww xY w)u@   Thá»±c thi ghÃ©p ná»‘i Master Scene qua Production Orchestrator.Úconcatenatingr.   u'   Ä�ang ghÃ©p ná»‘i cÃ¡c shot cho cáº£nh z...r/   u(   Báº¯t Ä‘áº§u ghÃ©p ná»‘i Master cáº£nh: r   )Úconcat_scene_shots)ra   rc   Nu8   Lá»—i: KhÃ´ng tÃ¬m tháº¥y module production_orchestratorr�  r1   u    GhÃ©p ná»‘i thÃ nh cÃ´ng cáº£nh r˜   u    HoÃ n thÃ nh ghÃ©p ná»‘i cáº£nh z -> rN  u   GhÃ©p ná»‘i cáº£nh u0    tháº¥t báº¡i (thiáº¿u shot hoáº·c lá»—i FFmpeg)u%   Tháº¥t báº¡i khi ghÃ©p ná»‘i cáº£nh: u   Lá»—i ghÃ©p ná»‘i: u   Exception khi ghÃ©p ná»‘i )r@   rI   r½  rÄ  ÚImportErrorr   r5  r*   rl   rC   r[   )rN   ra   rc   rÄ  ÚresultrR  s         rH   Úrun_scene_concatrÇ  µ  sû  € ðCØ-�	�(ÑØ%\ÈxÐ%\Ð%\Ð%\�	�/Ñ"ÝÐE¸8ÐEÐEÑFÔFÐFð	PØBÐBÐBÐBÐBÐBØ'Ð'¨¸kÐYfÐgÑgÔgˆFˆFøÝð 	Pð 	Pð 	PØˆFÝÐNÑOÔOÐOÐOÐOð	Pøøøð ð 		H•d˜6‘l”l×)Ò)Ñ+Ô+ð 		HØ"-�I�hÑÝ&*¨6¡l¤lÔ&7�I�lÑ#Ø)kÈHÐ)kÐ)kÕX\Ð]cÑXdÔXdÔXiÐ)kÐ)k�I�oÑ&ÝÐX°xÐXÐXÅTÈ&Á\Ä\ÔEVÐXÐXÑYÔYÐYØˆNˆNˆNà")�I�hÑØ)y¸xÐ)yÐ)yÐ)y�I�oÑ&ÝÐF¸HÐFÐFÑGÔGÐGÐGÐGøÝð Cð Cð CØ%�	�(ÑØ%C½3¸q¹6¼6Ð%CÐ%C�	�/Ñ"ÝÐA¨XÐAÐA½¸Q¹¼ÐAÐAÑBÔBÐBÐBÐBÐBÐBÐBÐBøøøøðCøøøsB   ‚*D% ­A ÁD% ÁA ÁD% ÁA Á BD% Ã9*D% Ä%
F Ä/AE;Å;F z/api/generateÚbg_tasksc              ƒ   óŒ   K  — t           d         dv rt          dddœd¬¦  «        S |                     t          | ¦  «         dd	dœS )
Nr.   ©rw  rÃ  Úbusyu:   Má»™t tÃ¡c vá»¥ sinh video hoáº·c ghÃ©p ná»‘i Ä‘ang cháº¡y©r.   Úmessageé™  r2  Úacceptedu2   Ä�Ã£ báº¯t Ä‘áº§u tÃ¡c vá»¥ sinh video trong ná»�n)r@   r   Úadd_taskrÁ  ©r¸  rÈ  s     rH   Útrigger_generaterÒ  Ó  sl   è è € õ �ÔÐ=Ð=Ð=Ý vÐ:vÐwÐwð  FIð  Jñ  Jô  Jð  	Jà×ÒÕ,¨cÑ2Ô2Ð2Ø Ð-aÐbÐbÐbrW   z/api/concatc              ƒ   óJ  K  — t           d         dv rt          dddœd¬¦  «        S | j        r| j                             ¦   «         st	          dd	¬
¦  «        ‚|                     t          | j                             ¦   «         | j        | j        pd¦  «         dd| j        › d�dœS )Nr.   rÊ  rË  u"   Má»™t tÃ¡c vá»¥ khÃ¡c Ä‘ang cháº¡yrÌ  rÎ  r2  i¦  zscene_id is requiredrl  rb   rÏ  u/   Ä�Ã£ báº¯t Ä‘áº§u tÃ¡c vá»¥ ghÃ©p ná»‘i cáº£nh u    trong ná»�n)	r@   r   rN   r\  r   rÐ  rÇ  ra   rc   rÑ  s     rH   Útrigger_concatrÔ  Ü  s½   è è € õ �ÔÐ=Ð=Ð=Ý vÐ:^Ð_Ð_ÐmpÐqÑqÔqÐqàŒ<ð L˜sœ|×1Ò1Ñ3Ô3ð LÝ¨Ð4JÐKÑKÔKÐKà×ÒÕ&¨¬×(:Ò(:Ñ(<Ô(<¸c¼oÈsÔO`ÐOgÐdgÑhÔhÐhØ Ð-yÐ_bÔ_kÐ-yÐ-yÐ-yÐzÐzÐzrW   Ú__main__Úinfo)ÚhostÚportÚ	log_level)rn   rˆ   )Nrb   )]ÚosÚsysrP  r>   r{   r™  rw   Úasyncior�  Úpathlibr   Útypingr   r   r   r   Úpydanticr   r	   ÚuvicornÚfastapir
   r   r   r   Úfastapi.staticfilesr   Úfastapi.responsesr   r   r   Úfastapi.middleware.corsr   ÚDEFAULT_HOSTÚDEFAULT_PORTÚ__file__r  Úparentr‘  ÚPIPELINE_DIRrþ   rü   rF  r¡  rO  rg  r4  rœ   Ú
expanduserr“  r[   rŽ   Úinsertr¢  ÚappÚadd_middlewareÚmountr5  r@   Úplatformr•  ÚreconfigureÚstderrrC   rI   rK   r`   rï   rl   r\   rm   rd   r„   r-  rÎ   r8  r:  rA  rL  rS  r^  rb  ri  rr  rt  r·  rÁ  rÇ  ÚpostrÒ  rÔ  rX   r�  r^   rW   rH   ú<module>ró     s™  ðØ 	€	€	€	€	Ø 
€
€
€
Ø €€€Ø €€€Ø €€€Ø €€€Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /à €€€Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ +Ð +Ð +Ð +Ð +Ð +Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ 2Ð 2Ð 2Ð 2Ð 2Ð 2ð €Ø€àˆ4�‰>Œ>×!Ò!Ñ#Ô#Ô*Ô1Ô8Ô?€ØÐ2Ñ2€Ø˜Ñ# hÑ.€
Ø˜Ñ%€Ø˜KÑ'¨,Ñ6€Ø˜;Ñ&¨Ñ4€Ø˜/Ñ)Ð,HÑH€Ø˜;Ñ&€Ø˜<Ñ'¨+Ñ5€Ø��R”W×'Ò'¨Ñ,Ô,Ñ-Ô-°Ñ;€ð ˆ#ˆlÑ
Ô
˜S˜S ™]œ]Ð	+ð ð €AØ�”ÐÐØŒ�Š˜˜1ÑÔÐøà 
× Ò ˜¨Ð Ñ -Ô -Ð -Ø × Ò ˜$¨Ð Ñ .Ô .Ð .à€gÐ>ÈÐNÑNÔN€à × Ò ØØ�%ØØ�%Ø�%ð ñ ô ð ð ‡	‚	Ð
˜K˜K°#°#°j±/´/ÐBÑBÔBÈ€	Ñ RÔ RÐ RØ ‡	‚	Ð
  °c°c¸.Ñ6IÔ6IÐ JÑ JÔ JÐQ]€	Ñ ^Ô ^Ð ^Ø×ÒÑÔð `Ø‡I‚IÐ! ; ;¸¸¸]Ñ9KÔ9KÐ#LÑ#LÔ#LÐS^€IÑ_Ô_Ð_Ø×ÒÑÔð ZØ‡I‚IÐ  °s°s¸;Ñ7GÔ7GÐ!HÑ!HÔ!HÈy€IÑYÔYÐYð ØØØTØ�$”)‘+”+Øðð €	ð „<�7ÒÐðØŒ
×Ò¨ÐÑ0Ô0Ð0ØŒ
×Ò¨ÐÑ0Ô0Ð0Ð0øØð ð ð Øˆðøøøð�ð ð ð ð ðð ð ð ð �iñ ô ð ð)ð )ð )ð )ð )�Iñ )ô )ð )ð :ØHØ>ØCØOØCðð €ð "$€��S˜#�X”Ð #Ð #Ñ #Ø€ˆUÐ Ð Ñ ð.ð . 4ð .¨sð .¸Cð .ÈSð .ð .ð .ð .ðu˜D  c œNð uð uð uð uðn	 ‡‚ˆ˜\€Ñ*Ô*ð@ð @ñ +Ô*ð@ð ‡‚ˆÑÔð ð  ñ Ôð ð ‡‚ˆÑÔð:ð : ¨¤ð :ð :ð :ñ Ôð:ð ‡‚Ð	ÑÔðð ñ Ôðð( ‡‚ˆÑÔðð ñ Ôðð ‡‚ˆÑÔà ˜5 Ð3[Ð\Ñ\Ô\Ø"˜U 4Ð5WÐXÑXÔXðð Ø�CŒ=ðà�cŒ]ðð ð ñ Ôðð* ‡‚ˆÑÔà"˜U 4Ð5WÐXÑXÔXð"ð "Ø�cŒ]ð"ð "ð "ñ Ôð"ð ‡‚ˆÑÔð	"ð 	"ñ Ôð	"ð ‡‚Ð	"Ñ#Ô#ðE¨ð Eð Eð Eñ $Ô#ðEð ‡‚ˆÑÔðð ñ ÔððX(¨ð X(¸3ð X(ð X(ð X(ð X(ðt*4 ð *4ð *4ð *4ð *4ðXCð C˜sð C°¸#´ð CÐV[ð Cð Cð Cð Cð< ‡‚ˆ/ÑÔðc ð c¸?ð cð cð cñ Ôðcð ‡‚ˆ-ÑÔð	{˜mð 	{°ð 	{ð 	{ð 	{ñ Ôð	{ð ˆzÒÐØ€G„K�˜,¨\ÀVÐLÑLÔLÐLÐLÐLð Ðs   Ê6J: Ê:KËK