
    ',j1                        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
Zd dlmZ  ed          ZdZdZ ed          Z ed          Z ed          Z ed	          Zd
ZdZdZdZdZedz  Zej                            dd           d Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%e&dk    r e%             dS dS )    N)PathzY/data/video-pipeline/Channel-Loi-Co-Nhan/project/12062026-006-Nha-Co-Ba-Dieu-Phuc-Khi-Canz0http://192.168.40.11:20128/v1/images/generationsz"http://192.168.1.201:3900/generatezK/data/video-pipeline/Youtube-Video-Maker/data/voices/template1/refaudio.mp3zJ/data/video-pipeline/Youtube-Video-Maker/data/voices/template1/reftext.txtzX/data/video-pipeline/Channel-Loi-Co-Nhan/data/bgm/paulyudin-sentimental-story-182512.mp3zD/data/video-pipeline/Channel-Loi-Co-Nhan/data/logo/logoloiconhan.png   z0.82   g      ?g      @zlogs/complete_short_project.logTparentsexist_okc                     t          j        d          | z   }t          |d           t                              dd          5 }|                    |dz              d d d            d S # 1 swxY w Y   d S )Nz%F %T T)flushautf-8encoding
)timestrftimeprintLOGopenwrite)slinefs      {/data/video-pipeline/Channel-Loi-Co-Nhan/project/12062026-006-Nha-Co-Ba-Dieu-Phuc-Khi-Can/scripts_complete_short_project.pylogr      s    	x	 	 	"D	$d	#w	'	'@1aggd4i.@.@.@@@@@@@@@@@@@@@@@@@s   A++A/2A/c                     t          d          } |                                 r|                                                                 D ]}|                    d          rt
          j                            d          sa|                    dd          d         	                                	                    d          	                    d          t
          j        d<   d S d S )Nz/home/hermes/.hermes/.envzGEN_IMG_API_KEY=GEN_IMG_API_KEY=   "')
