
    !jr                    4   d Z ddlm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ZddlZddlmZ ddlmZ  ee                                          j        d         Z ee          ej        vr$ej                            d ee                     ddlZddlmZ ddlmZmZmZm Z  ed	z  d
z  dz  Z!dZ"e!e"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)e#dz  Z*e*dz  Z+ ej,                    dz  dz  dz  Z- ed          Z.ed	z  dz  dz  Z/e#dz  Z0d\  Z1Z2Z3dZ4dZ5g dZ6d Z7d!Z8d"Z9g d#Z:g d$Z;dgdhd*Z< e<d+          Z= e<d,          Z> e<d-          Z? e<d.          Z@ e<d/          ZA e<d0d1          ZB e<d2d1          ZCdid7ZDdjd9ZEdkd:ZFdld<ZGd= ZHdmd?ZIdndDZJdodIZKdpdKZLdqdMZMdN ZNdrdPZOdsdSZPdT ZQdU ZRdV ZSdW ZTdX ZUdY ZVdZ ZWd[ ZXe.e/d%d%d\dtdaZYdb ZZdudcZ[e\ddk    r% e] ej^         e[            def                     dS dS )vzRender Everyday Red Flags 022: fake CAPTCHA notification trap red flag.

Visual policy: high-quality AI keyframes + text-only active-word subtitles.
No renderer arrows, boxes, circles, progress bars, labels, or caption boxes beyond subtitles.
    )annotationsN)Path)Any   )export_companion_candidate)Image	ImageDraw	ImageFontImageFilterdatapost_candidateszeveryday-red-flags-fake-captchaAchatterbox_gianna_clone_premium_v1_readable_silent_2line_clean_aiscene_keyframesz8erf-022_voiceover_chatterbox_gianna_clone_premium_v1.wavzNerf-022_voiceover_chatterbox_gianna_clone_premium_v1.faster_whisper_words.jsonz%video_no_audio_forced_words_2line.mp4zLerf-022_fake_captcha_chatterbox_gianna_clone_premium_v1_1080x1920_review.mp4zcontact_sheet_keyframes.pngyoutube_private_upload_packagezunused.jsonz.hermesmedia_cache
autoshortsz,/home/agent/projects/TrueTraceShorts_WebSitewebsite_companion_specszerf-022-fake-captcha.jsonzreview_package_chatterbox.json)i8  i     zerf-022-fake-captcha)r               !   )z[/home/agent/.hermes/cache/images/openai_codex_gpt-image-2-high_20260604_233543_4805f42e.pngz[/home/agent/.hermes/cache/images/openai_codex_gpt-image-2-high_20260604_235116_df32e1fe.pngz[/home/agent/.hermes/cache/images/openai_codex_gpt-image-2-high_20260604_235217_02d0a5a8.pngz[/home/agent/.hermes/cache/images/openai_codex_gpt-image-2-high_20260604_233711_f073c015.pngz[/home/agent/.hermes/cache/images/openai_codex_gpt-image-2-high_20260604_233427_bde021ce.pngz[/home/agent/.hermes/cache/images/openai_codex_gpt-image-2-high_20260604_235414_1598dfad.pngz[/home/agent/.hermes/cache/images/openai_codex_gpt-image-2-high_20260604_233757_d5403a6f.pngz[/home/agent/.hermes/cache/images/openai_codex_gpt-image-2-high_20260604_235304_d1f910b7.pngu&   Fake CAPTCHA Trap? Don’t Click Allowa  A fake CAPTCHA can look like a normal human check, but one permission request gives it away.

The red flag is the Allow button: real CAPTCHAs do not need browser notification access.

Safer move: click Block, close the tab, and remove the site from notification settings if you already allowed it.

Rule: CAPTCHA plus notification permission means stop.

#FakeCaptcha #BrowserSafety #ScamAlert #CyberSafety #EverydayRedFlagsa%  If a CAPTCHA asks you to click Allow, stop. A real CAPTCHA checks a box, image, or puzzle. It does not need permission to send notifications. Fake CAPTCHA pages use the same trick: prove you are human, press Allow, continue. But Allow can let the site push scam alerts to your screen. Then you may see fake virus warnings, prize messages, or account alerts. The safer move is simple: click Block and close the tab. If you already allowed it, remove that site from browser notification settings. Rule: CAPTCHA plus notification permission means stop.)	z+If a CAPTCHA asks you to click Allow, stop.z.A real CAPTCHA checks a box, image, or puzzle.z2It does not need permission to send notifications.zRFake CAPTCHA pages use the same trick: prove you are human, press Allow, continue.z;But Allow can let the site push scam alerts to your screen.zHThen you may see fake virus warnings, prize messages, or account alerts.z8The safer move is simple: click Block and close the tab.zOIf you already allowed it, remove that site from browser notification settings.z6Rule: CAPTCHA plus notification permission means stop.)@r   g      @g@g333333@gffffff@g	@gffffff!@Fsizeintboldboolc                    |rdnd|rdndg}|D ];}t          |                                          rt          j        ||           c S <t          j                    S )Nz4/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttfz//usr/share/fonts/truetype/dejavu/DejaVuSans.ttfz=/usr/share/fonts/truetype/liberation2/LiberationSans-Bold.ttfz@/usr/share/fonts/truetype/liberation2/LiberationSans-Regular.ttf)r   )r   existsr
   truetypeload_default)r   r   
candidatescs       %scripts/render_erf022_fake_captcha.pyfontr&   L   s    BF}>>L}KO  	XGG  VXJ  D D77>>CI$6qd$C$C$CCCCC!###       "   &   ,   4   >   TL   pathr   returnstrc                   t          j                    }|                     d          5 t          fdd          D ]}|                    |           	 d d d            n# 1 swxY w Y   |                                S )Nrbc                 .                          d          S )Ni   )read)fs   r%   <lambda>zsha256.<locals>.<lambda>[   s    	!2!2 r'   r'   )hashlibsha256openiterupdate	hexdigest)r/   hchunkr6   s      @r%   r9   r9   X   s    nA	4 JA2222C88IIE!((5////IJ J J J J J J J J J J J J J J;;==s   ,A##A'*A'floatc                    t          t          j        dddddddt          |           gd	                                                    S )
Nffprobe-verror-show_entrieszformat=duration-ofzdefault=nw=1:nk=1Ttext)r@   
subprocesscheck_outputr1   strip)r/   s    r%   ffprobe_durationrL   _   s    ()DQbchi|  ~A  BF  ~G  ~G  *H  NR  S  S  S  Y  Y  [  [  \  \  \r'   c                :    |                      |||||           d S )N)radiusfilloutlinewidth)rounded_rectangle)drawxyrrO   rP   rQ   s         r%   
draw_roundrV   c   s'    2adG5QQQQQr'            c                    |                      d||          }t          |d         |d         z
  z
  dz  }|                     ||f|||           d S )Nr   r   r&      r   r&   rO   )textbboxWIDTHrH   )rS   yrH   fntrO   bxs          r%   centerrf   g   sW    
