
    ki"                    n   d Z ddlmZ ddlZddlZddlZddlmZ ddlZddl	m
Z
  ed      Z ed      Zej                  dd	       ej                  j                  d ee             ddlZd
Zg dZdZdddedz  edz  edz  ddddedz  edz  edz  dgZddZddZddZd Zedk(  r e        yy) u   
컨셉 #33 메리츠 스타일 — 프로덕션 배너 생성기
1200x628 (landscape) + 1200x1200 (square)
Gemini AI 배경 + HTML 텍스트 오버레이 하이브리드
    )annotationsN)Path)sync_playwrightz&/home/jay/workspace/tools/ai-image-genzF/home/jay/workspace/output/meta-ads/production-banners/33-meritz-styleT)parentsexist_okz0https://generativelanguage.googleapis.com/v1beta)zgemini-3-pro-image-previewz)gemini-2.0-flash-preview-image-generationzgemini-3.1-flash-image-previewa  Dark technology workspace with server racks and circuit board patterns, orange-red ambient glow from below left, futuristic data center aesthetic, cool and warm contrast, glowing circuit traces on dark surfaces, deep charcoal and near-black tones (#0D0D0D), warm orange-red light source emanating from lower left corner casting subtle glow on tech surfaces, no people, no text, no logos, photorealistic, cinematic lighting, high contrast dramatic atmosphere, ultra-sharp detail1200x628i  it  zbg_1200x628.jpgzc33-1200x628.htmlzc33-1200x628.png)namewidthheightbg_path	html_pathpng_path	1200x1200zbg_1200x1200.jpgzc33-1200x1200.htmlzc33-1200x1200.pngc                ,   t        d| d| d       t        j                         }dd| d}||k7  r| d| dnd}t        d	| d
||kD  rdnd z   }dd|igigdddgid}t        D ]f  }t
         d| d}	t        d|        t        d      D ]:  }
	 t        j                  |	||d      }|j                  dk(  r|j                         }|j                  dg       }|r|d   j                  di       j                  dg       }|D ]V  }d|v st        j                  |d   d         }| j                  |       t        d|  d t        |      d!d"       | c c c S  t        d#t!        |j#                                       n(t        d$|j                   d%|j$                  d&d         |
d(k  s&t)        j*                  d*       = i t-        d+| j.                   d,      # t&        $ r}t        d'|
d(z    d)|        Y d&}~]d&}~ww xY w)-u2   Gemini API로 배경 이미지를 생성합니다.u     [Gemini] 배경 생성 중 (x)...zapplication/jsonzBearer )zContent-TypeAuthorizationz	 pixels,  z, zaspect ratio zlandscape widesquarepartstextresponseModalitiesIMAGETEXT)contentsgenerationConfigz/models/z:generateContentu       모델 시도:    x   )headersjsontimeout   
candidatesr   content
inlineDatadatau       배경 저장:  (,z bytes)u       응답 구조 이상: u       API 오류 z: Nu       시도    u	    실패:    u   Gemini 배경 생성 실패 ())printgcloud_authget_service_account_tokenGEMINI_PROMPTMODELSGEMINI_API_BASErangerequestspoststatus_coder    getbase64	b64decodewrite_byteslenlistkeysr   	ExceptiontimesleepRuntimeErrorr	   )r   r
   r   tokenr   	size_hintpromptpayloadmodelurlattemptrespr&   r#   r   partimg_dataes                     U/home/jay/workspace/output/meta-ads/production-banners/33-meritz-style/gen_banners.pygenerate_backgroundrM   ?   s\   	*5'6($
?@113E*"5'*G
 165'6(),RIr)MeV\n:Jbj9kllF  01231GV3DEG
   !%0@A#E7+,Qx 	G?}}S'QTU##s*99;D!%,!;J! *1 1 1)R @ D DWb Q$) /D+t3+1+;+;D<Nv<V+W ' 3 3H = %(;G9Bs8}UVFWW^&_ `'./ 6tDIIK7H6IJKOD,<,<+=R		$3?PQR {

