§
    )—Éjv  ã                   ó  — d Z ddlZddlmc mZ ddlZddlZddl	Z	ddl
mZ ej        dk    rC	 ej                             d¬¦  «         ej                             d¬¦  «         n# e$ r Y nw xY w ee¦  «                             ¦   «         j        Zej        Z ee¦  «        ej        vr$ej                             d ee¦  «        ¦  «         ddlmZmZmZmZmZmZ ddl m!Z! d	efd
„Z"d„ Z#e$dk    r e#¦   «          dS dS )u  
=============================================================================
THá»¬ NGHIá»†M SINH VIDEO I2V Báº°NG HUGGING FACE SPACE (ZERO-GPU FREE API)
=============================================================================
VÃ­ dá»¥ sá»­ dá»¥ng:
  # 1. Thá»­ nghiá»‡m nhanh vá»›i LTX-Video (Máº·c Ä‘á»‹nh, tá»‘c Ä‘á»™ ~20s):
  python gradio_version/render_test.py --image "04_Assets/characters/thuy_kieu_maiden_16yo/front.png" --prompt "cinematic slow portrait shot, ancient Vietnamese dress, gentle breeze blowing hair, soft natural lighting, 24fps"

  # 2. Thá»­ nghiá»‡m vá»›i Wan 2.1 (Alibaba Wan-Video I2V):
  python gradio_version/render_test.py --image "04_Assets/characters/thuy_kieu_maiden_16yo/front.png" --prompt "gentle breeze, historical cinema style" --model wan21

  # 3. Thá»­ nghiá»‡m theo Shot ID trong phim (Tá»± Ä‘á»™ng náº¡p Prompt vÃ  Start Frame):
  python gradio_version/render_test.py --shot-id ep01_scene01_shot01 --model ltx
=============================================================================
é    N)ÚPathÚwin32úutf-8©Úencoding)ÚBASE_DIRÚSUPPORTED_SPACESÚDEFAULT_MODELÚOUTPUTS_DIRÚASSETS_VIDEOS_DIRÚASSETS_KEYFRAMES_DIR)ÚHuggingFaceVideoClientÚshot_idc                 ór  — t           dz  dz  }d}d}|                     ¦   «         r¡	 t          |dd¬¦  «        5 }t          j        |¦  «        }|                     di ¦  «        }| |v r||          }|                     d	|¦  «        }ddd¦  «         n# 1 swxY w Y   n)# t          $ r}t          d
|› �¦  «         Y d}~nd}~ww xY wt          | › d�z  t          | › d�z  t          | z  dz  t          | z  dz  t           dz  dz  dz  dz  g}	|	D ]'}
|
                     ¦   «         rt          |
¦  «        } nŒ(||fS )u@   TÃ¬m thÃ´ng tin prompt vÃ  start frame tá»« danh má»¥c dá»± Ã¡n.Ú02_AI_Promptszmuse_ai_video_prompts.jsonzlcinematic slow motion, ancient historical drama, traditional Vietnamese costume, atmospheric lighting, 24fpsNÚrr   r   ÚshotsÚpromptu(   [!] KhÃ´ng Ä‘á»�c Ä‘Æ°á»£c file prompt: z
_start.pngz
_start.jpgzclean_frame_0.jpgzstart_frame.pngÚ	04_AssetsÚ
charactersÚthuy_kieu_maiden_16yoú	front.png)
r   ÚexistsÚopenÚjsonÚloadÚgetÚ	ExceptionÚprintr   Ústr)r   Úprompts_fileÚprompt_textÚ
image_pathÚfÚdatar   Ú	shot_infoÚeÚkf_candidatesÚcs              ú3C:\Projects\KieuStory\gradio_version\render_test.pyÚload_shot_metadatar+   1   sæ  € å˜oÑ-Ð0LÑL€Lð A€KØ€Jà×ÒÑÔð 	Bð	BÝ�l C°'Ð:Ñ:Ô:ð G¸aÝ”y ‘|”|�ØŸš ¨"Ñ-Ô-�Ø˜eÐ#Ð#Ø % g¤�IØ"+§-¢-°¸+Ñ"FÔ"F�KðGð Gð Gñ Gô Gð Gð Gð Gð Gð Gð Gøøøð Gð Gð Gð Gøøõ ð 	Bð 	Bð 	BÝÐ@¸QÐ@Ð@ÑAÔAÐAÐAÐAÐAÐAÐAøøøøð	Bøøøõ
 	 'Ð5Ð5Ð5Ñ5Ý 'Ð5Ð5Ð5Ñ5Ý˜wÑ&Ð)<Ñ<Ý˜wÑ&Ð):Ñ:Ý�;Ñ Ñ-Ð0GÑGÈ+ÑUð€Mð ð ð ˆØ�8Š8‰:Œ:ð 	Ý˜Q™œˆJØˆEð	ð ˜