mmE$Cm((AUAaD1I->,B!IIqeDctI,,,,,r'   c                   |                                 }g }g }|D ]}d                    ||gz             }|                     d||          }	|rA|	d         |	d         z
  |k    r,|                    d                    |                     |g}v|                    |           |r(|                    d                    |                     |S )N r\   r]   r^   r   )splitjoinr`   append)
rS   rH   rc   max_wwordslinescurwtestrd   s
             r%   wraprr   l   s    
**,,Ebb#  XXc1#g$--d-"D"D 	1Q4!9u$$LL#'''aSjjmmmm
'ELL#'''Lr'   r   F   x   c           	        t          j        dt          t          fd          }|                                }t          t                    D ]}t          t                    D ]}|t          dz  z
  t          z  }|t          dz  z
  t          z  }t          dd||z  ||z  z   dz  z
            }dt          d	d|t          z  z
  z            z   }|t          | d         d
z  |z            z   |t          | d         dz  |z            z   dt          | d         dz  |z            z   f|||f<   ʌ|                    t          j
        d                    S )NRGB)	         g
ףp=
?g?r   r   g@
      g?gQ?   r^   g
ףp=
?g333333?)r   newra   HEIGHTloadrangemaxr   filterr   GaussianBlur)	accentimgpxrb   re   dxdyglowbases	            r%   
backgroundr   w   sK   	%vy11C
xxzzB6]] p pu 	p 	pA%*e#B6$;(>RQq"R%2+s**++DCAahJ(((D#fQinT1222DVAYt^D=P9Q9Q4QSUVYZ`abZcdhZhimZmVnVnSnoBqsGG	p ::k.t44555r'   `      x    c                r   t          | ||||z   ||z   fdddd           t          | |dz   |dz   ||z   dz
  ||z   dz
  fdd	           |                     |d
z   |dz   fdt          d           |                     ||z   dz
  |dz   fdt          d           |                     |dz   |dz   ||z   dz
  |dz   fdd           |                     |d
z   |dz   fdt
          d           |                     |d
z   |dz   fdt
          d           t          | |d
z   |dz   ||z   d
z
  |dz   fddd d           |                     |d!z   |d"z   fd#t          d$           |                     |d!z   |d%z   fd&t          d'           |                     |d!z   |d(z   fd)t          d'           |rtt          | |d!z   |d*z   ||z   d!z
  |d+z   fd,d-d.d           |                     |d/z   |d0z   fd1t          d2           |                     |d/z   |d3z   fd4t          d2           n&|                     |d!z   |d5z   fd6t          d7           |rMt          | |d!z   |d8z   ||z   d!z
  |d9z   fd,d:d;d           |                     |d/z   |d<z   fd=t          d>           |                     |d
z   |d?z   fd@t
          dA           d S )BN:   )   rz   r)   )<   rt   r   r^   r   r   6   r)            rt   _   Mail)      -   r_      h   zToday 09:18)r   r   z   7      )         rO   rQ   r   z&From: billing@northgate-supply.example)*   r,   rt     z'Subject: Invoice 4821 - payment detailsi^    r(   rZ   rZ   rZ   )   r      n   i  zInvoice 4821)r   #   r     zAmount due: 1,240.00)r   r+   @   +  zDue date: Fridayi    r   )rZ         )r      P      i  zPlease use our NEW bank account)r   r      i  zfor this payment.i  zBank details: as usual)rt   R   j   i>  i  )r   r      )M      r   iZ  zSecond channel confirmed)   d   r   i  u!   Reply  •  Forward  •  Archive)r   r   ~   )	rV   rH   F20F12lineF14F24F18F16)rS   re   rb   rp   r>   changedconfirms          r%   draw_phone_emailr      s(   tQq1QqSM"Z
1===tQrT!B$qs2vac"f-b???IIqtAbDk&czI:::IIqs3wquom,IGGGIIqtAcE!A#b&3']ICCCIIqtAcElCR\I]]]IIqtAcElD#S]I^^^tQrT!C%!Bqu-b}QOOOIIquQsUmNIDDDIIquQsUm2ILLLIIquQsUm.CZIHHH T43quQqSWQsU3B}\RSTTT		1S53- AsPY	ZZZ		1S53- 3)	LLLL		1S53- 8c{	SSS V43quQqSWQsU3B}\RSTTT		1S53- :	UUUIIqtAdFm?SlI[[[[[r'   ru     H  l  c                   t          | ||||z   ||z   fdddd           |                     |dz   |dz   fdt          d           |                     |dz   |d	z   fd
t          d           |                     |dz   |dz   fdt          d           |                     |dz   |dz   fdt
          d           t          | |dz   |dz   ||z   dz
  |dz   fdd           d}d}t          ||f          D ]c\  }}|                     d|t
                    }	|                     |||	d         |	d         z
  z
  dz  z   |dz   |dz  z   f|t
          d           dd S )N$   )r      r   )K   r      r^   r   zTrusted contact)rz   r)   r   r_      zNorthgate Supply Ltd.)r   0   rt      zSaved phone: +44 20 5550 0184)r   rt   r   i@  z'Saved email: accounts@northgate.example  i  r(   )r      U   zConfirm bank change hereznot in the emailr\   r]   r   i  r   r   )rV   rH   r   r   r   r   	enumerater`   )
