
    [_j'                        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e                                          j	        d         Z
dZdZdZ ed          Z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)Path   )  8  )  r   10191f)         c                    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)handles   script/build-layout.py<lambda>zsha256.<locals>.<lambda>   s    &++o">">     r   )hashlibsha256openiterupdate	hexdigest)pathdigestblockr   s      @r   r   r      s    ^F	4 !F>>>>DD 	! 	!EMM%    	!! ! ! ! ! ! ! ! ! ! ! ! ! ! ! s   ,A##A'*A'c                     | j                             dd           |                     | j        dz             }|                    t          j        |dd          dz   d	           t          j        ||            d S )
NTparentsexist_ok.partF   )ensure_asciiindent
utf-8encoding)	parentmkdirwith_suffixsuffix
write_textjsondumpsosreplace)r   valueparts      r   atomic_jsonr4      s|    KdT222DK'122DOODJu5CCCdJU\O]]]JtTr   c                 F   t          j        dddddddt          |           gddd	          }t          j        |j                  }|                    d
g           }t          |          dk    s|d                             d          dk    rt          d|            |S )Nffprobe-verrorz-show_entrieszstream=codec_name,width,heightz-ofr.   T)checkcapture_outputtextstreamsr   r   
codec_namepngznot a single PNG stream: )	
subprocessrunstrr.   loadsstdoutgetlenRuntimeError)r   resultinfor<   s       r   proberI      s    ^	D'?4TV[]cehimeneno	  F :fm$$Dhhy"%%G
7||qGAJNN<88EAA=t==>>>Kr   c                     t          |           d         d         }t          |d                   t          |d                   fS )Nr<   r   widthheight)rI   int)r   streams     r   
dimensionsrO   -   s;    4[[#A&FvgVH%5!6!666r   c                 <    |                      | j        dz             S )Nz	.part.png)	with_namestem)r   s    r   png_partrS   2   s    >>$)k1222r   c                    t          |           }t          d|d         |d         z  |d         |d         z            }t          dt          |d         |z                      }t          dt          |d         |z                      }|d         |z
  dz  |d         |z
  dz  f}|j                            dd           t          |          }t          j        ddd	d
dt          |           dd| d| d|d          d|d          d|d          d|d          dt           ddddt          |          gd           t          |          |k    r%|                    d           t          d          t          j        ||           dt          |          t          |          |t          |          ddddS )Ng      ?r   r   r"   Tr   ffmpegr7   r8   -y-i-vfzscale=:z:flags=lanczos,pad=z	:color=0x	-frames:v1-c:vr>   r9   
missing_okz"normalized still dimensions failedscale_down_and_pad_onlyFzffmpeg-single-frame-png)	operationsource_dimensionstarget_dimensionsscaleoffsetcroppedtext_added_or_modifiedtool)rO   minmaxroundr)   r*   rS   r?   r@   rA   BACKGROUND_HEXunlinkrF   r0   r1   list)	sourcedestinationsizesource_sizerd   rK   rL   re   r3   s	            r   containrs   6   s   V$$KT!W{1~-tAwQ/GHHE5Q%/0011EE+a.501122FAw1$tAw'7A&=>FTD999K  DNdGT4V  DE  D  DF  D  DtAw  D  Da  D  DSYZ[S\  D  D_efg_h  D  D  tB  D  DfeSYY	

     $4t$$$?@@@Jt[!!!.!+..!$ZZv,,"')	 	 	r   c                    |j                             dd           t          |          }t          j        ddddddd	d
t
           dd	t          |           d	t          |          ddddddddt          |          gd           t          |          t          k    r%|	                    d           t          d          t          j        ||           d S )NTr   rU   r7   r8   rV   -flavfirW   z
