§
    "1ªj
(  ã                   óè  — d Z ddlZddlZddlZddlZddlmZmZmZ ej	         
                    d¦  «        Zej	                             e¦  «        sej	         
                    d¦  «        Zd\  ZZdZedez  z
  Zd	Zd
ZdZd	ZeeeeddœZej	         
                    d¦  «        Zi Zd„ Zd„ Zd„ Zefd„Zdefd„Zddddddddeefddfd„Zd„ Zd„ ZeefeefeefdœZ d„ Z!e"dk    r e!¦   «          dS dS ) u  
gen_uky_center.py â€” LAYOUT BAKU Threads @ukyhandoko (FIXED 16 Sep 2026, disetujui Bos).

SPESIFIKASI BAKU (jangan diubah tanpa perintah Bos):
  â€¢ Kanvas   : SQUARE 1080Ã—1080 (bukan lagi 9:16 1080Ã—1920)
  â€¢ Teks     : UKURAN SEMULA â€” judul Poppins-Bold 85, body Poppins-Regular 36
  â€¢ Isi teks : SATU BLOK DI TENGAH kanvas (jarak atas = jarak bawah, tidak ada
               void besar di bawah lagi) â€” perintah Bos: "designnya terlalu luas,
               jangan terlalu banyak space kosong dibawahnya"
  â€¢ Align    : RATA KIRI (perintah Bos 16 Sep 2026: "rata kiri aja")
  â€¢ Garis    : TANPA separator garis (perintah Bos: "hilangkan separator garis")
  â€¢ Header   : "@ukyhandoko" kiri-atas + nomor slide kanan-atas
  â€¢ Footer   : teks brand kiri-bawah ("@ukyhandoko â€¢ Founder StudioSoft" / dmark.id / studiosoft.id)

Cara pakai:
  preview : python3 gen_uky_center.py left preview square      â†’ uky_preview/
  batch   : python3 gen_uky_center.py left batch square        â†’ tulis ulang
            uky_threads_images/ (20 file) + uky3_output/ (17Ã—3 file), backup .legacy-20260916

Sumber teks TIDAK diduplikasi: dibaca lewat AST dari skrip lama
  - generate_uky_threads_images.py  -> 20 slide uky_threads_images
  - gen_uky3.py LIST_POSTINGAN     -> quote card uky3_output
é    N)ÚImageÚ	ImageDrawÚ	ImageFontz!~/.hermes/profiles/atun/workspacez~/.openclaw/workspace-atun©é8  i€  éF   é   )é   é+   éc   )éÿ   r   r   )éù   és   é   )é(   r   r   )ÚBLUEÚWHITEÚORANGEÚ	BLUE_TEXTÚDARKz~/.fontsc                 ó¶   — | |f}|t           vr@t          j        t          j                             t          | ¦  «        |¦  «        t           |<   t           |         S )N)Ú_cacher   ÚtruetypeÚosÚpathÚjoinÚFONT_DIR)ÚnameÚsizeÚkeys      úA/home/mantapman/.hermes/profiles/atun/workspace/gen_uky_center.pyÚFr"   4   sF   € Ø�ˆ,€CØ
•&ÐÐÝÔ(­¬¯ªµhÀÑ)EÔ)EÀtÑLÔL�ˆs‰Ý�#Œ;Ðó    c                 ó"   — t          d| ¦  «        S )NzPoppins-Bold.ttf©r"   ©Úss    r!   ú<lambda>r(   ;   s   € •Ð% qÑ)Ô)€ r#   c                 ó"   — t          d| ¦  «        S )NzPoppins-Regular.ttfr%   r&   s    r!   r(   r(   <   s   € •Ð'¨Ñ+Ô+€ r#   c                 óö   — g d}}|                       ¦   «         D ]H}|r|› d|› �n|}|                     |¦  «        d         |k    r|}Œ/|r|                     |¦  «         |}ŒI|r|                     |¦  «         |S )NÚ ú r	   )ÚsplitÚgetbboxÚappend)ÚtextÚfontÚmax_wÚlinesÚcurÚwordÚtests          r!   Úwrapr7   ?   s�   € Ø�Rˆ3€EØ—
’
‘”ð ð ˆØ"%Ð/�#ˆˆ˜ˆˆˆ¨4ˆØ�<Š<˜ÑÔ˜aÔ  EÒ)Ð)ØˆCˆCàð "Ø—’˜SÑ!Ô!Ð!ØˆCˆCØ
ð Ø�Š�SÑÔÐØ€Lr#   éU   c                 ó$  ‡— ‰gˆfd„dD ¦   «         z   }|D ]F}t          | t          |¦  «        |¦  «        }t          |¦  «        |k    rt          |¦  «        |fc S ŒGt          d¦  «        t          | t          d¦  «        |¦  «        d|…         fS )z@Cari ukuran font judul terbesar yang muat dalam max_lines baris.c                 ó    •— g | ]
}|‰k     ¯|‘ŒS © r;   )Ú.0r'   Ústarts     €r!   ú
<listcomp>ztitle_fit.<locals>.<listcomp>P   s)   ø€ ð &ð &ð &˜aØ˜uš9˜9ð Ø$˜9˜9r#   )én   éd   é`   éZ   r8   éP   éK   r   éB   é>   é:   é6   é2   rI   N)r7   ÚBOLDÚlen)ÚtitleÚ	max_linesr=   r2   Úladderr   r3   s     `    r!   Ú	title_fitrO   N   s´   ø€ àˆWð &ð &ð &ð &Ð#Yð &ñ &ô &ñ &€Fàð %ð %ˆÝ�U�D ™JœJ¨Ñ.Ô.ˆÝˆu‰:Œ:˜Ò"Ð"Ý˜‘:”:˜uÐ$Ð$Ð$Ð$ð #å�‰8Œ8•T˜%¥ b¡¤¨5Ñ1Ô1°*°9°*Ô=Ð=Ð=r#   r+   Úcenteré$   Fz@ukyhandokoc                 ón  ‡‡)— |\  Š)}‰)dt           z  z
  }t          j        d‰)|f| ¦  «        }t          j        |¦  «        }t          d¦  «        }t          d¦  «        }t          d¦  «        }t          |d|	|¬¦  «        \  }}|j        dz   }t          |