rS   re   rb   rp   r>   line1line2jr   rd   s
             r%   draw_contact_cardr      s   tQq1QqSM"]<BBBIIqtAbDk+*IEEEIIqtAcEl2ILLLIIqtAcEl:ITTTIIqtAcElD#S]I^^^tQrT!C%!Bqu-b===
$E
EU5M** V V$
--d-
,
,		1a1adma''#ad
3Dc}	UUUUV Vr'   idxc                   t          g d| dz
                     }t          j        |          }| dk    rZt          |ddt          d           t          |d           t          |dd	t                     t          |d
dt          d           n| dk    r+t          |ddt          d           t          |d           n| dk    rt          |ddt          d           t          |ddddd           |	                    ddt          d           |	                    ddt          d           |	                    ddt          d           |	                    ddt          d            d!D ]}|
                    d"|d#|fd$d%           t          |d&d't                     t          |d(d)t          d           n| d*k    rXt          |dd+t          d           t          |           t          |d,d-t                     t          |d.d/t          d           n8| d0k    r[t          |dd1t          d           t          |dd2           t          |dd3t          d           t          |d4d5t          d           nt          |d6d7t          d           t          |d8d9dd:d           t          g d;          D ]j\  }}|                    d<|t          =          }|	                    t          |d         |d>         z
  z
  dz  d?|d@z  z   f|t          |dk    rdAnd            kt          |dBdCt                     t          |dDdEt          d           |j                            ddF           |                    |dGH           d S )IN))(   T      )r   r   r   )rz   p   r   )   J   r)   )2   f   r   )r      \   r   N   zEVERYDAY RED FLAGS)      rZ   T)r   i  zA NORMAL INVOICE EMAILi   zWITH ONE QUIET CHANGE)rZ      Y   r^   r   zTHE RED FLAG   zWHY IT WORKS)}   ih  i  ij  r   r   )H   r   ru   )   i  zReal invoice)   r   r   r_   )r   i  zReal amount)r   i  zReal deadline)r   r   zFake bank account)r   r   r(   )i  ib  i  r   iz  )      r   r   i  zTHE EMAIL FEELS ROUTINEi$  zSO THE CHANGE GETS MISSED   z
