
    (<i                        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  ZdZdZd	Zd
ZdZddZddZddZedk(  r e        yy)u   Venus A-1 Hook slide — PURE Gemini native image generation.

No HTML/Playwright. Korean text rendered by Gemini Pro directly.
Output: 1080x1080 PNG → /home/jay/workspace/output/meta-ads/a-group-venus/venus-A1-hook.png
    )annotationsN)Path)WORKSPACE_ROOTz/output/meta-ads/a-group-venus/venus-A1-hook.pngzgemini-3-pro-image-previewzgemini-3.1-flash-image-previewz0https://generativelanguage.googleapis.com/v1betaz3https://www.googleapis.com/auth/generative-languageu
  Create a 1080x1080 square Korean premium advertising image for Meta (Facebook/Instagram) ads.

BACKGROUND SCENE: Photorealistic cinematic photograph — a dimly lit workspace at night. A single warm desk lamp illuminates scattered papers and a closed laptop on a dark wooden desk. A person's silhouette is barely visible, slumped over the desk in exhaustion. The scene conveys the crushing weight of a numb daily grind — loneliness, burnout, silent desperation. Deep charcoal and navy tones dominate.

PHOTOGRAPHIC QUALITY: Shot on ARRI Alexa 65. f/1.4 wide aperture. Warm desk lamp creates a small pool of golden light contrasting with the surrounding darkness. Shallow depth of field. Cinematic color grading — desaturated cool shadows, warm single light source. No stock-photo look. No clichéd effects.

TYPOGRAPHY LAYOUT — CENTER-ALIGNED, positioned in the center of the image:

LINE 1 (Headline): "열심히 했다."
— Bold Korean sans-serif (like Pretendard or Noto Sans KR), pure white (#FFFFFF), font size approximately 72px, bold weight (800+), center-aligned. Tight letter-spacing for a pressured, compressed feeling.

LINE 2 (Headline continued): "근데 왜 나만 안 되지?"
— Same style as line 1, bold white, ~72px, center-aligned. This is the emotional punch line.

[vertical spacer ~30px]

LINE 3 (Subheadline): "방문 횟수, 전화 통화, 상담 건수—"
— Korean sans-serif, dimmer grayish-white (#B8B8BC), approximately 40px, weight 400-500, center-aligned.

LINE 4 (Subheadline continued): "숫자는 쌓이는데 통장은 그대로다."
— Same style as line 3, grayish-white, ~40px, center-aligned. Generous line spacing to slow reading pace.

BOTTOM AREA: A black gradient overlay covers the lower 30% of the image, ensuring text readability over the background.

PAGE INDICATOR: "1/5" — bottom-right corner, approximately 40px, light gray (#888894).

DESIGN RULES:
- ALL Korean text must be perfectly rendered with accurate characters, no distortion, no garbled text
- Every text element must be at minimum 40px equivalent
- Text must pass WCAG AAA contrast (7:1 for body, 4.5:1 for large text) against background
- No logos, no icons, no glassmorphism, no geometric shapes
- No internal labels like "A-1" or "HOOK"
- Font weights 400+ only (no thin/light fonts)
- The emotional goal: insurance agent (1-5 years) feels "this is exactly my story" — recognition shock
- Professional premium advertising quality, NOT a PowerPoint slide

STYLE REFERENCE: Premium Korean financial/coaching advertisement. Christopher Nolan cinematic color grading. Dark, heavy, atmospheric, emotionally resonant.

IMPORTANT — large bold Korean text, easily readable on mobile, cinematic dark background, photorealistic workspace scene, no watermark, no clipart.
c                 f   t         j                  j                  dt        t        dz               	 dd l} | j                  t              S # t        $ r}t        d| d       Y d }~nd }~ww xY wt        j                  g ddd      }|j                  j                         }|st        d      |S )	Nr   ztools/ai-image-genz[AUTH] SA token failed: z, trying gcloud CLI...)gcloudauthzprint-access-tokenz<--scopes=https://www.googleapis.com/auth/generative-languageT)capture_outputtextz3gcloud auth print-access-token returned empty token)syspathinsertstrr   gcloud_authget_service_account_tokenGEMINI_SCOPE	Exceptionprint
subprocessrunstdoutstripRuntimeError)r   eresulttokens       \/home/jay/workspace/.worktrees/task-2057-dev2/tools/ai-image-gen/gen_venus_a1_hook_native.py	get_tokenr   B   s    HHOOAs>,@@ABD44\BB D(+ABCCD ^^	I$F
 MM!EPQQLs   A 	A-A((A-c                    t          d| d}d|  dd}ddt        igigdd	gd
dd}t        d|        t        j                  |||d      S )Nz/models/z:generateContentzBearer zapplication/json)AuthorizationzContent-Typepartsr
   IMAGETEXTg      ?)responseModalitiestemperature)contentsgenerationConfigz[API] Calling model:    )headersjsontimeout)GEMINI_API_BASEPROMPTr   requestspost)r   model_idurlr(   payloads        r   call_geminir2   U   s}    XhZ/?
