diff --git a/bin/effectsequencer b/bin/effectSequencer rename from bin/effectsequencer rename to bin/effectSequencer --- a/bin/effectsequencer +++ b/bin/effectSequencer @@ -1,84 +1,5 @@ -#!bin/python -""" -plays back effect notes from the timeline -""" - -from run_local import log -from twisted.internet import reactor -from light9.metrics import metrics, metricsRoute -from rdfdb.syncedgraph import SyncedGraph -from light9 import networking, showconfig -import optparse, sys, logging -import cyclone.web -from rdflib import URIRef -from light9.effect.sequencer import Sequencer, Updates -from light9.collector.collector_client import sendToCollector - -from light9 import clientsession - - -class App(object): - - def __init__(self, show, session): - self.show = show - self.session = session - - self.graph = SyncedGraph(networking.rdfdb.url, "effectSequencer") - self.graph.initiallySynced.addCallback(self.launch) - - def launch(self, *args): - self.seq = Sequencer( - self.graph, - lambda settings: sendToCollector( - 'effectSequencer', - self.session, - settings, - # This seems to be safe here (and lets us get from - # 20fpx to 40fpx), even though it leads to big stalls - # if I use it on KC. - useZmq=True)) +#!/bin/sh +pnpx vite -c light9/effect/sequencer/web/vite.config.ts & +pdm run uvicorn light9.effect.sequencer.service:app --host 0.0.0.0 --port 8213 --no-access-log +wait - self.cycloneApp = cyclone.web.Application(handlers=[ - (r'/()', cyclone.web.StaticFileHandler, { - "path": "light9/effect/", - "default_filename": "sequencer.html" - }), - (r'/updates', Updates), - metricsRoute(), - ], - debug=True, - seq=self.seq, - graph=self.graph, - # stats=self.stats - ) - reactor.listenTCP(networking.effectSequencer.port, self.cycloneApp) - log.info("listening on %s" % networking.effectSequencer.port) - - -if __name__ == "__main__": - parser = optparse.OptionParser() - parser.add_option( - '--show', - help='show URI, like http://light9.bigasterisk.com/show/dance2008', - default=showconfig.showUri()) - parser.add_option("-v", - "--verbose", - action="store_true", - help="logging.DEBUG") - parser.add_option("--twistedlog", - action="store_true", - help="twisted logging") - clientsession.add_option(parser) - (options, args) = parser.parse_args() - log.setLevel(logging.DEBUG if options.verbose else logging.INFO) - - if not options.show: - raise ValueError("missing --show http://...") - - session = clientsession.getUri('effectSequencer', options) - - app = App(URIRef(options.show), session) - if options.twistedlog: - from twisted.python import log as twlog - twlog.startLogging(sys.stderr) - reactor.run() diff --git a/light9/effect/sequencer/__init__.py b/light9/effect/sequencer/__init__.py new file mode 100644 diff --git a/light9/effect/sequencer.py b/light9/effect/sequencer/sequencer.py rename from light9/effect/sequencer.py rename to light9/effect/sequencer/sequencer.py diff --git a/bin/effectsequencer b/light9/effect/sequencer/service.py old mode 100755 new mode 100644 copy from bin/effectsequencer copy to light9/effect/sequencer/service.py --- a/bin/effectsequencer +++ b/light9/effect/sequencer/service.py @@ -1,4 +1,3 @@ -#!bin/python """ plays back effect notes from the timeline """ @@ -11,7 +10,7 @@ from light9 import networking, showconfi import optparse, sys, logging import cyclone.web from rdflib import URIRef -from light9.effect.sequencer import Sequencer, Updates +from light9.effect.sequencer.sequencer import Sequencer, Updates from light9.collector.collector_client import sendToCollector from light9 import clientsession diff --git a/light9/effect/sequencer.html b/light9/effect/sequencer/web/index.html rename from light9/effect/sequencer.html rename to light9/effect/sequencer/web/index.html diff --git a/light9/effect/sequencer/web/vite.config.ts b/light9/effect/sequencer/web/vite.config.ts new file mode 100644 --- /dev/null +++ b/light9/effect/sequencer/web/vite.config.ts @@ -0,0 +1,20 @@ +import { defineConfig } from "vite"; + +const servicePort = 8213; +export default defineConfig({ + base: "/effectSeequencer/", + root: "./light9/effect/sequencer/web", + publicDir: "../web", + server: { + host: "0.0.0.0", + strictPort: true, + port: servicePort + 100, + hmr: { + port: servicePort + 200, + }, + }, + clearScreen: false, + define: { + global: {}, + }, +});