SAFER MOVEi  zUSE A TRUSTED CONTACTi  zNOT THE MESSAGE   zSECOND CHANNEL CHECK)r   r   zCALL. CONFIRM.i	  z	THEN PAY.r   zTHE RULE)r   r   r   iV  r   )^   q   r   )zNEW BANK DETAILSzNEED AzSECOND CHECKr\   r]   r   r   r   )r   r   r   i  zSEND THIS TO SOMEONEi<  zWHO PAYS INVOICESparentsexist_okr   quality)r   r	   Drawrf   r   r   r   F30rV   rH   r   r   r   r`   ra   parentmkdirsave)r   r/   r   rS   yyir   rd   s           r%   
make_scener     s   ___`cde`efggC			D
AvvtB+C>>>t,,,,tD1#666tD0\BBBB	atB~c,777t,,,,,	atB~c,7774*2mKJJJ		)N	DDD		)Ms
	CCC		)O*	EEE		)/Sk	JJJVVBC3r?TU!V!V!V!VtD23777tD4SFFFF	atB|C555$tD0555tD*3|<<<<	atB-c,???tT::::tD)#l;;;tDS6666tC
3|4444*2mLKKK L L LMM 	W 	WFAdmmE$Cm00A$))eQqT!A$Y>ORS=STWXYZ]X]T]<^_cil  AB  DE  AE  AEr|r|  KV)  3W  3W  3W  3WtD/444tD,S>>>KdT222HHT"Hr'   
list[Path]c                    t                               dd           g } t          t          d          D ]h\  }}t	          |          }|                                st          |          t           d|ddz  }t          j        |          	                    d          }t          t          |j        z  t          |j        z            }t          j        |j        |z            t          j        |j        |z            }}|                    ||ft          j        j                  }|                    |t          z
  dz  |t          z
  dz  |t          z   dz  |t          z   dz  f          }|                    |d	
           |                     |           jt          j        ddd          }	t          |           D ]s\  }}t          j        |          	                    d                              dt          j        j                  }|	                    ||dz  dz  |dz  dz  f           t|	                    t2          d
           | S )NTr   r   erf022_ai_scene_02d.jpgrw   r^   r   r   )i*  i  )r|   r|   r|   )r   r   r   r   r   r   )	ASSET_DIRr  r   AI_SCENE_SOURCESr   r    FileNotFoundErrorr   r:   convertr   ra   rQ   r   heightmathceilresize
ResamplingLANCZOScropr  rk   r~   pasteCONTACT)
pathsr  srcsourcepimscalenwnhsheets
             r%   create_scene_imagesr#     s   OOD4O000
E+A..  #Cyy}} 	,#F+++
2q2222
2:f%%e,,%.&"233i''29U?)C)C299bWU-56677RXM2f9q."U(Q6	A~NOO
"Q
)E)J
/
/E / /!:a==  ''..y9I9QRRB1c	1a4*-....	JJwrJ"""Lr'   c                 N	   t                               dd           t                                          rdS t          } t           dz  }|                    dd           t           dz  }|                                s-t          j        dddd	d
ddddddt          |          g           g }g }t          | d          D ]\  }}|d|ddz  }|                                sL|ddddddd|z   dddddd }t          j	                    }	t          j        d!|d"#          }
t          t          j	                    |	z
  d$          }|
j        rH|
j                            d%d&                              d'          r|                    |
j                   |
j        r|                                s>t'          ||
j        |
j                            d%          |
j        dd(         d)          |                    |t          |          t/          |          |t1          |          d*           nA|                    |t          |          t/          |          t1          |          d+           |                    |           t           d,z  }g }t          |          D ]q\  }}|                    d-|                                 d.           |t5          |          dz
  k    r+|                    d-|                                 d.           r|                    d/                    |          d/z              t          j        dddd	d
dd0d1d2dt          |          d3d4t          t                    g           i d5d6d7d8d9dd:dd;d<d=t;          j        t<                                                                                     d>t5          |           d?d(d@ddAddBddC|dDddEt          t                    dFt/          t                    dGt1          t                    dHtB          j!        "                    tB          j#        j$                  %                                }t           dIz                      tM          j'        |dJK          dLM           dS )Nz:Synthesize Chatterbox Taylor voiceover in sentence chunks.Tr   N
tts_chunkszpause_500ms.wavffmpeg-y-hide_banner	-loglevelrD   z-flavfi-izanullsrc=r=24000:cl=monoz-tz0.50r   chunk_r  z.wavclonez
Gianna.wavwavg?gp=
ף?g      ?iD        ?enFr   )rH   
voice_modereference_audio_filenameoutput_formattemperatureexaggeration
cfg_weightseedspeed_factorlanguage
split_text
chunk_sizestreamzhttp://100.101.173.25:8004/tts   )jsontimeoutr   zcontent-type zaudio/i  )sentencehttp_statuscontent_typebody)rA  r/   durationelapsed_secr9   )rA  r/   rE  r9   ztts_concat.txtzfile ''
concatz-safe0z-ccopyprovider%chatterbox_http_clone_semantic_chunksbase_urlzhttp://100.101.173.25:8004r1  r2  presetz6Gianna premium female reference clone warm narrator v1script_sha256sentence_countinter_sentence_pause_msr4  r5  r6  chunkssuccessoutput_pathrE  output_sha256
created_atzBerf-022_voiceover_chatterbox_gianna_clone_premium_v1.metadata.jsonr^   indentutf-8encoding)(VERSION_DIRr  AUDIOr    VOICE_CHUNKSrI   
check_callr1   r   timerequestspostroundokheadersget
startswithwrite_bytescontentRuntimeErrorstatus_coderH   rk   rL   r9   as_posixlen
write_textrj   r8   SCRIPTencoder=   datetimenowtimezoneutc	isoformatr>  dumps)	sentences	chunk_dirpausechunk_paths
chunk_metar   rA  cppayloadtrU   elapsedrI  rn   r  r  metas                    r%   synthesize_voiceoverr     s	   dT222||~~vvI,&I	t(T(T(T
'
'E<<>> Vx^KPTU\]ab|  ~B  CI  JM  NS  JT  JT  U  	V  	V  	VKrJ!)A..  H+c+++++yy{{ 		x$'Uarw  GK  [_  mq  y~  B  yB  RU  ae  sx  FI  SX  Y  YGikkAX]+KQXadeee1otuyu~  vA  vA  BC  vC  DE  pF  pFgnt *	nR88CCHMM *qy)))4 Wryy{{ W"xamcdclcpcpq  dA  dA  IJ  IO  PT  QT  PT  IU  $V  $V  W  W  W(#b''M]^`MaMapw  BH  IK  BL  BL  M  M  N  N  N  N(#b''M]^`MaMakqrtkukuvvwww2''Fr%% O O!-ajjll---...K  """ELL1M%..:J:J1M1M1M$N$N$N
dii&&t+,,,8DGDQYZabefjknoukvkvw{  }C  DG  HM  DN  DN  O  P  P  P 
[	*<  
[	ZHd  
[	eqry  
[	  {U  Vb  
[	  ck  ld  
[	  et  u|  uC  DJ  DQ  DQ  DS  DS  uT  uT  u^  u^  u`  u`  
[	  aq  ru  v  r@  r@  
[	  AZ  [^  
[	  _l  mq  
[	  r@  AE  
[	  FR  SW  
[	  X`  ak  
[	  lu  vz  
[	  {H  IL  MR  IS  IS  
[	  T^  _o  pu  _v  _v  
[	  wF  GM  NS  GT  GT  
[	  Ua  bj  bs  bw  bw  x@	  xI	  xM	  bN	  bN	  bX	  bX	  bZ	  bZ	  
[	DUUaabfblmqyzb{b{b{  FMa  N  N  N  N  Nr'   list[dict[str, Any]]c                 F   t                                           r=t          j        t                                                     } d | d         D             S ddlm} t          j                    } |ddd          }|                    t          t                    d	d
dd          \  }}g }g }|D ]}|j        |j        |j        g d}	|j        r|j        D ]}
|
j                                        s|
j                                        t#          |
j                  t#          |
j                  t%          dt#          |
j        |
j        z
                      d}|                    |           |	d                             |           |                    |	           t                               t          j        d|j        |j        t1          t          j                    |z
  d          t3          |          ||dd          d           d |D             S )Nc                    g | ]y}|d          t          |d                   t          dt          |                    dt          |d                   t          |d                   z
                                dzS )wordstart皙?rE  endr  r  rE  )r@   r   rg  .0rp   s     r%   
<listcomp>z%force_align_words.<locals>.<listcomp>  s      9N  9N  9N  {|6SXYZ[bYcSdSdpstxy~  @A  @E  @E  FP  QV  WX  Y^  W_  Q`  Q`  af  gh  ip  gq  ar  ar  Qr  @s  @s  zt  zt  qu  qu  :v  :v  9N  9N  9Nr'   rm   r   )WhisperModelzbase.encpuint8)devicecompute_typer0  TFr   )r9  word_timestamps
vad_filter	beam_size)r  r  rH   rm   r  )r  r  r  rE  r   )modelr9  rE  r  
word_countsegmentsrm   r^   rX  rZ  r[  c                r    g | ]4}|d          t          |d                   t          |d                   d5S )r  r  rE  r  r@   r  s     r%   r  z%force_align_words.<locals>.<listcomp>  s?    hhh]^AfIeAgJ&7&75:CWCWXXhhhr'   )
WORDS_JSONr    r>  loads	read_textfaster_whisperr  ra  
transcriber1   r^  r  r  rH   rm   r  rK   r@   r   rk   ro  rw  r9  rE  rd  rn  )r   r  r  r  r  inform   segsssegrp   items               r%   force_align_wordsr    s    NZ
,,..//  9N  9N  @D  EL  @M  9N  9N  9N  2N++++++
ikkAiFSSS5##CJJt`eqr#ssNHd
E2d  W15rBB7 	>W > >v||~~/xV\\^^E!'NNquadeijopqpuvwv}p}j~j~aa  A  AT"""CL$7$7$=$=$=$=C$*i4=\`\ityz~  {D  {F  {F  GH  {H  IJ  uK  uK  Y\  ]b  Yc  Yc  os  |A  &B  &B  JK  L  L  L  V]  ^  ^  ^hhbghhhhr'   rm   list[list[dict[str, Any]]]c                l   d t          j        dt                    D             }d }d }g }d}|D ]l}| || ||          z            }| ||          z  }d} |t          |                    D ]+}	||||	z            }
|
r|                    |
           ||	z  },m|t          |           k     ry| |d          }|rXt          |          dk     rEt          |d                   t          |          z   dk    r|d                             |           n|                    |           d	 |D             S )
