+
    ‚aj  ã                  óº  € R t ^ RIHt ^ RIt^ RIt^ RIt^ RIHt ^ RIH	t	 ^ RI
t
^ RIHt ]! ]4      P                  4       P                  ^,          t]R,          R,          R,          tR	tR
t^xtR R ltR R ltR R ltR]RR/R R lltR R ltR R lt]R8X  d<   ]! R]! ]! 4       4       24       ]! RP=                  ]! 4       R,          4      4       R# R# )zŸGemini REST client for island generation.

Endpoint: https://generativelanguage.googleapis.com/v1beta/models/{model}:generateContent
Auth: ?key=GEMINI_API_KEY
)ÚannotationsN)ÚPath)ÚAny)Úload_dotenvÚappsÚwebz
.env.localz0https://generativelanguage.googleapis.com/v1betazgemini-2.5-flash-imagec               ó   € V ^8„  d   QhRR/# )é   ÚreturnÚstr© )Úformats   "ÚP/Users/marcosmor/Desktop/pr_party_ibm_hackthon/scripts/gemini/generate_island.pyÚ__annotate__r      s   € ÷ ñ �3ñ ó    c                 ó–   € \        \        4       \        P                  P	                  R 4      p V '       g   \        R\         24      hV # )ÚGEMINI_API_KEYzGEMINI_API_KEY missing in )r   ÚENV_PATHÚosÚenvironÚgetÚRuntimeError)Úkeys    r   Ú	_load_keyr      s8   € Ü”ÔÜ
�*‰*�.‰.Ð)Ó
*€CßÜÐ7¼°zÐBÓCÐCØ€Jr   c               ó    € V ^8„  d   QhRRRR/# )r	   Úmsgr   r
   ÚNoner   )r   s   "r   r   r   !   s   € ÷ :ñ :ˆcð :�dñ :r   c                óD   € \        R V  2\        P                  RR7       R# )z	[gemini] T)ÚfileÚflushN)ÚprintÚsysÚstderr)r   s   &r   Ú_logr#   !   s   € Ü	ˆI�c�UÐ
¤#§*¡*°D×9r   c               ó   € V ^8„  d   QhRR/# )r	   r
   z	list[str]r   )r   s   "r   r   r   %   s   € ÷ ñ �Yñ r   c                 óì  € \         P                  ! \         R2R\        4       /^R7      p V P                  ^È8w  d/   \        RV P                   RV P                  R,           24       . # V P                  4       p. pVP                  R. 4       Fb  pVP                  RR	4      pVP                  R
. 4      ;'       g    VP                  R. 4      pRV9   g
   RV9   g   KQ  VP                  V4       Kd  	  V# )zKGET /models. Returns model names supporting image generation if filterable.z/modelsr   )ÚparamsÚtimeoutzlist_models -> Ú :NéÈ   NÚmodelsÚnameÚ ÚsupportedGenerationMethodsÚsupported_generation_methodsÚgenerateContentÚgenerate_content)	Úrequestsr   ÚBASE_URLr   Ústatus_coder#   ÚtextÚjsonÚappend)ÚrespÚdatar*   Úmr+   Úactionss         r   Úlist_modelsr;   %   sß   € ä�<Š<Üˆ*�GÐØ”y“{Ð#Øô€Dð
 ×Ñ˜3ÔÜˆ˜t×/Ñ/Ð0°°$·)±)¸Dµ/Ð1BÐCÔDØˆ	Ø�9‰9‹;€DØ€FØ�X‰X�h Ö#ˆØ�u‰u�V˜RÓ ˆØ—%‘%Ð4°bÓ9×fÐf¸Q¿U¹UÐCaÐceÓ=fˆØ Ô'Ð+=ÀÖ+HØ�M‰M˜$Öñ	 $ð
 €Mr   ÚmodelÚaspect_ratioz16:9c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )r	   Úpromptr   Úoutput_pathr   r<   r=   r
   r   )r   s   "r   r   r   9   s:   € ÷ +ñ +Øð+àð+ð ð	+ð
 ð+ð 
ñ+r   c               ó   € \          RV R2pRRRV /./.RRR.R	R
V///p\        RV R\        V 4       RV 24       \        P                  ! VR\        4       /V\        R7      pVP                  ^È8w  d¬   VP                  R8X  d^   R	VP                  9   dM   \        R4       VR,          P                  R	R4       \        P                  ! VR\        4       /V\        R7      pVP                  ^È8w  d-   \        RVP                   RVP                  R,           24      hVP                  4       p\        V4      pV'       g   \        R\        V4      R,           24      hVP                  P                  RRR7       VP!                  \"        P$                  ! V4      4       \        RV RVP'                  4       P(                   R24       V# )zCGenerate one PNG via Gemini and write to output_path. Returns path.z/models/z:generateContentÚcontentsÚpartsr4   ÚgenerationConfigÚresponseModalitiesÚIMAGEÚimageConfigÚaspectRatiozPOST z prompt_len=z ar=r   )r&   r5   r'   i�  z3imageConfig rejected, retrying without aspect_ratioNzGemini z: :Niô  NzNo image returned. Response: T)ÚparentsÚexist_okzwrote z (z bytes))r2   r#   Úlenr1   Úpostr   ÚREQUEST_TIMEOUT_Sr3   r4   Úpopr   r5   Ú_extract_image_b64r   ÚparentÚmkdirÚwrite_bytesÚbase64Ú	b64decodeÚstatÚst_size)	r?   r@   r<   r=   ÚurlÚpayloadr7   r8   Ú	image_b64s	   &&$$     r   ÚgeneraterZ   9   sÂ  € ô ˆJ�h˜u˜gÐ%5Ð
6€Cà�g ¨Ð 0Ð1Ð2Ð3ØØ  7 )Ø˜M¨<Ð8ð
ð€Gô 	ˆ5���\¤# f£+ ¨d°<°.Ð	AÔBÜ�=Š=ØØ”y“{Ð#ØÜ!ô	€Dð ×Ñ˜3Ôà×Ñ˜sÔ" }¸¿	¹	Ô'AÜÐFÔGØÐ&Õ'×+Ñ+¨M¸4Ô@Ü—=’=ØØœy›{Ð+ØÜ)ô	ˆDð ×Ñ˜sÔ"Ü ¨×)9Ñ)9Ð(:¸"¸T¿Y¹YÀt½_Ð<MÐNÓOÐOØ�9‰9‹;€DÜ" 4Ó(€IßÜÐ:¼3¸t»9ÀT½?Ð:KÐLÓMÐMØ×Ñ×Ñ T°DÐÔ9Ø×ÑœF×,Ò,¨YÓ7Ô8Üˆ6�+�˜b ×!1Ñ!1Ó!3×!;Ñ!;Ð <¸GÐ	DÔEØÐr   c               ó    € V ^8„  d   QhRRRR/# )r	   r8   zdict[str, Any]r
   z
