Funkuino ist eine Sammlung kleiner Python-Tools plus eine lokale Web-App, die den Weg vom Download bis zur laminierten Karte auf dem Gerät abdeckt:
./download holt Audio per yt-dlp direkt in die Bibliothekskonventionen: Alben mit nummerierten Tracks, Hörspiele zu einer Datei gemergt mit gesprochenem Titel-Intro. Cover werden bewusst nicht eingebettet (Start-Stottern), sondern separat für den Kartendruck gesichert. Im Studio (unten) ist optional ein Claude-Agent eingebettet, der URLs komplett selbständig einsortiert (Klassifizierung, Download, Benennung) und bei Unklarheiten nachfragt.
./sync spiegelt einen lokalen files/-Ordner rsync-artig über die HTTP-API aufs Gerät. Änderungserkennung über ein lokales Manifest (das Gerät liefert keine Dateigrößen), abbruchsicher, --delete mit Schutzvorkehrungen, NFC/NFD-Normalisierung für Umlaute, getrennte Manifeste pro Gerät (MAC-basiert).
./cards setzt die Cover als 6×6-cm-Karten randlos auf A4-PDFs mit Schnittmarken. Drucken, RFID-Tag hinten drauf, laminieren, schneiden. Ein Druck-Manifest sorgt dafür, dass ein einfaches ./cards nur Neues druckt, mit Undo.
./studio ist das Dashboard für alles: Pipeline-Status pro Karte (Download · Cover · Sync · Druck · Karte), effiziente Karten-Zuweisung durch Auflegen aufs Gerät + Klick auf die Zeile.
Nebenprodukt für alle, die selbst gegen die Geräte-API scripten: das CLAUDE.md im Repo dokumentiert die gesammelten Stolperfallen (mDNS-Kosten, SD-Writer-Wedging, FTP-Grenzen, NFC/NFD, PN5180-Analyse zu PR #444).
Entwickelt und getestet auf macOS (die gesprochenen Intros nutzen say), Python ≥ 3.11, MIT-Lizenz. Die Screenshots im Repo zeigen eine fiktive Demo-Bibliothek. Feedback und PRs gern.
Schick!
Hat ansatzweise Überschneidungsmengen mit 📗 ESPuino Mediahub (noch nicht komplett getestet), aber insgesamt einen anderen Ansatz/Fokus.
Drei Sachen:
a) Stelle am besten Dockerfile / docker-compose.yml auch bereit, so dass es auch auf einem Server im Hintergrund laufen kann (obgleich es natürlich praktisch ist, dass es auch lokal geht, wie du es beschrieben hast).
b) „Cover im Rückstau“ würde ich „Cover in Warteschlange“ nennen.
c) Überlege dir, ob du (sofern nicht bereits vorgesehen) die Möglichkeit einbindest, dass man mehrere ESPuinos verwalten kann. Passiert schon regelmäßig, dass Leute mehr als eine Complete ordern. EDIT: Sehe gerade „getrennte Manifeste pro Gerät“ => hast es also wohl schon berücksichtigt.
Die Bezeichnung ist geändert zu „noch nicht gedruckte Cover".
Docker stelle ich erstmal zurück. espuino.local löst im Container-Netz nicht auf (bräuchte host networking oder feste IP) und die gesprochenen Intros beim Hörspiel-Merge kommen von macOS say und hätten unter Linux keinen gleichwertigen Ersatz.
Stattdessen baue ich eine Mac-App, die man ohne Terminal und ohne Python-Setup nutzen kann.
Mehrere ESPuinos: Genau, die Sync-Manifeste sind schon pro Gerät (nach MAC), aber Studio spricht bisher immer nur mit einem. Ich baue gerade die zweite Kiste fürs zweite Kind, danach kommt die Geräteauswahl in der Oberfläche. Beide Geräte bekommen dieselbe Mediathek und dieselben Kartenzuordnungen. Auf der Karte ist ja etwas Bestimmtes aufgedruckt, das soll überall dasselbe abspielen, und auf die SD-Karten passt ohnehin mehr, als ich an Inhalten habe. Interessant ist dabei nur der Fall, dass ein Gerät gerade aus ist: eine Zuordnung, die ich an Gerät A mache, soll Gerät B nachträglich erreichen. Praktischerweise gibt GET /rfid alle Zuordnungen samt Details zurück, das lässt sich also sauber abgleichen, sobald das zweite Gerät wieder online ist.
Mac-App gebaut. Kann auf der GitHub Release Seite runtergeladen werden: Funkuino Studio App
Die App bringt alles mit, was sie braucht. Nur Claude Code muss installiert sein, wenn man die optionale Agenten-Funktion verwenden will. Rückmeldungen willkommen, insbesondere, ob die Ersteinrichtung auf einem fremden Rechner reibungslos funktioniert.
Apple Silicon only (macOS 14+). The bundled Python is single-architecture, so an Intel build has to be built on an Intel Mac — possible (make release in mac/), just not something I can produce here.
Ich habe Funkuino jetzt auf pypi veröffentlicht. Damit sollte eine Ausführung auf Linux und Windows (mit WSL) recht einfach möglich sein. Läuft dann allerdings nur im Browser, nicht als separate App. Siehe hier.