Nc                ^    g | ]*}|                                 |                                 +S  )rK   r  r  s     r%   r  z"build_segments.<locals>.<listcomp>"  s-    SSSQSqwwyySSSr'   z[^.!?]+[.!?]c                    t          |                     dd                              dd                                                    S )Nu   —rh   -)rn  replaceri   )r  s    r%   token_countz#build_segments.<locals>.token_count#  s9    s199U3#7#7#?#?C#H#H#N#N#P#PQQQr'   c                   | dk    r| gS | dk    r| dz   dz  | | dz   dz  z
  gS g }| }|dk    rZ|dk    r|                     |           n>d}||z
  dk     rt          d|dz
            }|                     |           ||z  }|dk    Z|S )Nry      r   r^   r   r   r   )rk   r   )npartsremtakes       r%   balancedz build_segments.<locals>.balanced$  s    b55!*b551Q3(AqsQhJ//a#!eeBwwS)))5D4xzzAc!e4LLT		 !ee
 r'   r   r   r   c                    g | ]}||S r  r  r  s     r%   r  z"build_segments.<locals>.<listcomp>9  s    %%%!1%A%%%r'   )refindallrp  rn  rk   extend)rm   rx  r  r  r  cursorr  swlocalr   r  tails               r%   build_segmentsr  !  sv   SS"*_f"E"ESSSIQQQ	 	 	 H  {{1~~--.A0FaHSWW%% 	 	D5t#$C(HOOC(((4KEE	 E

677^ 	$D		!HRL(9(9#d))(CQ(F(FQSH[H[\`HaHaHaHaood###%%x%%%%r'   c                    |                      d||          }t          |d         |d         z
            t          |d         |d         z
            fS )Nr\   r]   r^   r   r   r   )r`   r   )rS   rH   rc   rd   s       r%   	text_sizer  <  sG    
mmE$Cm((AQqT!A$YQqT!A$Y1O*Or'   c                   t          |          D ]\  }}t          |d         d                   }|dz   t          |          k     r$t          ||dz            d         d                   n9t          |d         d                   t          |d         d                   z   dz   }t          t          |d         d                   t          |d         d                   z   dz   |dz
            }|| cxk    r|k    rn |c S g S )	Nr   r  r   r  rE  g?gffffff?r  )r   r@   rn  r   )r  r  r   r  r  
next_startr  s          r%   segment_for_timer  @  sK   X&& % %CCF7O$$WZ[\W\]`ai]j]jWjWjxAq7I'7R1S1S1Spuvyz|v}  F  wG  qH  qH  IN  OR  SU  OV  Wa  Ob  Ic  Ic  qc  dg  qgjc"gg&''c"gj.A(B(BB4G
SWXX!====S=====***=Ir'   c           
     h    t          |          D ]X\  }}t          |d                    cxk    r2t          |d                   t          |d                   z   dz   k    rn T|c S Yt          dt          t	          |          dz
  t           fd|D                       dz
                      S )Nr  rE  gQ?r   r   c              3  N   K   | ]}t          |d                    k    dV   dS )r  r   Nr  )r  rp   r  s     r%   	<genexpr>z$active_word_index.<locals>.<genexpr>K  s9      #K#K!eAgJ6G6G6J6JA6J6J6J6J#K#Kr'   )r   r@   r   minrn  sum)r  r  r  rp   s   `   r%   active_word_indexr  H  s    ~~ [ [!7PPPPU1W:%6%6uQz]7K7K%KD%PPPPPPYZRZRZRZPqSXXaZ#K#K#K#Ks#K#K#K K KA MNNOOOr'   c           
     r   |s| S t          j        |           d |D             }|s| S t          dz
  dt          dt	          |t          |          dz
                      }dfd	}d }t          dd	          t          d
dd          D ]D}t          |d	           ||          }|r$t          fd|D                       r|} nE|Wt          dd	          t          j
        t          |          dz            }|d |         ||d|z           |d|z  d          g}dddd                    t          |          d          }	dddd                    t          |          d          }
d}t          |          D ]\  }}fd|D             }t          |          t          |          dz
  z  z   }t          dt          |z
  dz            }|	||
z  z   }t          ||          D ]9\  }}||k    rdnd}                    ||f||dd           ||z   z  }|dz  }:| S )Nc                    g | ]b}t          |d                                                    )t          |d                                                                                    cS )r  )r1   rK   upperr  s     r%   r  z"draw_subtitles.<locals>.<listcomp>P  s[    $k$k$kTWXYZ`XaTbTbThThTjTj$kS6^^%9%9%;%;%A%A%C%C$k$k$kr'   r   r   r   r   r   c                   g }g }| D ]]}||gz   }fd|D             }|rBt          |          	t          |          dz
  z  z   
