
    fPjD5                     d   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dZ ed          Z ed          Z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)Pathzd/data/video-pipeline/Channel-Loi-Co-Nhan/project/161-Giu-Mot-Loi-Dong-Vien-Con-Cai-Vung-Qua-Ngay-Khoz0http://192.168.40.11:20128/v1/images/generationsz,http://192.168.40.32:7861/voice/truong-giang
doc_truyenzX/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.88   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      ]project/161-Giu-Mot-Loi-Dong-Vien-Con-Cai-Vung-Qua-Ngay-Kho/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   "')
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   runr7       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)r3   check_outputr2   r*   float)r+   outs     r   durr@   $   sg    4HYZ_`stwxytztz {  BF  	G  	G  	G  	M  	M  	O  	OC::r-   c           	      0   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|            no# t8          $ rb}	t7          d|j         dt=          |	          j         d|	            dtA          |	          v rdnd}
tC          j"        |
           Y d }	~	nd }	~	ww xY w|                                |                                j        dk    %d S d S )Nr   Tr   r   cx/gpt-5.5-image	1024x1792r   )modelpromptsizenzBearer zapplication/json)AuthorizationContent-TypePOSTdataheadersmethodiX  timeoutr   ignorerL   b64_jsonzdata:,.tmpzDONE image zRETRY image : r/   zHTTP Error 502   )#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__r2   r   sleep)rE   r?   keybodyreqrpayloadbtmpedelays              r   	gen_imagery   (   s   JJJBJ013:3C3CDZ^3C3_3_3_jjll chhjj0!33	,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##$$$$ 	 	 	AsxAA477+;AAaAABBB)SVV33AAEJu		 jjll 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           
      V   dt          j                    j        z   }g }|                                 D ]6\  }}|                    d| d| d| d                                           7|                    d| d                                           |d                    |          fS )Nz----TruongGiangVoiceBoundaryz--z(
Content-Disposition: form-data; name="z"

z
z--
r-   )uuiduuid4hexitemsappendra   r0   )fieldsboundarychunkskvs        r   	multipartr   9   s    +DJLL,<<HRf||~~  D  D!v}}-y(-y-yfg-y-yrs-y-y-y  .A  .A  .C  .C   D   D   D   D
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          j        dd| d                   	                                }d	}|                                r|                                j        dk     r|d
z  }	 |t          d}t          |          \  }}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# t,          $ rb}t          d| d          d| dt/          |          j         d|            t3          j        t7          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 u   \s*[:;\-–—]\s*z, r<   r   r   )r<   stylerI   zmultipart/form-data; boundary=rJ   rK      rO   rT      s   RIFFs   WAVE   P   z	DONE tts z
RETRY tts idz	 attempt rU   r/   rV   )r   rW   rX   r"   rY   rZ   r   resubr*   	TTS_STYLEr   r[   r\   r]   TTS_URLrb   rd   rf   rg   RuntimeErrorrj   rk   rm   rn   r   ro   min)itemr?   r<   attemptr   r   rq   rr   rs   blobrv   rw   s               r   tts_oner   >   s   T,  C#*"2"24"2"N"N"N
zz|| 

*4//&&&'''	%tT&\	:	:	@	@	B	BDGjjll vchhjj055

	v	22F#F++MHT&&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?   A*G8 	E*G8 *E..G8 1E.2BG8 8
I$AII$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:rS   03)intround)secmshmr   s        r   srt_timer   S   s    
5T??Br7{QBKB2u9b%ibSUW[S[QR]_ae]e]_***Q***A***2****r-   c                     3 t                               dd           t          j        t          dz                      d                    } g d}dt          | d                   dz  t          | d                   d	z
  g}|D ]}| d         |         }|                    d
          pd33fd|D             }|r(t          d|                    d           d|           t          dt          j
        |                    d          ddd	3d d         dd          z              g }| d         D ]t}t          dz  |d         dz   z  }|                    |                    d
          p1|                    d          p|                    d          p|d         |f           ut          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i                               d           p|
}|                     di                               d!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          d0z  }t/          d1d2d3d4d5d6d7d8d9t0          d:d;|g           dd=}t3          |d	          D ]x\  }}t5          |d>                   }t7          |          }|t0          z   }|                    d?| d@           |                    d?| d@           |                    |d         |||z   ||z   ||t0          t'          |          t'          t          dz  |d          dz            dA	            ||dB         d<          }|r|t          |          z  }t3          |          D ]y\  } }!|| |z  z   }"|| d	z   |z  z   }#|                    | dCt9          |"           dDt9          |#           dC|! dC           |                    ||d         |"|#|!dE           |d	z  }z||z  }z|                    d                    |          d           t          dFz  }$|$j                            d)G           t/          d1d2d3d4d5dHdIdJd7|dKdLdMdNd:d;|$g           t          dOz                      d)d)*           t          dPz                      t          j
        t7          |$          |dQdd-          d           t          dRz                      t          j
        |dd-          d           t          dSz                      dC                    |          d           |                     di                               d           p|
                                }%t          dTz  }&|&j                            d)d)*           |&                     d)U           t-          dV|%t'          |&          dW           t          dX           d S )N r   r   zscript/scenes.json)u   cổ phong giấy vàngzaged parchmentzink-washzNegative prompt:zno modern objectszno textr   scenes   r   image_promptc                     g | ]}|v|	S  r   ).0termrE   s     r   
<listcomp>zmain.<locals>.<listcomp>`   s#    PPPDT=O=O4=O=O=Or-   z"image_prompt preflight failed for scene_idz
: missing zPREFLIGHT image payload rB   rC   i  )r   rD   rF   rG   rE   F)ensure_asciizimages/scenesz.pngvisual_promptvisual_beat	narration)max_workersc                     t          |  S )N)ry   )jobs    r   <lambda>zmain.<locals>.<lambda>j   s
    	3 r-   z&output/thumbnails/thumb_9x16_final.pngtitlemetadatatopic_sentencethumbnail_symbolzancient Vietnamese family hearth glowing warmly, two modest bowls placed together, bamboo screen and oil lamp, husband and wife standing in quiet reconciliationu   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 scene: z, sepia bronze gold accents, mobile-safe composition, dignified, no modern neon, no horizontal layout, no text artifacts except the title.zaudio/voice_segmentszseg_001.wav)r   r   r<   r   Tr   z1audio/voice_segments/voice_segments_manifest.jsonr~   )r   indentzaudio/concat.txtg        zaudio/silence_scene_pause.wavffmpegz-yr:   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      )rj   r)   lenr   r0   )r<   rG   wordsr?   iremaintakes          r   word_chunkszmain.<locals>.word_chunks}   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.srtzoutput/intro/intro_audio.wav)