color=c=0xz:s=1920x1080:r=1z-filter_complexz8[0:v][1:v]overlay=0:0[tmp];[tmp][2:v]overlay=1264:0[out]z-mapz[out]rZ   r[   r\   r>   r]   r^   zlayout dimensions failed)r)   r*   rS   r?   r@   rl   rA   rO   CANVASrm   rF   r0   r1   )leftrightoutputr3   s       r   compose_layoutr{   V   s    
Mt444FDNdGT'4!Nn!N!N!N#d))T3u::YG[#vuc$ii	
 	 	 	 	 $6!!t$$$5666JtVr   c                 D   t          j        ddddt          |           ddddd	d
dgdd          }|j        }d}t	          |          |dz  k    rt          d          |d d         }|||z  k    }t          d t          |t                    D                       }|o|S )NrU   r7   r8   rW   rX   z crop=608:1080:656:0,format=rgb24rZ   r[   ru   rawvideozpipe:1T)r9   r:   i 
    zcenter raw-byte length mismatchc              3   H   K   | ]\  }}t          ||z
            d k    V  dS )r"   N)abs).0actualexpecteds      r   	<genexpr>z&center_region_clean.<locals>.<genexpr>y   s9      kk6Ffhc&8+,,1kkkkkkr   )	r?   r@   rA   rC   rE   rF   allzipBACKGROUND_RGB)layoutrG   rawexpected_pixelsfirst_pixeluniformcolor_closes          r   center_region_cleanr   i   s    ^dGT3v;;5{C*h	

   F -C O
3xx?Q&&&<===bqb'K[?22Gkk#k[iJjJjkkkkkK"{"r   c                     t           dz  } t          j        |                     d                    }|d         }t           |d         z  }t           |d         z  }t           |d         z  }t           |d         z  }t           |d	         z  t           |d
         z  t           |d         z  d}t           |d         z  t           |d         z  t           |d         z  d}t           |d         z  }	t	          |                                          |	||gz   }
t          d |
D                       rt          d          t          j        |                    d                    }t          j        |                    d                    }|                    d          dk    s|                    d          durt          d          |                    d          dk    s|                    d          durt          d          |                    d          dk    rt          d          |	                                D ]!\  }}|                    di                               |          }|                    di                               |          }|rd|                    d          t          |                    t                               k    s&t          |          |                    d          k    rt          d |           |r=|                    d          dus&|                    d!          t          |          k    rt          d"|           #t          |d#         |d#         t                    t          |d$         |d$         t                    t          |d%         |d%         t                    d}t!          |d$         |d%         |	           t#          |	          st          d&          |d	         t          |d#                   |d#                                         j        t)          |d#                   d'|d         t          |d#                   |d#                                         j        t)          |d#                   d'|d
         t          |d$                   |d$                                         j        t)          |d$                   d'|d         t          |d$                   |d$                                         j        t)          |d$                   d'|d         t          |d%                   |d%                                         j        t)          |d%                   d'|d         t          |d%                   |d%                                         j        t)          |d%                   d'|d         t          |	          |	                                j        t)          |	          d'd(}t*          j                            t*          j        j                                                  }i ddddd)dd*d+d,d-d.d/d0d1d2d/d3d/d4d5d6gd7|d8         d9|d         d:t          |          d;|d         d<t          |          d=d>d?gd@d@dAd?dBdAd@dCd?dDdEdFd@dAd?dBdGdH||ddd|dI}t5          ||           t5          ||           dJd/|d         |d         d         |dK|d<   ||dL<   t5          | |           t7          t          j        d|d         d         ddMd/N                     d S )ONzscript/project-manifest.jsonr&   r'   active_pathsartwork_generation_receiptartwork_visual_receiptlayout_receiptlayout_manifestintro_poster_masterleft_panel_masterright_panel_master)intro
