From 4f858be918fdcefa11f1d22b174d04a94e290d8d Mon Sep 17 00:00:00 2001 From: franzz Date: Thu, 17 Sep 2026 15:07:30 +0200 Subject: [PATCH] Fix icon background for iOS bookmarks --- static/icon-180.png | Bin 4704 -> 5575 bytes static/icon-512.png | Bin 13672 -> 16073 bytes tools/make_icons.py | 16 ++++++++++------ 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/static/icon-180.png b/static/icon-180.png index 72d7204fdee7869a1f0bcb84789d1911bc1f207f..c8449a6de0b7dc15397fc4358464861dbe86f5ab 100644 GIT binary patch literal 5575 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 literal 4704 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 ClH*wb diff --git a/static/icon-512.png b/static/icon-512.png index 6bb8b32425bfd8eda7b8f82267511707d4d5ff23..25c2b0c5ed10686988c9f392e0fff062b5f1f0c1 100644 GIT binary patch literal 16073 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 literal 13672 zcmeIZS6owF^ews*K@b#B5D<`Jp-L0!Euw%*k&cv5RS=|!^Z-GmND&o8R3H>7QUZvy zgr+p5qd=s0f(gAPgpl0r_rK@qKHZ0N@5_10{;kZcz1G}w%{|AMBQH#h^-rb&Y z>h`UhW&i*MFQEYQaqwd|c$fkJ9Kh|H*DZoGSEo)iF1sGlw@5$DT$KYQ4rx0V+fpuA z-0w+G_;NFh@<8IJ!);c{UwL_7-kRv>oP7BFimTL5r;H!moiYZQ^uq<3am!p}f2RKo zDX7I^ple}=oUQ7=+}qGX3U9_8HlvAQ@Cr@~Sr~wvxycpTl{RB^7TojmJ?jQzzpQn+%?#igHw17O zSEiPdeUYB}Z?!W?jl}!7*KE)r7T5v@fQ6uxjxGVaX$$K206UR zjvH;(aFl;vUg!(Ks5X0j73RiEK#e{C@UDTJpDvgM)Jj+*Klt$k1v&$45{a0WkZ z46c9B_M#+mL5S89P#(D~i>Yr06!q8v6LW9ayPdfp^xI)WYfP=5PisEZL>*js>?FBj zxh)v?-J>>xx4!B|t0vS$3LJkpNv5Z$CDSK8;tt{be(wMiS#VTulHA2h89}R#$gnqb zsxnN90X40c&gY0ul3Q%Df@ofz)Elena?>e(f{q|DCUe<=o!|fXmxhx-xk)e!OAQM;jf$-m3OLc2B&-_~^ORl(wO(-~hM< zG(2W*RTL<2W(LG>D;;b&JF5hR@(RZsaUgATm;mts(eJ%iy5s;8LC{zb+WKSqGEg84 z081e$a&OWCbr~cTO93t!J4%p<^CeGKn8XSM=&pJr$7i5^rSAd|a}hMXXUZ$xf7S#F z&hYZ=^PzbwSPnxkXeQqxXPd|hn*+V8IxUMf*txxdeh7_NL0{6Hxpw<{He(VEMjjX zVd|Q5YMnKi{IjRvEya0Tk<#>&=I}UdI!S0I|6C{wkd_DlUwahMQ}D!w*Hc}Jx{6Dv zH4?gx(w1!hjs^A^T(G*~)269Y1Pq$9x{9o~IiNPQClgtZCTc*$8T|p|!$g_gV^c_n z!q^?x`02#*<4jD}+{o|Xb9k5#wwFKGVj{iJwW|yf7XXt(dP_Z9;KdL$ki!n1uX8Sj z^hERqsoI1cFa*y!VdD<2-;Xs55Eh$c1ct2}i8BUSV@KwUfNCBX(qhwl$Hck7h(8io zA4hfy!Cr$QLs&S6d+ANKImz^2IB2%NX|ls?p{@Yp5C~B0(6}%oF`-!TBsw}e@vyRx z*aG)?Dm`yISmVCGg+M<-cfnH{)`O0I24oREv|ko6=IkG5$no{I7$7FZio$-blC;4B%yKkf`|6{M-Y zG-ssl+>EAQ##u>@j-kz|Dg$Q82Z*wKW1r3inhjk-7{UO2eJQ)lUsBz%%7T9I#g?q- zsMN_r!CSn+F(7$H{%&iVU)~);{EYptUDv11QLu&Uh% zCOk^L^LvU!=@yAj(h_Q32u&pr9|l;dH|m}xE>`$1zPn>Rr`96CHIqJpM(@$I^2SzTvuASP=&+MnwOzB|g0~;;3yeMEj)z!!-Z` z)Zkfne`!&F)u6W(^gnj`R-cF%8lg+z_=h!c#lQJ|izH`v>eAIX_3Qk~D`?c|8mv%H z8`L8SK-%ua9I$E$e5Sq~KW1_Xm4AdFfALKE;Nz$*J7X1t(3)8V-*r>N4XK}a~{e1a#-fVZ_1*>&qeAKg9y3L-2oN`MrY+ zyc@UllFzGKEp#UT{@{uJyf1KWaRn40Wti~P)(g@vJCBSG+~kw zl8WR5UlUe{*His*88N2l% z!{VFnZ{g@5+@n6^U#dXaN?Rvk@)_l&DK+&EUPQ1*5$f>_K#p(f?k#9hZ!WptXGabU z7$aa9Ul}-gt7`<}{{rf6X8=vX#v5>4hdPl1KlZ1JpJC(c@y4At6_qGC|d$?Mi z;y}XSKHsgX8XS#4%a|KIXtTr?S9j0u*&Sx2gl1~R zuZRa&?Mij@$hJ`LyrWrKpK5}xpE0p}0QdLnZ{y!D z)z^y!8W$881Uc>)o64+Za%4u(bVv=IcG$AL<)*cBZYq*~)cx%WIu*gzocqDQ zjV6Y3v#)xv%`|MI6s+f0)TwJz0WksNLvo3AZdv|4dN zF?nFW5|F$Bz#bqVnMPSBB6a)sg^bt2_z@BF>D7rA-%297gd!WWLzdsakLX)S(bk&B z52)e=G|98k-KLGD&DYeGlQ||>u`dJ4*R-2E_AcUF&?weo4hUdLDa2s2B+q%z=COw4 zN!1+^Fn+&{F3wa1eq-c0d2nDL)9{J7F;c+mhDyuI*Lz_Hfur{05;3&duF4o>0#|tH zS-DG&HBOsJIs3xd@S?^*4fqSfl*Wa^LzC0 ziaw&Efu$6N9I2C#92P&JL$mLt^;@X6xO)A@ zFP+-G3IiG;lPz?ioj&W}yGMRnK?9hG^t~$(Ua)Svb9Q2$Qi&?DE)_wRSzkInvNO3= zDdyiRAD8YJ5wi3kS@F)fpYapKKx?;Wv;Jrz+;N~*|F|3j6zJZ+JaWS;wq^2GNBDXb z^RMG2FEseq-auQET>5B#g#Q9K3)D>HgQ(e^u}~Ut6M(%yY$fxz&&W1fJwA8nJ#xz- zIq>A=vStdQuz}~x@Kg2XHd&o1)>aFk!X%&AM3nxw0 z44WBzc620v=ehQREw;AKqSJe-u9wa<{Pn!q~-b zEZ@?+Dm(J=7XQb?U6<%nN`nvH!PAM)zdzI5!1M=XI`X%04L;cga;~TsYb8f6ePMKJ zF6XlgTdN6Je63%?!z$ZY*{`wFE2>BnS!OERpv0h1JaFs#A1xr|;KpnM&pOQMJx~l# z(k?mLn3)dSIO@idy7{u3dSXPH#)#A6-Z-VB7THxxzeSEEiHDzZv{ePyin_mWq0NNL<})YGHU zfLD&%0bxeR;9#=z_1+CMKT^_?2xo%@VrR~ld~2dLg_7su0*>}@p1(fb#>~a?UkhBl zm&~th>{(tjDph^thH6?hIxiJaL1e%wQ*8-ec?>2ZP=Ey=yTPM{xV2}d3&hLQB}v*a zd56HGpEWIx=GM&a%>P-)?nlFK?wJudU`p>-?Q_=(8;qZvf8#|yHVh)5m?v#K6WLlh z6p3;$b2*6!iDH*|%uW*x?bpU9DylshhdF{EIqp&?wqCyK)Rx{_CX}N+^O$-A;uDqa z|5bkpwRvZj6KO>Vr?(AXJ2r97XdY@PIm`1LL=gtShSDuH&o*=U2If|*-H8;3mq~95 z;<#Fr)}O8k=jbp1TwZJ==DAZ<&GlU!G{XR;JcxtTv#koMT1a<5rqt&{F;lSgniQ=g z|1U0pOL~NLLWHmiW9sd-NArq?%GiYlXCmKl0484-p-9>Jp-rJHPP=*flIeoki?{)8 z`!b#=u)Z_-YGZjfrWdjqqpqZpkhMsj(y5qUq0~AW40Hw#jj_Cet=Hembq{FT`&^9j zl)W5*KlVgHFAHaWlD(ZRrh@0yMX=CKeLR%k#;_gY2cXDxM=y)jeAtF?Dn~Yz+dx2nbs?7(shQ9~~LO z4nQzi;22$3pUyJ~9&WQepCvaT`7QPl+mQh5jaEi<2xF2C+-C@yu)EUQ3X_2#Uqr%R zIK2CFfn;ui?#F)+DXJr!R?uJaaVd>D~XpuuaM?;3u!Gs=1pwow07 zZQ^J&DUEdFs#jdmPuE?{TkKA?xP!rKO7iWqv#2-`^ z{MzTiiE0(Gp9t@<+DR0AW;D`pBex8D+NJ+S?-=>zD*^C4Tjm3mA7!72eZCu^ary$< zbX*iu+l^^51zP&8Hs{WxNtjV9H<|0NW%hRtyhS9yBUT~`5$-&4-JaPYqzVlL3r!b1 zJ^EeKyBiZ?^71j{(;v_IaDw4gfl}(!59nf27 zR6F)54vG%m*_RIxbcJM-mL0zV;12|R3bYRV z+FfMnCgXMe>nr{t7?ZGwChsz1;dt!HWmD38`q=kKpCftyx(Z&cfeXm(WKT2B8IqXPeN2jQ-m>e#~&m#yNZhufFk z8uoVv>4Fdy5t2)(

