Zwei Stellen, an denen die Marke bisher fehlte. Willkommens-Karte: Das Wasserzeichen war der Markenname als Text mit 5 % Deckkraft — jetzt der Katzenkopf. Die Datei wird einmal beim Start gelesen statt bei jedem Beitritt, und fehlt sie, rendert die Karte wie bisher ohne Wasserzeichen. Der Schalter heisst entsprechend "Logo im Hintergrund". Link-Vorschau: og:image war nur gesetzt, wenn ein Devlog einen Screenshot hatte. Startseite, Roadmap, Funktionen und jedes Devlog ohne Bild kamen in Discord als graue Textzeile. Jetzt faellt alles ohne eigenes Bild auf og-default.png zurueck (1200x630, Lockup auf Schwarz mit Akzentstreifen), und twitter:card ist durchgehend summary_large_image. Die Laufzeit-Datei liegt unter src/bot/assets/, nicht in docs/ — das Dockerfile kopiert nur src/ und frontend/dist/. Geprueft: librsvg zeichnet das eingebettete <image> wirklich (42726 Pixel unterscheiden sich gegen eine Fassung ohne), das OG-Bild landet im dist. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Marken-Dateien
Alles hier stammt aus einem einzigen Original: dem D4RKST3R-Logo in 2048×2048 mit Transparenz (Katzenkopf über dem Schriftzug-Banner).
Was hier liegt
| Datei | Was | Wofür |
|---|---|---|
lockup.png |
volles Logo, auf den Inhalt beschnitten | Kopfzeilen, Discord-Banner, OG-Bilder |
mark.png |
nur der Katzenkopf, 1024×1024 | alles Quadratische — Favicon, Avatar |
build.py |
erzeugt beide plus die abgeleiteten Icons | Neubau nach Logo-Änderung |
Warum zwei Fassungen
Das volle Lockup ist bei 16 oder 32 Pixeln unbrauchbar — der Schriftzug wird zu
einem orangen Balken. Für Favicon, Avatar und Navbar-Logo wird deshalb nur der
Kopf verwendet, mit Ohrenspitzen und etwas Schulter. Der Zuschnitt steht in
build.py als KOPF und wurde von Hand gegen drei Varianten geprüft: enger
schneidet die Ohren ab, weiter fängt schon den Banner ein.
Warum SVG mit eingebettetem PNG
Gitea will logo.svg und favicon.svg — echte SVG-Dateien. Das Original ist
aber eine Rastergrafik mit Verläufen und Schattierung; nachvektorisieren würde
sie matschig machen. Deshalb wird das PNG in eine SVG-Hülle gelegt
(<svg><image href="data:image/png;base64,…"/></svg>). Das ist gültiges SVG,
Gitea nimmt es an, und es sieht aus wie das Original.
Die eingebettete Auflösung ist bewusst klein gehalten: das Navbar-Logo hängt an jedem Seitenaufruf, 192 px reichen für eine Darstellung mit rund 30 px.
Wohin die erzeugten Dateien gehen
build.py schreibt direkt an beide Ziele:
A:/eco/Gitea/data/gitea/public/assets/img/
logo.svg Navbar + App-Icon
favicon.svg Browser-Tab
favicon.png Rückfallebene, die Gitea als „alternate icon" setzt
apple-touch-icon.png iOS-Lesezeichen (180 px, deckend)
avatar_default.png Standardavatar für Konten ohne Bild (512 px)
frontend/public/
favicon.svg
apple-touch-icon.png
og-default.png Vorschaubild geteilter Links, 1200×630
src/bot/assets/
mark-card.png Wasserzeichen der Willkommens-Karte
src/bot/assets/ statt docs/ ist Absicht: das Dockerfile kopiert nur src/
und frontend/dist/, alles andere existiert im Container nicht.
Die Icons auf dunklem Grund sind deckend (#0a0a0a, abgerundet) — iOS legt
hinter transparente Lesezeichen sonst Schwarz oder Weiß, je nach Laune, und die
Katze ist selbst fast schwarz.
Neu bauen
python docs/brand/build.py
Danach für Gitea docker restart gitea — die Dateien unter custom/ werden
beim Start eingelesen. Fürs Frontend reicht der normale Build.