k    r|                    |           |g}[|}^|r|                    |           t          |          dk    rft          |d                   dk    rMt          |d                   dk    r4|d                             d|d                                                    t          |          |k    r|nd S )Nc                >    g | ]}t          |          d          S r   r  r  rp   rS   rc   s     r%   r  z6draw_subtitles.<locals>.wrap_lines.<locals>.<listcomp>W  s*    $L$L$L!YtAc%:%:1%=$L$L$Lr'   r   r  r^   r   )r  rn  rk   insertpop)rm   rc   	max_linesrn   ro   r  rq   widthsrS   gap	max_totals    `      r%   
wrap_linesz"draw_subtitles.<locals>.wrap_linesT  s%   b# 	 	DdVD$L$L$L$L$Lt$L$L$LV s6{{3D		!#44Y>>S!!!v33##!S!!!u::a<<Cb	NNA--#eBi..2B2BE"IDTDTUVW\]_W`WdWdWfWfDgDgDgE

I--uu47r'   r)   Tr   r(   r  c              3     K   | ]:}t          fd |D                       t          |          dz
  z  z   k    V  ;dS )c              3  F   K   | ]}t          |          d          V  dS )r   Nr  )r  rp   candrS   s     r%   r  z+draw_subtitles.<locals>.<genexpr>.<genexpr>a  s4      EE1YtAd33A6EEEEEEr'   r   N)r  rn  )r  r   r  rS   r  r  s     r%   r  z!draw_subtitles.<locals>.<genexpr>a  s_      uugkEEEEEEEEEEc3t99UV;FWWYbbuuuuuur'   r^   i  i  iz  )r   r^   r   r   r   B   c                >    g | ]}t          |          d          S r  r  r  s     r%   r  z"draw_subtitles.<locals>.<listcomp>h  s*    777Q	$q%%a(777r'   r   )rZ   r   r   r   r   )r   r   r   )r&   rO   stroke_widthstroke_fill)r   )r	   r   ra   r   r  rn  r&   r   allr  r  rg  r   r  ziprH   )r   r  activerm   r  chosenr   rn   ay0line_hgilir   r  totalre   rb   r  wwrO   r  rS   rc   r  r  s                        @@@@@r%   draw_subtitlesr  N  s   s
			D$k$kS$k$k$ke*CiIRqVCJJqL))**F	8 	8 	8 	8 	8 	8 	8 	8 FT"T]]bB * *$t__JJuT$:$:e 	*Suuuuuuuotuuuuu 	*Fd#EE~DMMTYs5zz!|441eBQBiaPQRSPSeUZ[\]^[^[_[_U`=af
!!#f++d33BrB<L<L<P<PQTU[Q\Q\]_<`<`VBV$$  477777$777s6{{3PSTXPYPYZ[P[K\?\`cdfhmnshsvwgw`x`x^_|~  @B  CI  @I  }Iz{4'' 	 	GD!#VDIIqeDctwIWWWr#vIAr1urr	 Jr'   c                `   t          t                    |dz   fdt          D             }g d}t          ||          D ]%\  }}                    |||z   |f           ||z  }&g }|D ]}t	          j        |                              d          }t          t          |j	        z  t          |j        z            }	t          j        |j	        |	z            t          j        |j        |	z            }}
|                    |
|ft          j        j                  }|                    |                    |
t          z
  dz  |t          z
  dz  |
t          z   dz  |t          z   dz  f                     fd}d }t%          |           }t          j        t&          z            }t)          j        d	          5 }t-          |          d
z  }|                                 t1          |          D ]}|t&          z  } ||          }|         \  }}}t          dt3          d||z
  t          d||z
            z                      } |||         ||          }|dk    r6|dk     r0t	          j         |||dz
           d|dz
            ||dz            }t7          ||          }t9          |||rt;          ||          nd          }|                    |d|ddz  dd           t?          j         ddddddtC          t&                    dtC          |dz            dddd d!d"d#d$d%d&tC          tD                    g           d d d            n# 1 swxY w Y   t?          j         ddddddtC          tD                    dtC          tF                    d'd(d'd)dd*d+d,d-d.d/d%d&tC          tH                    g           tJ          D ]]}tL          d0|d1d2z  }t?          j         dddddd3tC          |          dtC          tH                    d4d5tC          |          g           ^d S )6Ng?c                     g | ]
}|z  z  S r  r  )r  dtargetr  s     r%   r  z render_video.<locals>.<listcomp>r  s!    	2	2	2Q!E'&.	2	2	2r'   g        rw   r^   c                    t                    D ]\  }\  }}}|| cxk    r|k     rn |c S t                    dz
  S Nr   )r   rn  )r  r  r  e_sceness        r%   	scene_idxzrender_video.<locals>.scene_idxz  sW    "6** 	  	 IAgq1!vvvvAvvvvvaxxxv6{{1}r'   c           	        dd|z  z   }t          t          |z            }t          t          |z            }t          dt          j        ||dz  z   t          j        z            z            }t          dt          j        ||dz  z   t          j        z            z            }t          dt          t          |z
  t          dz  |z   |dz  z
                      }t          dt          t          |z
  t          dz  |z   |dz  z
                      }	| 	                    ||	||z   |	|z   f          
                    t          t          ft          j        j                  S )	Ngx&1?g~jt?r   g(\?r   g)\(?r   r^   )r   ra   r   r  sintaucosr   r  r  r  r   r  r  )
r  r  r   zoomrp   r>   r   r   lefttops
             r%   motionzrender_video.<locals>.motion~  s!   57]c%*ooAVD[1A1Aqr$(Ac#gItx/00011c"TXqSyRVRZFZ=[=[:[6\6\23uQwuax{1a4/0011s1S&RS)TV,WXZ[W[J[=\=\7]7]3wwSaA.//66f~eFVF^___r'   erf022_frames_)prefixframesr   r   gMbP?g)\(?r/  frame_06dr  r   )r   subsamplingr&  r'  r(  r)  rD   z
-framerater+  zframe_%06d.jpgz-vfz#setsar=1,setdar=9/16,format=yuv420pz-c:vlibx264z-presetslowz-crf16z	-movflagsz
+faststartz-mapz0:v:0z1:a:0rK  z-c:aaacz-b:a192kz	-shortest	qa_frame_r  .pngz-ssz	-frames:v1)'r  SCENE_DURATIONSr  rk   r   r:   r  r   ra   rQ   r   r  r  r  r  r  r  r  r  FPStempfileTemporaryDirectoryr   r  r   r  blendr  r  r  r  rI   r`  r1   VIDEO_NO_AUDIOr^  FINAL
QA_SECONDSr]  )rm   audio_durationscene_pathsdursro   r  r  imagesr  r  r   r!  r  r  r  total_framestmpfdr  r  r   r  r  r  framer  secoutr  r  r  s                               @@@r%   render_videor   p  s   
o

