
    g^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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appendr2   collectlist)objfoundr<   r=   s       r   rJ   rJ   9   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 imagerB      timeout)decoder0   r2   r1   rJ   jsonloadsJSONDecodeError	Exceptionr6   rB   	b64decodeurllibrequesturlopenr   )r   rM   eventsr8   payloadkindr=   responses           r   parse_responserb   G   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k    r*d|d          d|d         d          d|d         d	          d
S d                     |d                   }d}d}| dk    rd}d}d| dk    rdnd d|d          d|d          d|d          dd                     |d                    dd                     |d                    d|d          d |d!          d"d                     |d#                    d$|z   d%| d$z   |z   S )&Nassets
left_panelzmStandalone vertical abstract cinematic channel-branding artwork, not a room and not a story poster. Palette: palettea  . Use only abstract rain-on-glass texture, soft harbor-light bokeh, one flowing amber soundwave and subtle geometric reflections. No people, faces, silhouettes, characters, ferry, room, furniture, luggage, books, papers, signs, radio, receiver, turntable, cassette, control panel, buttons, dials, screens, labels or recognizable story props. Integrate typography directly into the provider-rendered artwork. Render exactly these two Vietnamese text blocks, preserving every accent: required_textr   z | r   a-  . ABSOLUTE TEXT RULE: these are the only readable or letter-like characters anywhere. No ON-AIR, location names, numbers, pseudo-text, glyphs, equipment marks or environmental writing. Let required typography flow naturally, remain fully visible, readable and uncropped. No watermark, QR or real logo.r'   aE  ABSOLUTE TEXT RULE: those three blocks are the only readable characters anywhere in the image. Do not render ferry/location names, warehouse labels, signs, forms, papers, tickets, cassette labels, numbers, pseudo-text or environmental writing; every environmental sign and document must be blank or abstract non-letter marks.right_panela  Show at most one simple plain amber cassette as a recognizable silhouette with two circular reels only; it must have no recorder, controls, buttons, labels, embossed marks, glyphs, numbers or pseudo-text. Do not include papers, tickets, forms, placards, signs or writable surfaces. zABSOLUTE TEXT RULE: those three blocks are the only readable or letter-like characters anywhere. Do not render ferry/location names, warehouse labels, signs, forms, papers, tickets, cassette labels, numbers, pseudo-text, glyphs or environmental writing.zPremium cinematic verticalzhorizontal 16:9zW key art for a completely fictional Chinese-style Vietnamese audio drama. Composition: compositionz World: worldz Protagonist: protagonistz Supporting cast and props: z; supporting_castz
. Motifs: z, motifsz. Palette: z. Reveal limit: reveal_limitz Negative constraints: negative_constraintsz. a  Semi-realistic fictional Asian cast, expressive faces, cinematic depth, rain haze and reflections. Typography must be rendered directly by the image provider as part of this same artwork; no blank text area and no separate text layer. Let typography flow naturally, never cover eyes/faces, remain readable and uncropped. Render exactly these three Vietnamese text blocks with all accents preserved, without rewriting: )join)assetbriefspecexactextrafinal_text_rules         r   
prompt_forrx   c   s   ?5!DCi(C C O$Q'	C C -1,A!,D	C C C	
 JJtO,--EE 	P  \ 	
 L 		t5M+A+AZZGX 	t 	t]+	t 	t5:7^	t 	tSXYfSg	t 	t&*ii6G0H&I&I	t 	tUYU^U^_dem_nUoUo	t 	t }B  CL  }M	t 	t ~.	t 	t HLyyQVWmQnGoGo	t 	t 	t 		
	v mr	v 	v 	v	v 		r   c                     t                                           st          d          t          j        t                               d                    } |                     d          dus|                     d          st          d          t                      }dd	d
d}i }t          	                                rlt          j        t                              d                    }|                    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 }t%          dd          D ]}	 t&          j                            t,          t          j        |d                              d          ddd|z   dd          }t&          j                            |d !          5 }|                                }d d d            n# 1 swxY w Y   t5          |          \  }}t7          |          d"k     s|                    d#          st          d$          |                    d%          }|                    |           t?          j         ||           || d         t"          t,          |
tC          |"                    t                              |#                                j$        t          |          ||dddd&}|                    |            nX# tJ          $ r7}tC          |          }|d'k     rtM          j'        d(|z             Y d }~d }~ww xY wt          | d)|           t          j(        )                    dd*           t          *                    t          j        dd| d         |tW          j,        tZ          j.                  /                                d+dd(,          d-z   d           ta          t          j        |dtC          |          d.d          d/           dt7          |          d'k    otc          d0 |D                       | d         d|tW          j,        tZ          j.                  /                                d1}t          *                    t          j        |dd(,          d-z   d           ta          t          j        |d         t7          |          d2d                     |d         rd3ndS )4Nz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_posterrh   re   c                 :    i | ]}|                     d           |S )rr   )r,   .0rows     r   
<dictcomp>zmain.<locals>.<dictcomp>   s&    SSSC#'''**CSSSr   rd   r@   verified_fileprompt_sha256r	   r   autohighpng)r:   prompt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  rS   i s   PNG

z'generated asset failed PNG verificationz	.part.png)rr   r{   r:   endpointr   r   bytesr	   r^   attemptsr   text_rendered_by_providerpostprocessed_text      z	 failed: )parentsexist_ok)versionrz   r{   rd   
updated_at)r   indent
)rr   r   r   )flushc              3   &   K   | ]}|d          V  dS )r   N r~   s     r   	<genexpr>zmain.<locals>.<genexpr>   s(      ?e?eY\O@T?e?e?e?e?e?er   )r   rz   r{   provider_rendered_text_onlyrd   
created_at)rz   rd   r   )2BRIEFis_filer6   rV   rW   r/   r,   r>   RECEIPTr.   rF   PROJECTrx   r   encoder   rI   MODELranger[   r\   RequestENDPOINTdumpsr]   r   rb   rH   r2   with_suffixwrite_bytesr*   rO   rG   relative_tostatst_sizerY   timesleepparentmkdir
write_textr   nowr   utc	isoformatprintall)rs   r<   mapping
prior_rowspriorrowsrr   filenameoutputr   
prompt_shaoldr_   lastattemptr\   ra   r   r@   r^   tempr   excreceipts                           r   mainr      sG   ==?? ;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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>Zej  yA  T^  hk  lr  l~  l~  F  lG  lG  hH  hH  SY  S^  S^  S`  S`  Sh  t|  }C  tD  tD  PV  dk  ~B  ae  }B  C  CC    - - -3xxQ;;JqG|,,,-
 %88$88999TD9994:!_dez_{  HL  \d  \h  iq  iu  \v  \v  \@  \@  \B  \B  'C  'C  RW  `a  b  b  b  ei  i  t{  	|  	|  	|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  [  |@  LP  `h  `l  mu  my  `z  `z  `D  `D  `F  `F  G  GGtz'aHHH4OZabbb	$*'*"5TKKZ_
`
`
`aaa
#*11*s>   A7O.:KO.KO."K#D	O..
P/8,P**P/__main__zImage generation blocked: )file)!rB   r   rV   r*   sysr   urllib.requestr[   r   r   pathlibr   __file__resolver   r   r   r   r   r   r   r   r>   rJ   rb   rx   r   __name__exitrY   r   r   stderrr   r   r   <module>r      s      				 



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