
    *j)                        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)PathzT/data/video-pipeline/Channel-Loi-Co-Nhan/project/11062026-001-Biet-Du-Thi-Khong-Nhucz0http://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.72   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      !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           |                                r|                                j        dk    r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                   |                    |           t1          d|            no# t2          $ rb}t1          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     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   REF_TEXTr"   resubr)   	TTS_SPEEDr   	REF_AUDIOrY   rZ   r[   TTS_URLr`   rb   rd   re   RuntimeErrorrh   r   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||7

*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) FH) "F#BH) )
J3A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   R   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                    } t          dz  }| d         d         }d| d	}t          ||           t          d
z                      d          D ]}|                    d           t          dz                      d           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 }t          dz  }t)          ddd d!d"d#d$d%d&t*          d'd(|g           t-          |d)          D ]\  }}t/          |d*                   }t1          |          }|t*          z   }|	                    d+| d,           |	                    d+| d,           |	                    |d         |||z   ||z   ||t*          t          |          t          t          d-z  |d          d.z            d/	           |	                    | d0t3          |           d1t3          ||z              d0|d2          d0           ||z  }|
                    d                    |          d           t          d3z  }|j                            d4           t)          ddd d!d"d5d6d7d$|
d8d9d:d;d'd(|g           t          d<z                      t          j        t1          |          |d=dd          d           t          d>z  }|j                            d4           |                    d0                    |          d           t          d?z  }|j                            d4           g }|D ]O}|	                    d+t          d-z  |d         d.z   z   d,           |	                    d@|dA         dBd0           P|	                    d+t          d-z  |dC         d         d.z   z   d,           |                    d                    |          d           t          dDz  }|j                            dd           dE| dFt8           dGt:           dH}t)          ddd d!d"d5d6d7d$|d$|dI|dJdKdJdLdMdNdOdPdQdRd'dSdT|g           | d         dU         }t          dz  }|j                            dd           t'          dV|t          |          dW           t          dXz  }t)          ddd d!dYd;d$|d$|dZd[dMdNdOdPdQdRd'dSdT|g           t          d\z  }t)          ddd d!dYd;d$|d"d#d$d]d&t<          dZd[dMdNdOdPdQdRd'dSdT|g           t          d^z  }|j                            dd           |                    d+| d_| d_| d,d           t          d`z  } t          daz  }!t)          ddd d!d"d5d6d7d$|dbdc| g           t)          ddd d!d$| ddded$t>          dIdfdJdgdJdhdOdcd'dSdT|!g           t          j         dit          |          t          |          t          |!          t1          |!          tC          | d                   djtD          t8          t*          t<          dk}"t          dlz                      t          j        |"dd          d           tG          dmt          |!          z              d S )nNr   r   r   zscript/scenes.jsonz&output/thumbnails/thumb_9x16_final.pngmetadatatitleu   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scene_*/seg_001.wavT)
missing_okzoutput/intro/intro_audio.wavscenesscene_id	narrationzseg_001.wav)r   r   r;   r   r   z1audio/voice_segments/voice_segments_manifest.jsonr{   F   )ensure_asciiindent)max_workerszaudio/concat.txtg        zaudio/silence_scene_pause.wavffmpegz-yr9   r:   z-flavfiz-izanullsrc=r=44100:cl=monoz-tz-c:a	pcm_s16ler   r   zfile 'z'
zimages/scenesz.png)	r   startend
speech_enddurationaudio_duration	pause_secr   
image_pathr   z --> r;   zaudio/master_narration.wav)r   concatz-safe0z-ar44100z-ac1z$audio/master_narration_timeline.json)duration_secr{   z&subtitles/master_subtitles_clamped.srtz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_sentence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.mp4z-ccopyz-stream_loopz-1zT[1:a]volume=0.18[bgm];[0:a][bgm]amix=inputs=2:duration=first:dropout_transition=2[a]z0:vz[a]	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   
write_textr]   ra   PROJECTr"   rv   globunlinkr|   r1   rV   r^   
concurrentfuturesThreadPoolExecutorWORKERSr4   r0   r   r6   SCENE_PAUSE_SEC	enumerater   r?   r   r/   rU   SUB_FONT_SIZELOGOINTRO_PAUSE_SECBGMrj   lenr   r   )#rJ   thumbr   thumb_prompt	old_audior{   scsidr;   exr   linestimelinetsrtsilenceidxitapdvisual_dmasterr   seglistsegtxtmainvfc
intro_textintro_audior   pauselistprt   finalinfos#                                      r   mainr
  V   s
   NN2wN'''	W11<<g<NN	O	OD
:
:E
z
7
#E h  w|  h  h  hLlE"""44::;PQQ * *	D))))++33t3DDD
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S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  	{  	{  	{

cNNXa[[NNx!}}NN6
NNNOOO	8
bggenng666//F1D1Dd1D1S1S1S$tGD'#d6%PWX]^abhitu{|}}}33??
[^_e[f[fowKxKx  GL  TU  AV  AV  AV  `g?  h  h  h88C#*:J:JTX:J:Y:Y:Y[^[i[ijnjsjstwjxjx  CJ[i  \K  \K  \K11G7>3G3GQU3G3V3V3VF : :Sw6:v8MNSSSTTT8"Z.88889999
MMY7?2HRL4LV4STYYYZZZrwwv888
)
)E5<+=+=dTX+=+Y+Y+Y	*%(	* 	*BO	* 	*	* 	* 	*  $tGD'#d74PVWhiklrsxy  AF  GK  LP  QW  Xa  bl  mv  w}  ~C  DO  PU  	V  W  W  WJ 01JwGe?e;grgygg  IM  W[g  h\  h\  h\'[9I9IJJKKK
*
*E$tGGCU4E  SX  Y]  ^b  ci  js  t~  H  IO  PU  Va  bg  	h  i  i  i
3
3E$tGGCU4Mijno~  @E  FK  LP  QU  V\  ]f  gq  r{  |B  CH  IT  UZ  	[  \  \  \
1
1E5<3E3Ed\`3E3a3a3a	HeHHeHHeHHHRYZZZ//Cw?]7]$tGD'#d5fUXYZZZ$tGD^DcJ[  ]s  tz  {@  AG  HM  NT  U[  \b  ch  it  uz  	{  |  |  ||[SZZ]`af]g]gvyz  wA  wA  QT  UZ  Q[  Q[  eh  im  nv  iw  ex  ex  BH  U^  tA  Tc  vE  
F  
FD++DJtVW,X,X,Xbi+jjjCJJs   )GGG__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      cdd:,
$\
]
]		Z	[	[D	cdd	T
PQQ	
	-- 
    - - -A A A
a a a. . .  S S ST T Tv v v(+ + +D  D  D J Zr,   