
    l`j#"                        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	m
Z
 d dlmZ  ee                                          j        d         Zedz  Zedz  ZdZdZd	 Zd
 Zd Zd Zd Zd Zd Zedk    rS	  ej         e                       dS # e$ r0Z e de ej!                    ej        d           Y dZ[dS dZ[ww xY wdS )    N)datetimetimezone)Path   zimage/image-brief.jsonzlog/image-generation.jsonz0http://192.168.40.11:20128/v1/images/generationszcx/gpt-5.5-imagec                 N    t          j        |                                           S N)hashlibsha256	hexdigest)datas    script/generate-images.py	sha_bytesr      s    >$))+++    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   r   <lambda>zsha_file.<locals>.<lambda>   s    &++o">"> r   r   )r	   r
   openiterupdater   )pathdigestblockr   s      @r   sha_filer      s    ^F	4 !F>>>>DD 	! 	!EMM%    	!! ! ! ! ! ! ! ! ! ! ! ! ! ! ! s   ,A##A'*A'c                     t           j                            d          rt           j        d         S t          j                    dz  t          j                    dz  t          j                    dz  g} | D ]}|                                s|                    dd                                          D ]n}|                                	                    d          rE|
                    d	d
          d
                                                             d          c c S ot          j                    dz  }|                                ri }d}|                    dd                                          D ]}|r3|d                                         s|                                dk    }7|rld|v rh|                                
                    dd
          \  }}|                                                    d                              d          ||<   |                    dd                              d          dk    r|                    d          r|d         S t          d          )NIMAGE_API_KEYz .config/huyen-an-audio/image.envz.config/image-api.envz.envutf-8ignore)encodingerrorszIMAGE_API_KEY==r   z"'z.hermes/config.yamlFr   zmodel::"'base_url /zhttp://192.168.40.11:20128/v1api_keyzIMAGE_API_KEY is unavailable)osenvirongetr   homeexists	read_text
splitlinesstrip
startswithsplitisspacerstripRuntimeError)
candidatesr   rawconfigmodelin_modelkeyvalues           r   find_keyr?       s^   	z~~o&& +z/**)++ BBDIKKRiDikoktkvkvyk  AJ A A{{}} 	>>78>DDOOQQ 	A 	ACyy{{%%&677 Ayya((+113399%@@@@@@@A	A Y[[00F}} $##WX#FFQQSS 	A 	AC 3q6>>++ 99;;(2 AC3JJ YY[[..sA66
U"[[]]0055;;C@@c
99Z$$++C004SSSX]XaXabkXlXlS##
5
6
66r   c                    t          | t                    r|                                 D ]\  }}|dv r@t          |t                    r+t	          |          dk    r|                    d|f           I|dk    rBt          |t                    r-|                    d          r|                    d|f           t          ||           d S t          | t                    r| D ]}t          ||           d S d S )N>   imageb64_jsoni  base64url)zhttp://zhttps://)	
isinstancedictitemsstrlenappendr3   collectlist)objfoundr=   r>   s       r   rK   rK   :   s   #t 
"))++ 	& 	&JC+++
5#0F0F+3u::X\K\K\h.////*UC"8"8U=M=MNe=f=feU^,,,,u%%%%	& 	& 
C		 " 	" 	"EE5!!!!" "	" 	"r   c                    g }d}|                      dd                                          D ]z}|                    d          s|dd                                          }|r|dk    r=|dz  }	 t	          t          j        |          |           f# t
          j        $ r Y ww xY w|s4	 t	          t          j        |           |           n# t          $ r Y nw xY w|st          d	          |d
         \  }}|dk    rt          j        |          |fS t          j                            |d          5 }|                                |fcd d d            S # 1 swxY w Y   d S )Nr   r   replace)r"   zdata:   z[DONE]r   z)Image provider response contains no imagerC      timeout)decoder1   r3   r2   rK   jsonloadsJSONDecodeError	Exceptionr7   rC   	b64decodeurllibrequesturlopenr   )r   rN   eventsr9   payloadkindr>   responses           r   parse_responserc   H   s   EF{{79{55@@BB 
 
~~g&& 	abb'--// 	'X--!	DJw''////# 	 	 	D	 	DJt$$e,,,, 	 	 	D	 HFGGG)KD%x&&..			s		3	3 'x}}&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 's6   1"BB&%B&,"C 
CC8EE"Ec                    |d         |          }|                     d          }|                     d          }t          |t                    r|                                st	          d|            t          |t
                    r|rt          d |D                       st	          d|            d                    |          }|                                d| d	z   S )
Nassetspromptrequired_textzimage brief prompt missing for c              3   D   K   | ]}t          |t                    o|V  d S r   )rE   rH   ).0xs     r   	<genexpr>zprompt_for.<locals>.<genexpr>j   s3      @l@l^_AsASASAYXY@l@l@l@l@l@lr   z#required text contract invalid for z | z Typography must be rendered directly by the image provider in this same asset; no separate text layer or postprocessing. Required text contract, byte-for-byte and in this order: z. These required blocks are the only readable characters anywhere in the image. Keep every required block fully visible, readable and uncropped. No watermark, QR code, real logo or extra caption.)r-   rE   rH   r2   r7   rL   alljoin)assetbriefspecrf   requiredexacts         r   
prompt_forrs   d   s    ?5!DXXhFxx((Hfc"" F&,,.. FDUDDEEEh%% JX JS@l@lck@l@l@l=l=l JHHHIIIJJx  E ~DI~ ~ ~ 	~r   c                  (   t          j        t          j        t	          t
          dz            dgt
                    } | j        rt          d          t          	                                st          d          t          j        t                              d                    }|                    d          d	us|                    d
          st          d          t                      }dddd}i }t                                          rt          j        t                              d                    }|                    d
          |d
         k    rL|                    d          |                    d          k    r d |                    dg           D             }g }|                                D ]\  }}t
          dz  |z  }	t%          ||          }
t'          |
                    d                    }|                    |i           }|	                                rl|                    d          d	u rU|                    d          |k    r<|                    d          t+          |	          k    r|                    |           t.          |
ddddddd}d }t1          dd          D ]}	 t2          j                            t8          t          j        |d                              d          dd d!|z   d"d#$          }t2          j                            |d%&          5 }|                                }d d d            n# 1 swxY w Y   tA          |          \  }}tC          |          d'k     s|"                    d(          st          d)          |	#                    d*          }|$                    |           tK          j&        ||	           ||d
         |d         |d         |         d+         t.          t8          |t	          |	'                    t
                              |	(                                j)        t+          |	          ||d	d	dd,}|                    |            nX# tT          $ r7}t	          |          }|d-k     rtW          j,        d.|z             Y d }~d }~ww xY wt          | d/|           t          j-        .                    d	d	0           t          /                    t          j        d.d|d
         |d         |ta          j1        td          j3                  4                                d1dd.2          d3z   d           tk          t          j        |d	t	          |	          d4d          d	5           d.tC          |          d-k    otm          d6 |D                       |d
         |d         d	|ta          j1        td          j3                  4                                d7}t          /                    t          j        |dd.2          d3z   d           tk          t          j        |d         tC          |          d8d                     |d         rd9ndS ):Nz script/validate-workflow-copy.pyzpre-provider)cwdz#workflow-copy authority gate failedzverified image brief missingr   )r!   verifiedTsource_canon_sha256zimage brief not verifiedzintro-poster-master.pngzright-panel-master.pngzleft-panel-master.png)intro_posterright_panel
left_panelworkflow_copy_authority_sha256c                 :    i | ]}|                     d           |S )rn   )r-   ri   rows     r   
<dictcomp>zmain.<locals>.<dictcomp>   s&    SSSC#'''**CSSSr   re   rA   verified_fileprompt_sha256r
   r   autohighpng)r;   rf   nsizequality
backgroundimage_detailoutput_format   F)ensure_asciizapplication/jsonztext/event-streamzBearer )zContent-TypeAcceptAuthorizationPOST)r   headersmethodi  rT   i s   PNG

z'generated asset failed PNG verificationz	.part.pngrg   )rn   rw   r{   rg   r;   endpointr   r   bytesr
   r_   attemptsr   text_rendered_by_providerpostprocessed_text      z	 failed: )parentsexist_ok)versionrv   rw   r{   re   
updated_at)r   indent
)rn   r   r   )flushc              3   &   K   | ]}|d          V  dS )r   N r}   s     r   rk   zmain.<locals>.<genexpr>   s(      ?e?eY\O@T?e?e?e?e?e?er   )r   rv   rw   r{   provider_rendered_text_onlyre   
created_at)rv   re   r   )7
subprocessrunsys
executablerH   PROJECT
returncoder7   BRIEFis_filerW   rX   r0   r-   r?   RECEIPTr/   rG   rs   r   encoder   rJ   MODELranger\   r]   RequestENDPOINTdumpsr^   r   rc   rI   r3   with_suffixwrite_bytesr+   rP   relative_tostatst_sizerZ   timesleepparentmkdir
write_textr   nowr   utc	isoformatprintrl   )gatero   r=   mapping
prior_rowspriorrowsrn   filenameoutputrf   
prompt_shaoldr`   lastattemptr]   rb   r   rA   r_   tempr~   excreceipts                            r   mainr   v   sL   >3>3w9[/[+\+\^lmsz{{{D B@AAA==?? ;9:::Ju8899EyyD((		:O0P0P(5666
**C8Ia  rI  J  JGJ~~ T
7,,g,>>??99*++u5J/KKKPUPYPYZzP{P{  @E  @I  @I  Jj  @k  @k  Qk  QkSS599Xr;R;RSSSJD"==??  x  xx7"X-E5))v}}W5566
nnUB''==?? 	sww774??CGGOD\D\`jDjDjorovovw  pA  pA  EM  NT  EU  EU  pU  pUKK!V!VX^nt  GM  `e  f  fQ{{ 	: 	:G- .00
7af@g@g@g@n@nov@w@w  Se  qD  W`  cf  Wf  Bg  Bg  pv0  w  w^++GS+AA +X#==??D+ + + + + + + + + + + + + + + .t 4 4vu::&&e.>.>?S.T.T&&'PQQQ))+66  '''
4((( %eDY>Z  D  Ee  f  y~  G  yH  IN  yO  P_  y`  kp  ~F  Yc  mp  qw  qC  qC  DK  qL  qL  mM  mM  X^  Xc  Xc  Xe  Xe  Xm  yA  BH  yI  yI  U[  ip  CG  fj  BG  H  HC    - - -3xxQ;;JqG|,,,-
 %88$88999TD9994:!_dez_{  `e  fF  `G  SW  go  gs  t|  t@  gA  gA  gK  gK  gM  gM  'N  'N  ]b  kl  m  m  m  pt  t  F  	G  	G  	Gdj54VUUdijjjrvwwwwwTa)eC?e?e`d?e?e?e<e<e  D  EZ  [  D  Ee  f  GK  W[  ks  kw  x@  xD  kE  kE  kO  kO  kQ  kQ  R  RGtz'aHHH4OZabbb	$*'*"5TKKZ_
`
`
`aaa
#*11*s>   A7R9MRMR!M"D#R
S,SS__main__zImage generation blocked: )file)"rC   r	   rW   r+   r   r   r   urllib.requestr\   r   r   pathlibr   __file__resolver   r   r   r   r   r   r   r   r?   rK   rc   rs   r   __name__exitrZ   r   r   stderrr   r   r   <module>r      s      				     



      ' ' ' ' ' ' ' '      
$x..
 
 
"
"
*1
-**
/
/=, , ,  7 7 74" " "' ' '8  $5+ 5+ 5+p z   0300szBBBB s   B C %CC