stream: add a synthwave favicon

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
nemunaire 2026-07-03 14:07:46 +08:00
commit 534ade0ba5
4 changed files with 63 additions and 0 deletions

View file

@ -2,5 +2,6 @@ FROM savonet/liquidsoap:v2.4.5
COPY radio.liq /etc/liquidsoap/radio.liq
COPY index.html /etc/liquidsoap/index.html
COPY favicon.svg /etc/liquidsoap/favicon.svg
CMD ["/etc/liquidsoap/radio.liq"]

52
stream/favicon.svg Normal file
View file

@ -0,0 +1,52 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64">
<defs>
<!-- Ciel synthwave : violet profond vers magenta -->
<linearGradient id="sky" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#1a1030"/>
<stop offset="1" stop-color="#3a1145"/>
</linearGradient>
<!-- Soleil dégradé jaune / rose néon -->
<linearGradient id="sun" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#ffe15a"/>
<stop offset="0.5" stop-color="#ff5c8a"/>
<stop offset="1" stop-color="#9b4dff"/>
</linearGradient>
<linearGradient id="grid" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#9b8cff" stop-opacity="0"/>
<stop offset="1" stop-color="#ff4fd8" stop-opacity="0.9"/>
</linearGradient>
<!-- Masque : bandes horizontales qui tranchent le soleil -->
<clipPath id="round"><rect x="0" y="0" width="64" height="64" rx="12"/></clipPath>
</defs>
<g clip-path="url(#round)">
<rect width="64" height="64" fill="url(#sky)"/>
<!-- Soleil avec les stries synthwave classiques -->
<g>
<circle cx="32" cy="27" r="16" fill="url(#sun)"/>
<g fill="#1a1030">
<rect x="14" y="30" width="36" height="1.6"/>
<rect x="14" y="33.5" width="36" height="2.2"/>
<rect x="14" y="37.5" width="36" height="3"/>
<rect x="14" y="42" width="36" height="4"/>
</g>
</g>
<!-- Horizon néon -->
<rect x="0" y="45" width="64" height="1.4" fill="#ff4fd8"/>
<!-- Grille en perspective -->
<g stroke="url(#grid)" stroke-width="1">
<line x1="32" y1="46" x2="-8" y2="66"/>
<line x1="32" y1="46" x2="8" y2="66"/>
<line x1="32" y1="46" x2="24" y2="66"/>
<line x1="32" y1="46" x2="40" y2="66"/>
<line x1="32" y1="46" x2="56" y2="66"/>
<line x1="32" y1="46" x2="72" y2="66"/>
<line x1="0" y1="50" x2="64" y2="50"/>
<line x1="0" y1="55" x2="64" y2="55"/>
<line x1="0" y1="61" x2="64" y2="61"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2 KiB

View file

@ -4,6 +4,7 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title id="pageTitle"></title>
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
<style>
:root { color-scheme: dark; }
* { box-sizing: border-box; }

View file

@ -206,6 +206,7 @@ output.harbor(
# --- Page web et API de lecture (mêmes port/harbor que le flux) ---
home_html = file.contents("/etc/liquidsoap/index.html")
favicon_svg = file.contents("/etc/liquidsoap/favicon.svg")
harbor.http.register(
port=8000, method="GET", "/",
@ -215,6 +216,14 @@ harbor.http.register(
end
)
harbor.http.register(
port=8000, method="GET", "/favicon.svg",
fun(_, resp) -> begin
resp.content_type("image/svg+xml; charset=utf-8")
resp.data(favicon_svg)
end
)
harbor.http.register(
port=8000, method="GET", "/nowplaying",
fun(_, resp) -> begin