Umbenennung: Audiofy heißt jetzt Playwish

Name, Seitentitel, Dienste (playwish-web, playwish-controller), Dienst-Benutzer
(playwish), Pfade (/opt/playwish, /usr/local/src/playwish), Vorlagen und
Repository-Adresse. „Audiofy“ war bereits von mehreren Produkten belegt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-17 20:27:59 +01:00
co-authored by Claude Opus 5.5
parent ca8db176ac
commit fc15f2b933
44 changed files with 218 additions and 218 deletions
+31 -31
View File
@@ -1,4 +1,4 @@
# Audiofy – Musikwünsche für Partys
# Playwish – Musikwünsche für Partys
Gäste scannen einen QR-Code und wünschen sich Songs. Ein **Player** spielt über Spotify
zufällige Titel aus einer Grund-Playlist – jeder N-te Titel ist ein Wunsch. Gibt es keine
@@ -14,10 +14,10 @@ Admin-Bereich, auch vom Handy.
## Aufbau
```
Gast-Handy ──HTTPS──▶ Server: Caddy → audiofy-web (FastAPI + SQLite)
Gast-Handy ──HTTPS──▶ Server: Caddy → playwish-web (FastAPI + SQLite)
▲ Player-API (Bearer-Token)
│ nur ausgehend vom Player
Player: raspotify (Spotify Connect) + audiofy-controller
Player: raspotify (Spotify Connect) + playwish-controller
└─▶ Bluetooth-Lautsprecher (BlueALSA) oder Kabel/HDMI/USB (ALSA)
```
@@ -39,7 +39,7 @@ Portfreigabe am Router.
## Spotify-App anlegen
Audiofy steuert Spotify über die offizielle Web API. Dafür braucht jede Installation eine
Playwish steuert Spotify über die offizielle Web API. Dafür braucht jede Installation eine
eigene, kostenlose „App“ im Spotify-Developer-Bereich. Gäste brauchen nichts davon.
**Was du brauchst:** das Spotify-Konto, das später abspielt – mit **Premium**.
@@ -51,7 +51,7 @@ Die Bezeichnungen im Dashboard können sich leicht ändern; sinngemäß:
| Feld | Eintrag |
|---|---|
| App name | z. B. `Audiofy` |
| App name | z. B. `Playwish` |
| App description | z. B. `Musikwünsche für meine Party` |
| Website | leer lassen |
| **Redirect URI** | **`http://127.0.0.1:8888/callback`** – genau so, dann „Add“ |
@@ -75,7 +75,7 @@ Die Bezeichnungen im Dashboard können sich leicht ändern; sinngemäß:
**Was der Development Mode bedeutet:** Neue Apps laufen im „Development Mode“. Dort gilt
(Stand 2026): Der App-Besitzer braucht Premium, nur eingetragene Konten dürfen die App
nutzen, die Suche liefert höchstens 10 Treffer, nur **eigene** Playlists sind lesbar, und
die Nutzung muss **nicht kommerziell** sein. Für Audiofy reicht das völlig – abgespielt
die Nutzung muss **nicht kommerziell** sein. Für Playwish reicht das völlig – abgespielt
wird nur über dein eigenes Konto.
**Typische Fehler beim Login**
@@ -97,23 +97,23 @@ wird nur über dein eigenes Konto.
**Per Einzeiler** – als Benutzer mit sudo-Rechten (oder als root) in einem Terminal:
```
curl -fsSL https://git.wind8000.de/0/audiofy/raw/branch/main/install/get.sh | bash -s -- server
curl -fsSL https://git.wind8000.de/0/audiofy/raw/branch/main/install/get.sh | bash -s -- player
curl -fsSL https://git.wind8000.de/0/playwish/raw/branch/main/install/get.sh | bash -s -- server
curl -fsSL https://git.wind8000.de/0/playwish/raw/branch/main/install/get.sh | bash -s -- player
```
Das Startskript installiert bei Bedarf `git`, holt Audiofy nach `/usr/local/src/audiofy` und
Das Startskript installiert bei Bedarf `git`, holt Playwish nach `/usr/local/src/playwish` und
startet das passende Install-Skript. Später aktualisieren: denselben Befehl mit `--update`
am Ende (`… | bash -s -- server --update`).
Vorsichtiger – erst ansehen, dann ausführen:
```
curl -fsSLO https://git.wind8000.de/0/audiofy/raw/branch/main/install/get.sh
curl -fsSLO https://git.wind8000.de/0/playwish/raw/branch/main/install/get.sh
less get.sh
bash get.sh server # bzw. player
```
**Oder von Hand:** Repository klonen (`git clone https://git.wind8000.de/0/audiofy.git`) und
**Oder von Hand:** Repository klonen (`git clone https://git.wind8000.de/0/playwish.git`) und
die Install-Skripte direkt starten:
**1. Server**
@@ -140,7 +140,7 @@ Spotify-Zugang und Playlist ab, installiert raspotify, koppelt auf Wunsch gleich
Bluetooth-Lautsprecher und richtet den Controller als Dienst ein. Danach folgt der
Spotify-Login für die Wiedergabe-Steuerung.
**3. Einmalig in der Spotify-App** das neue Gerät (Standard: „Audiofy“) auswählen – im selben
**3. Einmalig in der Spotify-App** das neue Gerät (Standard: „Playwish“) auswählen – im selben
Netz wie der Player. Damit speichert raspotify seine Anmeldung und ist nach jedem Neustart
von selbst wieder da.
@@ -151,9 +151,9 @@ einschalten und den QR-Code zeigen oder ausdrucken.
| Aufgabe | Befehl |
|---|---|
| Status | `systemctl status audiofy-web` (Server) · `systemctl status audiofy-controller raspotify` (Player) |
| Logs live | `journalctl -u audiofy-web -f` · `journalctl -u audiofy-controller -f` |
| Neustart | `sudo systemctl restart audiofy-web` bzw. `audiofy-controller` |
| Status | `systemctl status playwish-web` (Server) · `systemctl status playwish-controller raspotify` (Player) |
| Logs live | `journalctl -u playwish-web -f` · `journalctl -u playwish-controller -f` |
| Neustart | `sudo systemctl restart playwish-web` bzw. `playwish-controller` |
| Update | Einzeiler mit `--update` – oder im Repository `git pull && install/install-server.sh --update` bzw. `install/install-player.sh --update` |
`--update` ersetzt nur Code, Python-Umgebung und Dienstdatei; Konfiguration, Datenbank,
@@ -163,23 +163,23 @@ Caddy, Firewall und raspotify bleiben unverändert.
| Pfad | Inhalt |
|---|---|
| `/opt/audiofy/app` | Code (gehört root, der Dienst darf nur lesen) |
| `/opt/audiofy/.env` (Server) | Geheimnisse: Spotify, Admin-Passwort-Hash, Turnstile, `PLAYER_API_TOKEN` |
| `/opt/audiofy/data/audiofy.db` (Server) | Wünsche, Verlauf, Einstellungen |
| `/opt/audiofy/config/.env` (Player) | Geheimnisse: Spotify, `SERVER_URL`, `PLAYER_API_TOKEN`, Lautsprecher |
| `/opt/playwish/app` | Code (gehört root, der Dienst darf nur lesen) |
| `/opt/playwish/.env` (Server) | Geheimnisse: Spotify, Admin-Passwort-Hash, Turnstile, `PLAYER_API_TOKEN` |
| `/opt/playwish/data/playwish.db` (Server) | Wünsche, Verlauf, Einstellungen |
| `/opt/playwish/config/.env` (Player) | Geheimnisse: Spotify, `SERVER_URL`, `PLAYER_API_TOKEN`, Lautsprecher |
Die `.env`-Dateien gehören dem Dienst-Benutzer `audiofy` (Rechte 600). **Sichere sie an einem
Die `.env`-Dateien gehören dem Dienst-Benutzer `playwish` (Rechte 600). **Sichere sie an einem
sicheren Ort** (z. B. Passwort-Manager) – sie stehen bewusst nicht im Repository.
**Verwaltung** (interaktiv, im eigenen Terminal):
```
# Server: Admin-Passwort bzw. Turnstile-Schlüssel ändern
sudo -u audiofy /opt/audiofy/.venv/bin/python /opt/audiofy/app/verwaltung.py passwort --env /opt/audiofy/.env
sudo -u audiofy /opt/audiofy/.venv/bin/python /opt/audiofy/app/verwaltung.py turnstile --env /opt/audiofy/.env
sudo -u playwish /opt/playwish/.venv/bin/python /opt/playwish/app/verwaltung.py passwort --env /opt/playwish/.env
sudo -u playwish /opt/playwish/.venv/bin/python /opt/playwish/app/verwaltung.py turnstile --env /opt/playwish/.env
# Spotify-Login erneuern – Server bzw. Player
sudo -u audiofy /opt/audiofy/.venv/bin/python /opt/audiofy/app/auth.py --profil server --env /opt/audiofy/.env
sudo -u audiofy /opt/audiofy/.venv/bin/python /opt/audiofy/app/auth.py --profil player --env /opt/audiofy/config/.env
sudo -u playwish /opt/playwish/.venv/bin/python /opt/playwish/app/auth.py --profil server --env /opt/playwish/.env
sudo -u playwish /opt/playwish/.venv/bin/python /opt/playwish/app/auth.py --profil player --env /opt/playwish/config/.env
```
Danach den jeweiligen Dienst neu starten.
@@ -187,18 +187,18 @@ Danach den jeweiligen Dienst neu starten.
**Datenbank sichern** (Server):
```
sudo -u audiofy sqlite3 /opt/audiofy/data/audiofy.db ".backup /opt/audiofy/data/sicherung.db"
sudo -u playwish sqlite3 /opt/playwish/data/playwish.db ".backup /opt/playwish/data/sicherung.db"
```
## Server härten (empfohlen, von Hand)
Das Install-Skript ändert die SSH-Konfiguration bewusst **nicht** – damit sperrt man sich
leicht aus. Vorlage: `install/vorlagen/sshd-10-audiofy.conf` (anderer Port, nur Schlüssel,
leicht aus. Vorlage: `install/vorlagen/sshd-10-playwish.conf` (anderer Port, nur Schlüssel,
kein root, nur ein Admin-Benutzer). Vorgehen:
1. Eigenen Admin-Benutzer mit sudo anlegen, SSH-Schlüssel hinterlegen, Login testen.
2. Neuen Port in ufw **und** einer eventuellen Cloud-Firewall öffnen.
3. Vorlage ausgefüllt nach `/etc/ssh/sshd_config.d/10-audiofy.conf` legen, `sudo sshd -t`, `sudo systemctl restart ssh`.
3. Vorlage ausgefüllt nach `/etc/ssh/sshd_config.d/10-playwish.conf` legen, `sudo sshd -t`, `sudo systemctl restart ssh`.
4. **In einer zweiten Sitzung** testen – die alte bleibt offen, bis es klappt.
5. Erst dann den alten Port in ufw/Cloud-Firewall schließen und fail2ban auf den neuen Port umstellen.
@@ -209,7 +209,7 @@ kein root, nur ein Admin-Benutzer). Vorgehen:
| Keine Musik, Log: „Lautsprecher nicht verbunden“ | Lautsprecher einschalten – der Player verbindet ihn neu und startet die Musik von selbst. |
| Lautsprecher verbindet sich nicht mehr („Permission denied“) | Kopplung verloren. Im Admin unter Einstellungen → Lautsprecher neu suchen und verbinden (Lautsprecher im Kopplungsmodus). |
| „Gerät nicht gefunden“ | `systemctl status raspotify`. Nach einer Neuinstallation einmal in der Spotify-App das Gerät auswählen. |
| Admin: „Player offline“ | `systemctl status audiofy-controller`, Internet des Players prüfen. Die Musik läuft trotzdem mit der Playlist weiter. |
| Admin: „Player offline“ | `systemctl status playwish-controller`, Internet des Players prüfen. Die Musik läuft trotzdem mit der Playlist weiter. |
| Admin: „Grund-Playlist nicht lesbar“ | Nur eigene Playlists funktionieren (Spotify Development Mode). |
| Befehle „No active device“ | Spotify hatte kein aktives Gerät; „Play“ startet dann die Playlist auf dem Player. |
| Nach Neustart bleibt es still | Gewollt, wenn vorher pausiert oder Not-Aus aktiv war – im Admin „Play“ bzw. „Freigeben“. |
@@ -231,14 +231,14 @@ cd ../player && python3 -m venv .venv && .venv/bin/pip install -r requirements.t
Copyright © 2026 Dominic Alexander Windolph
Audiofy ist freie Software: Du kannst es unter den Bedingungen der **GNU General Public
Playwish ist freie Software: Du kannst es unter den Bedingungen der **GNU General Public
License**, wie von der Free Software Foundation veröffentlicht, weitergeben und/oder
verändern – entweder gemäß Version 3 der Lizenz oder (nach deiner Wahl) jeder späteren
Version. Der vollständige Lizenztext steht in [`LICENSE`](LICENSE).
Audiofy wird in der Hoffnung verbreitet, dass es nützlich ist, aber **ohne jede
Playwish wird in der Hoffnung verbreitet, dass es nützlich ist, aber **ohne jede
Gewährleistung** – sogar ohne die implizite Gewährleistung der Marktreife oder der
Eignung für einen bestimmten Zweck. Details stehen in der GNU General Public License.
Audiofy ist kein Produkt von Spotify und steht in keiner Verbindung zu Spotify AB.
Playwish ist kein Produkt von Spotify und steht in keiner Verbindung zu Spotify AB.
Spotify ist eine Marke der Spotify AB.