r   exists	read_text
splitlines
startswithosenvirongetsplitstrip)pr   s     r   load_envr+      s    
&''Axxzz aKKMM,,.. 	a 	aD122 a2:>>J[;\;\ a.2jjQ.?.?.B.H.H.J.J.P.PQT.U.U.[.[\_.`.`
,-a a	a 	a    c           	          t          dd                    t          t          |                     z              t	          j        t          t          t          |                                d S )NzRUN  )r   joinmapstr
subprocess
check_calllist)cmds    r   runr6       sP    sxxC%%%&&&$s3s||,,-----r,   c                     t          j        dddddddt          |           gd	                                          }t	          |          S )
Nffprobe-verrorz-show_entrieszformat=durationz-ofzdefault=nw=1:nk=1T)text)r2   check_outputr1   r)   float)r*   outs     r   durr?   $   sg    4HYZ_`stwxytztz {  BF  	G  	G  	G  	M  	M  	O  	OC::r,   c           	         t                       t          j        d         }|j                            dd           |                                r|                                j        dk    r	 d| ddd}t          j	        
                    t          t          j        |                                          d	|z   d
dd          }t          j	                            |d          5 }t          j        |                                                    dd                    }d d d            n# 1 swxY w Y   |d         d                             d          }|                    d          r|                    dd          d         }|                    d          }|                    t1          j        |                     |                    |           t7          d|            nZ# t8          $ rM}	t7          d|j         dt=          |	          j         d|	            tA          j!        d           Y d }	~	nd }	~	ww xY w|                                |                                j        dk    d S d S )Nr   Tr   r   zcx/gpt-5.5-image	1024x1792r   )modelpromptsizenzBearer zapplication/json)AuthorizationContent-TypePOSTdataheadersmethodiX  timeoutr   ignorerJ   b64_jsonzdata:,.tmpzDONE image zRETRY image : r.      )"r+   r%   r&   parentmkdirr!   statst_sizeurllibrequestRequestIMG_URLjsondumpsencodeurlopenloadsreaddecoder'   r$   r(   with_suffixwrite_bytesbase64	b64decodereplacer   	Exceptionnametype__name__r   sleep)
rC   r>   keybodyreqrpayloadbtmpes
             r   	gen_imagerv   (   s   JJJBJ013:3C3CDZ^3C3_3_3_jjll 
Schhjj0!33		S,fKTUVVD&&wDJt4D4D4K4K4M4Mgpqtgt  EW  WX  WX  `f&  g  gC''C'88tAtzRSRXRXRZRZRaRabijrRsRsGtGtwtttttttttttttttfoa $$Z00A||G$$9Aq(9a''C9I!9L9L)M)M)Ms{{[^O_O_O_#c##$$$$ 	S 	S 	SAsxAA477+;AAaAABBBDJrNNNNNNNN	S jjll 
Schhjj0!333333s?   0A:G2 *;D1%G2 1D55G2 8D59B8G2 2
I	<AII	c                    dt          j                    j        z   }g }|                                 D ]6\  }}|                    d| d| d| d                                           7|                                D ]\  }}t          |          }t          j        t          |                    d         pd}|                    d| d| d|j
         d	| d
	                                |                                z   dz              |                    d| d                                           |d                    |          fS )Nz----OmniVoiceBoundaryz--z(
Content-Disposition: form-data; name="z"

z
r   zapplication/octet-streamz"; filename="z"
Content-Type: z

s   
z--
r,   )uuiduuid4hexitemsappendr_   r   	mimetypes
guess_typer1   rj   
read_bytesr/   )	fieldsfilesboundarychunkskvpathr*   mimes	            r   	multipartr   6   s   $TZ\\%55Hbv||~~  D  D!v}}-y(-y-yfg-y-yrs-y-y-y  .A  .A  .C  .C   D   D   D   D++-- j j$
t**9/A77:X>Xd  I8  I  Iq  I  I_`_e  I  Iz~  I  I  I  P  P  R  R  ST  S_  S_  Sa  Sa  a  bi  i  	j  	j  	j  	j
MM'x'''..00111(388FCSCS:S3Sr,   c                    t          | d                   }|j                            dd           |                                r1|                                j        dk    rt          d|            d S t                                          rt                              d          nd}t          j
        d	d
| d                                                   }d}|                                r|                                j        dk     r|dz  }	 |d|t          dddd}t          |dt          i          \  }}t          j                            t$          |dd|z   id          }t          j                            |d          5 }	|	                                }
d d d            n# 1 swxY w Y   |                    d          }|                    |
           |
d d         dk    rd|
d d         v st/          |
d d                   |                    |           t          d |            no# t2          $ rb}t          d!| d"          d#| d$t5          |          j         d%|            t9          j        t=          d&|z  d                     Y d }~nd }~ww xY w|                                |                                j        dk     d S d S )'N
audio_pathTr     zSKIP existing tts r   r    u   \s*[:;\-–—]\s*z, r;   r   r   vi24z2.0	broadcast)r;   languageref_textspeednum_stepguidance_scaleeffect_preset	ref_audiorG   zmultipart/form-data; boundary=rH   rI      rM   rR      s   RIFFs   WAVE   P   z	DONE tts z
RETRY tts idz	 attempt rS   r.   rT   )r   rU   rV   r!   rW   rX   r   REF_TEXTr"   resubr)   	TTS_SPEEDr   	REF_AUDIOrY   rZ   r[   TTS_URLr`   rb   rd   re   RuntimeErrorrh   ri   rk   rl   r   rm   min)itemr>   r   r;   attemptr   r   ro   rp   rq   blobrt   ru   s                r   tts_oner   >   s   T,  C#*"2"24"2"N"N"N
zz|| 

*4//&&&'''5=__5F5FNX111BH	%tT&\	:	:	@	@	B	BDGjjll vchhjj055

	v48Iaew|  NY  Z  ZF#F[,CDDMHT&&wD.QqrzQzA{  DJ&  K  KC''C'88LAAFFHHtLLLLLLLLLLLLLLL''C)>)>)>!Hg%%'T#2#Y*>*>|TXY\Z\Y\T]G^G^A^KK!C!!"""" 	v 	v 	vST$ZSS'SST!WW=MSSPQSSTTTVZV`adeghoeopsatatVuVuVuVuVuVuVuVu	v jjll vchhjj0555555s?   A7H; F-!H; -F11H; 4F15BH; ;
