
    iY                        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ed
z  Zedz  ZdZdZdZdZdZdefdZdeddfdZddZddZedk(  rd ed        ed        ed        e       Z ee        e         e         ed        ed        ede         ede         ed       yy)u}   컨셉 #03 Anti-Polish v2 하이브리드 이미지 생성
Gemini API 배경 생성 + HTML/Playwright 텍스트 오버레이
    N)Pathz&/home/jay/workspace/tools/ai-image-gen)sync_playwrightzB/home/jay/workspace/output/meta-ads/concept-catalog/03-anti-polishztemplate-v2.htmlz	bg-v2.pngz_render_v2.htmlzsample-v2.pngz03-anti-polish-v2.pngaM  Crumpled notebook paper texture, slightly yellowed with age, natural soft lighting from above, realistic paper wrinkles and fold lines, visible crease marks and subtle shadows, cream and off-white tones, no text, no ruled lines, no printed content, flat lay photography style, 1080x1080 square format, high resolution, photorealisticzgemini-2.5-flash-imagezgemini-3-pro-image-previewz0https://generativelanguage.googleapis.com/v1betaz3https://www.googleapis.com/auth/generative-languagereturnc            	      6   t        d       t        j                  t              } d|  dd}ddt        igigddd	gid
}t
         dt         d}t        dt                t        j                  |||d      }|j                  dvrXt        d|j                   dt                t
         dt         d}t        j                  |||d      }|j                          |j                         }|j                  dg       }|st        dt        |      dd        |d   j                  di       j                  dg       }d}|D ]
  }	d|	v s|	} n |5|D 
cg c]  }
d|
v s|
j                  dd       }}
t        d|dd        |d   j                  dd      }t!        j"                  |d   d         }d |v rd!nd"}t$        d#| z  }|j'                  |       |j)                         j*                  d$z  }t        d%| d&|d'd(| d)       |S c c}
w )*u1   Gemini API로 배경 이미지 생성 후 저장.u5   [Step 1] Gemini API로 배경 이미지 생성 중...zBearer zapplication/json)AuthorizationzContent-TypepartstextresponseModalitiesIMAGETEXT)contentsgenerationConfigz/models/z:generateContentu
     모델:    )headersjsontimeout)   u     [경고] HTTP u    — Fallback 모델 시도: 