E~d':	2	2	2	2	2/	2	2	2DF3s4$$JJ!fmmSQqM&B&B&BCFCCF L L:a==  ''%.&"23349RXe^;T;TVZV_`b`ijo`oVpVpR99bWU-566bggPRSXPX[\}^`ag^gjk]kmopumuxyly{}  E  |E  HI  {I  OJ  GK  GK  9L  9L  9L  9L    ` ` `
 E""H6#:1F1FL		$,<	=	=	= 	M99Xrxxzzz|$$ 	I 	IAeA1SVC[uq1C#a1cRVWXYZWZmmH[B\B\<]<]!&Qs++E1uu4k&&As3q5"A"A%$OO 8,,CN5ilMsM^_`adMeMeMers4t4teJJr.1.....raJHHHHx^KP\]`ad]e]efjknoq  sC  pC  lD  lD  EJ  Kp  qw  xA  BK  LR  SY  Z^  _j  kw  x{  |J  xK  xK  L  	M  	M  	M	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 8DGDQTUcQdQdeijmnsjtjtu{  }D  EK  LS  TZ  [a  bh  in  ou  v|  }H  IT  Ua  be  fk  bl  bl  m  n  n  n J J1C11111x^KPUVYZ]V^V^_cdghmdndnoz{~  @C  DG  @H  @H  I  	J  	J  	J  	JJ Js   FMM!$M!c                   t          j        t          j        dddddddddd	d
