ScriptAPI und PythonAPI by TangoCash
Verfasst: Mi 11. Nov 2026, 23:16
Die neue ScriptAPI in ni-neutrino
Mit dem Merge aus TangoCashs tangos-ni ist eine neue Schicht in den Quelltext gekommen: src/scriptapi/. Hier eine Übersicht, was sie macht und was das für uns bedeutet.
Was ist die ScriptAPI?
Bisher hat die Lua-Anbindung (src/gui/lua) alles selbst erledigt: Lua-Tabelle lesen, Fenster, Menü oder Messagebox bauen, Farben auflösen, Downloads per curl ausführen und so weiter. Die ScriptAPI trennt das in zwei Teile:
Was ändert sich dadurch?
Vielen Dank an TangoCash.
Mit dem Merge aus TangoCashs tangos-ni ist eine neue Schicht in den Quelltext gekommen: src/scriptapi/. Hier eine Übersicht, was sie macht und was das für uns bedeutet.
Was ist die ScriptAPI?
Bisher hat die Lua-Anbindung (src/gui/lua) alles selbst erledigt: Lua-Tabelle lesen, Fenster, Menü oder Messagebox bauen, Farben auflösen, Downloads per curl ausführen und so weiter. Die ScriptAPI trennt das in zwei Teile:
- Die Anbindung (Binding) liest nur noch die Parameter in der Syntax ihrer Sprache und reicht sie weiter.
- Die ScriptAPI baut daraus das eigentliche Widget bzw. führt die Arbeit aus. Sie weiß nicht, welche Sprache gefragt hat.
Was ändert sich dadurch?
- Python als zweite Skriptsprache. Neben Lua gibt es jetzt ein Python-Binding (src/gui/python, Python-API 1.0) mit eigenem Plugin-Typ, eigenem Server-Socket (pyserver/pyclient, analog zu luaserver/luaclient) und drei Beispiel-Plugins (apiinfo, apitest, replay). Die NI-Images werden mit Python-Unterstützung gebaut. Ausnahme: Auf Coolstream-Boxen ist Python nicht verfügbar, dort bleibt es bei Lua.
- Das Lua-Binding ist deutlich schlanker. Rund 1.370 Zeilen sind dort entfallen, etwa 680 hinzugekommen. Die Logik steht jetzt einmal in der ScriptAPI statt je einmal pro Sprache.
- Die Lua-API-Version ist unverändert. Bestehende Lua-Plugins sollen ohne Anpassung weiterlaufen.
- Kleine Verhaltensänderungen bei Lua, weil beide Sprachen jetzt denselben Code nutzen:
- Der Header eines Skript-Fensters wertet jetzt auch Icon und Buttons aus; das Lua-Binding hatte beides bisher verworfen.
- strSub fängt eine Position hinter dem Textende ab. Vorher konnte das Neutrino beenden.
- Die mitgelieferten Plugins sind umgezogen: data/luaplugins heißt jetzt data/plugins/lua, daneben liegt data/plugins/python. Das Installationsziel für Lua-Plugins bleibt gleich.
- Ein Prüfskript wacht über die Trennung: src/scriptapi/check-scriptapi.sh läuft beim Bauen mit und schlägt fehl, wenn ein Binding wieder eigene Widget-Logik mitbringt oder ein Modul nur auf einer Seite umgestellt ist.
- Plugins lassen sich jetzt auch in Python schreiben. Wer Python besser kennt als Lua, kann damit Fenster, Menüs, Messageboxen, Downloads usw. genauso ansprechen.
- Gleiches Verhalten in beiden Sprachen. Ein Menü oder eine Messagebox verhält sich in Lua und Python identisch, weil dahinter derselbe Code steht.
- Fehler werden nur einmal behoben. Ein Fix in der ScriptAPI gilt sofort für beide Bindings.
- Weniger doppelter Code. Beispiel curl: Die 42 libcurl-Optionen standen vorher in beiden Bindings, jetzt einmal.
- Weitere Sprachen wären einfacher. Ein neues Binding muss nur noch seine Syntax lesen.
- Das Lua-Binding wurde in großen Teilen umgeschrieben. Fehler in bestehenden Lua-Plugins sind damit möglich und zeigen sich erst im Betrieb. Bitte Auffälligkeiten melden.
- Python-Plugins laufen nicht auf jeder Box. Auf Coolstream-Boxen fehlt Python. Ein Plugin, das überall laufen soll, muss weiterhin in Lua geschrieben sein.
- Python kostet Platz und Pflege. Der Interpreter muss mit ins Image, und das Binding ist mit gut 8.000 Zeilen größer als die ScriptAPI selbst.
- Eine zusätzliche Schicht. Wer eine Lua-Funktion ändern will, muss jetzt an zwei Stellen schauen: im Binding und in der ScriptAPI.
- Noch nicht alles ist umgestellt. configfile, video und threads liegen weiterhin direkt in den Bindings; das Prüfskript führt sie als bekannte Ausnahmen.
- Lua bleibt die Sprache, die auf allen NI-Boxen läuft.
- Python ist eine zusätzliche Möglichkeit für alle Boxen außer Coolstream.
- Die drei Beispiel-Plugins unter data/plugins/python zeigen, wie die Python-API benutzt wird.
Vielen Dank an TangoCash.