
    iu,                    >   d Z ddlmZ ddlZddlZddlZddlZddlmZ ddl	Z	 ee
      j                  Zej                  j                  d ee             ddlZ ed      Zedz  Zedz  Zedz  Zed	z  Zd
ZdZdZddZddZddZddZddZedk(  r e        yy)u   컨셉 #16 네이비 타이포 임팩트 v2 생성 스크립트.

1. Gemini API로 배경(딥 네이비 단색 텍스처) 생성
2. HTML 템플릿 + Playwright로 텍스트 오버레이 합성
3. sample-v2.png 및 16-navy-typography-v2.png 저장
    )annotationsN)PathzF/home/jay/workspace/output/meta-ads/concept-catalog/16-navy-typographyztemplate-v2.htmlz	bg_v2.jpgzsample-v2.pngz16-navy-typography-v2.pngz0https://generativelanguage.googleapis.com/v1betaz3https://www.googleapis.com/auth/generative-languagea\  Deep navy blue solid color background, professional corporate aesthetic, very subtle dark blue diagonal line texture, no people, no text, slight vignette at edges, authoritative financial services mood, 1080x1080, minimal clean dark navy blue, rich deep color, luxury corporate background, no gradients overpowering the navy, photorealistic texturec                 f   t        j                  d      } | st        d       ydD ]  }t         d| d|  }dt        igdd	d
dd}t        d| d       	 t        j                  ||d      }|j                  dk(  r|j                         }|j                  dg       }|rBd|d   v r;t        j                  |d   d         }t        d| dt        |      dd       |c S t        d| dt        |      dd         n+t        d| d|j                   d|j                  dd         
 dD ]+  }	t         d|	 d|  }ddt        igigd d!d"gid#}t        d|	 d       	 t        j                  ||d      }|j                  dk(  r|j                         }|j                  d$g       }
|
D ]n  }|j                  d%i       j                  dg       }|D ]E  }d&|v st        j                  |d&   d'         }t        d|	 dt        |      dd       |c c c S  p t        d|	 d(       n+t        d|	 d|j                   d|j                  dd)         . y# t        $ r}t        d| d|        Y d}~]d}~ww xY w# t        $ r}t        d|	 d|        Y d}~xd}~ww xY w)*u*   API 키로 Gemini 이미지 생성 시도.GEMINI_API_KEYu)     [API Key] GEMINI_API_KEY 없음, 스킵Nzimagen-4.0-generate-001zimagen-4.0-fast-generate-001/models/z:predict?key=prompt   1:1
image/jpegsampleCountaspectRatiooutputMimeType	instances
parametersz  [API Key]     요청 중...x   )jsontimeout   predictionsbytesBase64Encodedr   
    성공! (, bytes)u    응답에 이미지 없음:  HTTP : 	    오류: z)gemini-2.0-flash-preview-image-generationzgemini-3-pro-image-previewzgemini-3.1-flash-image-previewzgemini-2.5-flash-imagez:generateContent?key=partstextresponseModalitiesIMAGETEXTcontentsgenerationConfig
candidatescontent
inlineDatadata    응답에 이미지 없음   )gcloud_authget_api_keyprintGEMINI_API_BASE	BG_PROMPTrequestspoststatus_coder   getbase64	b64decodelenstrr#   	Exception)api_keyimagen_modelurlpayloadrespr-   r   	img_bytesemodel_idr*   candr"   parts                 \/home/jay/workspace/.worktrees/task-2116-dev1/tools/ai-image-gen/_backup/gen_concept16_v2.pygenerate_bg_with_api_keyrI   .   s)   %%&67G9: T = !,}WIN#Y/0 $".
 	\N.9:	===7C@D3&yy{"hh}b9#7;q>#I & 0 0Q@T1U VILjYPQ@RRYZ[$$\N2OPSTXPYZ^[^P_O`ab\N&9I9I8J"TYYW[X[_L]^_-=6 9 !!(3H	R!VY$7#89:!57H I
 	XJn56	9==7C@D3&yy{!XXlB7
& -D HHY377DE % -'4/(.(8(8l9KF9S(TI!L
*S^TUDVV]"^_#,,	-- XJ.IJKXJfT5E5E4FbSWTWHYZ[59< E  	=Lis;<<	=>  	9L
)A3788	9sE   B
I#%A	I#(A9J"<J!>J#	J,JJ	J0J++J0c                   d|  dd}dD ]*  }t          d| d}ddt        igigd	d
dgid}t        d| d       	 t        j                  |||d      }|j
                  dk(  r|j                         }|j                  dg       }|D ]n  }|j                  di       j                  dg       }	|	D ]E  }