¦  «        }|rt          |||¦  «        ng }|j        dz   }t          |j        d	z  ¦  «        d
z   }‰)dk    rdnd}d}d}t          |j        dz  ¦  «        dz   }|r||z   |z   n|} t          |¦  «        |z  | z   t          |¦  «        |z  z   }!d|dz
  }#}"t          |"|#z   |!z
  dz  ¦  «        }$t          |"t          |$|#|!z
  ¦  «        ¦  «        }$ˆˆ)fd„}%|$}&|D ],}'|                      |%|'|¦  «        |&f|'||¬¦  «         |&|z  }&Œ-|rj|&|z  }&‰dk    r+|                     ‰)|z
  dz  |&f‰)|z   dz  |&fg||¬¦  «         n+|                     t           |&ft           |z   |&fg||¬¦  «         |&||z   z  }&n|&|z  }&|D ],}'|                      |%|'|¦  «        |&f|'||¬¦  «         |&|z  }&Œ-‰dk    rz|                     ‰)dz  t           dz
  f|||d¬¦  «         |r,|                     ‰)t           z
  t           dz
  f|||d¬¦  «         |r"|                     ‰)dz  |dz
  f|||d¬¦  «         n{|                     t           t           dz
  f|||¬¦  «         |r,|                     ‰)t           z
  t           dz
  f|||d¬¦  «         |r#|                     t           |dz
  f|||¬¦  «         |rot          j                             |pd|¦  «        }(t          j        t          j                             |(¦  «        pdd ¬!¦  «         |                     |(d"¦  «         |(S |S )#Nr	   ÚRGBé   é   é   )r2   é   é   g333333Ó?é   iè  éª   é–   é   é    gÍÌÌÌÌÌÜ?é   é‚   r?   c                 ó`   •— ‰dk    r!‰|                      | ¦  «        d         z
  dz  S t          S )NrP   r	   )r.   ÚM)Úliner1   ÚmodeÚws     €€r!   Úline_xzrender.<locals>.line_xw   s4   ø€ Ø�8ÒÐØ˜Ÿš TÑ*Ô*¨1Ô-Ñ-°Ñ2Ð2Ýˆr#   )Úfillr1   rP   )rf   Úwidthé   Úma)r1   rf   ÚanchorÚrté,   Úms)r1   rf   ú.T©Úexist_okÚPNG)ra   r   Únewr   ÚDrawÚREGrO   r   r7   ÚintrK   ÚmaxÚminr0   rb   r   r   r   ÚmakedirsÚdirnameÚsave)*ÚbgÚfgrL   ÚbodyÚfooterÚpageÚfilenamerc   Úout_dirÚ
