Files
ThreadNetWiki/betrieb/element-customization.md
T

159 lines
8.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: Element Customization
description: Themes, Desktop-Apps, Admin
published: true
date: 2026-08-13T18:04:24.484Z
tags:
editor: markdown
dateCreated: 2026-08-13T18:04:24.484Z
---
**Status**: ✅ Vollständig deployed
**Domains**: `axion1337.chat` (Web), `/docs/setup` (Scripts)
## 1. Custom Themes (17 Stück)
| Theme | Art | Akzent | Grundton |
|---|---|---|---|
| aXion1337 Dark true | dunkel | `#ffaf0f` | `—` |
| Deep Purple | dunkel | `#6503b3` | `#181b21` |
| Discord Dark | dunkel | `#747ff4` | `#36393f` |
| Electric Blue | **hell** | `#3596fc` | `#ffffff` |
| Everforest dark hard | dunkel | `#a7c080` | `#2b3339` |
| aXion1337 Dark | dunkel | `#bd93f9` | `#282828` |
| aXion1337 Light | **hell** | `#8f3f71` | `#fbf1c7` |
| Ocean Depths | dunkel | `#2ec4b6` | `#12303f` |
| Sunset Boulevard | dunkel | `#ff6b6b` | `#452133` |
| Forest Canopy | dunkel | `#7fb069` | `#22372b` |
| Modern Minimalist | **hell** | `#3d5a80` | `#ffffff` |
| Golden Hour | dunkel | `#d4a017` | `#3f2f1f` |
| Arctic Frost | **hell** | `#3b9ec7` | `#ffffff` |
| Desert Rose | **hell** | `#c08497` | `#fdfaf9` |
| Tech Innovation | dunkel | `#00e5ff` | `#161d29` |
| Botanical Garden | **hell** | `#4c9a5d` | `#ffffff` |
| Midnight Galaxy | dunkel | `#b388ff` | `#1c1440` |
**Konfiguration**: `apps/production/custom-configs/element-values.yaml`
(Schlüssel `setting_defaults.custom_themes` — JSON innerhalb der ConfigMap).
**Anwendung (User)**: Settings → Appearance → Colour theme
### Hinweise zur Pflege
- **`aXion1337 Dark` ist Gruvbox Dark** — Grundtöne, Textfarben und die acht
`username-colors` sind die Gruvbox-Palette. **`aXion1337 Light` ist das exakte
helle Gegenstück** (Gruvbox Light): gleiche Rollenverteilung, gleiche
Akzentfamilie, nur die Helligkeitsachse gespiegelt. Wer eins ändert, sollte das
andere mitziehen.
- Die zehn Paletten von *Ocean Depths* bis *Midnight Galaxy* nutzen einen
einheitlichen Schlüsselsatz (24 Farben inkl. `username-colors`) und sind dadurch
untereinander vergleichbar; ältere Themes haben teils nur 316 Schlüssel und
erben den Rest vom Element-Default.
- ⚠️ **Beim Bearbeiten der ConfigMap niemals die YAML neu serialisieren.** Der
Themes-Block ist JSON innerhalb von YAML; ein Re-Dump zerstört Formatierung und
Kommentare (real passiert am 2026-07-30). Nur textuell ergänzen und danach beides
prüfen — YAML parsen **und** den JSON-Block parsen.
- Nach jeder Änderung muss die **ConfigMap-Prüfsumme** mitgezogen werden, sonst
rotiert der Pod nicht sauber (Fallstrick vom 2026-08-01).
## 2. Desktop-Setup-Scripts
| System | Datei |
|--------|-------|
| Windows | `element-setup-windows.cmd` (Doppelklick) |
| macOS | `element-setup-macos.command` (Doppelklick) |
| Linux | `element-setup-linux.sh` (bash) |
**Was die Scripts tun**:
1. config.json erstellen mit `configUrl: "https://axion1337.chat/config.json"`
2. Element installieren (WinGet / Homebrew / apt/dnf/pacman)
3. Element starten (auto-config laden)
**Download**: `https://axion1337.chat/docs/setup/`
## 3. Element Admin-Panel
**URL**: `https://admin.axion1337.chat`
- User verwalten
- Room durchsuchen
- Server-Statistiken
**Konfiguration**: `apps/production/element-server-suite.yaml` (ESS Chart)
## 4. Element Call Fork (Video/Audio-Qualität)
**Status**: ✅ Deployed (2026-07-28, Closes Issue #8)
- Fork: `rohana.axion1337.de/sorb/threadnet-call` (basiert auf `emmick4/element-call:livekit`,
enthält den noch nicht gemergten Upstream-PR element-hq/element-call#3736 mit
config-driven `media_quality` — kein Custom-Code nötig)
- Defaults angehoben: Kamera bis **1440p/60fps** (~8 Mbps), Screen-Share **1440p/30fps**
(~6 Mbps). Das sind Startwerte, keine harten Limits — Nutzer können in Settings weiter
hochdrehen.
- **Incident (2026-07-28)**: Erster Versuch mit erzwungenem `video_codec: vp9` hat Calls
komplett kaputt gemacht (kein Bild/Ton). Sofort zurückgerollt. Vermutete Ursache: LiveKit
nutzt für vp9/av1 SVC statt klassischem Simulcast, der Fork-Code setzt aber immer
Simulcast-Layer — Code-Fix nötig, bevor vp9 erneut versucht wird (Backlog).
- **720p-Zwischen-Layer ergänzt** — ohne eigene `simulcast_layers`-Definition fiel die
Übertragung bei kleinsten Netzwerkschwankungen direkt von 1440p auf blockiges 360p.
- **H.264 statt VP8** (2026-07-28) — nutzt wie VP8 klassisches Simulcast (kein SVC-Risiko),
zusätzlich auf vielen Geräten (v.a. iOS/Safari) hardwarebeschleunigt. Live verifiziert:
7 von 8 Video-Tracks über H.264, 1 sauberer Fallback auf VP8. Deployed als
`v0.2.3-elementcall-h264`.
- Rauschunterdrückung: clientseitige WebRTC-Standardtoggles (Echo/Noise/Gain), passend zu
LiveKits eigener Empfehlung für Mensch-zu-Mensch-Calls. Bewusst **kein** server-seitiges
ML-Noise-Cancellation (siehe `docs/TASKS.md` Backlog).
- Deployt als `rohana.axion1337.de/sorb/threadnet-web:v0.2.0-elementcall-mediaquality` — nur
der `/app/widgets/element-call/`-Ordner im bestehenden `v0.1.0`-Image ausgetauscht, da
`ThreadNet-Web` einen vorbestehenden Build-Bug hat (siehe unten).
- Config live prüfbar: `https://axion1337.chat/widgets/element-call/config.json`
**Update 2026-07-28 (Issue #12) — Full-Rebuild-Blocker behoben**: Der oben beschriebene
Workaround (nur den `widgets/element-call/`-Ordner patchen) war nötig, weil `ThreadNet-Web`
komplett neu gebaut nicht funktionierte. Drei Bugs gefunden und gefixt:
1. 7 Skripte nicht ausführbar committet (644 statt 755) - `docker-link-repos.sh`,
`docker-package.sh` + 5 weitere, betraf auch die eigenen GitHub-Actions-Workflows des Forks.
2. `matrix-js-sdk#develop`-Pin war auf einen veralteten Commit resolved (fehlte
`src/oidc/authorize.ts`). Der aktuelle develop-HEAD wäre noch schlimmer gewesen - dort
wurde der komplette `src/oidc/`-Ordner zu `src/oauth/` umbenannt, mit geänderter API
(`generateOidcAuthorizationUrl`/`completeAuthorizationCodeGrant`/`OidcError` existieren
so nicht mehr). Stattdessen auf `d19cb751` gepinnt - den letzten Commit vor diesem
Rename, verifiziert dass Datei+API exakt passen.
3. **Gefunden**: `package.json`/`webpack.config.ts` referenzierten noch upstream
`@element-hq/element-call-embedded` statt unseres eigenen Forks - ein Full-Rebuild hätte
bisher alle Fork-Anpassungen stillschweigend verworfen. Umgestellt auf
`@sorb/threadnet-call-embedded@0.19.2-threadnet.5`.
Verifiziert mit einem echten, vollständigen `docker build` aus frischem Klon (kein Cache) -
erst bei 3.8GB Docker-RAM an OOM gescheitert, nach Erhöhung auf 7.75GB sauber durchgelaufen.
Gebautes Image enthält nachweislich unseren Fork (deutsche Übersetzung `Kameraqualität` im
Bundle gefunden). Produktivumgebung bleibt vorerst beim bestehenden Patch-Image - der
Full-Rebuild-Prozess ist jetzt nur *möglich*, nicht automatisch scharf geschaltet.
**Update 2026-07-28 (später) — Video-Tab statt Developer-Mode**: Kamera-/Screen-Share-
Qualitätseinstellungen waren im Upstream-PR #3736 hinter einem "Developer Mode"-Schalter
versteckt - in den regulären "Video"-Settings-Tab verschoben, für alle Nutzer sichtbar.
Deutsche Übersetzungen ergänzt. Codec-Dropdown auf die tatsächlich von der SFU akzeptierten
Codecs beschränkt (VP8/H.264/H.265).
**Update 2026-07-29 — VP9/AV1 live getestet, zurückgerollt (Issue #11)**: SFU-Codec-Freigabe
+ Dropdown-Wiederfreischaltung getestet. Trotz echter Auswahl auf Safari und Desktop-Firefox
(frischer Rejoin) fiel VP9 immer automatisch auf VP8 zurück. SFU-Logs zeigten: die eigene
Codec-Freigabe kam serverseitig nie in der aktiven `enabledPublishCodecs`-Liste an - Ursache
nicht abschließend geklärt (möglicher Zusammenhang: `sfu.additional` ersetzt die Chart-eigene
`config-overrides.yaml` statt sie zu ergänzen). Komplett zurückgerollt. Details: Issue #11.
## Dateien
| Datei | Ort |
|-------|-----|
| Custom Themes | `element-values.yaml` ConfigMap |
| Setup-Scripts | `element-web-docs-configmap.yaml` |
| Docs Server | `element-web-docs-server.yaml` (nginx) |
| Ingress | `apex-ingress.yaml` (`/docs/setup/` route) |
---
**Weitere Details**: Siehe Kapitel 4.