
    \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d Zedk    r ej         e                       dS 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digest_bytesr      s    w~d33==???    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)fs   r   <lambda>zdigest_file.<locals>.<lambda>   s    !4!4 r   r   )r   r	   openiterupdater
   )pathhblockr   s      @r   digest_filer      s    nA	4 JA4444S99IIE!((5////IJ J J J J J J J J J J J J J J;;==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 ]n}|                                	                    d          rE|
                    dd          d                                                             d          c c S ot          j                    d	z  }|                                ri }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.envz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hermes_configmodelin_modelkeyvalues           r   find_keyr;      sH   	z~~o&&Jrz//J(J	>>ty{{Kb?bcgclcncnoucuvJ @ @{{}}%X>>##..00 	@ 	@Cyy{{%%&677 @yyQ''*002288???????@	@ )++33M 
$% **,,7799 	? 	?C 3q6>>++ h. ?C3JJ))++++C22	E ;;==..s3399#>>c
99Z##**3//1PPPUZU^U^_hUiUiP##
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appendr/   collect_imageslist)objfoundr9   r:   s       r   rG   rG   1   s   #d 5 	. 	.IC***z%/D/D*UTXZ_ZfZfhpqvgwZxZxZxZxe
5 5 5%:J:JKa:b:bdidpdprwx}q~dddd u----	. 	. 
C		 544Ee44445 544r   c                    g }d}|                      d                                          D ]y}|                    d          s|dd                                          }|r|dk    r=|dz  }t	          t          j        |          |           e# t
          j        $ r Y vw xY w|s3t	          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   replace)errorszdata:   z[DONE]r   z0Image response contained no usable image payloadr?      timeout)decoder-   r/   r.   rG   jsonloadsJSONDecodeError	Exceptionr3   r?   	b64decodeurllibrequesturlopenr   )r   rJ   eventsr5   payloadkindr:   responses           r   	parse_sser`   :   s   
EAV{{){,,7799 ) )~~g&&/xABB4'8++H	4:g..u5555#(((DD( 4:d++E2222W|$VWWWRyJDX~~V-e44V;;			c		2	2\hhmmooV\F\\\\\\\\\\\\\\\\\\\s6   /"BB$#B$)"C 
CC5EEEc                    |d         |          }|d         }| dk    rd| dS d|  d|d          d	|d
          d|                     dd           dd                    |                     dg                      dd                    |d                    d|d          d|d          dd                    |d                    d}d                    |d                   }|d| d| dz   S ) Nassetscanonical_title
left_panelu  Standalone vertical CHANNEL BRANDING PANEL, not a story poster. No people, no faces, no silhouettes, no bridge disaster scene and no readable warning sign. Rain-darkened structural steel textures, subtle amber work lights and one abstract hairline crack as restrained decoration, cinematic navy-charcoal and steel-blue palette. Minimal clean typography with exactly two separated text blocks and no other readable words anywhere. Top text block, render exactly with Vietnamese accents: Huyền An Audio. Lower text block, render exactly with Vietnamese accents and bullet separators: Like • Chia sẻ • Đăng ký. Absolutely forbidden text: u   ; Truyện được phát độc quyền; CẦU LAM GIANG; SẬP CẦU. Do not depict Lâm Tĩnh Nghi or any character. Safe margin 10 percent on all sides. No watermark, no logo, no pseudo headline.u   Ảnh u>    cho truyện audio drama Trung Quốc hoàn toàn hư cấu. compositionu    Bối cảnh: worldu    Nhân vật và continuity: protagonistr$    z; supporting_castz	. Motif: z, motifsu   . Bảng màu: paletteu   . Phong cách poster phim điện ảnh bán hiện thực, ánh sáng có chiều sâu, chất lượng cao, không người thật nổi tiếng, không watermark, không logo thật. Reveal limit bắt buộc: reveal_limitz Negative: negative_constraintsz. z | required_textu   Provider phải render trực tiếp, nguyên văn, đúng toàn bộ dấu tiếng Việt và dễ đọc các khối chữ chính sau: u<   . Không thêm hoặc đổi chữ chính. Title authority: .)r)   join)assetbriefspectitlecommonrequireds         r   
prompt_forrw   K   s   	x	De,=&>N
 +0N N N	
yU y yZ^_lZm y y"7^y yJO))TabdJeJey yhlhqhqrwr{r{  }N  OQ  sR  sR  iS  iSy yiih00y yAFyAQy y +0*?y y MQIIV[\rVsLtLty y yF ZZ_-..H  m  _g  m  m  ej  m  m  m  m  mr   c                 R    t          |           dk    o|                     d          S )Ni s   PNG

)rE   r/   r   s    r   
verify_pngry   ^   s%    t99VE0D E EEr   c                     t                                           st          d          t          j        t                                                     } |                     d          dus|                     d          st          d          t                      }g }dddd	}t                                          rId
 t          j        t                                                                        dg           D             ni }|	                                D ]\  }}t          dz  |z  }t          ||           }t          |                                          }	|                    |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|z   dd          }t$          j                            |d          5 }|                                }d d d            n# 1 swxY w Y   t3          |          \  }}t5          |          st          d           |                    d!          }|                    |           |                    |           || d         t           t*          |	t=          |                    t                              |                                 j!        |t          |          d|d"}|                    |            nX# tD          $ r7}t=          |          }|d#k     rtG          j$        d$|z             Y d }~d }~ww xY wt          | d%|           t          j%        &                    dd&           t          '                    t          j        dtQ          |          d#k    | d         |tS          j*        tV          j,                  -                                d'dd$(          d)z              t]          t          j        |dt=          |          d*d          d+           dtQ          |          d#k    ot_          d, |D                       | d         |tS          j*        tV          j,                  -                                d-}t          '                    t          j        |dd$(          d)z              t]          t          j        |d         tQ          |          t=          t                    d.d                     |d         rd/ndS )0Nz+Image brief missing; provider spend blockedverifiedTsource_canon_sha256zImage brief is not verifiedzintro-poster-master.pngzright-panel-master.pngzleft-panel-master.png)intro_posterright_panelrd   c                 :    i | ]}|                     d           |S )rq   )r)   ).0rows     r   
<dictcomp>zmain.<locals>.<dictcomp>g   s&    ___scgggs___r   rb   r=   verified_fileprompt_sha256r	   r   autohighpng)r7   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  rQ   z'Generated image failed PNG verificationz	.png.part)rq   r|   r7   endpointr   r   bytesr\   r	   r   attempts      z	 failed: )parentsexist_ok)versionr{   r|   rb   
updated_at)r   indent
)rq   r{   r   )flushc              3   &   K   | ]}|d          V  dS )r   N )r   rs     r   	<genexpr>zmain.<locals>.<genexpr>   s(      8Z8ZPQ?9K8Z8Z8Z8Z8Z8Zr   )r   r{   r|   rb   
created_at)r{   rb   receiptr   )0BRIEFr+   r3   rT   rU   r,   r)   r;   RECEIPTrC   PROJECTrw   r   encoder   rF   MODELrangerY   rZ   RequestENDPOINTdumpsr[   r   r`   ry   with_suffixwrite_bytesrL   rD   relative_tostatst_sizerW   timesleepparentmkdir
write_textrE   r   nowr   utc	isoformatprintall)rr   r9   rowsmappingexistingrq   filenameoutputr   prompt_hashpriorr]   lastattemptreqr_   r   r=   r\   tempr   excr   s                          r   mainr   a   s   <<>>[-Z [ [[
*U__&&
'
'EyyD((		:O0P0P(Wc  eB  XC  XC  RC

C45D\  kB  C  CGcjcqcqcscs{__dj9J9J9L9L.M.M.Q.QRZ[].^.^____y{H!--// l lhwx'z%/F/FS_`f`m`m`o`oSpSp{ll5$$==?? 	(uyy99TAAeiiP_F`F`bmFmFmrwr{r{  }E  sF  sF  HS  TZ  H[  H[  s[  s[KKx1FVagw}  OT  U  UQqzz 	; 	;G
4N**8GY^9_9_9_9f9f9h9h  BT  ^q  BK  LO  BO  rP  rP  X^*  _  _^++C+<<]hmmoo]]]]]]]]]]]]]]]&t__f!%((f|<e/f/f)f''44T5E5Ee5L5L5LT\\Z`MaMaMa"?T9U^cow  IT  \_  `f  `r  `r  sz  `{  `{  \|  \|  EK  EP  EP  ER  ER  EZ  dj  t  @F  tG  tG  X\  ho  p  pC    4 4 4XX199TZ7
3334  5 9 94 9 9:::T48884:c$iilafg|a}  HL  Zb  Zf  go  gs  Zt  Zt  Z~  Z~  Z@  Z@  'A  'A  OT  \]  ^  ^  ^  _c  c  	d  	d  	ddj%4s6{{KKY^___fjkkkkkCIIqL$ZS8Z8ZUY8Z8Z8Z5Z5Zqv  xM  rN  X\  jr  jv  w  wC  jD  jD  jN  jN  jP  jP  Q  QGtz'uAFFFtKLLL	$*!4c$iiRUV]R^R^__mr
s
s
sttt  BI  JT  BU  }\|}|}  [\  v\s>   A6N,J4(N,4J88N,;J8<C.N,,
O-6,O((O-__main__)r?   r   rT   r'   sysr   urllib.errorrY   urllib.requestr   r   pathlibr   __file__resolver   r   r   r   r   r   r   r   r;   rG   r`   rw   ry   r   __name__exitr   r   r   <module>r      sp      				 



          ' ' ' ' ' ' ' '      X  (+&&++	; @ ? ?  7 7 7,5 5 5] ] ]"m m m&F F F \  \  \B Z(((((r   