t	          |           gd                    }|d         d         }|d         }|d         |d         |                    d          |                    d          |                    d          t          |d                   t          |d                   t          |                    dd                    dS )NrB   rC   rD   z-select_streamszv:0rE   zIstream=width,height,sample_aspect_ratio,display_aspect_ratio,r_frame_ratezformat=duration,size,bit_raterF   r>  TrG   streamsr   formatrQ   r  sample_aspect_ratiodisplay_aspect_ratior_frame_raterE  r   bit_rate)rQ   r  r$  r%  
frame_raterE  
size_bytesr'  )r>  r  rI   rJ   r1   rg  r@   r   )r/   r  r  r6   s       r%   prober*    s   	J+YtGDUV[\k  mx  yH  Ih  in  ou  vy  z~  v  v  -@  FJ  K  K  K  
L  
LD
9oaADN!gJ(!%%PeJfJf~  D  D  E[  \  \  jk  jo  jo  p~  j  j  KP  QR  S]  Q^  K_  K_  mp  qr  sy  qz  m{  m{  GJ  KL  KP  KP  Q[  \]  K^  K^  G_  G_  `  `  `r'   c           
     Z   t                               dd           t           t           dt           dz  }| d         }i dt          dt          dt          d	t
          d
g ddg ddddddddd dddddddddd dd dt          t                    |dddd }t          j	        |dd!"          
                                }t          j        |                                          }||d#<   d$t           d%t           d%| d%| |d&<   |                    t          j	        |d'(          d)*           |                     t          t
          |d&         |dt          |          d d+           t                               t          j	        | d'(          d)*           ||fS ),NTr   r  z$_youtube_private_upload_package.jsonr9   candidate_idversiontitledescriptionhashtags)z#FakeCaptchaz#BrowserSafetyz
#ScamAlertz#CyberSafetyz#EverydayRedFlagstags)zfake CAPTCHAzbrowser notification scamzpermission scamz
scam alertzcyber safetyr9  r0  
categoryId27privacyStatusprivate	publishAtselfDeclaredMadeForKidsFmade_for_kids_reasonzQGeneral digital safety content for adults and families, not directed to children.containsSyntheticMediasynthetic_media_reasonz|AI-assisted/deterministic visual production; Chatterbox synthetic voice; synthetic media disclosed for manual Studio review.thumbnail_paththumbnail_sha256
video_pathvalid)video_sha256claim_gate_resultsafety_gate_resultupload_allowed),:)	sort_keys
separatorsposting_pack_sha256z$APPROVED_FOR_PRIVATE_YOUTUBE_UPLOAD rh   approval_commandr^   rX  rZ  r[  )r.  r/  rH  rG  upload_gate_validpackage_paththumbnail_in_package)PACKAGE_DIRr  CANDIDATE_IDVERSIONTITLEDESCRIPTIONr1   r  r>  rw  rq  r8   r9   r=   ro  r<   REVIEW_PACKAGE)r   pkg_path	video_shapkg	canonicalpack_shas         r%   build_packagerW    s   dT222LXX7XXXXH8nI		|		$-g		6=e		DQR]		ddd		 	iii		 	4			 %T			 +:)			 EPPT			
 	"%		
 )?  @S		 	!		 '?  @~		 			 1		 7C3u::		 ^g#RW		 		 		C jtyAAAHHJJIU\UcdmUnUnUxUxUzUzH'Cr<rrRYrr\errhprrC
3a000'BBBKK[CPbLc  {C  X\  lo  px  ly  ly  QU  V  V  W  W  WdjQ777III=r'   c                    t           dz  }|                                sd S t          j        |                                          }|                    dg           D ]A}|                    dg           D ](}|                    d          dv rd|d<   d|d	<   d
|d<   )Bt          j                            t          j        j	                  
                                |d<   |                    t          j        |dd          d           d S )Nz9data/content_ideas/everyday_red_flags_topic_database.json
categoriesitemstopic_id>   erf-topic-fake-captchareview_readystatusawaiting_reviewpriorityzerf-022_fake_captchaexisting_artifact_hint
updated_atr^   F)rY  ensure_asciirZ  r[  )ROOTr    r>  r  r  rg  rr  rs  rt  ru  rv  ro  rw  )
final_pathdbr   catr  s        r%   update_topic_dbrh    s   GGB99;;	BLLNN	#	#DxxR(( I IGGGB'' 	I 	IDxx
##'AAA-X@QtJ/?  sISWXpSq	I  (,,X->-BCCMMOODMM$*T>>>MPPPPPr'   website_rootcompanion_specrun_generatorforcerj  rk  rl  rm  c                4    t          t          || ||          S )N)review_package_pathcompanion_spec_pathrj  rl  rm  )r   rQ  ri  s       r%   $export_website_companion_from_reviewrq    s*     &**!#   r'   c                 x   t          j        d          } |                     ddd           |                     ddd           |                     d	dd
           |                     ddd           |                     dt          t                     |                     dt          t
                     | S )NzNRender ERF-022 Fake CAPTCHA and optionally prepare the website companion page.)r/  z--prepare-website-companion
store_truez\Export the review package to the TrueTraceShorts website candidate pipeline after rendering.)actionhelpz--run-website-generatorzIWhen preparing the website companion, also run the website npm generator.z--force-website-companionzNPass --force to the website generator when --run-website-generator is enabled.z--website-companion-onlyz`Skip rendering and use the existing review_package_chatterbox.json for website companion export.z--website-root)typedefaultz--companion-spec)argparseArgumentParseradd_argumentr   DEFAULT_WEBSITE_ROOTDEFAULT_COMPANION_SPEC)parsers    r%   build_parserr~    s	   $  2B  C  C  CF
5l  Rp  q  q  q
1,  NY  Z  Z  Z
3L  P`  a  a  a
2<  Oq  r  r  r
(t=QRRR
*?UVVVMr'   c                   t                                          |           }|j        r\t                                          st          t                    t          j        t                              d                    }nt          
                    dd           t                      }t                       t                      }t          t                    }t!          |||           t#          |          }t%          t&                    }t)          t&                    }t*          t&          j        z  }	t*          
                    dd           t/          j        t&          |	           i dt2          dt4          dt6          dd	 |D             d
ddddt9          |          dt9          |          d|d|d|dt;          t&                    dt;          |	          dt)          |	          dt;          t                    dt;          t<                    dd t>          D             ddd}tA          |           tC          t&                     |j"        s|j#        s|j        rntI          |j%        |j&        |j#        |j'                  }
|
(                                |d<   t          )                    t          j*        |d           d           |S )!NrZ  r[  Tr   r,  r-  scriptscene_imagesc                ,    g | ]}t          |          S r  )r1   )r  r  s     r%   r  zmain.<locals>.<listcomp>  s#    [x[x[xgh\_`a\b\b[x[x[xr'   caption_alignment:faster_whisper_word_timestamps_source_punctuation_segmentscaption_style1static_phrase_segment_2line_active_word_highlightr  segment_countr  
video_metar9   outputmedia_cache_pathmedia_cache_sha256audiocontact_sheet	qa_framesc                F    g | ]}t          t          d |ddz            S )r  r  r  )r1   r]  r  s     r%   r  zmain.<locals>.<listcomp>  s      LJ  LJ  LJ  z{  MP  Q\  ]t  ij  ]t  ]t  ]t  ]t  Qt  Mu  Mu  LJ  LJ  LJr'   zyhigh-quality AI-generated keyframes + subtitles only; no renderer arrows/boxes/circles/progress bars/labels/caption boxesa  Chatterbox Gianna reference-clone voiceover via Tailscale endpoint; forced word timing, readable sentence-level caption groups, varied fake CAPTCHA / notification permission visuals; first frame includes visible in-image title Fake CAPTCHA Trap; Gianna premium female reference clone voice, no non-subtitle renderer overlays; thumbnail intentionally omitted; user sets thumbnail manually.)visual_policynotesri  website_companionr^   rX  )+r~  
parse_argswebsite_companion_onlyrQ  r    r  r>  r  r  r]  r  r#  r  r  rL   r^  r   r  r*  r  r9   MEDIA_CACHEnameshutilcopy2rM  rN  rp  rn  r1   r  r  rW  rh  prepare_website_companionrun_website_generatorrq  rj  rk  force_website_companionto_dictro  rw  )argvargsr   r  rm   r  r  
media_metarS  r  plans              r%   mainr    s   >>$$T**D" $$&& 	4#N333z.22G2DDEE$666'))!!2B52I2I>U>+666&&<<
6%==$uz1$666UK[8\8\8\jn\ j)G jHV jN[x[xlw[x[x[x j!"^j_n  pcj dp  qt  uz  q{  q{j |K  LO  PX  LY  LYj Zj  kyj zF  GQj RZ  [dj em  nq  rw  nx  nxj yK  LO  P`  La  Laj bv  w}  ~N  wO  wOj PW  X[  \a  Xb  Xbj cr  sv  w~  s  sj @K  LJ  LJ  I  LJ  LJ  LJj Z  cij j j 	d% P)C PtGb P3*.4.	
 
 
 %)LLNN !!!$*T!"<"<"<w!OOOKr'   __main__r^   rX  )F)r   r   r   r   )r/   r   r0   r1   )r/   r   r0   r@   r  )rW   )rs   )r   r   r   r   FF)ru   r   r   r   )r   r   r/   r   )r0   r  )r0   r  )rm   r  r0   r  )rj  r   rk  r   rl  r   rm  r   )N)___doc__
__future__r   rx  rr  r8   r>  r  r  r  rI   sysr  ra  pathlibr   typingr   __file__resolver   rd  r1   r/   r  rb  autoshorts.website_companionr   PILr   r	   r
   r   OUT_DIRrN  r]  r  r^  r  r  r  r  rL  PACKAGEhomer  r{  r|  rQ  ra   r   r  rM  r  r  rO  rP  rp  r_  r  r&   r   r   r   r   r   r   r  r9   rL   rV   rf   rr   r   r   r   r  r#  r  r  r  r  r  r  r  r   r*  rW  rh  rq  r~  r  __name__printrw  r  r'   r%   <module>r     s0   
 # " " " " " [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [            tH~~'*3t99CHHOOAss4yy!!!  C C C C C C 8 8 8 8 8 8 8 8 8 8 8 8
-+
+.O
O
M++	PPkk
FFdd
5
5<<

%dikkI%5DtJKK )BBE`` ??# vs%#
	 	 	  	1 A= 
 
 
 ;::$ $ $ $ $ 	DHH$$r((cRCdd2hh#DDHH$$rRV--c]a]abdei]j]jY\   \ \ \ \R R R R- - - -
  
6 
6 
6 
6\ \ \ \0V V V V) ) ) )X   .N N NBi i i i&& & & &6P P P  P P P  D!J !J !JH` ` `  .	Q 	Q 	Q .1           B z	E*$*TTVV1
%
%
%&&&&& r'   