1)	2 6w||nAF
GG  ?GaK=	!=>>?s'   A:G,AG,"AG,,	H5HHc                    | j                  d      }|j                         }|j                  d|j                   dd| d      }|S )u[   HTML 파일을 읽어 bg_path를 절대 file:// URI로 교체한 내용을 반환합니다.utf-8encodingzsrc="")	read_textas_urireplacer	   )r   r   htmlbg_uris       rL   inject_bg_pathrX   o   sL    0D^^F<<%~Q/51BCDK    c           	     J   t        d| d| d       t        | |      }| j                  d| j                   z  }|j	                  |d       	 t               5 }|j                  j                  dg d	      }|j                  ||d
d      }	|	j                         }
|
j                  d|j                          dd       |
j                  d       |
j                  d       |
j                  t        |      dd||dd       |j!                          ddd       |j#                         r|j%                          	 |j'                         j(                  dz  }t        d| d|dd       |S # 1 sw Y   \xY w# |j#                         r|j%                          w w xY w)u=   HTML을 Playwright로 렌더링하여 PNG로 캡처합니다.u     [Playwright] 캡처 중 (r   r   _tmp_rO   rP   T)z--no-sandboxz--disable-setuid-sandboxz--disable-dev-shm-usage)headlessargs)r
   r   r)   )viewportdevice_scale_factorzfile://networkidlei0u  )
wait_untilr!   z() => document.fonts.readyi  r   )r   yr
   r   png)pathcliptypeNi   u       PNG 저장: r'   z.0fz KB))r,   rX   parentr	   
write_textr   chromiumlaunchnew_contextnew_pagegotoresolveevaluatewait_for_timeout
screenshotstrcloseexistsunlinkstatst_size)r   r   r   r
   r   html_contenttmp_htmlpbrowsercontextpagesize_kbs               rL   capture_html_to_pngr   z   s   	'waxt
<= ")W5LE)..)9"::Hw7 	!jj''\ ( G ))#(F;$% * G ##%DII 0 0 234X]I^MM67!!$'OO]1uG  
 MMO%	( ??OOmmo%%,G	XJbT
:;O3	 	( ??OO s%   
E? B?E3E? 3E<8E? ?#F"c                    t        d       t        d       t        dt                t        d       t        j                         } g }t        D ]  }|d   }t        d| d       t        j                         }	 t	        |d   |d   |d	         }t        |d
   ||d   |d   |d	         }t        j                         |z
  }t        d| d|dd       |j                  |dt        |      d        t        j                         | z
  }	t        dd        t        d|	dd       |D ]N  }
|
d   }|dk(  rt        d| d|
d    d|
d           (t        d| d|
d    d|
j                  dd              P t        d       y # t        $ rV}t        j                         |z
  }t        d| d| d|dd       |j                  |dt        |      d       Y d }~d }~ww xY w) Nz<============================================================u=   컨셉 #33 메리츠 스타일 — 프로덕션 배너 생성u   출력 경로: r	   z
[u   ] 시작r   r
   r   r   r   [u   ] 완료! (z.1fu   초)OK)r	   statusrd   u
   ] 실패: r'   FAIL)r	   r   error
u   전체 완료: u   초r   z  [z] u    → rd   r   u   알 수 없는 오류)
r,   
OUTPUT_DIRr>   BANNERSrM   r   appendrr   r=   r6   )total_startresultsbannerr	   startr   r   elapsedrK   total_elapsedrr   s               rL   mainr      s   	(O	
IJ	OJ<
()	(O))+KG Nf~D6"#			N)&*;VG_fU]N^_G +{#z"wx H iikE)GAdV;wsm489NNDD#h-PQ)N6 IIK+-M	Bxj/	OM#.c
23 ]8T>Cxr!F)E!F)=>Cxr!F)E!%%AX2Y1Z[\] 
(O  	NiikE)GAdV:aS73-t<=NNDFSVLMM	Ns   <A9F	G*AG%%G*__main__)r   r   r
   intr   r   returnr   )r   r   r   r   r   rr   )r   r   r   r   r   r   r
   r   r   r   r   r   )__doc__
__future__r   r7   sysr>   pathlibr   r3   playwright.sync_apir   	TOOLS_DIRr   mkdirrd   insertrr   r-   r1   r0   r/   r   rM   rX   r   r   __name__ rY   rL   <module>r      s   #  
    / 9:	Z[
 
    - 3y> "  E	v<   11"55!33  22"66!44,+H`#P-` zF rY   