J'AJ""J'c                     t          t          | dz                      }|dz  }|dz  }|dz  }|dz  }|dz  }|dz  }|dd|dd|dd|dS )Nr   i6 i`  02:rQ   03)intround)secmshmr   s        r   srt_timer   T   s    
5T??Br7{QBKB2u9b%ibSUW[S[QR]_ae]e]_***Q***A***2****r,   c                  6   t                               dd           t          j        t          dz                      d                    } g }| d         D ]_}t          dz  |d         dz   z  }|                    |                    d	          p|                    d
          p|d         |f           `t          j	        
                    t                    5 }t          |                    d |                     d d d            n# 1 swxY w Y   t          dz  }|                     d          p)|                     di                               dd          }d| d}t          ||           g }| d         D ]G}|d         }	|d         }
|                    |	|	|
t          t          dz  |	z  dz            d           Ht          dz                      dd           t          dz                      t          j        d|idd          d           t          j	        
                    t                    5 }t          |                    t$          |                     d d d            n# 1 swxY w Y   t          dz  }g }g }d}g }g }d }t          d!z  }t'          d"d#d$d%d&d'd(d)d*t(          d+d,|g           dxd.}t+          |d           D ]x\  }}t-          |d/                   }t/          |          }|t(          z   }|                    d0| d1           |                    d0| d1           |                    |d         |||z   ||z   ||t(          t          |          t          t          dz  |d          dz            d2	            ||d3         d-          }|r|t1          |          z  }t+          |          D ]y\  }}|||z  z   }||d z   |z  z   }|                    | d4t3          |           d5t3          |           d4| d4           |                    ||d         |||d6           |d z  }z||z  }z|                    d                    |          d           t          d7z  }|j                            d8           t'          d"d#d$d%d&d9d:d;d(|d<d=d>d?d+d,|g           t          d@z                      dd           t          dAz                      t          j        t/          |          |dBdd          d           t          dCz                      t          j        |dd          d           t          dDz                      d4                    |          d           t9          dE           d S )yNr   r   r   zscript/scenes.jsonsceneszimages/scenesscene_idz.pngvisual_promptvisual_beat	narration)max_workersc                     t          |  S )N)rv   )jobs    r   <lambda>zmain.<locals>.<lambda>a   s
    	3 r,   z&output/thumbnails/thumb_9x16_final.pngtitlemetadatauB   Cổ nhân dạy: Người khôn nói ít, kẻ dại nói nhiềuu   Vertical 9:16 thumbnail, cổ phong giấy vàng, aged yellow parchment, ink-wash cinematic Vietnamese moral story poster. Large readable Vietnamese brush title: z. Symbolic overflowing tea cup and calm ancient scholar, sepia bronze gold accents, mobile-safe composition, dramatic but dignified, no modern neon, no horizontal layout.zaudio/voice_segmentszseg_001.wav)r   r   r;   r   Tr   z1audio/voice_segments/voice_segments_manifest.jsonr{   F   )ensure_asciiindentzaudio/concat.txtg        r   zaudio/silence_scene_pause.wavffmpegz-yr9   r:   z-flavfiz-izanullsrc=r=44100:cl=monoz-tz-c:a	pcm_s16ler   c                 h   |                      dd                                          }g }d}|t          |          k     rrt          |          |z
  }||k    r|n|}||dz   k    rd}|                    d                    ||||z                                 ||z  }|t          |          k     r|S )Nr   r.   r   r      )rh   r(   lenr|   r/   )r;   rE   wordsr>   iremaintakes          r   word_chunkszmain.<locals>.word_chunksr   s    ll4$$**,,"ca#e**nnu::a<F6!88aaqs{{DJJsxxa$h001111d71 #e**nn 