@C"5'**G
  0123#*F"3
G 
!(
,-==gGSII    c                    t         j                  j                  dd       t        d       t        d       t        dt                 t        d       t        d       t	               } t        dt        |        d       t        | t              }|j                  d	v r/t        d
|j                   dt                t        | t              }|j                  s=t        d|j                   d|j                  d d         t        j                  d       |j                         }|j                  dg       }|s/t        dt!        |      d d         t        j                  d       |d   j                  di       j                  dg       }d }|D ]
  }d|v s|} n |J|D cg c]  }d|v s|j                  dd       }}t        d|d d         t        j                  d       |d   j                  dd      }	|d   d   }
t#        j$                  |
      }t         j'                  d|	v rdnd       }|j)                  |       d|	v r9dd!lm} |j/                  |      }|j1                  t         d"       t        d#       n|t         k7  r|j3                  t                t         j5                         j6                  }t        d$t                 t        d%|d&d'|d(z  d)d*       t        d+|	        dd!lm} |j/                  t               }t        d,|j8                  d    d-|j8                  d           y c c}w ).NT)parentsexist_okz<============================================================u6   Venus A-1 Hook — PURE Gemini Native Image GenerationzOutput: z
[AUTH] Obtaining token...z[AUTH] Token obtained (z chars))i  i  z[API] Pro model failed (z), falling back to z[ERROR] HTTP z: i     
candidatesz[ERROR] No candidates: i,  r   contentr    
inlineDatar
    z$[ERROR] No image in response. Text:    mimeTypez
image/jpegdatajpegz.jpgz.png)ImagePNGu   [CONVERT] JPEG → PNGz
[SUCCESS] Saved: z  Size: ,z bytes (i   z.1fz KB)z  MIME source: z  Dimensions: x)OUTPUT_PATHparentmkdirr   r   lenr2   MODEL_IDstatus_codeFALLBACK_MODEL_IDokr
   r   exitr)   getr   base64	b64decodewith_suffixwrite_bytesPILr@   opensaverenamestatst_sizesize)r   responser>   r8   r    
image_partpartp
text_parts	mime_type	image_b64image_bytesraw_pathr@   img	file_sizes                   r   mainrd   f   s   TD9	(O	
BC	H[M
"#	(O	
'(KE	#CJ<w
785(+Hz)()=)=(>>QRcQdefu&78;;h2232hmmDS6I5JKL==?D,+J'D	$3'89:qMi,00"=EJ 4J
 16FA&A+aeeFB'F
F4Z^4DEF<(,,ZFI<(0I""9-K &&91Dv&QH% jj"e$&({"OOK(  "**I	}
-.	HYqM)d*:3)?t
DE	OI;
'( 
**[
!C	N388A;-q!
67= Gs   '	M1M__main__)returnr   )r   r   r/   r   rf   zrequests.Response)rf   None)__doc__
__future__r   rN   r   r   pathlibr   r-   
gen_configr   rD   rH   rJ   r+   r   r,   r   r2   rd   __name__ r3   r   <module>rn      so    #   
   %PP'4 DD(
V&J"A8H zF r3   