# Flaro-Server Ein Medienserver, der dieselben Dinge kann wie Jellyfin — und zwei, die dort nicht gehen. **Stand: Stufe 3 von 5.** Benutzer, Anmeldung, Einrichtung, Bestand einlesen, Metadaten — und **Download mit allen Ton- und Textspuren**, der Grund für dieses Projekt. Was noch fehlt: Streamen mit Umrechnen (HLS), Fortschritt und Gesehen-Status, Live TV. Der Entwurf samt Begründungen steht in [`docs/superpowers/specs/2026-10-03-flaro-server-design.md`](../docs/superpowers/specs/2026-10-03-flaro-server-design.md). ## Warum **Download mit allen Tonspuren.** Jellyfins Transcode-Endpunkt bildet eine Tonspur je Sitzung ab; was offline landet, ist einspurig, und welche Spur es ist, entscheidet der Server. Einmal war es die Audiodeskription — drei Gigabyte Mobilfunk für eine Datei, die niemand hören wollte. **Fortschritt ohne Schwelle.** Jellyfin merkt sich unterhalb eines Mindestanteils gar nichts. Wer zehn Minuten sieht und abbricht, findet beim nächsten Mal keinen Anknüpfungspunkt. ## Betreiben ```bash cp docker-compose.example.yml docker-compose.yml # Pfade anpassen — jeder darin ist ein Beispiel, keiner stimmt bei dir. docker compose up -d ``` Dann `http://localhost:8080` öffnen; der Einrichtungsassistent legt das erste Administratorkonto an. Danach verschliesst sich dieser Weg von selbst. ### Einstellungen | Variable | Bedeutung | Voreinstellung im Image | |---|---|---| | `FLARO_DATA` | Datenbank und Einstellungen. **Das Einzige, was gesichert werden muss.** | `/config` | | `FLARO_CACHE` | Bilder und Zwischenstände. Darf verlorengehen. | `/cache` | | `FLARO_TRANSCODE` | Kratzplatz fürs Umrechnen. Am besten auf eine SSD. | `/transcode` | | `ASPNETCORE_URLS` | Worauf gelauscht wird | `http://+:8080` | | `TZ` | Zeitzone | `UTC` | | `FLARO_RATELIMIT_SIGNIN` | Anmeldeversuche je Minute und Adresse | `10` | | `FLARO_RATELIMIT_POLLING` | Nachfragen je Minute und Adresse | `120` | **Medienpfade stehen hier nicht.** Sie werden in der Oberfläche als Bibliotheken angelegt und liegen in der Datenbank — sonst müsste der Container neu starten, um eine Bibliothek hinzuzufügen. ### Rechte Das Image läuft als `1000:1000`, **nicht als root**. Gehören die eingehängten Verzeichnisse jemand anderem, trage in der Compose-Datei `user: ":"` ein (`id -u` und `id -g` auf dem Wirt sagen, welche) oder übereigne sie mit `chown`. Stimmt etwas nicht, bricht der Server **beim Start** ab und nennt Variable, Pfad, seine eigene Kennung und den nächsten Schritt. Das ist Absicht: ohne diese Meldung stünde dort nur „unable to open database file". ### Hardware fürs Umrechnen `/dev/dri` durchreichen — VAAPI deckt Intel wie AMD ab. Fehlt es, rechnet Flaro in Software; das ist langsamer, aber es läuft. **Zum blossen Umpacken wird gar keine Hardware gebraucht**, und das ist der Weg, der den meisten Beständen hilft. ## Weboberfläche Der Server liefert sie selbst aus, unter derselben Adresse wie die Schnittstelle. Kein Proxy davor, kein CORS, kein Mischmasch aus http und https. Gebaut wird sie im Image mit; wer nur an ihr arbeitet, nimmt Vite: ```bash cd ../web/app npm install FLARO_SERVER=http://localhost:18080 npm run dev # auf http://localhost:5173 ``` Vite reicht `/api` an den Server weiter, damit die Herkunft dieselbe bleibt wie im Betrieb. **Der Zugang liegt in einem Cookie, nicht nur in der Kopfzeile.** Ein ``, ein `