d|
v st        j                  |
d   d         }t        d| dt        |      dd       |c c c S  p t        d| d       n+t        d| d|j
                   d|j                  dd         - dD ]  }t          d| d }d!t        igd"d#d$d%d&}t        d| d       	 t        j                  |||d      }|j
                  dk(  rf|j                         }|j                  d'g       }|rBd(|d)   v r;t        j                  |d)   d(         }t        d| dt        |      dd       |c S t        d| d|j
                   d|j                  dd          y# t        $ r}t        d| d|        Y d}~;d}~ww xY w# t        $ r}t        d| d|        Y d}~3d}~ww xY w)*u3   Bearer 토큰으로 Gemini 이미지 생성 시도.zBearer zapplication/json)AuthorizationzContent-Typer!   r   z:generateContentr"   r#   r$   r%   r&   r'   z  [Bearer] r   r   )headersr   r   r   r*   r+   r,   r-   r   r   r   r.   r   r   Nr/   r    r   z:predictr	   r
   r   r   r   r   r   r   r   )r3   r4   r2   r5   r6   r7   r   r8   r9   r:   r;   r#   r=   )tokenrL   rE   r@   rA   rB   r-   r*   rF   r"   rG   rC   rD   r?   r   s                  rH   generate_bg_with_tokenrN   r   s    #5'**G
 8 !!(3CD!VY$7#89:!57H I
 	H:^45	8==gGSQD3&yy{!XXlB7
& -D HHY377DE % -'4/(.(8(8l9KF9S(TI!KzC	NSTCUU\"]^#,,	-- H:-HIJH:VD4D4D3ER		RVSVGXYZ58> T < !,x@#Y/0 $".
 	L>89	<==gGSQD3&yy{"hh}b9#7;q>#I & 0 0Q@T1U VIK~ZIq?QQXYZ$$K~VD4D4D3ER		RVSVGXYZ)<0 9  	8Kz1#677	82  	<K~Yqc:;;	<sC   A:H&9<H&8>H&*BI8+I&	I/II	I3I..I3c            	         t        d       t        j                         } t        j                         rt        dt                t        S t	               }|0t        d       	 t        j                  t              }t        |      }|t        d       yt        j                  |       t        j                         | z
  }t        dt         dt        |      d	d
|dd       t        S # t        $ r}t        d|        Y d}~d}~ww xY w)u9   배경 이미지 생성. 성공 시 저장 경로 반환.u)   
[1단계] 배경 이미지 생성 시작u     기존 bg_v2.jpg 재사용: Nu)     [Bearer 토큰] SA 토큰 획득 중...u     [Bearer 토큰] 실패: uV     [경고] Gemini API 배경 생성 실패 — CSS 단색 네이비로 폴백합니다u     bg_v2.jpg 저장 완료:  (r   z bytes, z.1fu   초))r2   timeBG_PATHexistsrI   r0   get_service_account_tokenGEMINI_SCOPErN   r=   write_bytesr;   )startrC   rM   rD   elapseds        rH   generate_backgroundrY      s    	
67IIKE ~~.wi89 )*I 9:	499,GE.u5I fg	"iikE!G	'y3y>!2DHWUXMY]
^_N  	4.qc233	4s   $$C, ,	D5DDc           
     ^   ddl m} t        d|j                          t        j                         st        dt               dt        j                          } |       5 }|j                  j                         }	 |j                  ddd      }|j                  |d	
       | Q| j                         rAd| j                          }|j                  d| d       t        d| j                          nt        d       |j                  d       |j                  d       |j                  j                  dd       |j!                  t#        |      dddddd       t        d|        |j%                          	 ddd       y# |j%                          w xY w# 1 sw Y   yxY w)u'   Playwright로 HTML 오버레이 캡처.r   )sync_playwrightu(   
[2단계] HTML 오버레이 합성 → u   템플릿 없음: zfile://i8  )widthheight)viewportnetworkidle)
wait_untilNz() => {
                    const bgEl = document.getElementById('bgImage');
                    if (bgEl) {
                        bgEl.style.backgroundImage = "url('z,')";
                    }
                }u     배경 이미지 적용: u9     배경 이미지 없음 — CSS 단색 네이비 사용z() => document.fonts.readyi  T)parentsexist_okpng)xyr\   r]   )pathtypeclipu     캡처 완료: )playwright.sync_apir[   r2   nameTEMPLATE_PATHrS   FileNotFoundErrorresolvechromiumlaunchnew_pagegotoevaluatewait_for_timeoutparentmkdir
screenshotr<   close)bg_pathoutput_pathr[   template_urlpbrowserpagebg_file_urls           rH   capture_overlayr      s   3	5k6F6F5G
HI!"4]O DEE]22456L		 a**##%	##tt-L#MDIIl}I= "w~~'7 '(9':; #< =H= I  3GLL>BCQR MM67!!$'$$TD$AOO%1ttD  
 %k]34MMO? > MMO? s%   #F#?C5F4F#F  F##F,c                    t        d       t        d       t        d       t               } t        | t               t        dt        j
                          t        j                  t        t               t        dt                t        d       t        d       t        d       t        t        fD ]C  }|j                         s|j                         j                  dz  }t        d| d	|d
d       E y )Nz<============================================================u2   컨셉 #16 네이비 타이포 임팩트 v2 생성u   
[3단계] 파일 복사: u     복사 완료: z=
============================================================u   생성 완료i   z  rP   z.0fz KB))r2   rY   r   SAMPLE_V2_PATH	COPY_PATHrj   shutilcopy2rS   statst_size)rx   r{   size_kbs      rH   mainr      s    	(O	
>?	(O "#G G^, 
'	'7
89
LL+	i[
)* 
/	/	(Oi( /88:ffh&&-GBqcGC=-./    __main__)returnbytes | None)rM   r<   r   r   )r   r   )rx   zPath | Nonery   r   r   None)r   r   )__doc__
__future__r   r9   r   sysrQ   pathlibr   r5   __file__rt   
SCRIPT_DIRrf   insertr<   r0   
OUTPUT_DIRrk   rR   r   r   r3   rU   r4   rI   rN   rY   r   r   __name__ r   rH   <module>r      s    #   
    (^""
 3z? #  Z[
//
{
"o-44	 ED 
AH>B@*Z/4 zF r   