Ð"Ð"s;   §B ¹ABÂB ÂBÂB ÂBÂB Â
CÂ(B?Â?Cc            	      ó  — t          j        d¬¦  «        } |                      dt          d¬¦  «         |                      dt          d¬¦  «         |                      dt          t          t          t          j        ¦   «         ¦  «        d	¬
¦  «         |                      dt          d¬¦  «         |                      dt          dd¬¦  «         |                      dddd¬¦  «         |                      dt          d¬¦  «         |  	                    ¦   «         }|j
        }|j        }|j        rt          |j        ¦  «        \  }}|s|}|s|}|slt          dz  dz  dz  dz  }|                     ¦   «         r"t          |¦  «        }t!          d|› �¦  «         n#t!          d¦  «         t#          j        d¦  «         |sd}t'          |j        ¬ ¦  «        }|j        r|j        › d!|j        › d"�nd }|                     |||j        |j        |¬#¦  «        \  }	}
|	rI|
rGt!          d$|
› �¦  «         |j        r*t'          j        |
¦  «        }|rt!          d%|› �¦  «         d S d S d S t!          d&¦  «         t#          j        d¦  «         d S )'NzHF ZeroGPU I2V Test Runner)Údescriptionz--imageu5   Ä�Æ°á»�ng dáº«n tá»›i áº£nh Ä‘áº§u vÃ o (Start Frame))ÚtypeÚhelpz--promptu    Prompt mÃ´ táº£ chuyá»ƒn Ä‘á»™ngz--modelu=   Lá»±a chá»�n mÃ´ hÃ¬nh: ltx (máº·c Ä‘á»‹nh), wan21, cogvideox)r.   ÚdefaultÚchoicesr/   z	--shot-iduS   MÃ£ Shot ID (ep01_scene01_shot01...) Ä‘á»ƒ tá»± láº¥y dá»¯ liá»‡u tá»« ká»‹ch báº£nz
--durationg      @u   Thá»�i lÆ°á»£ng video (giÃ¢y))r.   r0   r/   z--tail-frameÚ
store_trueTu2   Tá»± Ä‘á»™ng trÃ­ch xuáº¥t Tail Frame sau khi sinh)Úactionr0   r/   z--tokenu,   Hugging Face User Access Token (tÃ¹y chá»�n)r   r   r   r   u+   [*] Sá»­ dá»¥ng áº£nh máº«u máº·c Ä‘á»‹nh: uK   [!] Lá»—i: Báº¡n cáº§n chá»‰ Ä‘á»‹nh áº£nh báº±ng --image hoáº·c --shot-id.é   zbcinematic camera movement, soft atmospheric wind, detailed clothing embroidery, high quality 24fps)ÚtokenÚ_z.mp4)r#   r   Ú	model_keyÚdurationÚoutput_filenameu6   
[ðŸŽ‰ THÃ€NH CÃ”NG] Video Ä‘Ã£ Ä‘Æ°á»£c táº¡o táº¡i: u      â€¢ Tail Frame káº¿ thá»«a: u>   
[â�Œ THáº¤T Báº I] QuÃ¡ trÃ¬nh sinh video khÃ´ng hoÃ n táº¥t.)ÚargparseÚArgumentParserÚadd_argumentr    r
   Úlistr	   ÚkeysÚfloatÚ