title_sizeÚ	body_sizeÚcanvasÚdividerÚheaderÚhÚMAXWÚimgÚdÚf_headÚf_pageÚf_footÚf_titleÚt_linesÚt_stepÚf_bodyÚb_linesÚb_stepÚgap_title_divÚdiv_wÚdiv_hÚgap_div_bodyÚgap_no_lineÚgap_midÚblock_hÚ	top_limitÚ	bot_limitÚy0re   ÚyÚlnÚoutrd   s*          `                                 @r!   Úrenderr¡   Y   sU  øø€ ð �D€A€qØˆq•1‰u‰9€DÝ
Œ)�E˜A˜q˜6 2Ñ
&Ô
&€CÝŒ�sÑÔ€Aå�‰WŒW€FÝ�‰WŒW€FÝ�‰WŒW€FÝ  ¨¨:¸TÐBÑBÔBÑ€GˆWØŒ\˜AÑ€FÝ�‰^Œ^€FØ*.Ð6�d�4˜ Ñ&Ô&Ð&°B€GØŒ[˜2Ñ€Få˜œ tÑ+Ñ,Ô,¨qÑ0€MØ˜’9�9ˆCˆC #€EØ€EØ€Lå�g”l TÑ)Ñ*Ô*¨RÑ/€Kà8?ÐPˆ}˜uÑ$ |Ñ3Ð3À[€GÝ�'‰lŒl˜VÑ# gÑ-µ°G±´¸vÑ0EÑE€GØ  C¡ˆy€IÝ	ˆi˜)Ñ# gÑ-°Ñ2Ñ	3Ô	3€BÝ	ˆY�˜B 	¨GÑ 3Ñ4Ô4Ñ	5Ô	5€Bðð ð ð ð ð ð
 	€AØð ð ˆØ	�Š���r˜7Ñ#Ô# QÐ'¨°"¸7ˆÑCÔCÐCØ	ˆV‰ˆˆàð Ø	ˆ]ÑˆØ�8ÒÐØ�FŠF�a˜%‘i 1‘_ aÐ(¨A°©I¸©?¸AÐ*>Ð?ÀbÐPUˆFÑVÔVÐVÐVà�FŠF•Q˜�F�Q ™Y¨˜NÐ+°"¸EˆFÑBÔBÐBØ	ˆU�\Ñ!Ñ!ˆˆà	ˆ[Ñˆàð ð ˆØ	�Š���r˜6Ñ"Ô" AÐ&¨°¸&ˆÑAÔAÐAØ	ˆV‰ˆˆð ˆxÒÐØ	�Š��A‘•q˜2‘vˆ ¨V¸"ÀTˆÑJÔJÐJØð 	MØ�FŠF�A�‘E�1˜r™6�? D¨v¸BÀtˆFÑLÔLÐLØð 	OØ�FŠF�A˜‘E˜1˜r™6�? F°¸bÈˆFÑNÔNÐNøà	�Š••1�r‘6ˆ{˜F¨°bˆÑ9Ô9Ð9Øð 	MØ�FŠF�A�‘E�1˜r™6�? D¨v¸BÀtˆFÑLÔLÐLØð 	>Ø�FŠF•A�q˜2‘v�; ¨V¸"ˆFÑ=Ô=Ð=àð ÝŒg�lŠl˜7˜> c¨8Ñ4Ô4ˆÝ
Œ•B”G—O’O CÑ(Ô(Ð/¨C¸$Ð?Ñ?Ô?Ð?Ø�Š��eÑÔÐØˆ
Ø€Jr#   c                  óD  — t           j                             t          d¦  «        } t	          j        t          | d¬¦  «                             ¦   «         ¦  «        }g }t	          j        |¦  «        D �]-}t          |t          j
        ¦  «        �rt          |j        dd¦  «        dk    rõi }|j        D ]R}	 t	          j        |j        ¦  «        ||j        <   Œ%# t"          $ r! t          |j        dd ¦  «        ||j        <   Y ŒOw xY wd|v r>t          |                     d¦  «        t&          ¦  «        rt(          |d                  |d<   t          |                     d	¦  «        t&          ¦  «        rt(          |d	                  |d	<   d|v r|                     |¦  «         �Œ/|S )
Nzgenerate_uky_threads_images.pyúutf-8©ÚencodingÚidr+   Ú
make_slider€   Úbg_colorÚ
text_color)r   r   r   ÚWSÚastÚparseÚopenÚreadÚwalkÚ
isinstanceÚCallÚgetattrÚfuncÚkeywordsÚliteral_evalÚvalueÚargÚ	ExceptionÚgetÚstrÚ
NAME_COLORr/   )r   ÚtreeÚitemsÚnodeÚkwÚks         r!   Úload_uky_threadsrÁ   ¦   sƒ  € ÝŒ7�<Š<�Ð<Ñ=Ô=€DÝŒ9•T˜$¨Ð1Ñ1Ô1×6Ò6Ñ8Ô8Ñ9Ô9€DØ€EÝ”˜‘”ð !ñ !ˆÝ�d�CœHÑ%Ô%ñ 	!­'°$´)¸TÀ2Ñ*FÔ*FÈ,Ò*VÐ*VØˆBØ”]ð =ð =�ð=Ý #Ô 0°´Ñ 9Ô 9�B�q”u‘I�IøÝ ð =ð =ð =Ý '¨¬°°tÑ <Ô <�B�q”u‘I�I�Ið=øøøà˜RÐÐ¥J¨r¯vªv°jÑ/AÔ/AÅ3Ñ$GÔ$GÐÝ!+¨B¨z¬NÔ!;��:‘Ý˜"Ÿ&š& Ñ.Ô.µÑ4Ô4ð @Ý#-¨b°Ô.>Ô#?��<Ñ Ø˜RÐÐØ—’˜RÑ Ô Ð ùØ€Ls   Â5!CÃ(DÄDc                  ó’  — t           j                             t          d¦  «        } t	          j        t          | d¬¦  «                             ¦   «         ¦  «        }t	          j        |¦  «        D ]W}t          |t          j
        ¦  «        r;t          |j        d         dd¦  «        dk    rt	          j        |j        ¦  «        c S ŒXg S )Nzgen_uky3.pyr£   r¤   r   r¦   r+   ÚLIST_POSTINGAN)r   r   r   rª   r«   r¬   r­   r®   r¯   r°   ÚAssignr²   Útargetsrµ   r¶   )r   r¼   r¾   s      r!   Ú	load_uky3rÆ   »   s¦   € ÝŒ7�<Š<�˜MÑ*Ô*€DÝŒ9•T˜$¨Ð1Ñ1Ô1×6Ò6Ñ8Ô8Ñ9Ô9€DÝ”˜‘”ð 0ð 0ˆÝ�d�CœJÑ'Ô'ð 	0­G°D´LÀ´OÀTÈ2Ñ,NÔ,NÐRbÒ,bÐ,bÝÔ# D¤JÑ/Ô/Ð/Ð/Ð/øØ€Ir#   )ÚBIRUÚPUTIHr   c                  ó|
  — t          t          j        ¦  «        dk    rt          j        d         nd} t          t          j        ¦  «        dk    rt          j        d         nd}t          t          j        ¦  «        dk    rt          j        d         nd}t          t          j        ¦  «        dk    rt          j        d         ndd	k    }|dk    rd
}|rdnd\  }}d}nd}|rdnd\  }}d}t          j                             t          |dk    rdnd¦  «        }t          j        |d¬¦  «         t          d|› d|› d|› d|› d| › �
¦  «         |dk    rüt          ¦   «         D ]ë}	|	d         }
|
 
                    d¦  «        sŒ t          t          |	d         ¦  «        t          |	d         ¦  «        |	d         |	                     dd¦  «        |	                     dd¦  «        |	                     dd¦  «        |› d | d!                              ¦   «         › d |
› �| ||||¬"¦  «        }t          d#|t          j        |¦  «        j        ¦  «         Œìd S d!}t          ¦   «         D �]9}	t          j                             t          d$|	d         ¦  «        }t          j                             |¦  «        r:t          j                             |d%z   ¦  «        st'          j        ||d%z   ¦  «         t          t          |	d         ¦  «        t          |	d         ¦  «        |	d         |	                     dd¦  «        |	                     dd¦  «        |	                     dd¦  «        |	d         | t          j                             t          d$¦  «        |||¬"¦  «         |dz  }�Œ;t+          ¦   «         D �]{}t,                               ¦   «         D �]]\  }\  }}|d&         › d |                     ¦   «         › d'�}
t          j                             t          d(|
¦  «        }t          j                             |¦  «        r:t          j                             |d%z   ¦  «        st'          j        ||d%z   ¦  «         t          |||d)         |                     dd¦  «        |                     d*d¦  «        d+|
| t          j                             t          d(¦  «        |t3          ||                     d,|¦  «        |rd-nd!z   ¦  «        |                     d.|¦  «        |rdnd!z   ¬"¦  «         |dz  }�Œ_�Œ}t          d/|› d0| › d1|› d2�¦  «         d S )3Né   Úleftr	   Úpreviewr\   ÚsquarerV   r+   Úbig)r   r   )r@   r   )r8   rQ   ÚSQr   ÚPTÚuky_previewTro   zshape=z canvas=z judul=z body=z mode=r€   )Ú11_Ú16_r¨   r©   rL   r}   Úfooter_textÚpage_numberÚ_r   )r€   rc   r�   r„   r‚   rƒ   u   âœ…Úuky_threads_imagesz.legacy-20260916Únamaz.pngÚuky3_outputÚjudulr~   z1/1Ú
judul_sizeé   rƒ   u   âœ… z file dirender ulang (mode=z, shape=ú))rK   ÚsysÚargvr   r   r   rª   rx   ÚprintrÁ   Ú
startswithr¡   Útupler¹   Úupperr   r­   r   ÚexistsÚshutilÚcopy2rÆ   ÚBG_MAPr½   Úlowerrv   )rc   ÚwhichÚshaperÎ   r„   Út_sizeÚb_sizeÚtagr�   ÚsrcÚfnr    ÚnÚprÀ   Úsufr{   r|   s                     r!   Úmainró   Ç   s  € å�cœh™-œ-¨!Ò+Ð+�3Œ8�AŒ;ˆ;°€DÝ�sœx™=œ=¨1Ò,Ð,�CŒH�QŒKˆK°)€EÝ�sœx™=œ=¨1Ò,Ð,�CŒH�QŒKˆK°(€EÝ�cœh™-œ-¨!Ò+Ð+�3Œ8�AŒ;ˆ;°¸Ò
=€Cà�ÒÐØˆØ&)Ð7˜˜¨x‰ˆ�ØˆˆàˆØ&)Ð7˜˜¨x‰ˆ�ØˆåŒg�lŠl�2°¸Ò0BÐ0B˜}˜}ÈÑKÔK€GÝ„K� $Ð'Ñ'Ô'Ð'Ý	Ð
S�5Ð
SÐ
S &Ð
SÐ
S°Ð
SÐ
S¸vÐ
SÐ
SÈTÐ
SÐ
SÑTÔTÐTà�	ÒÐå#Ñ%Ô%ð 
	4ð 
	4ˆCØ�Z”ˆBØ—=’= Ñ0Ô0ð ØÝ�˜s :œÑ/Ô/µ°s¸<Ô7HÑ1IÔ1IØ˜Wœ s§w¢w¨v°rÑ':Ô':¸C¿GºGÀMÐSUÑ<VÔ<VØŸš °Ñ3Ô3Ø%(Ð"AÐ"A¨4°¬7¯=ª=©?¬?Ð"AÐ"A¸RÐ"AÐ"AÈØ!(°Ø$*°fð>ñ >ô >ˆCõ �%˜�eœj¨™oœoÔ2Ñ3Ô3Ð3Ð3Øˆð 	
€AÝÑ!Ô!ð 	ñ 	ˆÝŒG�LŠL�Ð1°3°z´?ÑCÔCˆÝŒ7�>Š>˜!ÑÔð 	4¥R¤W§^¢^°AÐ8JÑ4JÑ%KÔ%Kð 	4ÝŒL˜˜AÐ 2Ñ2Ñ3Ô3Ð3Ý�u�S˜”_Ñ%Ô%¥u¨S°Ô->Ñ'?Ô'?ÀÀWÄØ�wŠw�v˜rÑ"Ô" C§G¢G¨M¸2Ñ$>Ô$>Ø�wŠw�} bÑ)Ô)°C¸
´OÈ$Ý”w—|’|¥BÐ(<Ñ=Ô=Ø¨¸6ð		Cñ 	Cô 	Cð 	Cð
 	
ˆQ‰ˆ‰å‰[Œ[ð ñ ˆÝ#Ÿ\š\™^œ^ð 
	ñ 
	‰MˆC‘�"�bØ�f”IÐ1Ð1 §	¢	¡¤Ð1Ð1Ð1ˆBÝ”—’�R °Ñ3Ô3ˆAÝŒw�~Š~˜aÑ Ô ð 8­¬¯ª¸Ð<NÑ8NÑ)OÔ)Oð 8Ý”˜Q Ð$6Ñ 6Ñ7Ô7Ð7Ý�2�r˜1˜Wœ: q§u¢u¨V°RÑ'8Ô'8¸!¿%º%ÀÈ"Ñ:MÔ:MØ 2¨DÝœ7Ÿ<š<­¨MÑ:Ô:À6Ý! &¨!¯%ª%°¸fÑ*EÔ*EÈsÐIYÈÈÐXYÑ*ZÑ[Ô[ØŸUšU ;°Ñ7Ô7À¸?¸1¸1ÈÑKð	Mñ Mô Mð Mð
 �‰FˆA‰Añ
	õ 
Ð
E�Ð
EÐ
E¨tÐ
EÐ
E¸UÐ
EÐ
EÐ
EÑFÔFÐFÐFÐFr#   Ú__main__)#Ú__doc__r«   r   rÞ   rå   ÚPILr   r   r   r   Ú
expanduserrª   ÚisdirÚWÚHra   ÚMAX_Wr   r   r   r   r»   r   r   r"   rJ   rt   r7   rO   r¡   rÁ   rÆ   rç   ró   Ú__name__r;   r#   r!   ú<module>rý      sù  ððð ð. €
€
€
Ø 	€	€	€	Ø 
€
€
€
Ø €€€Ø +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +à„W×ÒÐ;Ñ<Ô<€Ø	„w‡}‚}�RÑÔð :Ø	Œ×	Ò	Ð8Ñ	9Ô	9€Bà�€€1Ø€Ø	ˆA�‰E‰	€à€Ø€Ø	€Ø€	à U°fÈ9Ø"ð$ð $€
ð Œ7×Ò˜jÑ)Ô)€Ø	€ðð ð ð *Ð)€Ø+Ð+€ð !ð ð ð ð ð ')°ð >ð >ð >ð >ð  "¨"°2ÀØ $°2ÀØ�a�& %°ðIð Ið Ið IðZð ð ð*ð ð ð ˜�-¨5°)Ð*<ÈÐQVÈÐ	XÐ	X€ð<Gð <Gð <Gð~ ˆzÒÐØ€D�F„F€F€F€Fð Ðr#   