
    [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|  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_titleu   Ả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_forrv   K   s   	x	De,=&>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_pngrx   T   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_panel
left_panelc                 :    i | ]}|                     d           |S )rp   )r)   ).0rows     r   
<dictcomp>zmain.<locals>.<dictcomp>]   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)rp   r{   r7   endpointr   r   bytesr\   r	   r   attempts      z	 failed: )parentsexist_ok)versionrz   r{   rb   
updated_at)r   indent
)rp   rz   r   )flushc              3   &   K   | ]}|d          V  dS )r   N )r   rs     r   	<genexpr>zmain.<locals>.<genexpr>u   s(      8Z8ZPQ?9K8Z8Z8Z8Z8Z8Zr   )r   rz   r{   rb   
created_at)rz   rb   receiptr   )0BRIEFr+   r3   rT   rU   r,   r)   r;   RECEIPTrC   PROJECTrv   r   encoder   rF   MODELrangerY   rZ   RequestENDPOINTdumpsr[   r   r`   rx   with_suffixwrite_bytesrL   rD   relative_tostatst_sizerW   timesleepparentmkdir
write_textrE   r   nowr   utc	isoformatprintall)rq   r9   rowsmappingexistingrp   filenameoutputr   prompt_hashpriorr]   lastattemptreqr_   r   r=   r\   tempr   excr   s                          r   mainr   W   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`   rv   rx   r   __name__exitr   r   r   <module>r      sp      				 



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