left_panelright_panelintro_normalizedleft_panel_normalizedright_panel_normalizedr   c              3      K   | ]h}|                                 pO|                    |j        d z                                              p t          |                                           V  idS )r!   N)existsr+   r,   rS   )r   r   s     r   r   zmain.<locals>.<genexpr>   sl      
|
|lp4;;==gD,,T[7-BCCJJLLgPXY]P^P^PePePgPg
|
|
|
|
|
|r   z&layout outputs/receipts must be virginstatus	completedverifiedTz'artwork generation receipt not terminalz(provider-master visual gate not terminalevidence_scopez8provider-rendered still images only; no video frame usedzvisual evidence scope driftresultsgatesr   r   z"artwork generation lineage drift: master_sha256z#provider-master visual gate drift: r   r   r   z!layout center region is not clean)r   r   bytesrI   )intro_masterr   left_masterleft_normalizedright_masterright_normalizedr   static_image_only static_image_processing_locationlocalstatic_image_processing_policyzVlocal scale/pad/composite explicitly allowed; provider-rendered text remains unchangedvideo_encode_performedFvideo_processing_policyzZall later MP4 render/encode/transcode stages use LXC workers 192.168.1.104 ports 8021-8024postproduction_text_addedcropping_performedmechanical_operationsz"scale-down and pad provider stillsz5composite normalized still panels onto one PNG canvassource_canon_sha256canon_sha256generation_receipt_pathgeneration_receipt_sha256provider_visual_receipt_pathprovider_visual_receipt_sha256geometryr   r   r   r   )xyrK   rL   i`  z$flat placeholder for footage overlay)r   r   rK   rL   contenti  )canvasrx   centerry   
operations)	artifactsnormalized_visual_gate_requiredr   no_video_frame_used
created_atawaiting_normalized_visual_qa)r   r   receiptartifact_sha256
updated_atr   )r   layout_sha256r   )r#   )ROOTr.   rB   	read_textrn   valuesanyrF   rD   itemsrA   relative_tor   rs   rw   PANELr{   r   statst_sizerI   datetimenowtimezoneutc	isoformatr4   printr/   )manifest_pathmanifestactivegeneration_pathvisual_pathreceipt_pathlayout_manifest_pathmasters
normalizedr   outputs
generationvisualkeymasterrowgater   r   r   r   s                        r   mainr   }   s	   99Mz-1171CCDDHn%FV$@AAO 899K&!122L&):";;455V$788f%9:: G 122V$;<<f%=>> J
 F8$$F:$$&&''6<AU*VVG

|
|t{
|
|
||| ECDDDO55w5GGHHJZ--w-??@@F~~h;..*..2L2LTX2X2XDEEEzz({**fjj.D.DD.P.PEFFFzz"##'aaa8999}} L LVnnY++//44zz'2&&**3// 	KcggfooV-?-?-E-E)F)FFF&QW..\_\c\cdl\m\mJmJmICIIJJJ 	Ltxx
++477488O;T;TX^_eXfXf;f;fJSJJKKK <g ):g+>GGgl3Z5MuUUw}5z-7PRWXX J
 :l+Z-FOOOv&& @>??? "((=!>&QXY`QaJbJbmtu|m}  nC  nC  nE  nE  nM  X]  ^e  fm  ^n  Xo  Xo  p  p%+,>%?6R\]dReKfKfq{  }D  rE  rJ  rJ  rL  rL  rT  _d  eo  pw  ex  _y  _y  z  z &': ;vgVbNcGdGdov  xD  pE  pJ  pJ  pL  pL  pT  _d  el  my  ez  _{  _{  |  |$*+B$CvV`amVnOoOo  {E  FR  {S  {X  {X  {Z  {Z  {b  mr  s}  ~J  sK  mL  mL  M  M!'(<!=PWXePfIgIgry  {H  sI  sN  sN  sP  sP  sX  ch  ip  q~  i  c@  c@  A  A%+,D%EQWXbcpXqQrQr  ~H  IV  ~W  ~\  ~\  ~^  ~^  ~f  qv  wA  BO  wP  qQ  qQ  R  R!(+vf~~PVP[P[P]P]Pepuv|p}p}~~ I 


 1 5
6
6
@
@
B
BC+D 	T 	+G	
 	)  +C 	!% 	"# 	$U 	e 	 "FH  "A 	x7 	"6*F#G 	$VO%<%< 	'/G(H 	)&*=*=  	Tl!cTBBa#Rxyya#FF	
 
!, 	j-. +/##7  G: $g...g&&&1*+$X.x8 HX !H\x(((	$*i>QRZ>[  AE  F  F  UZ  [  [  [  \  \  \  \  \r   __main__)r   r   r.   r0   r?   pathlibr   __file__resolver   r   rw   r   rl   r   r   r   r4   rI   rO   rS   rs   r{   r   r   __name__ r   r   <module>r      s9      				          tH~~'*	|$$      7 7 7
3 3 3  @  &# # #(c\ c\ c\L zDFFFFF r   