Seite 1 von 1

ScriptAPI und PythonAPI by TangoCash

Verfasst: Mi 11. Nov 2026, 23:16
von vanhofen
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:
  • 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.
Die Schicht liegt zwischen den Bindings und den GUI-Komponenten (CComponents). Sie umfasst rund 3.000 Zeilen in 17 Modulen: Fenster, Header, Text, Bild, Signalbox, Menü, Stringinput, Messagebox, Hintbox, Hint, Hourglass, Progresswindow, curl, Dateihelfer, Farben, Schriften/Zeichnen (neutrino) und Diverses (misc).

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.
Vorteile
  • 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.
Nachteile und Risiken
  • 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.
Für Plugin-Autoren
  • 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.
Ab morgen (12.11.2026) ist die neue Python-API mit im Image.

Vielen Dank an TangoCash. :kiss: