
    ^j/                    0   d dl m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	Z	d dl
Z
 ed          ZdZdZdZdZd	Zed
z  Zedz  Zedz  Zedz  Zedz  Zedz  Zedz  ZddddZd/dZd0dZd1dZd2dZd3d4d'Zd5d(Zd6d,Zd2d-Z e!d.k    r e              dS dS )7    )annotationsN)PathzI/data/video-pipeline/HaTramAudio/project/016-Nguoi-Giu-Am-Thanh-Cuoi-Cungz 016-Nguoi-Giu-Am-Thanh-Cuoi-Cungzrun-20260720T233725Z-24504f17zoro@fae6fce617a14dc4f8b3bd52968cc688a456c45a60bc2ed7701ccd8164875e02z0http://192.168.40.32:7861/voice/ngoc-huyen-clonezstory/spoken-narration.txtaudiozlog/tts-attemptszwork/tts/tmpzwork/tts/hot-manifest.jsonzscript/tts-manifest.jsonzstory-full.wav
doc_truyenz1.0true)stylespeeddenoisereturnstrc                     t           j                            t           j        j                                                                      dd          S )Nz+00:00Z)dtdatetimenowtimezoneutc	isoformatreplace     work/tts/run_tts.pyr   r      s6    ;??2;?++5577??#NNNr   pathr   c                0   t          j                    }|                     d          5 }|                    d          x}r,|                    |           |                    d          x},d d d            n# 1 swxY w Y   |                                S )Nrbi   )hashlibsha256openreadupdate	hexdigest)r   hfblocks       r   r   r       s    A	4 Avvo...e 	HHUOOO vvo...e 	               ;;==s   AA99A= A=valuedictNonec                    | j                             dd           |                     | j        dz             }|                    t          j        |dd          dz   d	           t          j        ||            d S )
NTparentsexist_okz.tmpF   )ensure_asciiindent
utf-8encoding)	parentmkdirwith_suffixsuffix
write_textjsondumpsosr   )r   r'   tmps      r   atomic_jsonr>   (   s|    KdT222


4;/
0
0CNN4:e%BBBTIT[N\\\JsDr   c                 ~   t          j        t          dz                      d                    } t          t
          t          df}|                     d          |                     d          |                     d          |                     d          f}||k    rt          d	|          t          	                                }t          t          t          t          t          t          t           fD ]G}||	                                j        vr*|	                                |k    rt          d
|           Hd S )Nz.ownership-lock.jsonr2   r3   main_session_pipeline
project_idrun_idownerstatuszownership mismatch: zpath escaped project: )r:   loadsROOT	read_textPROJECTRUNOWNERgetRuntimeErrorresolve	NARRATION	AUDIO_DIRATTEMPT_DIRTMP_DIRHOTFINAL_MANIFESTOUTPUTr,   )lockexpectedactualresolvedr   s        r   guardrY   /   s   :t44???QQRRDe%<=Hhh|$$dhhx&8&8$((7:K:KTXXV^M_M_`F<&<<===||~~HI{GS.RXY @ @4<<>>111dllnn6P6P>>>???@ @r       texttargetinthard_max	list[str]c                   d |                      d          D             }g }g }d}|D ]}t          |          |rdndz   }|r5||z   |k    r,|                    d                    |                     g d}}t          |          k    rt	          d          |                    |           ||z  }|r(|                    d                    |                     t          fd|D                       rt	          d          |S )Nc                ^    g | ]*}|                                 |                                 +S r   )strip).0ps     r   
<listcomp>zchunks.<locals>.<listcomp><   s-    EEE17799E!''))EEEr   z

r   r.   z"paragraph exceeds TTS hard maximumc              3  >   K   | ]}t          |          k    V  d S )N)len)rd   itemr_   s     r   	<genexpr>zchunks.<locals>.<genexpr>K   s.      
3
3D3t99x
3
3
3
3
3
3r   zchunk exceeds TTS hard maximum)splitrh   appendjoinrL   any)	r\   r]   r_   
paragraphsresultcurrentsize	paragraphadditions	     `      r   chunksru   ;   s3   EETZZ%7%7EEEJFGD  	y>>'%8QQq9 	"th//MM&++g..///TGy>>H$$CDDDy!!! ,fkk'**+++

3
3
3
3F
3
3
333 =;<<<Mr   c                .   t          j        dddddddt          |           gdd	          }|j        d
k    r't	          d| j         d|j        dd                     t          j        |j	                  }|
                    dg           }t          |          dk    s|d
         
                    d          st	          d| j                   t          |
                    di           
                    dd
                    }|d
k    rt	          d| j                   ||d
         
                    d          t          |d
         
                    d          pd
          t          |d
         
                    d          pd
          dS )Nffprobe-verrorz-show_entriesz6format=duration:stream=codec_name,sample_rate,channelsz-ofr:   Tr\   capture_outputr   zffprobe failed for : istreams   
codec_namezinvalid audio stream for formatdurationzinvalid duration for sample_ratechannels)r   r   r   r   )
subprocessrunr   
returncoderL   namestderrr:   rE   stdoutrK   rh   floatr^   )r   rp   datar}   r   s        r   prober   P   s   ^	D'?4lnsu{  ~A  BF  ~G  ~G  	H  F
 ATTTfmDEE>RTTUUU:fm$$Dhhy"%%G
7||q
| < <BtyBBCCCTXXh++//
A>>??H1}}>49>>???ajnn\2271:>>-88=A>>
z227a88	  r   entrytext_shadict | Nonec                   |                      d          dk    s-|                      d          |k    s|                                sd S 	 t          |          }n# t          $ r Y d S w xY wt	          |          }|                      d          r| d         |k    rd S i | ||                                j        |ddS )NrD   	completedtext_sha256audio_sha256T)bytesr   verified)rK   existsr   	Exceptionr   statst_size)r   r   r   re   digests        r   valid_checkpointr   g   s    yyk))UYY}-E-E-Q-QY]YdYdYfYf-Qt$KK   ttD\\Fyy   U>%:f%D%Dtaeaqa499;;#6\`aaaas   
A 
A('A(c                 z   t           t          t          t          j        t
          j        fD ]I} |                     dd           | dz  }|                    dd           |                                 Jt                       t          t                    }|t          k    rt          d|           t          j        t           dz                      d	                    }|                    d
          t          k    s|                    d          t          k    rt          d          t'          t                              d	                    }d |D             }t)          j
        t          j        t,          d                                                                                    }i }t                                          rnt          j        t                              d	                    }|                    d          |k    s|                    d          |k    rt          d          d |                    dg           D             }i dddt4          dt6          dddddt8          dt          d|d|                    d          dt,          d|d t;          |          d|d!t=          t                    d"t=          t
                    d#t=          t>                    dg d$tA                      i}	tC          t          |	           	 tE          tG          ||          d%          D ]\  }
\  }}t                       t           d&|
d'd(z  }tI          |                    |
i           ||          }|rB|	d         %                    |           tA                      |	d$<   tC          t          |	           t          d&|
d'd)z  }t          d&|
d'd*z  }|                    |d	           |                                r|                                 dt4          t6          d+d|
|                    d          t          ||t,          |t=          |          tA                      d,}t          d&|
d'd-z  }tC          ||           tM          j'        d.d/d0d1d2d3d4d5t8          d6d7d8d9| d8d:d8d;d8d<d=t=          |          gdd>          }|j(        d?k    rr|)                    d@d.|j*        p|j+        dAd          tA                      B           tC          ||           t          dC|
 dD|j*        p|j+        dEd                     tY          |          }t[          j.        ||           |
dFd|t=          |          t          |          dG|/                                j0        dH|}|)                    |           tA                      |d$<   tC          ||           |	d         %                    |           tA                      |	d$<   tC          t          |	           t;          |	d                   t;          |          k    rt          dI          tG          |	d         |          D ]e\  }}tI          ||tc          |d#                             }|s%t          dJ|                    dK                     |)                    |           ft          dLz  }|                    dM2                    dN |	d         D                       d	           t          dOz  }|                                r|                                 tM          j'        dPdQdRdSdTdUdVdWdXt=          |          dYdZd[d\d]d^dTd_t=          |          gdd>          }|j(        d?k    rt          d`|j*        dAd                     tY          |          }tg          da |	d         D                       }ti          |db         |z
            dck    rt          dd|db          de|           t[          j.        |t>                     i |	dFdt;          |	d                   |db         |t          t>                    t>          /                                j0        |dGtA                      tA                      df}tC          t          |           tC          t
          |           tk          t          j        dFt;          |          |db         |dg         dh                     d S # tl          $ r}|	)                    d@dto          |          j8        t=          |          t;          |	                    dg                     dz   tA                      i           tC          t          |	            d }~ww xY w)jNTr+   z.write-testokasciir3   znarration authority drift: zscript/story-manifest.jsonr2   canon_sha256spoken_narration_sha256z!story manifest authority mismatchc                    g | ];}t          j        |                    d                                                     <S )r2   )r   r   encoder#   )rd   r\   s     r   rf   zmain.<locals>.<listcomp>   s:    VVV7>$++g"6"677AACCVVVr   )	sort_keyschunk_text_sha256z9existing TTS checkpoint does not match narration/chunkingc                :    i | ]}t          |d                    |S )index)r^   rd   ri   s     r   
<dictcomp>zmain.<locals>.<dictcomp>   s&    UUUTDM**DUUUr   segmentsschema_versionr~   rA   rB   rD   runningr   Fendpointsource_canon_sha256candidate_sha256request_configrequest_config_sha256segment_count_plannedhot_manifest_pathfinal_manifest_pathoutput
updated_at)startzsegment-04dz.wavz.txtz	.wav.part
requesting)r   rA   rB   rD   r   r   r   r   r   r   r   r   r   
created_atz.jsoncurlz--fail-with-bodyz--silentz--show-errorz
--max-time900z-XPOSTz-Hz/Content-Type: application/x-www-form-urlencodedz--data-urlencodeztext@zstyle=doc_truyenz	speed=1.0zdenoise=truez--outputrz   r   failedi)rD   
error_typery   r   zTTS request failed at segment r|   ir   sha256_stream_8MiB)r   rD   r   r   r   r   hash_methodr   z$segment count mismatch before concatzsegment reconciliation failed: r   z
concat.txt c              3  l   K   | ]/}d t          |d                                                    dV  0dS )zfile 'r   z'
N)r   as_posixr   s     r   rj   zmain.<locals>.<genexpr>   sG      &v&vY]'TT(^0D0D0M0M0O0O'T'T'T&v&v&v&v&v&vr   zstory-full.wav.partffmpegrx   ry   z-yz-fconcatz-safe0z-iz-ar48000z-ac1z-c:a	pcm_s16lewavzconcat failed: c              3  @   K   | ]}t          |d                    V  dS )r   N)r   r   s     r   rj   zmain.<locals>.<genexpr>   s/      XX4uT*%566XXXXXXr   r   g?zconcat duration mismatch: z vs )rD   r   segment_countoutput_durationsegment_duration_sumoutput_sha256output_bytesoutput_prober   completed_atr   r   )rD   r   r   r   )rD   r   r   ry   failed_segment_indexr   )9rO   rP   rQ   rR   r5   rS   r6   r9   unlinkrY   r   rN   	CANON_SHArL   r:   rE   rF   rG   rK   ru   r   r;   REQUEST_CONFIGr   r#   r   rH   rI   ENDPOINTrh   r   rT   r   r>   	enumeratezipr   rl   r   r   r   r"   r   r   r   r<   r   r   r   r   rm   sumabsprintr   type__name__)	directorytestnarration_shastory_manifesttextstext_hashesconfig_hasholdentries_by_indexmanifestr   r\   r   r   prior	text_pathtemp_outputattemptattempt_pathrp   re   r   expected_hashcheckedconcat_file	temp_full
full_probesegment_durationfinalexcs                                 r   mainr   t   s
   gsz>CXY  	t444=(w///	GGG9%%M	!!HHHIIIZ(D!D O OY` O a abbN.))Y66.:L:LMf:g:gkt:t:t>???9&&&8899EVVPUVVVK.Nd!K!K!K!R!R!T!TUU__aaK
C
zz|| \j889977,-->>#''J]B^B^bmBmBmZ[[[UUSWWZQS=T=TUUU!g 	# 	)	
 	E 	H 	y 	"= 	N../ABB 	. 	  	 U 	[ 	SXX 	s>22  	#f++!" 	B#$ 	cee% H( Xr'0UK1H1HPQ'R'R'R D	' D	'#E#D(GGG!;E!;!;!;!;;F$%5%9%9%%D%DhPVWWE $++E222),&C***"<U"<"<"<"<<I!$Cu$C$C$C$CCK   888!!## %""$$$"#%&!$2$6$67I$J$J'0+8'"0)4f++!ee G  ')DE)D)D)D)DDLg...^.
NLZ_&(K&(;	(;(;&(:&&K 0 0	 #  F  A%%h6&-Jh[a[hjojpjpIq  B  D  D  E  E  EL'222"#vE#v#vfmNl_e_lnrnsnsMt#v#vwwwk""AJ{F+++% 'f++ &v3.
 
 
E NN5!!!$'EEGL!g...Z ''...%(UUH\"X&&&&x
#$$E

22EFFF$'(<k$J$J 	" 	" E=&umT%/=R=RSSG ["#YUYYwEWEW#Y#YZZZLL!!!!,rww&v&vaijtau&v&v&vvv  BI  	J  	J  	J33	 	tWdD(GS$PST_P`P`bgiprwy|  E  GR  TX  Z_  ad  en  ao  ao  p
 
 

 !!Huvv1FHHIII9%%
XX8JCWXXXXXz*%(8899C??jJz<RjjXhjjkkk

9f%%%

! *!566)*5$4#F^^"KKMM1&/EE%%
 
 
 	CNE***djKSZZU_`jUk  D  ET  U  V  V  W  W  	X  	X  	X  	X  	X   x%DIIDV^abe^f^f  ~A  BJ  BN  BN  OY  []  B^  B^  ~_  ~_  bc  ~c  ps  pu  pu  	v  	v  	vC"""s   'Xd+ +
f:5B f55f:__main__)r   r   )r   r   r   r   )r   r   r'   r(   r   r)   )r   r)   )rZ   r[   )r\   r   r]   r^   r_   r^   r   r`   )r   r   r   r(   )r   r(   r   r   r   r   r   r   )"
__future__r   r   r   r   r:   r<   pathlibr   r   sysrF   rH   rI   rJ   r   r   rN   rO   rP   rQ   rR   rS   rT   r   r   r   r>   rY   ru   r   r   r   r   r   r   r   <module>r      s   " " " " " "       				           



tWXX
,%N	=//	7N	''


))22	%	%'%FKKO O O O      	@ 	@ 	@ 	@    *   .
b 
b 
b 
b] ] ] ]@ zDFFFFF r   