candidatesu   응답에 candidates 없음: Ni,  r   content
inlineData u.   이미지 데이터 없음. 텍스트 응답:    mimeTypez
image/jpegdatajpegz.jpgz.pngzbg-v2   u     [완료] 배경 저장:  (.0fz KB, ))printgcloud_authget_service_account_tokenGEMINI_SCOPE	BG_PROMPTGEMINI_API_BASEMODEL_IDrequestspoststatus_codeFALLBACK_MODEL_IDraise_for_statusr   getRuntimeErrorstrbase64	b64decode
OUTPUT_DIRwrite_bytesstatst_size)tokenr   payloadurlresponser   r   r   
image_partpartp
text_parts	mime_typeimage_bytesextbg_outsize_kbs                    L/home/jay/workspace/output/meta-ads/concept-catalog/03-anti-polish/gen_v2.pygenerate_bgrC   %   s`   	
AB11,?E #5'**G
  34561GV3DEG
 XhZ/?
@C	Jxj
!"}}S'MH6) !5!5 66STeSfgh !*;)<<LM==gGSQ!!#==?D,+J:3t9Tc?:KLMMqMi,00"=EJ 4J
 16FA&A+aeeFB'F
FKJWYXYNK[\]]<(,,ZFI"":l#;F#CDKi'&VCE#-'F
{#kkm##d*G	&vhbU9+Q
OPM Gs   	H%Hbg_pathc           
      (   t        d       t        j                         st        dt               t        j	                  d      }d| j                          }|j                  d|      }t        j                  |d       t        dt                t        d       t               5 }|j                  j                  g d	
      }	 |j                  dddd      }|j                         }dt        j                          }|j                  |dd       |j                  d       |j!                  d       |j                  d       t"        j$                  j'                  dd       |j)                  t+        t"              dddddd       t        dt"                |j-                          	 ddd       t"        j/                         j0                  dz  }	t        d|	dd        y# |j-                          w xY w# 1 sw Y   PxY w)!uG   HTML 템플릿에 배경 주입 후 Playwright로 1080x1080 PNG 캡처.u+   [Step 2] HTML 오버레이 렌더링 중...u   템플릿 없음: zutf-8)encodingzfile://__BG_IMAGE__u     렌더링용 HTML: u.   [Step 3] Playwright 스크린샷 캡처 중...)z--no-sandboxz--disable-setuid-sandboxz--disable-dev-shm-usagez--font-render-hinting=none)argsi8  )widthheight   )viewportdevice_scale_factornetworkidlei0u  )
wait_untilr   i  z() => document.fonts.readyi  T)parentsexist_okpngr   )xyrI   rJ   )pathtypeclipu     [캡처 완료] Nr   u     파일 크기: r   z KB)r    TEMPLATE_PATHexistsFileNotFoundError	read_textresolvereplaceRENDER_HTML_PATH
write_textr   chromiumlaunchnew_contextnew_pagegotowait_for_timeoutevaluateSAMPLE_PATHparentmkdir
screenshotr.   closer3   r4   )
rD   template_htmlbg_file_urlrender_htmlr;   browsercontextpagepage_urlrA   s
             rB   render_overlayrs   Y   s   	
78!"4]O DEE!++W+=MGOO-./K''DKg>	!"2!3
45	
:;		 a**## $ 
	))#'48$% * G ##%D !1!9!9!; <=HIIh=%IH !!$'MM67!!$'$$TD$AOO%1ttD  
 &{m45MMO?B  ((4/G	gc]#
./ MMO? s%   +HCG3(H3HHHc                      t        j                  t        t               t        j	                         j
                  dz  } t        dt         d| dd       y)u/   sample-v2.png → 03-anti-polish-v2.png 복사.r   u   [Step 4] 복사 완료: r   r   z KB)N)shutilcopy2rg   	COPY_PATHr3   r4   r    )rA   s    rB   
copy_finalrx      sA    
LLi(nn&&-G	$YKr'#d
CD    c                      t        d       g d} d}| D ].  \  }}}}||k\  }|rdnd}|sd}t        d| d| d	| d
| d	       0 |rt        d       yt        d       y)uG   폰트 크기 규칙 준수 여부 최종 확인 (브리프 v2 기준).u;   
[검증] 폰트 크기 규칙 확인 (브리프 v2 기준)))u   메인 '제자리걸음?'X   T   u   핵심 메시지 84px 이상)u   보조 '열심히 하는데...'@   r}      보조 메시지 64px 이상)u'   형광펜 '정착지원금 1,000만원'D   r}   r~   )u!   포스트잇 'T.O.P 상담신청',   (   u   최소 40px 이상TOKFAILFz  [z] z: u   px (규칙: r   u/     => 모든 폰트 크기 규칙 준수 완료!u,     => 일부 규칙 위반 — 수정 필요!N)r    )rulesall_oknameactualminimumruleokstatuss           rB   verify_font_rulesr      s    	
HIE F', C#fgtwFF82dV2fX\$qABC ?@<=ry   __main__z<============================================================u:   컨셉 #03 Anti-Polish v2 하이브리드 이미지 생성z=
============================================================u   생성 완료!z  sample-v2.png  : u     최종 파일      : )r   N)__doc__r/   ru   syspathlibr   rU   insertr!   r'   playwright.sync_apir   r1   rX   BG_PATHr^   rg   rw   r$   r&   r*   r%   r#   rC   rs   rx   r   __name__r    rD    ry   rB   <module>r      s;     
  ; <   /VW
//
{
" 11 ?*00	[ 
 $0 DD1T 1h00D 00T 00fE>, z	(O	
FG	(OmG7L	/	
	}
-.	#I;
/0	(O ry   