r,   r   zfile 'z'
)	r   startend
speech_enddurationaudio_duration	pause_secr   
image_pathr;   r   z --> )idxr   r   r   r;   zaudio/master_narration.wav)r   concatz-safe0z-ar44100z-ac1	subtitlesz$audio/master_narration_timeline.json)duration_secr{   z'subtitles/subtitle_cue_debug_short.jsonz&subtitles/master_subtitles_clamped.srtzYSTOP after audio/subtitle rebuild; production render/package must use worker-only script.zrender_onepass/segments.txtz	duration r   z.3fzoutput/main_story.mp4zT[0:v]scale=1080:1920:force_original_aspect_ratio=increase,crop=1080:1920,subtitles='z':force_style='FontSize=z0,Outline=1,Alignment=2,MarginV=80'[base];movie='zW',scale=160:-1,format=rgba,colorchannelmixer=aa=0.55[wm];[base][wm]overlay=W-w-35:35[v]z-filter_complexz-mapz[v]z1:az-r30z-c:vlibx264z-pix_fmtyuv420paacz	-shortesttopic_sentenceuC   Cổ nhân dạy: Người khôn nói ít, kẻ dại nói nhiều.zoutput/intro/intro_audio.wavintro)r   r;   r   zoutput/intro/intro.mp4z-loopz-vfzCscale=1080:1920:force_original_aspect_ratio=increase,crop=1080:1920zoutput/intro/intro_pause_4s.mp4zanullsrc=r=44100:cl=stereozoutput/final/final_concat.txtz'
file 'zoutput/final/final_no_bgm.mp4zoutput/final/final_video.mp4aK  [0:v]scale=1080:1920,setsar=1[v0];[0:a]aformat=sample_rates=44100:channel_layouts=stereo[a0];[1:v]scale=1080:1920,setsar=1[v1];[1:a]aformat=sample_rates=44100:channel_layouts=stereo[a1];[2:v]scale=1080:1920,setsar=1[v2];[2:a]aformat=sample_rates=44100:channel_layouts=stereo[a2];[v0][a0][v1][a1][v2][a2]concat=n=3:v=1:a=1[v][voice]z[voice]z[0:a]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo[voice];[1:a]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo,volume=0.18[bgm];[voice][bgm]amix=inputs=2:duration=first:dropout_transition=2[a]z-stream_loopz-1z0:vz[a]copy	completedz9:16)
project_idstatus	thumbnail
main_storyfinal_videor   r   format	tts_speedsubtitle_font_sizescene_pause_secintro_pause_seczoutput/info.jsonz	COMPLETE )r   )$r   
write_textr]   ra   PROJECTr"   r|   r'   
concurrentfuturesThreadPoolExecutorWORKERSr4   r0   rv   r1   rV   r^   r   r6   SCENE_PAUSE_SEC	enumerater   r?   r   r   r/   rU   r   r   SUB_FONT_SIZELOGOINTRO_PAUSE_SECBGMrj   r   ).rJ   
image_jobsscr>   exthumbr   thumb_promptr{   sidr;   r   linestimelinetsrt	cue_debugcue_idxsilencer   r   itapdvisual_dr   stepcitxtcscemasterseglistsegtxtmainvfc
intro_textintro_audior   pauselistprt   final	concat_fcmix_fcinfos.                                                 r   mainr  X   s1   NN2wN'''	W11<<g<NN	O	ODJ8n f fO#R
^F%:;266/22^bff]6K6K^rR]`cdeeee			.	.7	.	C	C >rRVV//<<===> > > > > > > > > > > > > > >
:
:E
((7

  Itxx
266::7  DH   I   IE h  w|  h  h  hLlE"""
E8n  zNKD3#Ts7SiKijmKmn{K{G|G|}}~~~~##**4*FFF@@LLTZY`afXguz  CD  NE  NE  NE  OVL  W  W  W			.	.7	.	C	Cgr4PRPVPVW^`ePfPfKgKgKgggggggggggggggg%%FRu"aSWYYcd[b33G$tGD6QRVWfgmny  {B  	C  D  D  D    E!$$  B< !!
b''Ao-8%b%%%&&&*g***+++BzN11X:[\]^[^jr  EF  Sb  ps  tv  pw  pw  EH  IP  Q`  I`  df  gq  dr  ax  ax  ax  Ix  Ey  Ey  z  z  	{  	{  	{{2f:a(( 	3v;;D#F++  3RW9BqD$;b

gSS"SSHRLLSSCSSSTTT  2j>RT[]eh!i!ijjj
	8
bggenng666//F1D1Dd1D1S1S1S$tGD'#d6%PWX]^abhitu{|}}}[t<<<33??
\_`f\g\grzK{K{  KP  YZ  A[  A[  A[  fm?  n  n  n66BB4:iejrsCtCtCt  FB  G  G  G55AA$))C..[bAccccddd
Fs$   %DDD)I88I<?I<__main__)'rf   concurrent.futuresr   r]   r}   r%   r   r2   r   rx   urllib.requestrY   pathlibr   r   r\   r   r   r   r   r   r   r   r   r   r   r   rU   rV   r   r+   r6   r?   rv   r   r   r   r  rl    r,   r   <module>r#     s   b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b      hii:,
$\
]
]		Z	[	[D	cdd	T
PQQ	
	-- 
    - - -A A A
a a a. . .  S S ST T Tv v v,+ + +[  [  [ x Zr,   