$%}B62yQMIMC(8#&?+Ipg0J#`0g&A=ar3vlHQB# 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 GXa5(I@E&IX diff --git a/tools/make_icons.py b/tools/make_icons.py index a29f4c6..58bac36 100644 --- a/tools/make_icons.py +++ b/tools/make_icons.py @@ -4,14 +4,17 @@ python3 tools/make_icons.py Writes static/icon-180.png (what iOS uses on the home screen) and -static/icon-512.png (Android / the web manifest): the white mark on a -transparent background, which iOS lays over black on the home screen. +static/icon-512.png (Android / the web manifest): the white mark on +the app's dark background color. iOS flattens a transparent PNG onto +white rather than black, which made the white-on-transparent mark +invisible on the home screen -- so the background needs to be baked +into the PNG itself. The PNGs are committed, so this only needs running if the logo changes. It rasterises with headless Chromium, which is a heavy thing to install for one job -- if you have librsvg to hand, this does the same: - rsvg-convert -w 512 -h 512 static/logo.svg -o static/icon-512.png + rsvg-convert -w 512 -h 512 --background-color '#0a0d14' static/logo.svg -o static/icon-512.png Otherwise: pip install playwright && playwright install chromium """ @@ -23,10 +26,11 @@ STATIC = Path(__file__).resolve().parent.parent / "static" LOGO = STATIC / "logo.svg" SIZES = (180, 512) MARGIN = 0.14 # breathing room, so iOS's rounded mask never clips it +BACKGROUND = "#0a0d14" # matches theme_color/background_color in the manifest PAGE = """ @@ -49,12 +53,12 @@ def main(): browser = p.chromium.launch(args=["--no-sandbox"]) for size in SIZES: inner = round(size * (1 - 2 * MARGIN)) - scratch.write_text(PAGE.format(size=size, inner=inner)) + scratch.write_text(PAGE.format(size=size, inner=inner, background=BACKGROUND)) page = browser.new_page(viewport={"width": size, "height": size}) page.goto(scratch.as_uri()) page.wait_for_timeout(120) # let the SVG paint target = STATIC / f"icon-{size}.png" - page.screenshot(path=target, omit_background=True) + page.screenshot(path=target) page.close() print(f"wrote {target} ({target.stat().st_size} bytes)") browser.close()