str | Noner   )r   s   "r   r   r   g   s   € ÷ ñ ˜^ð °
ñ r   c                ó:  € V P                  R . 4       F„  pVP                  R/ 4      P                  R. 4       F[  pVP                  R4      ;'       g    VP                  R4      pV'       g   K7  VP                  R4      '       g   KP  VR,          u u # 	  K†  	  R# )Ú
candidatesÚcontentrC   Ú
inlineDataÚinline_datar8   N)r   )r8   ÚcandÚpartÚinlines   &   r   rO   rO   g   sz   € Ø—‘˜ rÖ*ˆØ—H‘H˜Y¨Ó+×/Ñ/°¸Ö<ˆDØ—X‘X˜lÓ+×FÐF¨t¯x©x¸Ó/FˆFß‰v˜&Ÿ*™* V×,Ô,Ø˜f•~Ô%ó =ñ +ñ
 r   c               ó$   € V ^8„  d   QhRRRRRR/# )r	   Ú
input_pathr   r@   r
   Úboolr   )r   s   "r   r   r   p   s!   € ÷ ñ  dð ¸ð À$ñ r   c                óL  €  ^ RI Hp V P                  R4      ;_uu_ 4       pV! VP                  4       4      pRRR4       VP	                  X4       \        RV 24       R#   + '       g   i     L1; i  \         d-   p\        R\        T4      P                   R24        Rp?MRp?ii ; i ^ RI	H
p TP                  T 4      P                  R	4      pTP                  4       pTP                  w  rš\        T
4       F\  p\        T	4       FJ  pYŒT3,          w  rÞppT^–8”  g   K  Yý^,           8”  g   K)  Yþ^,           8”  g   K8  T^È8  g   KA  YÞT^ 3YŒT3&   KL  	  K^  	  TP                  T4       \        R
T 24       R#   \         d   p\        RT 24        Rp?R# Rp?ii ; i)zJTry rembg; fallback to PIL blue-sky chroma key. Returns True if processed.)ÚremoveÚrbNz	rembg -> Tzrembg unavailable (z); using PIL fallback)ÚImageÚRGBAzPIL chroma key -> zPIL fallback failed: F)Úrembgrh   ÚopenÚreadrR   r#   Ú	ExceptionÚtypeÚ__name__ÚPILrj   ÚconvertÚloadÚsizeÚrangeÚsave)re   r@   rh   Úfr8   Úexcrj   ÚimgÚpixelsÚwÚhÚyÚxÚrÚgÚbÚ_s   &&               r   Úremove_sky_backgroundr„   p   sd  € ð	NÝ à�_‰_˜T×"Ô" aÙ˜!Ÿ&™&›(Ó#ˆD÷ #à×Ñ Ô%Üˆy˜˜Ð&Ô'Ù÷	 #×"ûô
 ô NÜÐ"¤4¨£9×#5Ñ#5Ð"6Ð6KÐL×MÑMûðNúðÝà�j‰j˜Ó$×,Ñ,¨VÓ4ˆØ—‘“ˆØ�x‰x‰ˆÜ�q–ˆAÜ˜1–X�Ø# q D�\‘
��a˜à�s–7˜q r¥6žz¨a°aµ%®i¸AÀ¾GØ$%¨!¨Q <�F˜a˜4“Ló	 ñ ð 	�‰�ÔÜÐ! + Ð/Ô0ÙøÜô ÜÐ$ S EÐ*Ô+Ýûðús^   ‚A4 ¡A!¸'A4 Á!A1	Á,A4 Á4B+Á?"B&Â&B+Â/A2E? Ä&
E? Ä5
E? ÅE? Å0E? Å?F#Æ
FÆF#Ú__main__zkey loaded: Ú
:Né   N)Ú__doc__Ú
__future__r   rS   r   r!   Úpathlibr   Útypingr   r1   Údotenvr   Ú__file__ÚresolverI   Ú	REPO_ROOTr   r2   ÚDEFAULT_MODELrM   r   r#   r;   rZ   rO   r„   rq   rf   r    Újoinr   r   r   Ú<module>r’      s×   ðñõ #ã Û 	Û 
Ý Ý ã Ý á�‹N×"Ñ"Ó$×,Ñ,¨QÕ/€	Ø�vÕ Õ%¨Õ4€Ø=€Ø(€ØÐ õõ:õð(+ð ð	+ð
 ÷+õ\õðB ˆzÔÙˆ<™™Y›[Ó)Ð*Ð	+Ô,Ù	ˆ$�)‰)‘K“M #Õ&Ó
'Ö(ñ r   