Ë
    (<çiß  ã                  óÒ   — 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Zddlm	Z	 ddl
Z
ddlmZ edz  Zej                  dd¬«       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)uT   ì»¨ì…‰ #41 ë‹¹ì‹  ê°™ì€ ì‚¬ëžŒ (Unedited Reality Portrait) ì¸ë¬¼ ì´ë¯¸ì§€ ìƒì„±.é    )ÚannotationsN)ÚPath)ÚWORKSPACE_ROOTz:output/meta-ads/concept-catalog/41-cannes-unedited-realityT)ÚparentsÚexist_okzgemini-3-pro-image-previewzgemini-3.1-flash-image-previewz0https://generativelanguage.googleapis.com/v1betaz3https://www.googleapis.com/auth/generative-languageaÔ  A casual unposed photograph of a Korean man in his late 40s to early 50s. He is wearing everyday clothing a plaid flannel shirt. He is sitting at a cozy coffee shop with a cup of coffee. The photo looks like it was taken by a friend with a smartphone slightly imperfect framing, natural ambient lighting warm afternoon window light, no studio setup. His expression is genuine relaxed contentment, a real smile not a forced pose. Background is softly blurred shallow depth of field, recognizable but not prominent. Photo texture slightly grainy, warm color tones, documentary snapshot photography style. 1080x1080 square format, realistic, no AI-perfect skin, natural imperfections welcome. No text, no graphics, no overlays.c                 óº   — t        j                  g d¢ddd¬«      } | j                  dk7  rt        d| j                  › «      ‚| j
                  j                  «       S )u&   gcloud CLIë¡œ ì•¡ì„¸ìŠ¤ í† í° íšë“.)ÚgcloudÚauthzprint-access-tokenz<--scopes=https://www.googleapis.com/auth/generative-languageTé   )Úcapture_outputÚtextÚtimeoutr   u   gcloud í† í° íšë“ ì‹¤íŒ¨: )Ú
subprocessÚrunÚ
returncodeÚRuntimeErrorÚstderrÚstdoutÚstrip)Úresults    úb/home/jay/workspace/.worktrees/task-2057-dev2/tools/ai-image-gen/gen_concept41_unedited_reality.pyÚ	get_tokenr   %   sW   € ä^‰^ò	Ià $°ô€Fð
 ×Ñ˜AÒÜÐ:¸6¿=¹=¸/ÐJÓKÐKØ=‰=×ÑÓ Ð ó    c                ó|   — t         › d|› d}d| › ddœ}dd|igigdd	gd
dœdœ}t        j                  |||d¬«      S )Nz/models/z:generateContentzBearer zapplication/json)ÚAuthorizationzContent-TypeÚpartsr   ÚIMAGEÚTEXTg      ð?)ÚresponseModalitiesÚtemperature)ÚcontentsÚgenerationConfigi,  )ÚheadersÚjsonr   )ÚGEMINI_API_BASEÚrequestsÚpost)ÚtokenÚmodel_idÚpromptÚurlr#   Úpayloads         r   Úcall_geminir-   1   sm   € ÜÐ˜X h ZÐ/?Ð
@€Cà" 5 'Ð*Ø*ñ€Gð
  ¨Ð 0Ð1Ð2Ð3à#*¨FÐ"3Øñ
ñ€Gô =‰=˜ g°GÀSÔIÐIr   c            	     ó  — t        d«       t        dt        › «       	 t        j                  j	                  dt        t        dz  «      «       dd l} | j                  t        «      }t        dt        |«      › d«       t        j                  «       }t        d
t        › d«       t        |t        t         «      }|j"                  dv r4t        d|j"                  › dt$        › «       t        |t$        t         «      }t        j                  «       |z
  }|j"                  dk7  r=t        d|j"                  › d|j&                  d d › «       t        j(                  d«       |j+                  «       }|j-                  dg «      }|s9t        dt+        j.                  |«      d d › «       t        j(                  d«       |d   j-                  di «      j-                  dg «      }d }	|D ]
  }