missing_okintro)r   r<   r   zYSTOP 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	-shortestuC   Cổ nhân dạy: Người khôn nói ít, kẻ dại nói nhiều.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_concat.txtz'
file 'zoutput/final_no_bgm.mp4zoutput/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.30[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_   rc   PROJECTr#   r   r(   r   r   r`   r   
concurrentfuturesThreadPoolExecutorWORKERSr5   r1   ry   r2   rX   TTS_WORKERSr   r7   SCENE_PAUSE_SEC	enumerater   r@   r   r0   rW   r*   unlinkr   SUB_FONT_SIZELOGOINTRO_PAUSE_SECBGMrl   	TTS_SPEED)4rL   required_prompt_termssample_indicesr   scmissing
image_jobsr?   exthumbr   topicthumb_symbolthumb_promptr~   sidr<   r   linestimelinetsrt	cue_debugcue_idxsilencer   itapdvisual_dr   stepcitxtcscemaster
intro_textintro_audioseglistsegtxtmainvfcr   pauselistprv   final	concat_fcmix_fcinforE   s4                                                      @r   mainr  W   s	   NN2wN'''	W11<<g<NN	O	OD J  J  JT(^,,a/T(^1D1DQ1FGN { {(^C ''-2PPPP$9PPP 	mkBFF:DVDVkkbikklll&tzrvvj?Q?Q\n  yD  KL  X^  _c  `c  _c  Xd  3e  3e  ty  (z  (z  (z  z  	{  	{  	{  	{J8n @ @O#R
^F%:;266.11xRVVO5L5LxPRPVPVWdPePexiklwixz}~			.	.7	.	C	C >rRVV//<<===> > > > > > > > > > > > > > >
:
:E
((7


Ftxx
266::72FFE
((:b
!
!
%
%&6
7
7
@5E88J++//0B  Eg  h  hL h  w|  h  h  P\  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			.	.;	.	G	Gk2tTVTZTZ[bdiTjTjOkOkOkkkkkkkkkkkkkkkk%%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((:r**../?@@IEPPRRJ::KTD999$'''7Jc+>N>NOOPPPcddd
Fs$   %HHH)OOO__main__)'rh   concurrent.futuresr   r_   	mimetypesr&   r   r3   r   r{   urllib.requestr[   pathlibr   r   r^   r   r   r   r   r   r   r   r   r   r   r   rW   rX   r   r,   r7   r@   ry   r   r   r   r  rn   r   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      
$u
v
v:6
	D	cdd	T
PQQ	
	-- 
    - - -A A A
a a a. . .    "T T T
v v v*+ + +l  l  l Z Zr-   