
    U\jU              
         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	m
Z
  e
e                                          j        d         Zedz  Zdddd	d
ddd	dZd%dZd&dZd'dZd(dZd)dZedk    rv ej         e                       dS # e$ rTZ e ej        dd  ee          j         d!e d"d #          ej        $            ej        d           Y dZ[dS dZ[ww xY wdS )*    )annotationsN)Path   zscript/project-manifest.jsonfootagefootage_receiptfootage_qa_dir)	video_keyreceipt_keyout_keyfinal_masterfinal_receiptfinal_qa_dir)r   final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)handles   script/extract-video-qa.py<lambda>zsha256.<locals>.<lambda>   s    &++o">">     r   )hashlibsha256openiterupdate	hexdigest)r   digestchunkr   s      @r   r   r      s    ^F	4 !F>>>>DD 	! 	!EMM%    	!! ! ! ! ! ! ! ! ! ! ! ! ! ! ! s   ,A##A'*A'manifestdictkeyc                   |                      d          pi                      |          }t          |t                    r|st          d| d          t	          |          }|                                s
t          |z  }	 |                                                    t                                                     n%# t          $ r}t          d|           |d }~ww xY w|S )Nactive_pathszactive_paths.z is missingzactive path escapes project: )
get
isinstancer   RuntimeErrorr   is_absoluteROOTresolverelative_to
ValueError)r#   r%   valuer   excs        r   resolve_activer2      s    \\.))/R44S99EeS!! = =;3;;;<<<;;D d{K""4<<>>2222 K K K@3@@AAsJKKs   >C 
C$CC$r0   Nonec                   | j                             dd           t          j        |dd          dz                       d          }t          j        d| j         d| j         	          \  }}	 t          j	        |d
          5 }|
                    |           |                                 t          j        |                                           d d d            n# 1 swxY w Y   t          j        ||            t          j                            |          rt          j        |           d S d S # t          j                            |          rt          j        |           w w xY w)NTparentsexist_okF   )ensure_asciiindent
utf-8.)prefixdirwb)parentmkdirjsondumpsencodetempfilemkstempnameosfdopenwriteflushfsyncfilenoreplacer   existsunlink)r   r0   datafdrH   r   s         r   atomic_jsonrT   +   s   KdT222Ju5;;;dBJJ7SSD'749'7'7'7T[IIIHB1Yr4   	JFLL0I0I0I	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J

47>>$040027>>$040s1   2D: AC#D: #C''D: *C'+D: :6E0floatc                    t          t          j        dddddddt          |           gd	                                                    S )
Nffprobe-verrorz-show_entrieszformat=durationz-ofz"default=noprint_wrappers=1:nokey=1T)text)rU   
subprocesscheck_outputr   strip)r   s    r   durationr^   7   sW    (4/3D3SYY*    %''  r   intc                 B   t          j                    } |                     dt                     |                                 }t          |j                 }t          j        t          	                    d                    }t          ||d                   }t          ||d                   }t          ||d                   t          j        |	                    d                    }|                    d          d	k    s|                    d
          durt          d          |                    d          t          |          k    rt          d          dz  }|                                st          fddD                       rt          d                              dd           t#          |          }g }	dD ]}
||
z  dz  }d|
ddz  }t%          j        ddddd|ddt)          |          dd d!d"d#d$t)          |          gd%           |	                    |
|t)          |          t          |          |                                j        d&           d'd(|j        |d)         t)          |          t          |          d*t)          |          t          |          ||	dd+d,}t1          ||           t3          t          j        |d         d(|j        t7          |	          t)          |          d-d(.                     d/S )0Nstage)choicesr<   )encodingr	   r
   r   status	completedverifiedTz1render receipt is not terminal completed/verifiedartifact_sha256z.video drift detected after render verificationzextraction.jsonc              3  P   K   | ] }d |ddz                                   V  !dS )frame-02d.jpgN)rP   ).0percentouts     r   	<genexpr>zmain.<locals>.<genexpr>M   sC      ffgs%?g%?%?%?%??GGIIffffffr   )
   2   Z   z8QA output already exists and requires audit/invalidationr5   d   ri   rj   rk   ffmpegrX   rY   z-yz-ssz.3fz-iz	-frames:v1z-vfzscale=960:-2z-q:v2)check)rm   timestamp_secondsr   r   bytescompleted_pending_vision_reviewFsource_canon_sha256)r   r   zEsequential extraction at 10/50/90 percent, each resized independently)rd   rf   ra   r{   render_receipt
video_pathvideo_sha256duration_secondsframesvision_review_requiredmethod)rd   rf   ra   r   receiptr9   r   )argparseArgumentParseradd_argumentCONFIG
parse_argsra   rC   loadsPROJECT_MANIFEST	read_textr2   r(   r*   r   rP   anyrB   r^   r[   runr   appendstatst_sizerT   printrD   len)parserargscfgprojectvideoreceipt_pathr   outputsecondsr   rm   	timestamptargetresultrn   s                 @r   mainr   >   s   $&&F
000D

Cj)33W3EEFFG7C$455E!'3}+=>>L
#i.
1
1Cj///AABBG{{8++w{{:/F/Fd/R/RNOOO{{$%%66KLLL$$F}} W#ffffYefffff WUVVVIIdTI***uooGF [ [g%+	111111dGT5Y2D2D#e**k3~CV
 		 	 	 	
 	'	SVW]S^S^jpqwjxjx  DJ  DO  DO  DQ  DQ  DY  Z  Z  	[  	[  	[  	[9uW[Wa  {B  CX  {Y  vy  zF  vG  vG  SY  Zf  Sg  Sg  mh  mh  x{  |A  xB  xB  TZ  [`  Ta  Ta  w~  JP  lp  |C  D  DF	$*x 0edjdghndodo|  AG  }H  }H  I  I  X]  ^  ^  ^  _  _  _1r   __main__failedFz: )rd   rf   rY   r   )file)r   r   r   r   )r#   r$   r%   r   r   r   )r   r   r0   r$   r   r3   )r   r   r   rU   )r   r_   )
__future__r   r   r   rC   rI   r[   sysrF   pathlibr   __file__r-   r6   r,   r   r   r   r2   rT   r^   r   __name__exit	Exceptionr1   r   rD   typestderr r   r   <module>r      s;   " " " " " "    				     



       tH~~'*88 &7HUeff)/Vdee
 
      	1 	1 	1 	1          F z	$$&&					 ^ ^ ^jdjH%TTRUYYM_JhJhcfJhJhiix}~~~  FI  FP  	Q  	Q  	Q  	Q  S[  SV  S[  \]  S^  S^  S^  S^  S^  S^  S^  S^  S^^ s   =B C0A	C++C0