d|
v sŒ|
}	 n |	€G|D cg c]  }d|v sŒ|j-                  dd«      ‘Œ }}t        d|› «       t        j(                  d«       |	d   j-                  dd«      }t1        j2                  |	d   d   «      }d|v rd nd!}t        d"|› z  }|j5                  |«       |j7                  «       j8                  }t        d#|› «       t        d$|d%›d&|d'›d(|› «       d)t         t        t        |«      |t;        |d*«      |d+œ}t        d,z  j=                  t+        j.                  |d-d*¬.«      d/¬0«       t        d1t        d,z  › «       y # t        $ r<}t        d|› d«       t        «       }t        d	t        |«      › d«       Y d }~Œûd }~ww xY wc c}w )2Nu*   === ì»¨ì…‰ #41 ì¸ë¬¼ ì´ë¯¸ì§€ ìƒì„± ===u   ì¶œë ¥ ë””ë ‰í† ë¦¬: r   ztools/ai-image-genu!   SA í† í° íšë“ ì„±ê³µ (ê¸¸ì´: ú)u   SA í† í° ì‹¤íŒ¨: u   , gcloud CLI ì‹œë„...u)   gcloud CLI í† í° íšë“ ì„±ê³µ (ê¸¸ì´: u   ëª¨ë¸: u    í˜¸ì¶œ ì¤‘...)i“  i”  u   Pro ëª¨ë¸ ì‹¤íŒ¨ (z), fallback: éÈ   u   API ì˜¤ë¥˜ z: iô  é   Ú
candidatesu   candidates ì—†ìŒ. ì‘ë‹µ: Úcontentr   Ú
inlineDatar   Ú u   ì´ë¯¸ì§€ ì—†ìŒ. í…ìŠ¤íŠ¸: ÚmimeTypez
image/jpegÚdataÚjpegz.jpgz.pngzperson-backgroundu   ì €ìž¥ ì™„ë£Œ: u   íŒŒì¼ í¬ê¸°: ú,u    bytes, ì†Œìš”: z.1fu   ì´ˆ, MIME: z41-cannes-unedited-realityé   )Úconceptr*   ÚmodelÚoutputÚ
size_bytesÚtime_secondsÚ	mime_typezgeneration-meta.jsonF)Úensure_asciiÚindentzutf-8)Úencodingu   ë©”íƒ€ë°ì´í„°: )ÚprintÚ
OUTPUT_DIRÚsysÚpathÚinsertÚstrr   Úgcloud_authÚget_service_account_tokenÚGEMINI_SCOPEÚlenÚ	Exceptionr   ÚtimeÚMODEL_IDr-   ÚPROMPTÚstatus_codeÚFALLBACK_MODEL_IDr   Úexitr$   ÚgetÚdumpsÚbase64Ú	b64decodeÚwrite_bytesÚstatÚst_sizeÚroundÚ
write_text)rJ   r(   ÚeÚstartÚresponseÚelapsedr7   r2   r   Ú
image_partÚpartÚpÚ
text_partsr@   Úimage_bytesÚextÚoutput_pathÚsizeÚmetas                      r   Úmainrk   A   sX  € Ü	Ð
6Ô7Ü	Ð!¤* Ð
.Ô/ðIÜ‰‰˜œ3œ~Ð0DÑDÓEÔFÛØ×5Ñ5´lÓCˆÜÐ1´#°e³*°¸QÐ?Ô@ô I‰I‹K€EÜ	ˆH”XJ˜nÐ
-Ô.Ü˜5¤(¬FÓ3€Hà×Ñ˜zÑ)ÜÐ# H×$8Ñ$8Ð#9¸ÔGXÐFYÐZÔ[Ü˜uÔ&7¼Ó@ˆäi‰i‹k˜EÑ!€Gà×Ñ˜sÒ"Ü˜H×0Ñ0Ð1°°H·M±MÀ$À3Ð4GÐ3HÐIÔJÜ‰Œà=‰=‹?€DØ—‘˜,¨Ó+€JÙÜÐ+¬D¯J©J°tÓ,<¸T¸cÐ,BÐ+CÐDÔEÜ‰Œàq‰M×Ñ˜i¨Ó,×0Ñ0°¸"Ó=€EØ€JØò ˆØ˜4ÒØˆJÙðð
 ÐØ16ÖF¨A¸&ÀAº+a—e‘e˜F BÕ'ÐFˆ
ÐFÜÐ-¨j¨\Ð:Ô;Ü‰Œà˜<Ñ(×,Ñ,¨Z¸ÓF€IÜ×"Ñ" :¨lÑ#;¸FÑ#CÓD€Kà˜iÑ'‰&¨V€CÜÐ!2°3°%Ð8Ñ8€KØ×Ñ˜KÔ(à×ÑÓ×%Ñ%€DÜ	ˆO˜K˜=Ð
)Ô*Ü	ˆO˜D ˜8Ð#3°G¸C°=ÀÈIÈ;Ð
WÔXð 0ÜÜÜkÓ"ØÜ˜g qÓ)Øñ€Dô Ð(Ñ(×4Ñ4Ü
‰
4 e°AÔ6Àð 5ô ô 
ÐœjÐ+AÑAÐBÐ
CÕDøô} ò IÜÐ" 1 #Ð%;Ð<Ô=Ü“ˆÜÐ9¼#¸e»*¸ÀQÐG×HÒHûðIüòD Gs$   ŸA!L; Ç:	NÈNÌ;	N Í1M;Í;N Ú__main__)ÚreturnrI   )r(   rI   r)   rI   r*   rI   rm   zrequests.Response)rm   ÚNone)Ú__doc__Ú
__future__r   rW   r$   r   rF   rO   Úpathlibr   r&   Ú
gen_configr   rE   ÚmkdirrP   rS   r%   rL   rQ   r   r-   rk   Ú__name__© r   r   ú<module>rv      s‡   ðÙ Zå "ã Û Û Û 
Û Ý ã Ý %àÐZÑZ€
Ø 
× Ñ ˜¨Ð Ô -à'€Ø4Ð ØD€ØD€ð	)ð ó	!óJó HEðV ˆzÒÙ…Fð r   