
    &<i                         d Z ddlZddlZddlZddlmZ ej                  j                  dd       ddlZddl	Z	ddl
mZ  ed      Zedz  Zedz  Zed	z  Zd
ZdZdZdedefdZdeddfdZd Zedk(  r e        yy)u[   컨셉 #04 — 현실-판타지 경계 해체 하이브리드 이미지 생성 스크립트    N)Pathz&/home/jay/workspace/tools/ai-image-gen)sync_playwrightzF/home/jay/workspace/output/meta-ads/concept-catalog/04-reality-fantasyzbg.jpgztemplate.htmlz
sample.pngz0https://generativelanguage.googleapis.com/v1betaz3https://www.googleapis.com/auth/generative-languagea,  A tired Korean office worker in dark business suit sitting at a desk late at night, city office background with glowing screens, slightly desaturated and cold-toned, cinematic mood, photorealistic, soft focus background, front-facing portrait, 1080x1080 square composition, moody atmospheric lightingtokenreturnc           
         dD ]  }t        d|        t         d| d}d|  dd}d|v rt         d| d	}d
t        igdddd}nddt        igigdddgid}	 t        j                  |||d      }|j
                  dv rt        d|j
                   d       |j                          |j                         }d}d}d|v r5|j                  dg       }	|	r|	d   }
d|
v r{|
d   }|
j                  dd       }nc|j                  d!g       }|rO|d   j                  d"i       j                  dg       }|D ]%  }d#|v s|d#   d$   }|d#   j                  dd      } n |st        d%       jt        j                  |      }d&|v rd'nd(}t        d)| z  }|j                  |       t        d*| d+t        |      d,d-       |c S  t)        d3      # t        j                  $ rG}t        d.|j                  j
                   d/|j                  j                   dd0         Y d}~%d}~wt"        $ r/}t        d1t%        |      j&                   d2|        Y d}~[d}~ww xY w)4u?   Gemini API로 배경 이미지를 생성하고 저장합니다.)z)gemini-2.0-flash-preview-image-generationzimagen-3.0-generate-002zgemini-3-pro-image-previewzgemini-3.1-flash-image-previewu   [배경] 모델 시도: z/models/z:generateContentzBearer zapplication/json)AuthorizationzContent-Typeimagenz:predictprompt   z1:1)sampleCountaspectRatio)	instances
parameterspartstextresponseModalitiesIMAGETEXT)contentsgenerationConfigx   )headersjsontimeout)i  i  u     → HTTP u   , 다음 모델 시도...Nz
image/jpegpredictionsr   bytesBase64EncodedmimeTypez	image/png
candidatescontent
inlineDatadatau9     → 이미지 데이터 없음, 다음 모델 시도...pngz.pngz.jpgbgu   [배경] 저장 완료:  (,z bytes)u     → HTTP 오류: z -    u     → 오류: z: u/   모든 Gemini 모델에서 배경 생성 실패)printGEMINI_API_BASE	BG_PROMPTrequestspoststatus_coderaise_for_statusr   getbase64	b64decode
OUTPUT_DIRwrite_byteslen	HTTPErrorresponser   	Exceptiontype__name__RuntimeError)r   model_idurlr   payloadrespr!   	image_b64	mime_typer   predr   r   partimage_bytesext	save_pathes                     l/home/jay/workspace/.worktrees/task-2057-dev2/output/meta-ads/concept-catalog/04-reality-fantasy/generate.pygenerate_backgroundrG       s    ] G(
34 !(3CD&ug..

 x$%XhZx@C'34#$#(G &(;'<=>%9GV;L$MG
/	==gGSQD:-D$4$4#55NOP!!#99;D I$I8#"hh}b9&q>D+t3$()=$>	$(HHZ$E	 "XXlB7
&qM--i<@@"ME % "'4/(,\(:6(BI(,\(:(>(>z<(XI!	" QS **95K!Y.&FC"r#Z/I!!+.,YKr#k:J19MWUVAGR H
II !! 	'

(>(>'?s1::??SWTWCXBYZ[ 	N47#3#3"4Bqc:;	s9   A GBG>-G-AGI#&<H((I#4$II#bg_pathc                    t        dt                dt        j                          }d| j                          }t               5 }|j                  j                         }	 |j                  ddd      }|j                  |d       |j                  d| d	| d
       |j                  d       t        j                  j                  dd       |j                  t        t              d       t        dt                |j                          	 ddd       y# |j                          w xY w# 1 sw Y   yxY w)uQ   Playwright로 HTML 템플릿을 캡처하여 최종 이미지를 저장합니다.u   [HTML] 캡처 시작: zfile://i8  )widthheight)viewportnetworkidle)
wait_untilz0() => {
                window.BG_IMAGE_PATH = "z";
                const bgEl = document.getElementById('bg');
                if (bgEl) {
                    bgEl.style.setProperty('--bg-url', 'url("z%")');
                }
            }i	  T)parentsexist_okr"   )pathr7   u   [HTML] 캡처 완료: N)r'   TEMPLATE_PATHresolver   chromiumlaunchnew_pagegotoevaluatewait_for_timeoutOUTPUT_PATHparentmkdir
screenshotstrclose)rH   template_urlbg_file_urlpbrowserpages         rF   capture_htmlre   n   s1   	"=/
23]22456LGOO-./K		 a**##%	##tt-L#MDIIl}I= MM ))4 6> ?J] K	  !!$'$$TD$AOO[!1O>*;-89MMO- , MMO- s%   D6#B$D!D6!D33D66D?c                     t        d       t        d       t        d       t        d       t        j                  t              } t        dt	        |        d       t        d       t        |       }|t        k7  r?|j                         r/dd l}t        j                         rt        j                          |}n|}t        d       t        |       t        j                         j                  d	z  }t        d
d        t        d       t        d|        t        dt                t        dt         d|dd       t        d       y )Nz<============================================================u7   컨셉 #04 현실-판타지 경계 해체 생성 시작u!   
[인증] SA 토큰 획득 중...u'   [인증] 토큰 획득 성공 (길이: z chars)u,   
[1단계] Gemini 배경 이미지 생성...r   u&   
[2단계] HTML 오버레이 캡처...i   
u   생성 완료!u     배경:  z	  HTML:  u     최종:  r$   z.0fz KB))r'   gcloud_authget_service_account_tokenGEMINI_SCOPEr3   rG   BG_PATHexistsshutilunlinkre   rZ   statst_sizerR   )r   rH   rm   final_bgsize_kbs        rF   mainrs      s   	(O	
CD	(O 

./11,?E	3CJ<w
GH 

9:!%(G 'gnn.>>NN 

34  ((4/G	Bxj/	
	Kz
"#	Im_
%&	K}Bwsm4
89	(O    __main__)__doc__sysr/   timepathlibr   rQ   insertrh   r*   playwright.sync_apir   r1   rk   rR   rZ   r(   rj   r)   r^   rG   re   rs   r8    rt   rF   <module>r}      s    a 
    ; <   /Z[

x
_,<'DD? 
KJs KJt KJ\$ 4 >#L zF rt   