parse_argsÚimager   r   r+   r   r   r   ÚsysÚexitr   r5   ÚmodelÚgenerate_i2vr8   Ú
tail_frameÚextract_tail_frame)ÚparserÚargsr#   r"   ÚpÚimgÚ
sample_imgÚclientÚout_nameÚsuccessÚ
video_fileÚtails               r*   ÚmainrR   R   s  € ÝÔ$Ð1MÐNÑNÔN€FØ
×Ò˜	­Ð2iÐÑjÔjÐjØ
×Ò˜
­Ð3UÐÑVÔVÐVØ
×Ò˜	­µ]ÍDÕQaÔQfÑQhÔQhÑLiÔLiØ\ð ñ ^ô ^ð ^à
×Ò˜­#ð  5JÐñ  Kô  Kð  KØ
×Ò˜­5¸#ÐDcÐÑdÔdÐdØ
×Ò˜¨|ÀTð  QEÐñ  Fô  Fð  FØ
×Ò˜	­Ð2`ÐÑaÔaÐaà×ÒÑÔ€Dà”€JØ”+€Kà„|ð Ý# D¤LÑ1Ô1‰ˆˆ3Øð 	ØˆKØð 	ØˆJàð å Ñ+¨lÑ:Ð=TÑTÐWbÑbˆ
Ø×ÒÑÔð 	Ý˜Z™œˆJÝÐLÀ
ÐLÐLÑMÔMÐMÐMåÐ_Ñ`Ô`Ð`ÝŒH�Q‰KŒKˆKàð {Øzˆå#¨$¬*Ð5Ñ5Ô5€FØ59´\ÐK�$”*Ð1Ð1˜tœ|Ð1Ð1Ð1Ð1Àt€Hà ×-Ò-ØØØ”*Ø”Ø ð .ñ ô Ñ€GˆZð ð �:ð ÝÐTÈ
ÐTÐTÑUÔUÐUØŒ?ð 	@Ý)Ô<¸ZÑHÔHˆDØð @ÝÐ>¸Ð>Ð>Ñ?Ô?Ð?Ð?Ð?ð	@ð 	@ð@ð @õ 	ÐOÑPÔPÐPÝŒ�‰Œˆˆˆó    Ú__main__)%Ú__doc__ÚbuiltinsÚ@py_builtinsÚ_pytest.assertion.rewriteÚ	assertionÚrewriteÚ
@pytest_arrB   r   r:   Úpathlibr   ÚplatformÚstdoutÚreconfigureÚstderrr   Ú__file__ÚresolveÚparentÚCURRENT_DIRÚPROJECT_DIRr    ÚpathÚinsertÚgradio_version.hf_configr   r	   r
   r   r   r   Úgradio_version.hf_clientr   r+   rR   Ú__name__© rS   r*   ú<module>rl      sÒ  ððð ð  € € € € € € € € € € € € €
€
€
€
Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð ð „<�7ÒÐðØŒ
×Ò¨ÐÑ0Ô0Ð0ØŒ
×Ò¨ÐÑ0Ô0Ð0Ð0øØð ð ð Øˆðøøøð ˆd�8‰nŒn×$Ò$Ñ&Ô&Ô-€ØÔ €Ø€3€{ÑÔ˜3œ8Ð#Ð#Ø„H‡O‚O�A�s�s˜;Ñ'Ô'Ñ(Ô(Ð(ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð <Ð ;Ð ;Ð ;Ð ;Ð ;ð# ð #ð #ð #ð #ðB7ð 7ð 7ðt ˆzÒÐØ€D�F„F€F€F€Fð Ðs   ®6A% Á%A-Á,A-