├── .env ├── .eslintrc.js ├── .github └── workflows │ ├── deploy.app.yaml │ ├── deploy.docs.yaml │ └── release.yaml ├── .gitignore ├── COPYING ├── CREDITS.html ├── README.md ├── docs ├── developer │ ├── core │ │ ├── assets │ │ │ └── img │ │ │ │ ├── asls-logo.png │ │ │ │ └── asls.logo.blue.only.png │ │ └── docma.json │ └── ui │ │ └── .storybook │ │ ├── main.js │ │ ├── manager-head.html │ │ ├── manager.js │ │ ├── preview-head.html │ │ ├── preview.js │ │ ├── preview.js.save │ │ ├── static │ │ └── images │ │ │ └── asls.logo.white.png │ │ └── theme.asls.js └── manual │ ├── .vitepress │ ├── config.js │ └── theme │ │ ├── components │ │ └── video.vue │ │ ├── custom.css │ │ ├── global.css │ │ └── index.js │ ├── index.md │ ├── interface │ ├── grouppool │ │ └── index.md │ ├── modifier │ │ └── index.md │ ├── patchbay │ │ └── index.md │ ├── toolbar │ │ └── index.md │ └── visualizer │ │ └── index.md │ ├── introduction │ ├── index.md │ ├── installation.md │ ├── license.md │ └── overview.md │ ├── modifiers │ ├── chase │ │ └── index.md │ ├── group │ │ └── index.md │ └── universe │ │ └── index.md │ ├── public │ ├── ASLSlogo.png │ ├── UI.png │ ├── __favicon.img │ ├── animated.gif │ ├── animated.webm │ ├── asls-logo.png │ ├── asls.logo.blue.only.png │ ├── asls.logo.white.only.png │ ├── asls.logo.white.png │ ├── hero.png │ ├── interface │ │ ├── chase_idle.png │ │ ├── chase_playing.png │ │ ├── chase_playing.webm │ │ ├── group-pool_modulate-channels_new.png │ │ ├── group-pool_new.png │ │ ├── group_pool.webm │ │ ├── group_pool_add_popup.webm │ │ ├── group_pool_chasepool.webm │ │ ├── modifier_chase.webm │ │ ├── modifier_chase_timeline_widget.webm │ │ ├── modifier_group.webm │ │ ├── modifier_group_cue-settings_widget.webm │ │ ├── modifier_group_cuepool_popup_add.webm │ │ ├── modifier_group_cuepool_widget.webm │ │ ├── modifier_group_cuepool_widget_add.webm │ │ ├── modifier_group_cuepool_widget_edit.webm │ │ ├── modifier_group_cuepool_widget_play.webm │ │ ├── modifier_group_effect-tool_widget.webm │ │ ├── modifier_group_fade-editor_widget.webm │ │ ├── modifier_group_fixture-channels_widget.webm │ │ ├── modifier_group_scene-fixtures_widget.webm │ │ ├── modifier_group_settings_widget.webm │ │ ├── modifier_universe.webm │ │ ├── modifier_universe_2.webm │ │ ├── modifier_universe_3.webm │ │ ├── modifier_universe_4.webm │ │ ├── modifier_universe_colorpicker_widget.webm │ │ ├── modifier_universe_fixture_channels_widget.webm │ │ ├── modifier_universe_fixture_settings_widget.webm │ │ ├── modifier_universe_fixturepool_select_ctrl_widget.webm │ │ ├── modifier_universe_fixturepool_widget_filter.webm │ │ ├── modifier_universe_fixturepool_widget_select.webm │ │ ├── modifier_universe_pantilt_widget.webm │ │ ├── modifier_universe_settings_widget.webm │ │ ├── patch_bay.png │ │ ├── patch_bay.webm │ │ ├── patch_bay_add_fixture.png │ │ ├── patch_bay_delete_fixture.png │ │ ├── patch_bay_filtered.png │ │ ├── patch_bay_selected.png │ │ ├── patch_bay_selected_grouped.png │ │ ├── patch_bay_unfolded.png │ │ ├── toolbar.png │ │ ├── toolbar.webm │ │ ├── toolbar_nav.png │ │ ├── toolbar_nav_edit.png │ │ ├── toolbar_nav_edit_redo.png │ │ ├── toolbar_nav_edit_undo.png │ │ ├── toolbar_nav_file.png │ │ ├── toolbar_nav_file_export.png │ │ ├── toolbar_nav_file_load.png │ │ ├── toolbar_nav_file_new.png │ │ ├── toolbar_nav_file_save.png │ │ ├── toolbar_nav_preferences.png │ │ ├── toolbar_nav_preferences_fixturelib.png │ │ ├── toolbar_nav_preferences_io.png │ │ ├── toolbar_nav_preferences_visualizer.png │ │ ├── visualizer.webm │ │ ├── visualizer_controls_discrete.webm │ │ ├── visualizer_controls_rotate.webm │ │ └── visualizer_controls_translate.webm │ ├── overview.webm │ ├── screenshot.png │ ├── studio_standalone_logo.png │ └── studio_standalone_logo_dark.png │ ├── vite.config.js │ └── workflow │ ├── effects │ └── index.md │ ├── environment │ └── index.md │ ├── grouping │ └── index.md │ ├── patching │ └── index.md │ ├── scenes │ └── index.md │ └── triggering │ └── index.md ├── index.html ├── jsconfig.json ├── package-lock.json ├── package.json ├── public ├── demo │ ├── images │ │ ├── asls.png │ │ ├── asls2.png │ │ ├── blank.png │ │ └── blank2.png │ └── showfiles │ │ ├── blank.showfile.json │ │ └── demo.showfile.json ├── docs │ └── images │ │ ├── asls.logo.blue.only.png │ │ └── asls.logo.white.png ├── fixtures │ ├── 5star-systems │ │ └── spica-250m.json │ ├── README.md │ ├── abstract │ │ └── twister-4.json │ ├── acoustic-control │ │ └── par-180-cob-3in1.json │ ├── adb │ │ ├── alc4.json │ │ ├── europe-105.json │ │ └── warp-m.json │ ├── afx │ │ └── lmh460z.json │ ├── alien-pro │ │ └── alien-s.json │ ├── american-dj │ │ ├── auto-spot-150.json │ │ ├── boom-box-fx2.json │ │ ├── cob-cannon-wash.json │ │ ├── crazy-pocket-8.json │ │ ├── dekker-led.json │ │ ├── dotz-par.json │ │ ├── encore-profile-1000-ww.json │ │ ├── flat-par-qa12xs.json │ │ ├── fog-fury-jett-pro.json │ │ ├── galaxian-3d.json │ │ ├── illusion-dotz-4-4.json │ │ ├── inno-pocket-beam-q4.json │ │ ├── inno-pocket-fusion.json │ │ ├── mega-bar-50rgb-rc.json │ │ ├── mega-bar-50rgb.json │ │ ├── mega-bar-rgba.json │ │ ├── mega-hex-par.json │ │ ├── mega-tripar-profile-plus.json │ │ ├── mega-tripar-profile.json │ │ ├── pocket-pro.json │ │ ├── quad-phase-hp.json │ │ ├── revo-4-ir.json │ │ ├── revo-burst.json │ │ ├── revo-sweep.json │ │ ├── saber-spot-rgbw.json │ │ ├── starburst.json │ │ ├── stinger-ii.json │ │ ├── stinger-spot.json │ │ ├── vizi-spot-led-pro.json │ │ └── xs-400.json │ ├── ape-labs │ │ └── lightcan.json │ ├── arri │ │ ├── broadcaster-2-plus.json │ │ ├── l10-c.json │ │ ├── l5-c.json │ │ ├── l7-c.json │ │ ├── skypanel-s120c.json │ │ ├── skypanel-s30c.json │ │ ├── skypanel-s360c.json │ │ └── skypanel-s60c.json │ ├── astera │ │ ├── ax3-lightdrop.json │ │ ├── fp1-titan-tube.json │ │ ├── fp2-helios-tube.json │ │ ├── fp3-hyperion-tube.json │ │ └── fp5-nyx-bulb.json │ ├── audibax │ │ └── boston-60.json │ ├── ayra │ │ └── tdc-triple-burst.json │ ├── ayrton │ │ ├── diablo-s.json │ │ ├── diablo-tc.json │ │ └── magicblade-fx.json │ ├── beamz │ │ ├── h2000-faze-machine.json │ │ ├── panther-7r.json │ │ ├── pls25-par.json │ │ └── triple-flex-centre-pro-led.json │ ├── big-dipper │ │ ├── lp001.json │ │ └── ls90.json │ ├── blizzard │ │ ├── puck-rgbaw.json │ │ └── rokbox-rgbw.json │ ├── boomtonedj │ │ ├── crazy-spot-30.json │ │ ├── silentpar-12x10w-5in1.json │ │ ├── silentpar-12x10w-6in1.json │ │ ├── silentpar-12x3w-3in1.json │ │ ├── silentpar-5x10w-5in1.json │ │ ├── silentpar-5x10w-6in1.json │ │ ├── silentpar-5x3w-3in1.json │ │ ├── silentpar-7x10w-5in1.json │ │ ├── silentpar-7x10w-6in1.json │ │ ├── silentpar-7x3w-3in1.json │ │ └── xtrem-led.json │ ├── briteq │ │ ├── beamspot1-dmx-fc.json │ │ ├── bt-coloray-120r.json │ │ ├── bt-coloray-18fcr.json │ │ ├── bt-coloray-60r.json │ │ ├── bt-ledrotor.json │ │ ├── bt-stagepar-6in1.json │ │ ├── btx-titan.json │ │ ├── cob-slim-100-rgb.json │ │ ├── pro-beamer-zoom-indoor.json │ │ └── pro-beamer-zoom-outdoor.json │ ├── cameo │ │ ├── auro-beam-150.json │ │ ├── auro-spot-100.json │ │ ├── auro-spot-200.json │ │ ├── auro-spot-300.json │ │ ├── auro-spot-400.json │ │ ├── flash-matrix-250.json │ │ ├── flat-par-can-rgb-10-ir.json │ │ ├── flat-par-can-tri-5x-3w-ir.json │ │ ├── flat-par-can-tri-7x-3w-ir.json │ │ ├── flat-pro-18.json │ │ ├── flat-pro-flood-600-ip65.json │ │ ├── flat-pro-flood-ip65-tri.json │ │ ├── gobo-scanner-80.json │ │ ├── hydrabeam-100.json │ │ ├── hydrabeam-300-rgbw.json │ │ ├── instant-air-1000-pro.json │ │ ├── instant-air-2000-pro.json │ │ ├── ioda-1000-rgb.json │ │ ├── ioda-400-rgy.json │ │ ├── ioda-600-rgb.json │ │ ├── multi-fx-bar.json │ │ ├── multi-par-cob-1.json │ │ ├── nanospot-120.json │ │ ├── outdoor-par-tri-12.json │ │ ├── root-par-6.json │ │ ├── steam-wizard-1000.json │ │ ├── steam-wizard-2000.json │ │ ├── storm.json │ │ ├── thunder-wash-100-rgb.json │ │ ├── thunder-wash-100-w.json │ │ ├── thunder-wash-600-rgb.json │ │ ├── thunder-wash-600-rgbw.json │ │ ├── thunder-wash-600-w.json │ │ └── zenit-w600.json │ ├── chauvet-dj │ │ ├── colorband-pix-ip.json │ │ ├── colorband-pix.json │ │ ├── corepar-uv-usb.json │ │ ├── eve-p-100-ww.json │ │ ├── eve-p-130-rgb.json │ │ ├── freedom-h1.json │ │ ├── geyser-rgb.json │ │ ├── gigbar-2.json │ │ ├── intimidator-spot-110.json │ │ ├── intimidator-spot-260.json │ │ ├── kinta-x.json │ │ ├── motiondrape-led.json │ │ ├── slimpar-pro-h-usb.json │ │ ├── slimpar-pro-qz12.json │ │ ├── slimpar-pro-w.json │ │ ├── slimpar-q12-bt.json │ │ ├── slimpar-t12-bt.json │ │ └── washfx.json │ ├── chauvet-professional │ │ ├── colordash-batten-quad-6.json │ │ ├── ovation-f-915vw.json │ │ └── rogue-r2-wash.json │ ├── chroma-q │ │ ├── color-force-ii-12.json │ │ ├── color-force-ii-48.json │ │ └── color-force-ii-72.json │ ├── cinetec │ │ └── par-18x15w-rgbwa.json │ ├── clay-paky │ │ ├── a-leda-b-eye-k10.json │ │ ├── a-leda-b-eye-k20.json │ │ ├── alpha-spot-qwo-800.json │ │ ├── sharpy.json │ │ ├── show-batten-100.json │ │ └── spheriscan.json │ ├── clf │ │ └── hera.json │ ├── coemar │ │ └── prospot-250-lx.json │ ├── contest │ │ └── irledflat-5x12SIXb.json │ ├── dedolight │ │ ├── dled4-bi.json │ │ └── dled7-bi.json │ ├── dmg-lumiere │ │ ├── maxi-mix.json │ │ ├── mini-mix.json │ │ └── sl1-mix.json │ ├── dts │ │ ├── scena-led-150.json │ │ ├── xr1200-wash.json │ │ └── xr4-spot.json │ ├── elation │ │ ├── acl-360-roller.json │ │ ├── cuepix-blinder-ww2.json │ │ ├── cuepix-blinder-ww4.json │ │ ├── design-led-par-zoom.json │ │ ├── platinum-hfx.json │ │ ├── platinum-seven.json │ │ ├── platinum-spot-15r-pro.json │ │ ├── proteus-hybrid.json │ │ ├── sixpar-100-ip.json │ │ ├── sixpar-100.json │ │ ├── sixpar-200-ip.json │ │ ├── sixpar-200-wmg.json │ │ ├── sixpar-200.json │ │ ├── sixpar-300-ip.json │ │ ├── sixpar-300-wmg.json │ │ ├── sixpar-300.json │ │ └── uni-bar.json │ ├── eliminator │ │ ├── stealth-beam.json │ │ └── stealth-wash-zoom.json │ ├── empire-lighting │ │ └── 8x-3w-led-spider-effect.json │ ├── epsilon │ │ └── duo-q-beam-bar.json │ ├── equinox │ │ ├── gigabar.json │ │ └── rgb-power-batten.json │ ├── etc │ │ ├── colorsource-par-deep-blue.json │ │ ├── colorsource-par.json │ │ ├── colorsource-spot-deep-blue.json │ │ ├── colorsource-spot.json │ │ ├── fos4PD16.json │ │ ├── fos4PD24.json │ │ ├── fos4PD8.json │ │ ├── fos4PL16.json │ │ ├── fos4PL24.json │ │ ├── fos4PL8.json │ │ ├── source-four-led-series-2-daylight-hd.json │ │ ├── source-four-led-series-2-lustr.json │ │ └── source-four-led-series-2-tungsten-hd.json │ ├── eurolite │ │ ├── led-b-40.json │ │ ├── led-bar-3-hcl-bar.json │ │ ├── led-big-party-spot.json │ │ ├── led-big-party-tcl-spot.json │ │ ├── led-fe-1500.json │ │ ├── led-h2o.json │ │ ├── led-kls-801.json │ │ ├── led-ml-56-rgbw.json │ │ ├── led-par-56-tcl.json │ │ ├── led-party-spot.json │ │ ├── led-party-tcl-spot.json │ │ ├── led-pix-12-hcl.json │ │ ├── led-pix-144.json │ │ ├── led-ps-4-hcl.json │ │ ├── led-sls-12-bcl.json │ │ ├── led-sls-5-bcl.json │ │ ├── led-sls-6-uv-floor.json │ │ ├── led-svf-1.json │ │ ├── led-tha-100f-mk2.json │ │ ├── led-tha-100f.json │ │ ├── led-tl-4-qcl.json │ │ ├── led-tmh-17.json │ │ ├── led-tmh-18.json │ │ ├── led-tmh-7.json │ │ ├── led-tmh-8.json │ │ ├── led-tmh-9.json │ │ ├── led-tmh-x12.json │ │ ├── led-tmh-x25.json │ │ ├── multiflood-pro-ip-smd-rgbw.json │ │ ├── n-150.json │ │ └── tmh-xb-130.json │ ├── event-lighting │ │ ├── par12x12.json │ │ └── par5x12.json │ ├── evolight │ │ └── colours-archspot-54-rgb.json │ ├── explo │ │ ├── gasprojector-gx2.json │ │ └── x2-wave-flamer.json │ ├── eyourlife │ │ └── led-rgbw-54x3-par64.json │ ├── fiilex │ │ └── p3-color.json │ ├── fixture_list.json │ ├── flash-professional │ │ ├── led-moving-head-150w.json │ │ ├── led-par-64-cob-300w-rgbwauv.json │ │ └── led-par-64-slim-7x10w-rgbw-mk2.json │ ├── fovitec │ │ └── 600xb.json │ ├── fractal-lights │ │ ├── par-led-7x10w.json │ │ ├── par-led-7x12w.json │ │ └── par-led-7x9w.json │ ├── fun-generation │ │ ├── led-pot-12-1w-rgbw.json │ │ ├── picobeam-30-quad-led.json │ │ ├── picobeam-60-cob-rgbw.json │ │ ├── picoblade-fx-4x10w-rgbw.json │ │ ├── picospot-20-led.json │ │ ├── picospot-45-led.json │ │ ├── picowash-40-pixel-quad-led.json │ │ ├── separ-quad-led-rgb-uv.json │ │ └── separ-quad-led-rgbw.json │ ├── futurelight │ │ ├── dj-scan-250.json │ │ ├── dmh-75-i-led-moving-head.json │ │ ├── pro-slim-par-7-hcl.json │ │ ├── sc-250-scanner.json │ │ └── stb-648-led-strobe-smd-5050.json │ ├── gantom │ │ └── precision-dmx.json │ ├── generic │ │ ├── 4-channel-dimmer-pack.json │ │ ├── cmy-fader.json │ │ ├── cw-ww-fader.json │ │ ├── desk-channel.json │ │ ├── drgb-fader.json │ │ ├── drgbw-fader.json │ │ ├── grbw-fader.json │ │ ├── pan-tilt.json │ │ ├── rgb-fader.json │ │ ├── rgba-fader.json │ │ ├── rgbd-fader.json │ │ ├── rgbw-fader.json │ │ ├── rgbwauv-fader.json │ │ ├── rgbww-fader.json │ │ └── strobe.json │ ├── ghost │ │ ├── ip-spot-bat.json │ │ └── ip-spot-pro.json │ ├── glp │ │ ├── force-120.json │ │ ├── impression-fr1.json │ │ ├── impression-laser.json │ │ ├── impression-spot-one.json │ │ ├── impression-x4-bar-10.json │ │ ├── jdc1.json │ │ ├── knv-arc.json │ │ └── knv-cube.json │ ├── glx │ │ └── gls-4-led-stage-4.json │ ├── griven │ │ └── kolorado-4000.json │ ├── gruft │ │ ├── pixel-tube.json │ │ └── ventilator.json │ ├── hazebase │ │ └── base-hazer-pro.json │ ├── hive │ │ ├── bee-50-c.json │ │ ├── bumble-bee-25-cx.json │ │ ├── hornet-200-c.json │ │ ├── hornet-200-cx.json │ │ ├── super-hornet-575-c.json │ │ ├── wasp-100-c.json │ │ └── wasp-100-cx.json │ ├── hong-yi │ │ └── hy-g60.json │ ├── ibiza-light │ │ ├── lp64-led-promo.json │ │ ├── ls-005led.json │ │ └── par-mini-rgb3.json │ ├── ignition │ │ └── led-accu-par.json │ ├── infinity │ │ ├── iw-340-rdm.json │ │ └── iw-720-rdm.json │ ├── jb-lighting │ │ ├── jbled-a7.json │ │ └── varyscan-p7.json │ ├── jb-systems │ │ ├── imove-5s.json │ │ ├── irock-5c.json │ │ └── twin-effect-laser.json │ ├── kam │ │ └── gobotracer.json │ ├── lalucenatz │ │ ├── 18leds-par-light.json │ │ └── dj-lights.json │ ├── laserworld │ │ ├── cs-1000rgb.json │ │ ├── ds-1000rgb.json │ │ └── shownet.json │ ├── ledj │ │ ├── slimline-12q5-rgba.json │ │ └── slimline-12q5-rgbw.json │ ├── lep-laser │ │ └── diamond-pro-2-8.json │ ├── light-sky │ │ └── aurora.json │ ├── lightmaxx │ │ ├── dj-scan-led.json │ │ ├── easy-wash-quad-led.json │ │ ├── led-nano-par.json │ │ ├── led-par-56.json │ │ ├── platinum-mini-tri-par.json │ │ ├── vector-pixel-bar-18x-15w-rgbwa.json │ │ └── vega-zoom-wash.json │ ├── lite-tek │ │ └── beam-230.json │ ├── litecraft │ │ └── washx-21.json │ ├── litegear │ │ ├── litemat-plus-1.json │ │ ├── litemat-plus-2.json │ │ ├── litemat-plus-2l.json │ │ ├── litemat-plus-3.json │ │ ├── litemat-plus-4.json │ │ ├── litemat-plus-8.json │ │ ├── litetile-plus-4.json │ │ ├── litetile-plus-8.json │ │ ├── s2-litemat-1.json │ │ ├── s2-litemat-2.json │ │ ├── s2-litemat-2l.json │ │ ├── s2-litemat-3.json │ │ └── s2-litemat-4.json │ ├── lixada │ │ ├── mini-beam-rgbw.json │ │ ├── mini-gobo-moving-head-light.json │ │ └── mini-moving-head-rgbw.json │ ├── look │ │ ├── cryofog.json │ │ └── viper-nt.json │ ├── magicfx │ │ ├── psyco2jet.json │ │ ├── smokejet.json │ │ └── stage-flame.json │ ├── manufacturers.json │ ├── mark │ │ ├── mbar-381-ip.json │ │ └── superbat-led-72.json │ ├── martin │ │ ├── atomic-3000.json │ │ ├── mac-250-beam.json │ │ ├── mac-250-krypton.json │ │ ├── mac-250-wash.json │ │ ├── mac-600.json │ │ ├── mac-700-wash.json │ │ ├── mac-aura.json │ │ ├── mac-axiom-hybrid.json │ │ ├── mac-encore-performance.json │ │ ├── mac-viper-airfx.json │ │ ├── mac-viper-performance.json │ │ ├── mac-viper-wash.json │ │ ├── magnum-2500-hz.json │ │ ├── mania-scx500.json │ │ ├── roboscan-812.json │ │ ├── rush-mh-2-wash.json │ │ ├── rush-mh-3-beam.json │ │ ├── rush-mh-5-profile.json │ │ ├── rush-mh-7-hybrid.json │ │ ├── rush-par-2-rgbw-zoom.json │ │ ├── rush-scanner-1-led.json │ │ ├── stagebar-54l.json │ │ └── stagebar-54s.json │ ├── mdg │ │ ├── hazer-atmosphere-aps.json │ │ └── theone-atmospheric-generator.json │ ├── mega-led-lighting │ │ ├── led-par-light-372.json │ │ └── zoom-360.json │ ├── minuit-une │ │ ├── ivl-carre.json │ │ └── m-carre.json │ ├── nicols │ │ ├── led-bar-123-fc-ip.json │ │ └── pat-252.json │ ├── orion │ │ └── orcan2.json │ ├── panasonic │ │ ├── pt-rz120.json │ │ └── pt-rz120l.json │ ├── phocea-light │ │ └── box-leds-batterie-6x15w.json │ ├── powerlighting │ │ └── wash-84w.json │ ├── pr-lighting │ │ └── xs-250-spot.json │ ├── prolights │ │ ├── diamond19.json │ │ ├── pixpan16.json │ │ ├── polar3000.json │ │ ├── smartbat.json │ │ └── v700spot.json │ ├── qtx │ │ ├── lux-ld01.json │ │ └── lux-ld30w.json │ ├── renkforce │ │ └── gm107.json │ ├── robe │ │ ├── colorspot-2500e-at.json │ │ ├── dj-scan-250-xt.json │ │ ├── robin-300e-wash.json │ │ ├── robin-600e-spot.json │ │ ├── robin-ledbeam-100.json │ │ ├── robin-ledbeam-150.json │ │ ├── robin-ledwash-600.json │ │ ├── robin-parfect-150.json │ │ ├── robin-viva-cmy.json │ │ └── spot-160-xt.json │ ├── robert-juliat │ │ └── 613sx.json │ ├── rockville │ │ └── rockpar50.json │ ├── sgm │ │ └── p-5.json │ ├── shehds │ │ └── led-flat-par-12x3w-rgbw.json │ ├── showline │ │ └── sl-nitro-510c.json │ ├── showlite │ │ └── lb-4390.json │ ├── showpro │ │ └── litebar-h9.json │ ├── showtec │ │ ├── archi-painter-24-8-q4.json │ │ ├── atmos-2000.json │ │ ├── club-par-12-4-rgbw.json │ │ ├── compact-par-18.json │ │ ├── compact-par-7-tri.json │ │ ├── dominator.json │ │ ├── horizon-8.json │ │ ├── kanjo-spot-60.json │ │ ├── kanjo-wash-rgb.json │ │ ├── led-light-bar-rgb-v3.json │ │ ├── phantom-140-led-spot.json │ │ ├── phantom-25-led-wash.json │ │ ├── phantom-3r-beam.json │ │ ├── phantom-50-led-spot.json │ │ ├── phantom-matrix-fx.json │ │ ├── pixel-bar-12-mkii.json │ │ ├── sunraise-led.json │ │ ├── sunstrip-active-mkii.json │ │ └── xs-1-rgbw.json │ ├── showven │ │ ├── sparkular-fall.json │ │ └── sparkular.json │ ├── silver-star │ │ └── mx-indigo-6000xe.json │ ├── skypix │ │ └── ribalta-beam.json │ ├── solaris │ │ └── smart-36.json │ ├── solena │ │ ├── max-par-20.json │ │ └── mini-par-12.json │ ├── soundlight │ │ └── 3204r-h.json │ ├── stage-right │ │ ├── mini-beam-rgbw.json │ │ └── stage-wash-7x10w-led-moving-head.json │ ├── stairville │ │ ├── af-180-led-fogger.json │ │ ├── af-250.json │ │ ├── afh-600.json │ │ ├── bel6-ip-bar-hex.json │ │ ├── clb5-2p-rgb-ww-compact-led-par.json │ │ ├── led-bar-240-8.json │ │ ├── led-flood-panel-150.json │ │ ├── mh-100.json │ │ ├── mh-x25.json │ │ ├── mh-x30-led-spot.json │ │ ├── mh-x30.json │ │ ├── mh-x50.json │ │ ├── mh-x60.json │ │ ├── octagon-theater-20x6w-cw-ww-a.json │ │ ├── par-56.json │ │ ├── revueled-120-cob-rgbww.json │ │ ├── revueled-120-cob-true-white.json │ │ ├── stage-tri-led.json │ │ └── z120m-par-64-led-rgbw-120w.json │ ├── starway │ │ ├── servo-color-4k.json │ │ └── stickolor-1210uhd.json │ ├── studio-due │ │ └── light-deflector.json │ ├── sun-star │ │ └── g-2011-nova.json │ ├── tecshow │ │ ├── nebula-18.json │ │ └── nebula-6.json │ ├── tiptop-stage-light │ │ └── 3-10w-battery-led-wedge-par.json │ ├── tmb │ │ └── solaris-flare.json │ ├── uking │ │ ├── mini-led-spot-25w.json │ │ └── par-light-b262.json │ ├── ultratec │ │ └── radiance-hazer.json │ ├── update_fixturelist.js │ ├── varytec │ │ ├── bat-par-6-rgbuv.json │ │ ├── bat-par-6-rgbwa.json │ │ ├── easy-move-xs-hp-wash-7x8w-rgbw.json │ │ ├── giga-bar-hex-3.json │ │ ├── hero-wash-340fx-rgbw-zoom.json │ │ ├── led-hellball-3-rgb.json │ │ └── led-theater-spot-100.json │ ├── velleman │ │ └── aeron-250-ii.json │ └── venue │ │ ├── thintri64.json │ │ └── tristrip3z.json ├── images │ ├── Folder2.svg │ ├── adjust.svg │ ├── arrow.svg │ ├── arrow_down.svg │ ├── arrow_up.svg │ ├── asls-logo.png │ ├── asls.icon.black.png │ ├── asls.icon.white.ico │ ├── asls.logo.black.png │ ├── cuepool_idle.svg │ ├── diane-picchiottino-m1ONIaOCmSs-unsplash.jpg │ ├── folder.svg │ ├── hslwheel.svg │ ├── knob.svg │ ├── list_add_button.svg │ ├── mixer.svg │ ├── spline.svg │ ├── studio_standalone_logo.png │ ├── sun.svg │ └── wave.svg ├── showfiles │ ├── asls │ │ └── default.json │ └── qlc │ │ └── default.qxw └── visualizer │ ├── models │ ├── model_list.json │ └── scenography │ │ └── moving_head_lowpoly.glb │ └── textures │ └── environment │ └── checkerboard_default.jpg ├── src ├── App.vue ├── assets │ ├── fonts │ │ └── Roboto │ │ │ ├── LICENSE.txt │ │ │ ├── Roboto-Black.ttf │ │ │ ├── Roboto-BlackItalic.ttf │ │ │ ├── Roboto-Bold.ttf │ │ │ ├── Roboto-BoldItalic.ttf │ │ │ ├── Roboto-Italic.ttf │ │ │ ├── Roboto-Light.ttf │ │ │ ├── Roboto-LightItalic.ttf │ │ │ ├── Roboto-Medium.ttf │ │ │ ├── Roboto-MediumItalic.ttf │ │ │ ├── Roboto-Regular.ttf │ │ │ ├── Roboto-Thin.ttf │ │ │ └── Roboto-ThinItalic.ttf │ ├── images │ │ ├── noise.png │ │ ├── studio_logo_textual.svg │ │ └── studio_standalone_logo.svg │ └── styles │ │ ├── fonts.css │ │ ├── fonts.scss │ │ ├── global.css │ │ └── global.scss ├── main.js ├── models │ ├── DMX │ │ ├── capabilityManager.model.js │ │ ├── channel.model.js │ │ ├── chase.model.js │ │ ├── chase.pool.model.js │ │ ├── cue.item.model.js │ │ ├── cue.item.pool.model.js │ │ ├── cue.model.js │ │ ├── cue.pool.model.js │ │ ├── effect.model.js │ │ ├── effect.preset.model.js │ │ ├── entityManager.model.js │ │ ├── fade.model.js │ │ ├── fixture.model.js │ │ ├── fixture.pool.model.js │ │ ├── group.model.js │ │ ├── group.pool.model.js │ │ ├── live.model.js │ │ ├── master.model.js │ │ ├── modifier.model.js │ │ ├── output.pool.model.js │ │ ├── scene.model.js │ │ ├── show.model.js │ │ ├── universe.model.js │ │ └── universe.pool.model.js │ └── utils │ │ └── proxify.utils.js ├── plugins │ ├── eventbus.js │ ├── router.js │ ├── visualizer │ │ ├── animation_manager.js │ │ ├── controls.js │ │ ├── grid.js │ │ ├── model_instancer.js │ │ ├── moving_head.js │ │ ├── orbitcontrol.zup.patch.js │ │ ├── scene_manager.js │ │ ├── shaders │ │ │ ├── beam.fragment.glsl │ │ │ └── beam.vertex.glsl │ │ └── visualizer.js │ └── webshow.js ├── singletons │ └── show.singleton.js ├── views │ ├── activities │ │ ├── app │ │ │ ├── _popups │ │ │ │ ├── popup.error.vue │ │ │ │ └── popup.splash.vue │ │ │ ├── app.activity.vue │ │ │ └── fragments │ │ │ │ ├── group-pool │ │ │ │ ├── _popups │ │ │ │ │ └── popup.group.vue │ │ │ │ └── group-pool.fragment.vue │ │ │ │ ├── modifiers │ │ │ │ ├── _widgets │ │ │ │ │ ├── modifier.widget.colorpicker.vue │ │ │ │ │ ├── modifier.widget.curve.vue │ │ │ │ │ ├── modifier.widget.fixture.channels.vue │ │ │ │ │ ├── modifier.widget.fixture.pool.vue │ │ │ │ │ └── modifier.widget.pantilt.vue │ │ │ │ ├── chase │ │ │ │ │ ├── _widgets │ │ │ │ │ │ └── chase.modifier.widget.timeline.vue │ │ │ │ │ └── chase.modifier.fragment.vue │ │ │ │ ├── group │ │ │ │ │ ├── _popups │ │ │ │ │ │ ├── group.effect.modifier.popup.channels.vue │ │ │ │ │ │ ├── group.modifier.popup.cuepool.vue │ │ │ │ │ │ └── group.modifier.popup.patch.vue │ │ │ │ │ ├── _widgets │ │ │ │ │ │ ├── group.effect.modifier.widget.channels.vue │ │ │ │ │ │ ├── group.effect.modifier.widget.wave.vue │ │ │ │ │ │ ├── group.modifier.widget.cue.settings.vue │ │ │ │ │ │ ├── group.modifier.widget.cuepool.vue │ │ │ │ │ │ ├── group.modifier.widget.settings.vue │ │ │ │ │ │ ├── group.scene.modifier.widget.curve.vue │ │ │ │ │ │ └── group.scene.modifier.widget.fixtures.vue │ │ │ │ │ ├── group.effect.modifier.fragment.vue │ │ │ │ │ ├── group.modifier.fragment.vue │ │ │ │ │ └── group.scene.modifier.fragment.vue │ │ │ │ ├── modifier.fragment.vue │ │ │ │ └── universe │ │ │ │ │ ├── _popups │ │ │ │ │ └── universe.modifier.popup.patch.vue │ │ │ │ │ ├── _widgets │ │ │ │ │ ├── universe.modifier.widget.fixture.position.tool.vue │ │ │ │ │ ├── universe.modifier.widget.fixture.settings.vue │ │ │ │ │ └── universe.modifier.widget.settings.vue │ │ │ │ │ └── universe.modifier.fragment.vue │ │ │ │ ├── patch-bay │ │ │ │ └── patch-bay.fragment.vue │ │ │ │ ├── toolbar │ │ │ │ ├── _popups │ │ │ │ │ ├── popup.connections.vue │ │ │ │ │ ├── popup.credits.vue │ │ │ │ │ ├── popup.license.vue │ │ │ │ │ ├── popup.newshow.vue │ │ │ │ │ ├── popup.saveas.vue │ │ │ │ │ └── popup.visualizer.vue │ │ │ │ └── toolbar.fragment.vue │ │ │ │ └── visualizer │ │ │ │ └── visualizer.fragment.vue │ │ └── visualizer │ │ │ └── visualizer.activity.vue │ ├── components │ │ └── uikit │ │ │ ├── buttons │ │ │ ├── index.js │ │ │ └── uikit.button.vue │ │ │ ├── colors │ │ │ └── uikit.colors.js │ │ │ ├── containers │ │ │ ├── index.js │ │ │ ├── uikit.container.flex.vue │ │ │ └── uikit.spacer.vue │ │ │ ├── cues │ │ │ ├── index.js │ │ │ ├── uikit.cue.container.vue │ │ │ └── uikit.cue.vue │ │ │ ├── icons │ │ │ ├── images │ │ │ │ ├── Folder2.svg │ │ │ │ ├── add.svg │ │ │ │ ├── adjust.svg │ │ │ │ ├── arrow.svg │ │ │ │ ├── arrow_down.svg │ │ │ │ ├── arrow_up.svg │ │ │ │ ├── blue.svg │ │ │ │ ├── bulb.svg │ │ │ │ ├── check.svg │ │ │ │ ├── circle.svg │ │ │ │ ├── close.svg │ │ │ │ ├── colorintensity.svg │ │ │ │ ├── colorintensityblue.svg │ │ │ │ ├── colorintensitycyan.svg │ │ │ │ ├── colorintensityeditable.svg │ │ │ │ ├── colorintensitygreen.svg │ │ │ │ ├── colorintensitymagenta.svg │ │ │ │ ├── colorintensityred.svg │ │ │ │ ├── colorintensitywhite.svg │ │ │ │ ├── colorintensityyellow.svg │ │ │ │ ├── colorpreset.svg │ │ │ │ ├── colorwheel.svg │ │ │ │ ├── connection.svg │ │ │ │ ├── connections.svg │ │ │ │ ├── contact.svg │ │ │ │ ├── control.svg │ │ │ │ ├── cross.svg │ │ │ │ ├── cuepool_idle.svg │ │ │ │ ├── cyan.svg │ │ │ │ ├── dimmer.svg │ │ │ │ ├── disabled.svg │ │ │ │ ├── effect.svg │ │ │ │ ├── eight.svg │ │ │ │ ├── export.svg │ │ │ │ ├── fine.svg │ │ │ │ ├── fixture.svg │ │ │ │ ├── focus.svg │ │ │ │ ├── fog.svg │ │ │ │ ├── fold.svg │ │ │ │ ├── folder.svg │ │ │ │ ├── frost.svg │ │ │ │ ├── gear.svg │ │ │ │ ├── goborotation.svg │ │ │ │ ├── gobowheel.svg │ │ │ │ ├── green.svg │ │ │ │ ├── grid.svg │ │ │ │ ├── help.svg │ │ │ │ ├── hide.svg │ │ │ │ ├── hslwheel.svg │ │ │ │ ├── hueshift.svg │ │ │ │ ├── key.svg │ │ │ │ ├── knob.svg │ │ │ │ ├── library.svg │ │ │ │ ├── line.svg │ │ │ │ ├── list_add_button.svg │ │ │ │ ├── magenta.svg │ │ │ │ ├── maintenance.svg │ │ │ │ ├── mixer.svg │ │ │ │ ├── move.svg │ │ │ │ ├── movinghead.svg │ │ │ │ ├── new.svg │ │ │ │ ├── newfile.svg │ │ │ │ ├── opensource.svg │ │ │ │ ├── pan.svg │ │ │ │ ├── patch.svg │ │ │ │ ├── pipette.svg │ │ │ │ ├── play.svg │ │ │ │ ├── popout.svg │ │ │ │ ├── prism.svg │ │ │ │ ├── prisminsertion.svg │ │ │ │ ├── prismrotation.svg │ │ │ │ ├── red.svg │ │ │ │ ├── redo.svg │ │ │ │ ├── save.svg │ │ │ │ ├── shutter.svg │ │ │ │ ├── spline.svg │ │ │ │ ├── stop.svg │ │ │ │ ├── sun.svg │ │ │ │ ├── tick.svg │ │ │ │ ├── tilt.svg │ │ │ │ ├── timekadel.svg │ │ │ │ ├── trash.svg │ │ │ │ ├── undef.svg │ │ │ │ ├── undo.svg │ │ │ │ ├── universe.svg │ │ │ │ ├── visualizer.svg │ │ │ │ ├── wave.svg │ │ │ │ ├── waveform.svg │ │ │ │ ├── white.svg │ │ │ │ ├── wrench.svg │ │ │ │ ├── yellow.svg │ │ │ │ └── zoom.svg │ │ │ ├── index.js │ │ │ └── uikit.icon.vue │ │ │ ├── index.js │ │ │ ├── inputs │ │ │ ├── checkbox │ │ │ │ ├── index.js │ │ │ │ └── uikit.input.checkbox.vue │ │ │ ├── index.js │ │ │ ├── range │ │ │ │ ├── index.js │ │ │ │ ├── uikit.input.range.fader.vue │ │ │ │ ├── uikit.input.range.gauge.vue │ │ │ │ ├── uikit.input.range.knob.vue │ │ │ │ └── uikit.input.range.vumeter.vue │ │ │ ├── select │ │ │ │ ├── index.js │ │ │ │ └── uikit.input.select.vue │ │ │ └── textbox │ │ │ │ ├── index.js │ │ │ │ ├── uikit.input.textbox.num.vue │ │ │ │ └── uikit.input.textbox.str.vue │ │ │ ├── lists │ │ │ ├── index.js │ │ │ ├── uikit.list.item.vue │ │ │ └── uikit.list.vue │ │ │ ├── loaders │ │ │ ├── index.js │ │ │ └── uikit.loader.bar.vue │ │ │ ├── menus │ │ │ ├── index.js │ │ │ └── uikit.menu.vue │ │ │ ├── popups │ │ │ ├── index.js │ │ │ └── uikit.popup.vue │ │ │ └── widgets │ │ │ ├── index.js │ │ │ └── uikit.widget.vue │ ├── mixins │ │ ├── color.mixin.js │ │ └── popup.mixin.js │ └── utils │ │ ├── index.js │ │ ├── palette.js │ │ └── setcapture.utils.js ├── worker-api.js └── worker.js └── vite.config.mjs /.env: -------------------------------------------------------------------------------- 1 | VITE_APP_DMX2WS_SERVER_URL=127.0.0.1:5214 2 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: [ 3 | 'airbnb-base', 4 | 'eslint:recommended', 5 | 'plugin:vue/vue3-recommended', 6 | ], 7 | env: { 8 | browser: true, 9 | node: true, 10 | es2021: true, 11 | }, 12 | parserOptions: { 13 | ecmaVersion: 'latest', 14 | }, 15 | rules: { 16 | 'vue/no-mutating-props': ['error', { 17 | shallowOnly: true, 18 | }], 19 | 'no-plusplus': 'off', 20 | 'no-underscore-dangle': 'off', 21 | 'max-classes-per-file': 'off', 22 | 'no-constructor-return': 'off', 23 | 'no-param-reassign': 'off', 24 | 'no-await-in-loop': 'off', 25 | camelcase: 'off', 26 | }, 27 | settings: { 28 | 'import/resolver': { 29 | alias: { 30 | map: [ 31 | ['@', './src'], 32 | ['@root', './'], 33 | ], 34 | extensions: ['.js', '.vue'], 35 | }, 36 | }, 37 | }, 38 | }; 39 | -------------------------------------------------------------------------------- /.github/workflows/deploy.app.yaml: -------------------------------------------------------------------------------- 1 | name: Deploy 2 | 3 | on: 4 | push: 5 | branches: [staging] 6 | 7 | permissions: 8 | contents: read # for checkout 9 | 10 | jobs: 11 | build: 12 | runs-on: ubuntu-latest 13 | 14 | # This is due to change for different envs but 15 | # as of today we only have one deployment endpoint (demo) 16 | if: github.ref == 'refs/heads/staging' 17 | steps: 18 | - uses: actions/checkout@v3 19 | - name: Install Node.js 20 | uses: actions/setup-node@v3 21 | with: 22 | node-version: '16.x' 23 | - name: Install npm dependencies 24 | run: npm install 25 | - name: Run build task 26 | run: npm run build --if-present 27 | - name: Deploy to Server 28 | uses: easingthemes/ssh-deploy@main 29 | with: 30 | SSH_PRIVATE_KEY: ${{ secrets.SERVER_SSH_PRIVATE_KEY }} 31 | ARGS: '-rlgoDzvc -i --delete' 32 | SOURCE: 'dist/' 33 | REMOTE_HOST: ${{ secrets.SERVER_REMOTE_HOST }} 34 | REMOTE_USER: ${{ secrets.SERVER_REMOTE_USER }} 35 | TARGET: ${{ secrets.STUDIO_APP_SERVER_REMOTE_TARGET }} 36 | EXCLUDE: '/dist/, /node_modules/' 37 | -------------------------------------------------------------------------------- /.github/workflows/deploy.docs.yaml: -------------------------------------------------------------------------------- 1 | name: Deploy 2 | 3 | on: 4 | push: 5 | branches: [master, staging] 6 | 7 | permissions: 8 | contents: read # for checkout 9 | 10 | jobs: 11 | build: 12 | runs-on: ubuntu-latest 13 | 14 | # This is due to change for different envs but 15 | # as of today we only have one deployment endpoint (demo) 16 | if: github.ref == 'refs/heads/staging' 17 | steps: 18 | - uses: actions/checkout@v3 19 | - name: Install Node.js 20 | uses: actions/setup-node@v3 21 | with: 22 | node-version: '16.x' 23 | - name: Install npm dependencies 24 | run: npm run docs:manual:build 25 | - name: Run build task 26 | run: npm run build --if-present 27 | - name: Deploy to Server 28 | uses: easingthemes/ssh-deploy@main 29 | with: 30 | SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} 31 | ARGS: '-rlgoDzvc -i --delete' 32 | SOURCE: './docs/manual/.vitepress/dist/' 33 | REMOTE_HOST: ${{ secrets.REMOTE_HOST }} 34 | REMOTE_USER: ${{ secrets.REMOTE_USER }} 35 | TARGET: ${{ secrets.REMOTE_TARGET }} 36 | EXCLUDE: '/dist/, /node_modules/' 37 | -------------------------------------------------------------------------------- /.github/workflows/release.yaml: -------------------------------------------------------------------------------- 1 | name: Release 2 | 3 | on: 4 | push: 5 | branches: [ master, staging ] 6 | 7 | permissions: 8 | contents: read # for checkout 9 | 10 | jobs: 11 | release: 12 | name: Release 13 | runs-on: ubuntu-latest 14 | permissions: 15 | contents: write # to be able to publish a GitHub release 16 | id-token: write # to enable use of OIDC for npm provenance 17 | steps: 18 | - name: Checkout 19 | uses: actions/checkout@v3 20 | with: 21 | fetch-depth: 0 22 | - name: Setup Node.js 23 | uses: actions/setup-node@v3 24 | with: 25 | node-version: "lts/*" 26 | - name: Release 27 | env: 28 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 29 | run: npx semantic-release 30 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | **/dist 4 | /docs/developer/core/dist 5 | 6 | # local env files 7 | .env.local 8 | .env.*.local 9 | 10 | # Log files 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | 15 | # Editor directories and files 16 | .idea 17 | .vscode 18 | *.suo 19 | *.ntvs* 20 | *.njsproj 21 | *.sln 22 | *.sw? 23 | 24 | #Electron-builder output 25 | /dist_electron 26 | 27 | # Vitepress 28 | **/.vitepress/cache 29 | -------------------------------------------------------------------------------- /docs/developer/core/assets/img/asls-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/developer/core/assets/img/asls-logo.png -------------------------------------------------------------------------------- /docs/developer/core/assets/img/asls.logo.blue.only.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/developer/core/assets/img/asls.logo.blue.only.png -------------------------------------------------------------------------------- /docs/developer/ui/.storybook/main.js: -------------------------------------------------------------------------------- 1 | import * as path from 'path' 2 | 3 | module.exports = { 4 | "addons": [ 5 | "@storybook/addon-links", 6 | "@storybook/addon-essentials", 7 | "@storybook/addon-actions" 8 | ], 9 | "stories": [ 10 | "./**/*.stories.mdx", 11 | "./**/*.stories.@(js|jsx|ts|tsx)" 12 | ], 13 | "framework": "@storybook/vue", 14 | "staticDirs": ['./static'], 15 | "webpackFinal": async (config)=>{ 16 | /** 17 | * Getting vue-svg-loader to work with storybook. 18 | */ 19 | let rule = config.module.rules.find(r => 20 | r.test && r.test.toString().includes('svg') && 21 | r.loader && r.loader.includes('file-loader') 22 | ); 23 | rule.test = /\.(ico|jpg|jpeg|png|gif|eot|otf|webp|ttf|woff|woff2|cur|ani)(\?.*)?$/; 24 | config.module.rules.push( 25 | { 26 | test: /\.svg$/, 27 | use: ['vue-svg-loader'] 28 | } 29 | ) 30 | /** 31 | * Getting '@' shortcut to be resolved by webpack 32 | */ 33 | config.resolve.alias['@'] = path.resolve(__dirname, '../../../../src/'); 34 | return config; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /docs/developer/ui/.storybook/manager-head.html: -------------------------------------------------------------------------------- 1 | 54 | -------------------------------------------------------------------------------- /docs/developer/ui/.storybook/manager.js: -------------------------------------------------------------------------------- 1 | 2 | import { addons } from '@storybook/addons'; 3 | import ASLSTheme from './theme.asls.js'; 4 | 5 | addons.setConfig({ 6 | theme: ASLSTheme, 7 | }); 8 | -------------------------------------------------------------------------------- /docs/developer/ui/.storybook/preview-head.html: -------------------------------------------------------------------------------- 1 | 39 | -------------------------------------------------------------------------------- /docs/developer/ui/.storybook/preview.js.save: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import './assets/styles/global.css' 3 | import './assets/styles/fonts.css' 4 | import uikit from './uikit/' 5 | import {storiesOf} from '@storybook/vue'; 6 | const { parse } = require('comment-parser/lib') 7 | 8 | 9 | 10 | const ctx = require.context('!!raw-loader!./uikit/', true, /\.vue$/) 11 | const files = {}; 12 | 13 | for (let filename of ctx.keys()) { 14 | files[filename] = ctx(filename); 15 | const parsed = parse(files[filename].default).filter(data=>{ 16 | return data.tags.filter(tag=>{ 17 | return tag.tag == "component" 18 | }).length 19 | }) 20 | if(parsed.length){ 21 | parsed.forEach(p=>{ 22 | console.log(p); 23 | let component = p.tags.find(tag=>tag.tag === "component"); 24 | let stories = p.tags.filter(tag=>tag.tag === "story"); 25 | let storiesHandle = storiesOf(component.name); 26 | stories.forEach(story=>{ 27 | storiesHandle.add(story.name || "unnamed story", () => `<${component.name}/>`); 28 | import }); 29 | }); 30 | } 31 | } 32 | 33 | console.log(files); 34 | 35 | 36 | function registerComponents(components) { 37 | Object.keys(components).forEach(componentKey => { 38 | let component = components[componentKey] 39 | console.log(component.__file) 40 | if (component.name) { 41 | Vue.component(component.name, component) 42 | } else { 43 | registerComponents(component) 44 | } 45 | }) 46 | } 47 | 48 | registerComponents(uikit); 49 | 50 | 51 | export const parameters = { 52 | actions: { argTypesRegex: "^on[A-Z].*" }, 53 | controls: { 54 | matchers: { 55 | color: /(background|color)$/i, 56 | date: /Date$/, 57 | }, 58 | }, 59 | } 60 | -------------------------------------------------------------------------------- /docs/developer/ui/.storybook/static/images/asls.logo.white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/developer/ui/.storybook/static/images/asls.logo.white.png -------------------------------------------------------------------------------- /docs/developer/ui/.storybook/theme.asls.js: -------------------------------------------------------------------------------- 1 | 2 | import { create } from '@storybook/theming'; 3 | 4 | /* 5 | { name: 'primary-dark', value: '#161913' }, 6 | { name: 'primary-dark-alt', value: '#131510' }, 7 | { name: 'primary-light', value: '#161913' }, 8 | { name: 'primary-light-alt', value: '#1c1f18' }, 9 | { name: 'primary-lighter', value: '#2e302b4d' }, 10 | { name: 'primary-lighter-alt', value: '#22251f' }, 11 | */ 12 | // 13 | export default create({ 14 | base: 'dark', 15 | brandTitle: 'ASLS Studio storybook', 16 | brandUrl: 'https://demo.studio.asls.timekadel.com', 17 | brandImage: '/images/asls.logo.white.png', 18 | brandTarget: '_self', 19 | 20 | colorPrimary: 'hotpink', 21 | colorSecondary: '#4a47b4', 22 | 23 | // UI 24 | appBg: '#1c1f18', 25 | appContentBg: '#161913', 26 | appBorderColor: '#2e302b4d', 27 | appBorderRadius: 0, 28 | 29 | // Typography 30 | fontBase: '"Roboto", sans-serif', 31 | fontCode: 'monospace', 32 | 33 | //inputs 34 | inputBg: '#1c1f18' 35 | 36 | }); 37 | -------------------------------------------------------------------------------- /docs/manual/.vitepress/theme/custom.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --vp-home-hero-image-background-image: linear-gradient(-45deg, #A45BC9 50%, #5A71D3 50%); 3 | --vp-home-hero-image-filter: blur(90px); 4 | --vp-home-hero-name-background: linear-gradient(-45deg, #A45BC9, #5A71D3); 5 | --vp-home-hero-name-color: transparent; 6 | --vp-c-brand-1:hsl(229, 58%, 59%);/*#8F5BC9;*/ 7 | --vp-c-brand-2:#A45BC9;/*#7760B6*/ 8 | --vp-c-brand-3:hwb(229 35% 17%); 9 | } 10 | 11 | @media (min-width: 960px) { 12 | div.VPHome div.VPHomeHero div.VPHero.has-image div.container div.image div.image-container img.image-src{ 13 | max-width: 450px!important; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /docs/manual/.vitepress/theme/index.js: -------------------------------------------------------------------------------- 1 | import DefaultTheme from 'vitepress/theme' 2 | import './custom.css' 3 | import uikit from '../../../../src/views/components/uikit'; 4 | // TODO: find a way to prevent css overrides. (import ui-kit build ?) 5 | // import '../../../../src/assets/styles/global.css'; 6 | // import '../../../../src/assets/styles/fonts.css'; 7 | 8 | function registerComponents(components, app) { 9 | Object.keys(components).forEach((componentKey) => { 10 | const component = components[componentKey]; 11 | if (component.name) { 12 | app.component(component.name, component); 13 | } else { 14 | registerComponents(component, app); 15 | } 16 | }); 17 | } 18 | 19 | export default { 20 | ...DefaultTheme, 21 | enhanceApp({ app }) { 22 | registerComponents(uikit, app); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /docs/manual/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: home 3 | hero: 4 | name: ASLS Studio 5 | text: Open-source, web-based DMX lighting control software. 6 | tagline: Learn how to use ASLS studio today ! 7 | image: 8 | dark: /studio_standalone_logo.png 9 | light: /studio_standalone_logo_dark.png 10 | alt: ASLS Studio 11 | actions: 12 | - theme: brand 13 | text: User Manual 14 | link: /introduction/ 15 | - theme: alt 16 | text: View on GitHub 17 | link: "https://github.com/asls-org/studio" 18 | features: 19 | - icon: 🌎 20 | title: One show file to rule them all 21 | details: By implementing non-encrypted, easy to use and modify JSON-based show files, ASLS studio aims to, once and for all, offer a universally compatible approach for show file parsing and generation. 22 | - icon: 🎱 23 | title: Create unique cues 24 | details: With ASLS's effect engine the possibilities are virtually limitless. It's up to you to pick from the software's effect preset list or tweak settings around to get that specific look you've been aiming for. 25 | - icon: 💡 26 | title: Visualize 27 | details: Get a preview of the show you're programming thanks to ASLS's WebGL based light-rendering engine. 28 | --- 29 | 30 | 31 | -------------------------------------------------------------------------------- /docs/manual/interface/modifier/index.md: -------------------------------------------------------------------------------- 1 | # Modifier 2 | 3 | Modifiers are some of the key components of [ASLS Studio](/). They offer a way to interract and manipulate a show's ressources such as [universe](/modifiers/universe/), [Groups](/modifiers/group/), [chases](/modifiers/chase/) and much more, live. They are placed at the bottom section of the app and can be accessed by interracting with both the [toolbar](/interface/toolbar/) and [group pool](/interface/grouppool/) interface components. 4 | 5 | Modifiers are comprised of modifier-specific widgets that can be used in order to visualize, edit and store show properties. 6 | 7 | | Modifier | Purpose | 8 | | ----------------- | --------------------------------------------------------------------------------------------- | 9 | | [Universe Modifier](/modifiers/universe/) | Patch, manipulate and manage fixtures in a given universe | 10 | | [Group Modifier](/modifiers/group/) | Dispatch, organize and trigger sets of [scenes](/workflow/scenes/) and [effects](/workflow/effects/) over a set of grouped fixtures. | 11 | | [Chase Modifier](/modifiers/chase/) | Arrange a set of group cues to be triggered sequentially or in parallel over time.| -------------------------------------------------------------------------------- /docs/manual/introduction/index.md: -------------------------------------------------------------------------------- 1 | # What is ASLS Studio 2 | 3 | [ASLS Studio](https://asls.io/studio) is a powerful open-source, web-based, DMX lighting control software and visualizer. It comes with standard DMX lighting control software features such as Universe patching, Fixture grouping, Scene generation, Effect engines and much more. 4 | 5 |
6 | 7 | Just want to try it out? Skip to the [Live Browser Demo](https://asls.io/studio/live). Come back later and install [ASLS Studio](https://asls.io/studio) on your machine by following the [Quickstart guide](#). 8 | 9 |
10 | 11 | :::warning 12 | The current distribution of [ASLS Studio](https://asls.io/studio) is in beta status. Listed features are provided as-is, without any guarantee. Please report any issue over the [project's repository](https://github.com/ASLS-org/studio). 13 | 14 | ::: 15 | 16 | 17 | ## Use Cases 18 | 19 | - **Live Show Control** 20 | 21 | - **Fully Timecoded Show Control** 22 | 23 | - **Art installations & Experiments** 24 | 25 | - **Architectural Lighting Management** 26 | 27 | ## Features 28 | ASLS Studio comes with standard DMX lighting control software features such as [Universe patching](/workflow/patching/), [Fixture grouping](/workflow/grouping/), [Scene generation](/workflow/scenes/), [Effect engines](/workflow/effects/), [Show Emulation](/interface/visualizer/) and much more. The following manual aims to guide you through each individual feature. 29 | 30 | ## Ambitions 31 | -------------------------------------------------------------------------------- /docs/manual/introduction/overview.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/introduction/overview.md -------------------------------------------------------------------------------- /docs/manual/public/ASLSlogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/ASLSlogo.png -------------------------------------------------------------------------------- /docs/manual/public/UI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/UI.png -------------------------------------------------------------------------------- /docs/manual/public/__favicon.img: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/__favicon.img -------------------------------------------------------------------------------- /docs/manual/public/animated.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/animated.gif -------------------------------------------------------------------------------- /docs/manual/public/animated.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/animated.webm -------------------------------------------------------------------------------- /docs/manual/public/asls-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/asls-logo.png -------------------------------------------------------------------------------- /docs/manual/public/asls.logo.blue.only.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/asls.logo.blue.only.png -------------------------------------------------------------------------------- /docs/manual/public/asls.logo.white.only.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/asls.logo.white.only.png -------------------------------------------------------------------------------- /docs/manual/public/asls.logo.white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/asls.logo.white.png -------------------------------------------------------------------------------- /docs/manual/public/hero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/hero.png -------------------------------------------------------------------------------- /docs/manual/public/interface/chase_idle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/chase_idle.png -------------------------------------------------------------------------------- /docs/manual/public/interface/chase_playing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/chase_playing.png -------------------------------------------------------------------------------- /docs/manual/public/interface/chase_playing.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/chase_playing.webm -------------------------------------------------------------------------------- /docs/manual/public/interface/group-pool_modulate-channels_new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/group-pool_modulate-channels_new.png -------------------------------------------------------------------------------- /docs/manual/public/interface/group-pool_new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/group-pool_new.png -------------------------------------------------------------------------------- /docs/manual/public/interface/group_pool.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/group_pool.webm -------------------------------------------------------------------------------- /docs/manual/public/interface/group_pool_add_popup.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/group_pool_add_popup.webm -------------------------------------------------------------------------------- /docs/manual/public/interface/group_pool_chasepool.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/group_pool_chasepool.webm -------------------------------------------------------------------------------- /docs/manual/public/interface/modifier_chase.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/modifier_chase.webm -------------------------------------------------------------------------------- /docs/manual/public/interface/modifier_chase_timeline_widget.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/modifier_chase_timeline_widget.webm -------------------------------------------------------------------------------- /docs/manual/public/interface/modifier_group.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/modifier_group.webm -------------------------------------------------------------------------------- /docs/manual/public/interface/modifier_group_cue-settings_widget.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/modifier_group_cue-settings_widget.webm -------------------------------------------------------------------------------- /docs/manual/public/interface/modifier_group_cuepool_popup_add.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/modifier_group_cuepool_popup_add.webm -------------------------------------------------------------------------------- /docs/manual/public/interface/modifier_group_cuepool_widget.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/modifier_group_cuepool_widget.webm -------------------------------------------------------------------------------- /docs/manual/public/interface/modifier_group_cuepool_widget_add.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/modifier_group_cuepool_widget_add.webm -------------------------------------------------------------------------------- /docs/manual/public/interface/modifier_group_cuepool_widget_edit.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/modifier_group_cuepool_widget_edit.webm -------------------------------------------------------------------------------- /docs/manual/public/interface/modifier_group_cuepool_widget_play.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/modifier_group_cuepool_widget_play.webm -------------------------------------------------------------------------------- /docs/manual/public/interface/modifier_group_effect-tool_widget.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/modifier_group_effect-tool_widget.webm -------------------------------------------------------------------------------- /docs/manual/public/interface/modifier_group_fade-editor_widget.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/modifier_group_fade-editor_widget.webm -------------------------------------------------------------------------------- /docs/manual/public/interface/modifier_group_fixture-channels_widget.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/modifier_group_fixture-channels_widget.webm -------------------------------------------------------------------------------- /docs/manual/public/interface/modifier_group_scene-fixtures_widget.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/modifier_group_scene-fixtures_widget.webm -------------------------------------------------------------------------------- /docs/manual/public/interface/modifier_group_settings_widget.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/modifier_group_settings_widget.webm -------------------------------------------------------------------------------- /docs/manual/public/interface/modifier_universe.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/modifier_universe.webm -------------------------------------------------------------------------------- /docs/manual/public/interface/modifier_universe_2.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/modifier_universe_2.webm -------------------------------------------------------------------------------- /docs/manual/public/interface/modifier_universe_3.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/modifier_universe_3.webm -------------------------------------------------------------------------------- /docs/manual/public/interface/modifier_universe_4.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/modifier_universe_4.webm -------------------------------------------------------------------------------- /docs/manual/public/interface/modifier_universe_colorpicker_widget.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/modifier_universe_colorpicker_widget.webm -------------------------------------------------------------------------------- /docs/manual/public/interface/modifier_universe_fixture_channels_widget.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/modifier_universe_fixture_channels_widget.webm -------------------------------------------------------------------------------- /docs/manual/public/interface/modifier_universe_fixture_settings_widget.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/modifier_universe_fixture_settings_widget.webm -------------------------------------------------------------------------------- /docs/manual/public/interface/modifier_universe_fixturepool_select_ctrl_widget.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/modifier_universe_fixturepool_select_ctrl_widget.webm -------------------------------------------------------------------------------- /docs/manual/public/interface/modifier_universe_fixturepool_widget_filter.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/modifier_universe_fixturepool_widget_filter.webm -------------------------------------------------------------------------------- /docs/manual/public/interface/modifier_universe_fixturepool_widget_select.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/modifier_universe_fixturepool_widget_select.webm -------------------------------------------------------------------------------- /docs/manual/public/interface/modifier_universe_pantilt_widget.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/modifier_universe_pantilt_widget.webm -------------------------------------------------------------------------------- /docs/manual/public/interface/modifier_universe_settings_widget.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/modifier_universe_settings_widget.webm -------------------------------------------------------------------------------- /docs/manual/public/interface/patch_bay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/patch_bay.png -------------------------------------------------------------------------------- /docs/manual/public/interface/patch_bay.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/patch_bay.webm -------------------------------------------------------------------------------- /docs/manual/public/interface/patch_bay_add_fixture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/patch_bay_add_fixture.png -------------------------------------------------------------------------------- /docs/manual/public/interface/patch_bay_delete_fixture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/patch_bay_delete_fixture.png -------------------------------------------------------------------------------- /docs/manual/public/interface/patch_bay_filtered.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/patch_bay_filtered.png -------------------------------------------------------------------------------- /docs/manual/public/interface/patch_bay_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/patch_bay_selected.png -------------------------------------------------------------------------------- /docs/manual/public/interface/patch_bay_selected_grouped.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/patch_bay_selected_grouped.png -------------------------------------------------------------------------------- /docs/manual/public/interface/patch_bay_unfolded.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/patch_bay_unfolded.png -------------------------------------------------------------------------------- /docs/manual/public/interface/toolbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/toolbar.png -------------------------------------------------------------------------------- /docs/manual/public/interface/toolbar.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/toolbar.webm -------------------------------------------------------------------------------- /docs/manual/public/interface/toolbar_nav.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/toolbar_nav.png -------------------------------------------------------------------------------- /docs/manual/public/interface/toolbar_nav_edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/toolbar_nav_edit.png -------------------------------------------------------------------------------- /docs/manual/public/interface/toolbar_nav_edit_redo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/toolbar_nav_edit_redo.png -------------------------------------------------------------------------------- /docs/manual/public/interface/toolbar_nav_edit_undo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/toolbar_nav_edit_undo.png -------------------------------------------------------------------------------- /docs/manual/public/interface/toolbar_nav_file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/toolbar_nav_file.png -------------------------------------------------------------------------------- /docs/manual/public/interface/toolbar_nav_file_export.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/toolbar_nav_file_export.png -------------------------------------------------------------------------------- /docs/manual/public/interface/toolbar_nav_file_load.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/toolbar_nav_file_load.png -------------------------------------------------------------------------------- /docs/manual/public/interface/toolbar_nav_file_new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/toolbar_nav_file_new.png -------------------------------------------------------------------------------- /docs/manual/public/interface/toolbar_nav_file_save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/toolbar_nav_file_save.png -------------------------------------------------------------------------------- /docs/manual/public/interface/toolbar_nav_preferences.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/toolbar_nav_preferences.png -------------------------------------------------------------------------------- /docs/manual/public/interface/toolbar_nav_preferences_fixturelib.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/toolbar_nav_preferences_fixturelib.png -------------------------------------------------------------------------------- /docs/manual/public/interface/toolbar_nav_preferences_io.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/toolbar_nav_preferences_io.png -------------------------------------------------------------------------------- /docs/manual/public/interface/toolbar_nav_preferences_visualizer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/toolbar_nav_preferences_visualizer.png -------------------------------------------------------------------------------- /docs/manual/public/interface/visualizer.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/visualizer.webm -------------------------------------------------------------------------------- /docs/manual/public/interface/visualizer_controls_discrete.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/visualizer_controls_discrete.webm -------------------------------------------------------------------------------- /docs/manual/public/interface/visualizer_controls_rotate.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/visualizer_controls_rotate.webm -------------------------------------------------------------------------------- /docs/manual/public/interface/visualizer_controls_translate.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/interface/visualizer_controls_translate.webm -------------------------------------------------------------------------------- /docs/manual/public/overview.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/overview.webm -------------------------------------------------------------------------------- /docs/manual/public/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/screenshot.png -------------------------------------------------------------------------------- /docs/manual/public/studio_standalone_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/studio_standalone_logo.png -------------------------------------------------------------------------------- /docs/manual/public/studio_standalone_logo_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/docs/manual/public/studio_standalone_logo_dark.png -------------------------------------------------------------------------------- /docs/manual/vite.config.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable import/no-extraneous-dependencies */ 2 | import { defineConfig } from 'vite'; 3 | import svgLoader from 'vite-svg-loader'; 4 | 5 | export default defineConfig({ 6 | plugins: [svgLoader()], 7 | resolve: { 8 | alias: { 9 | '@': '../../src', 10 | }, 11 | extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue'], 12 | }, 13 | }); 14 | -------------------------------------------------------------------------------- /docs/manual/workflow/effects/index.md: -------------------------------------------------------------------------------- 1 | # Creating Effects 2 | 3 | Documentation in progress. -------------------------------------------------------------------------------- /docs/manual/workflow/environment/index.md: -------------------------------------------------------------------------------- 1 | # Setting Up Environment 2 | 3 | Documentation in progress. -------------------------------------------------------------------------------- /docs/manual/workflow/grouping/index.md: -------------------------------------------------------------------------------- 1 | # Setting Up Groups 2 | 3 | Documentation in progress. -------------------------------------------------------------------------------- /docs/manual/workflow/patching/index.md: -------------------------------------------------------------------------------- 1 | # Patching Fixtures 2 | 3 | Documentation in progress. -------------------------------------------------------------------------------- /docs/manual/workflow/scenes/index.md: -------------------------------------------------------------------------------- 1 | # Creating Scenes 2 | 3 | Documentation in progress. -------------------------------------------------------------------------------- /docs/manual/workflow/triggering/index.md: -------------------------------------------------------------------------------- 1 | # Triggering Cues 2 | 3 | Documentation in progress. -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | ASLS Studio 11 | 12 | 13 | 14 | 18 |
19 | 20 | 21 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": ".", 4 | "paths": { 5 | "@/*": ["src/*"], 6 | "@root/*": ["./"] 7 | }, 8 | "sourceMap": true, 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /public/demo/images/asls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/public/demo/images/asls.png -------------------------------------------------------------------------------- /public/demo/images/asls2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/public/demo/images/asls2.png -------------------------------------------------------------------------------- /public/demo/images/blank.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/public/demo/images/blank.png -------------------------------------------------------------------------------- /public/demo/images/blank2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/public/demo/images/blank2.png -------------------------------------------------------------------------------- /public/demo/showfiles/blank.showfile.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "New Project", 3 | "bpm": 120, 4 | "fixtures": [], 5 | "universes": [ 6 | { 7 | "id": 0, 8 | "name": "Universe 0", 9 | "color": "#D9416B", 10 | "fixtures": [] 11 | }, 12 | { 13 | "id": 1, 14 | "name": "Universe 1", 15 | "color": "#8F5BC9", 16 | "fixtures": [] 17 | }, 18 | { 19 | "id": 2, 20 | "name": "Universe 2", 21 | "color": "#5A8CD3", 22 | "fixtures": [] 23 | }, 24 | { 25 | "id": 3, 26 | "name": "Universe 3", 27 | "color": "#38B553", 28 | "fixtures": [] 29 | } 30 | ], 31 | "groups": [ 32 | { 33 | "id": 0, 34 | "name": "Group 0", 35 | "fixtures": [], 36 | "cues": [], 37 | "chases": [], 38 | "solo": false, 39 | "disabled": false, 40 | "color": "#D9416B", 41 | "master": 255 42 | }, 43 | { 44 | "id": 1, 45 | "name": "Group 1", 46 | "fixtures": [], 47 | "cues": [], 48 | "chases": [], 49 | "solo": false, 50 | "disabled": false, 51 | "color": "#E046A6", 52 | "master": 255 53 | }, 54 | { 55 | "id": 2, 56 | "name": "Group 2", 57 | "fixtures": [], 58 | "cues": [], 59 | "chases": [], 60 | "solo": false, 61 | "disabled": false, 62 | "color": "#A45BC9", 63 | "master": 255 64 | }, 65 | { 66 | "id": 3, 67 | "name": "Group 3", 68 | "fixtures": [], 69 | "cues": [], 70 | "chases": [], 71 | "solo": false, 72 | "disabled": false, 73 | "color": "#8F5BC9", 74 | "master": 255 75 | } 76 | ], 77 | "visualizer": { 78 | "globalFoggingState": 0, 79 | "globalFoggingDensity": 80, 80 | "globalFoggingTurbulences": 50, 81 | "globalBrightness": 60 82 | }, 83 | "selectedOutputs": [] 84 | } 85 | -------------------------------------------------------------------------------- /public/docs/images/asls.logo.blue.only.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/public/docs/images/asls.logo.blue.only.png -------------------------------------------------------------------------------- /public/docs/images/asls.logo.white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/public/docs/images/asls.logo.white.png -------------------------------------------------------------------------------- /public/fixtures/README.md: -------------------------------------------------------------------------------- 1 | # Fixture Library 2 | ## Updating Fixture List 3 | ### 4 | Place your OFL-formated JSON fixture files within a folder which name should be the manufacturer's **unique name** as follows. 5 | ``` 6 | ASLS_STUDIO 7 | └───public 8 | │ └───fixtures 9 | | └───manufacturer-name 10 | | │ OFL-fixture.json 11 | 12 | ``` 13 | ## Regenerating Fixture List 14 | In order to apply modifications (Add/remove manufacturer and/or fixtures) you must run the following command: 15 | 16 | ```console 17 | foo@bar:~/ASLS_STUDIO/public/fixtures$ node update_fixturelist.js 18 | ``` -------------------------------------------------------------------------------- /public/fixtures/beamz/h2000-faze-machine.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/fixture.json", 3 | "name": "H2000 Faze Machine", 4 | "categories": ["Hazer", "Smoke"], 5 | "meta": { 6 | "authors": ["DMS"], 7 | "createDate": "2019-02-21", 8 | "lastModifyDate": "2019-02-21", 9 | "importPlugin": { 10 | "plugin": "qlcplus_4.11.2", 11 | "date": "2019-02-21", 12 | "comment": "created by Q Light Controller Plus (version 4.10.5b)" 13 | } 14 | }, 15 | "links": { 16 | "manual": [ 17 | "https://www.tronios.com/fileuploader/download/download/?d=0&file=custom%2Fupload%2F160.512+Beamz+Fazer+H2000+V1.4.pdf" 18 | ], 19 | "productPage": [ 20 | "https://www.beamzlighting.com/product/h2000-faze-machine-with-dmx/" 21 | ], 22 | "video": [ 23 | "https://www.youtube.com/watch?v=Fxl80HCGqjA" 24 | ] 25 | }, 26 | "physical": { 27 | "dimensions": [185, 350, 360], 28 | "weight": 6.8, 29 | "power": 1700, 30 | "DMXconnector": "3-pin" 31 | }, 32 | "availableChannels": { 33 | "Smoke": { 34 | "capability": { 35 | "type": "Fog", 36 | "fogOutputStart": "off", 37 | "fogOutputEnd": "strong" 38 | } 39 | }, 40 | "Fan": { 41 | "capability": { 42 | "type": "Speed", 43 | "speedStart": "80%", 44 | "speedEnd": "100%", 45 | "comment": "Fan Speed" 46 | } 47 | } 48 | }, 49 | "modes": [ 50 | { 51 | "name": "2-channel", 52 | "shortName": "2ch", 53 | "channels": [ 54 | "Smoke", 55 | "Fan" 56 | ] 57 | } 58 | ] 59 | } 60 | -------------------------------------------------------------------------------- /public/fixtures/cameo/instant-air-1000-pro.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/fixture.json", 3 | "name": "Instant Air 1000 Pro", 4 | "shortName": " CLIA1000PRO", 5 | "categories": ["Fan"], 6 | "meta": { 7 | "authors": ["Felix Edelmann"], 8 | "createDate": "2019-07-31", 9 | "lastModifyDate": "2019-07-31" 10 | }, 11 | "comment": "Wind machine", 12 | "links": { 13 | "manual": [ 14 | "https://adamhall.s3.amazonaws.com/media/MARKEN/CAMEO/CLIA1000PRO/CLIA1000PRO_CAMEO_Bedienungsanleitung_EN_DE_FR_ES_PL_IT.PDF" 15 | ], 16 | "productPage": [ 17 | "https://www.cameolight.com/en/solutions/install/fog-effect-machines/wind-machines/2145/instant-air-1000-pro" 18 | ], 19 | "video": [ 20 | "https://www.youtube.com/watch?v=YYE02A0awqo" 21 | ] 22 | }, 23 | "physical": { 24 | "dimensions": [385, 385, 515], 25 | "weight": 10.9, 26 | "power": 74, 27 | "DMXconnector": "3-pin and 5-pin" 28 | }, 29 | "availableChannels": { 30 | "Fan": { 31 | "capabilities": [ 32 | { 33 | "dmxRange": [0, 5], 34 | "type": "NoFunction" 35 | }, 36 | { 37 | "dmxRange": [6, 255], 38 | "type": "Rotation", 39 | "speedStart": "slow CW", 40 | "speedEnd": "fast CW" 41 | } 42 | ] 43 | } 44 | }, 45 | "modes": [ 46 | { 47 | "name": "1-channel", 48 | "shortName": "1ch", 49 | "channels": [ 50 | "Fan" 51 | ] 52 | } 53 | ] 54 | } 55 | -------------------------------------------------------------------------------- /public/fixtures/cameo/instant-air-2000-pro.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/fixture.json", 3 | "name": "Instant Air 2000 Pro", 4 | "shortName": "CLIA2000PRO", 5 | "categories": ["Fan"], 6 | "meta": { 7 | "authors": ["Felix Edelmann"], 8 | "createDate": "2019-07-31", 9 | "lastModifyDate": "2019-07-31" 10 | }, 11 | "comment": "Wind machine", 12 | "links": { 13 | "manual": [ 14 | "https://adamhall.s3.amazonaws.com/media/MARKEN/CAMEO/CLIA2000PRO/CLIA2000PRO_Cameo_Bedienungsanleitung_EN_DE_FR_ES_PL_IT.pdf" 15 | ], 16 | "productPage": [ 17 | "https://www.cameolight.com/en/solutions/rental/fog-effect-machines/wind-machines/20175/instant-air-2000-pro" 18 | ] 19 | }, 20 | "physical": { 21 | "dimensions": [385, 385, 515], 22 | "weight": 8.6, 23 | "power": 250, 24 | "DMXconnector": "3-pin and 5-pin" 25 | }, 26 | "availableChannels": { 27 | "Fan": { 28 | "capabilities": [ 29 | { 30 | "dmxRange": [0, 5], 31 | "type": "NoFunction" 32 | }, 33 | { 34 | "dmxRange": [6, 255], 35 | "type": "Rotation", 36 | "speedStart": "440rpm", 37 | "speedEnd": "2500rpm" 38 | } 39 | ] 40 | } 41 | }, 42 | "modes": [ 43 | { 44 | "name": "1-channel", 45 | "shortName": "1ch", 46 | "channels": [ 47 | "Fan" 48 | ] 49 | } 50 | ] 51 | } 52 | -------------------------------------------------------------------------------- /public/fixtures/dedolight/dled4-bi.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/fixture.json", 3 | "name": "DLED4-BI", 4 | "categories": ["Dimmer"], 5 | "meta": { 6 | "authors": ["Jean-François Losson"], 7 | "createDate": "2018-11-11", 8 | "lastModifyDate": "2018-11-11" 9 | }, 10 | "comment": "The DT4-BI-DMX power supply is needed for DMX control.", 11 | "links": { 12 | "productPage": [ 13 | "https://www.dedoweigertfilm.de/dwf-en/products/dedolight/dedolight-dled-series4.php" 14 | ], 15 | "other": [ 16 | "https://www.mediatec.de/media/pdf/fa/f8/cb/DLED4_DATENBLATT_0005.pdf" 17 | ] 18 | }, 19 | "physical": { 20 | "dimensions": [109, 200, 100], 21 | "weight": 1.3, 22 | "power": 47, 23 | "DMXconnector": "5-pin", 24 | "bulb": { 25 | "type": "Bicolor 40W LED" 26 | }, 27 | "lens": { 28 | "degreesMinMax": [4, 60] 29 | } 30 | }, 31 | "availableChannels": { 32 | "Dimmer": { 33 | "highlightValue": "100%", 34 | "capability": { 35 | "type": "Intensity" 36 | } 37 | }, 38 | "Color Temperature": { 39 | "capability": { 40 | "type": "ColorTemperature", 41 | "colorTemperatureStart": "2600K", 42 | "colorTemperatureEnd": "6800K" 43 | } 44 | } 45 | }, 46 | "modes": [ 47 | { 48 | "name": "DT4-BI-DMX", 49 | "channels": [ 50 | "Dimmer", 51 | "Color Temperature" 52 | ] 53 | } 54 | ] 55 | } 56 | -------------------------------------------------------------------------------- /public/fixtures/dedolight/dled7-bi.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/fixture.json", 3 | "name": "DLED7-BI", 4 | "categories": ["Dimmer"], 5 | "meta": { 6 | "authors": ["PY DOUGNAC"], 7 | "createDate": "2018-12-19", 8 | "lastModifyDate": "2018-12-19" 9 | }, 10 | "comment": "The DT7-BI-DMX power supply is needed for DMX control.", 11 | "links": { 12 | "productPage": [ 13 | "https://www.dedoweigertfilm.de/dwf-en/home_banner_prod/turbo-series.php" 14 | ], 15 | "other": [ 16 | "https://www.mediatec.de/media/pdf/04/d6/8c/TURBO_SERIE_BROSCHUERE_0005.pdf" 17 | ] 18 | }, 19 | "physical": { 20 | "dimensions": [109, 200, 100], 21 | "weight": 1.3, 22 | "power": 90, 23 | "DMXconnector": "5-pin", 24 | "bulb": { 25 | "type": "Bicolor 90W LED" 26 | }, 27 | "lens": { 28 | "degreesMinMax": [4, 60] 29 | } 30 | }, 31 | "availableChannels": { 32 | "Dimmer": { 33 | "capability": { 34 | "type": "Intensity" 35 | } 36 | }, 37 | "Color Temperature": { 38 | "capability": { 39 | "type": "ColorTemperature", 40 | "colorTemperatureStart": "2700K", 41 | "colorTemperatureEnd": "6500K" 42 | } 43 | } 44 | }, 45 | "modes": [ 46 | { 47 | "name": "DT7-BI-DMX", 48 | "channels": [ 49 | "Dimmer", 50 | "Color Temperature" 51 | ] 52 | } 53 | ] 54 | } 55 | -------------------------------------------------------------------------------- /public/fixtures/elation/uni-bar.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/fixture.json", 3 | "name": "UNI BAR", 4 | "categories": ["Dimmer"], 5 | "meta": { 6 | "authors": ["Homemdamesadeluz"], 7 | "createDate": "2019-06-17", 8 | "lastModifyDate": "2019-06-17" 9 | }, 10 | "links": { 11 | "manual": [ 12 | "https://cdb.s3.amazonaws.com/ItemRelatedFiles/10326/elation_UNI-BAR_user_manual_090216.pdf" 13 | ], 14 | "productPage": [ 15 | "https://www.elationlighting.com/uni-bar" 16 | ] 17 | }, 18 | "physical": { 19 | "dimensions": [200, 66.8, 82], 20 | "weight": 1.1, 21 | "power": 1200, 22 | "DMXconnector": "3-pin" 23 | }, 24 | "availableChannels": { 25 | "Dimmer": { 26 | "capability": { 27 | "type": "Intensity" 28 | } 29 | } 30 | }, 31 | "modes": [ 32 | { 33 | "name": "Dimmer", 34 | "channels": [ 35 | "Dimmer" 36 | ] 37 | } 38 | ] 39 | } 40 | -------------------------------------------------------------------------------- /public/fixtures/fovitec/600xb.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/fixture.json", 3 | "name": "600XB", 4 | "categories": ["Dimmer"], 5 | "meta": { 6 | "authors": ["Anonymous"], 7 | "createDate": "2021-08-20", 8 | "lastModifyDate": "2021-08-20" 9 | }, 10 | "links": { 11 | "productPage": [ 12 | "https://www.fovitec.com/products/600xb-bi-color-led-panel-with-dmx" 13 | ] 14 | }, 15 | "physical": { 16 | "dimensions": [394, 399, 76], 17 | "power": 36, 18 | "bulb": { 19 | "type": "600× LED", 20 | "lumens": 1420 21 | }, 22 | "lens": { 23 | "degreesMinMax": [45, 45] 24 | } 25 | }, 26 | "availableChannels": { 27 | "Intensity": { 28 | "capability": { 29 | "type": "Intensity" 30 | } 31 | }, 32 | "Color Temperature": { 33 | "capability": { 34 | "type": "ColorTemperature", 35 | "colorTemperatureStart": "3200K", 36 | "colorTemperatureEnd": "5600K" 37 | } 38 | } 39 | }, 40 | "modes": [ 41 | { 42 | "name": "2-channel", 43 | "shortName": "2ch", 44 | "channels": [ 45 | "Intensity", 46 | "Color Temperature" 47 | ] 48 | } 49 | ] 50 | } 51 | -------------------------------------------------------------------------------- /public/fixtures/futurelight/stb-648-led-strobe-smd-5050.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/fixture.json", 3 | "name": "STB-648 LED Strobe SMD 5050", 4 | "categories": ["Strobe"], 5 | "meta": { 6 | "authors": ["Felix Edelmann"], 7 | "createDate": "2018-02-03", 8 | "lastModifyDate": "2018-08-09" 9 | }, 10 | "links": { 11 | "manual": [ 12 | "https://media.steinigke.de/documents_t/51841370-MANUAL-1.00-de-en_00068855.pdf" 13 | ], 14 | "video": [ 15 | "https://www.youtube.com/watch?v=M_syNbUd4iY" 16 | ] 17 | }, 18 | "physical": { 19 | "dimensions": [420, 225, 165], 20 | "weight": 4.5, 21 | "power": 160, 22 | "DMXconnector": "3-pin and 5-pin", 23 | "bulb": { 24 | "type": "648x SMD 5050 LEDs" 25 | } 26 | }, 27 | "availableChannels": { 28 | "Strobe": { 29 | "defaultValue": 0, 30 | "capabilities": [ 31 | { 32 | "dmxRange": [0, 0], 33 | "type": "NoFunction" 34 | }, 35 | { 36 | "dmxRange": [1, 255], 37 | "type": "ShutterStrobe", 38 | "shutterEffect": "Strobe", 39 | "speedStart": "1Hz", 40 | "speedEnd": "30Hz" 41 | } 42 | ] 43 | }, 44 | "Brightness": { 45 | "defaultValue": 0, 46 | "capability": { 47 | "type": "Intensity" 48 | } 49 | } 50 | }, 51 | "modes": [ 52 | { 53 | "name": "2-channel", 54 | "shortName": "2ch", 55 | "channels": [ 56 | "Strobe", 57 | "Brightness" 58 | ] 59 | } 60 | ] 61 | } 62 | -------------------------------------------------------------------------------- /public/fixtures/generic/4-channel-dimmer-pack.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/fixture.json", 3 | "name": "4-Channel Dimmer Pack", 4 | "categories": ["Dimmer"], 5 | "meta": { 6 | "authors": ["Goetz"], 7 | "createDate": "2021-06-17", 8 | "lastModifyDate": "2021-06-17" 9 | }, 10 | "comment": "Your usual off-the-shelf generic 4 Channel Dimmer Pack from Botec, Stairville, Lightmaxx, EuroLite, ShowTex, Varytec etc.", 11 | "matrix": { 12 | "pixelCount": [4, 1, 1], 13 | "pixelGroups": { 14 | "Master": "all", 15 | "1/2": ["1", "2"], 16 | "3/4": ["3", "4"] 17 | } 18 | }, 19 | "templateChannels": { 20 | "Dimmer $pixelKey": { 21 | "capability": { 22 | "type": "Intensity", 23 | "brightnessStart": "0%", 24 | "brightnessEnd": "100%" 25 | } 26 | } 27 | }, 28 | "modes": [ 29 | { 30 | "name": "1-channel", 31 | "shortName": "1ch", 32 | "channels": [ 33 | "Dimmer Master" 34 | ] 35 | }, 36 | { 37 | "name": "2-channel", 38 | "shortName": "2ch", 39 | "channels": [ 40 | "Dimmer 1/2", 41 | "Dimmer 3/4" 42 | ] 43 | }, 44 | { 45 | "name": "4-channel", 46 | "shortName": "4ch", 47 | "channels": [ 48 | "Dimmer 1", 49 | "Dimmer 2", 50 | "Dimmer 3", 51 | "Dimmer 4" 52 | ] 53 | } 54 | ] 55 | } 56 | -------------------------------------------------------------------------------- /public/fixtures/generic/cmy-fader.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/fixture.json", 3 | "name": "CMY Fader", 4 | "shortName": "CMY", 5 | "categories": ["Color Changer"], 6 | "meta": { 7 | "authors": ["Flo Edelmann"], 8 | "createDate": "2017-12-12", 9 | "lastModifyDate": "2018-07-21" 10 | }, 11 | "availableChannels": { 12 | "Cyan": { 13 | "fineChannelAliases": ["Cyan fine", "Cyan fine^2"], 14 | "capability": { 15 | "type": "ColorIntensity", 16 | "color": "Cyan" 17 | } 18 | }, 19 | "Magenta": { 20 | "fineChannelAliases": ["Magenta fine", "Magenta fine^2"], 21 | "capability": { 22 | "type": "ColorIntensity", 23 | "color": "Magenta" 24 | } 25 | }, 26 | "Yellow": { 27 | "fineChannelAliases": ["Yellow fine", "Yellow fine^2"], 28 | "capability": { 29 | "type": "ColorIntensity", 30 | "color": "Yellow" 31 | } 32 | } 33 | }, 34 | "modes": [ 35 | { 36 | "name": "8 bit", 37 | "shortName": "8bit", 38 | "channels": [ 39 | "Cyan", 40 | "Magenta", 41 | "Yellow" 42 | ] 43 | }, 44 | { 45 | "name": "16 bit", 46 | "shortName": "16bit", 47 | "channels": [ 48 | "Cyan", 49 | "Cyan fine", 50 | "Magenta", 51 | "Magenta fine", 52 | "Yellow", 53 | "Yellow fine" 54 | ] 55 | }, 56 | { 57 | "name": "24 bit", 58 | "shortName": "24bit", 59 | "channels": [ 60 | "Cyan", 61 | "Cyan fine", 62 | "Cyan fine^2", 63 | "Magenta", 64 | "Magenta fine", 65 | "Magenta fine^2", 66 | "Yellow", 67 | "Yellow fine", 68 | "Yellow fine^2" 69 | ] 70 | } 71 | ] 72 | } 73 | -------------------------------------------------------------------------------- /public/fixtures/generic/desk-channel.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/fixture.json", 3 | "name": "Desk Channel", 4 | "shortName": "DeskCh", 5 | "categories": ["Dimmer"], 6 | "meta": { 7 | "authors": ["Flo Edelmann"], 8 | "createDate": "2017-07-17", 9 | "lastModifyDate": "2018-07-21" 10 | }, 11 | "availableChannels": { 12 | "Intensity": { 13 | "fineChannelAliases": ["Intensity fine", "Intensity fine^2"], 14 | "capability": { 15 | "type": "Intensity" 16 | } 17 | } 18 | }, 19 | "modes": [ 20 | { 21 | "name": "8 bit", 22 | "shortName": "8bit", 23 | "channels": [ 24 | "Intensity" 25 | ] 26 | }, 27 | { 28 | "name": "16 bit", 29 | "shortName": "16bit", 30 | "channels": [ 31 | "Intensity", 32 | "Intensity fine" 33 | ] 34 | }, 35 | { 36 | "name": "24 bit", 37 | "shortName": "24bit", 38 | "channels": [ 39 | "Intensity", 40 | "Intensity fine", 41 | "Intensity fine^2" 42 | ] 43 | } 44 | ] 45 | } 46 | -------------------------------------------------------------------------------- /public/fixtures/generic/rgb-fader.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/fixture.json", 3 | "name": "RGB Fader", 4 | "shortName": "RGB", 5 | "categories": ["Color Changer"], 6 | "meta": { 7 | "authors": ["Flo Edelmann"], 8 | "createDate": "2017-07-17", 9 | "lastModifyDate": "2018-07-21" 10 | }, 11 | "availableChannels": { 12 | "Red": { 13 | "fineChannelAliases": ["Red fine", "Red fine^2"], 14 | "capability": { 15 | "type": "ColorIntensity", 16 | "color": "Red" 17 | } 18 | }, 19 | "Green": { 20 | "fineChannelAliases": ["Green fine", "Green fine^2"], 21 | "capability": { 22 | "type": "ColorIntensity", 23 | "color": "Green" 24 | } 25 | }, 26 | "Blue": { 27 | "fineChannelAliases": ["Blue fine", "Blue fine^2"], 28 | "capability": { 29 | "type": "ColorIntensity", 30 | "color": "Blue" 31 | } 32 | } 33 | }, 34 | "modes": [ 35 | { 36 | "name": "8 bit", 37 | "shortName": "8bit", 38 | "channels": [ 39 | "Red", 40 | "Green", 41 | "Blue" 42 | ] 43 | }, 44 | { 45 | "name": "16 bit", 46 | "shortName": "16bit", 47 | "channels": [ 48 | "Red", 49 | "Red fine", 50 | "Green", 51 | "Green fine", 52 | "Blue", 53 | "Blue fine" 54 | ] 55 | }, 56 | { 57 | "name": "24 bit", 58 | "shortName": "24bit", 59 | "channels": [ 60 | "Red", 61 | "Red fine", 62 | "Red fine^2", 63 | "Green", 64 | "Green fine", 65 | "Green fine^2", 66 | "Blue", 67 | "Blue fine", 68 | "Blue fine^2" 69 | ] 70 | } 71 | ] 72 | } 73 | -------------------------------------------------------------------------------- /public/fixtures/generic/strobe.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/fixture.json", 3 | "name": "Strobe", 4 | "categories": ["Strobe"], 5 | "meta": { 6 | "authors": ["Mikey Rowlands"], 7 | "createDate": "2019-11-01", 8 | "lastModifyDate": "2019-11-01" 9 | }, 10 | "availableChannels": { 11 | "Frequency": { 12 | "capability": { 13 | "type": "ShutterStrobe", 14 | "shutterEffect": "Strobe", 15 | "speedStart": "slow", 16 | "speedEnd": "fast" 17 | } 18 | }, 19 | "Dimmer": { 20 | "defaultValue": 0, 21 | "capability": { 22 | "type": "Intensity" 23 | } 24 | } 25 | }, 26 | "modes": [ 27 | { 28 | "name": "Frequency + Dimmer", 29 | "channels": [ 30 | "Frequency", 31 | "Dimmer" 32 | ] 33 | }, 34 | { 35 | "name": "Dimmer + Frequency", 36 | "channels": [ 37 | "Dimmer", 38 | "Frequency" 39 | ] 40 | } 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /public/fixtures/hazebase/base-hazer-pro.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/fixture.json", 3 | "name": "base*hazer*pro", 4 | "shortName": "basehazerpro", 5 | "categories": ["Hazer"], 6 | "meta": { 7 | "authors": ["Flo Edelmann"], 8 | "createDate": "2019-11-05", 9 | "lastModifyDate": "2019-11-05" 10 | }, 11 | "links": { 12 | "manual": [ 13 | "https://hazebase.com/wp-content/uploads/manual_base_hazer.pdf" 14 | ], 15 | "productPage": [ 16 | "https://www.hazebaseamerica.com/base_hazer_pro.php" 17 | ], 18 | "video": [ 19 | "https://www.youtube.com/watch?v=m1Z7sziCdL0" 20 | ] 21 | }, 22 | "physical": { 23 | "dimensions": [59.4, 18.5, 54], 24 | "weight": 18, 25 | "power": 1500, 26 | "DMXconnector": "5-pin" 27 | }, 28 | "availableChannels": { 29 | "Haze": { 30 | "capability": { 31 | "type": "Fog", 32 | "fogType": "Haze", 33 | "fogOutputStart": "off", 34 | "fogOutputEnd": "strong" 35 | } 36 | }, 37 | "Fan": { 38 | "capability": { 39 | "type": "Rotation", 40 | "speedStart": "slow CW", 41 | "speedEnd": "fast CW" 42 | } 43 | } 44 | }, 45 | "modes": [ 46 | { 47 | "name": "2-channel", 48 | "shortName": "2ch", 49 | "channels": [ 50 | "Haze", 51 | "Fan" 52 | ] 53 | } 54 | ] 55 | } 56 | -------------------------------------------------------------------------------- /public/fixtures/hive/bumble-bee-25-cx.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/fixture.json", 3 | "name": "Bumble Bee 25-CX", 4 | "categories": ["Dimmer"], 5 | "meta": { 6 | "authors": ["Dyami Caliri"], 7 | "createDate": "2021-02-20", 8 | "lastModifyDate": "2021-02-20" 9 | }, 10 | "links": { 11 | "manual": [ 12 | "https://drive.google.com/file/d/1pJK6BaAhvOGTwMP1VhfO8GH25YicCDwS/view" 13 | ], 14 | "productPage": [ 15 | "https://hivelighting.com/bb-25-cx/" 16 | ], 17 | "video": [ 18 | "https://www.youtube.com/watch?v=Q2pU13V46aw" 19 | ] 20 | }, 21 | "physical": { 22 | "dimensions": [100, 100, 67], 23 | "weight": 0.5, 24 | "power": 25, 25 | "DMXconnector": "5-pin", 26 | "bulb": { 27 | "type": "LED" 28 | }, 29 | "lens": { 30 | "degreesMinMax": [15, 180] 31 | } 32 | }, 33 | "availableChannels": { 34 | "Intensity": { 35 | "defaultValue": 0, 36 | "highlightValue": 255, 37 | "capability": { 38 | "type": "Intensity" 39 | } 40 | }, 41 | "CCT": { 42 | "capability": { 43 | "type": "ColorTemperature", 44 | "colorTemperatureStart": "1650K", 45 | "colorTemperatureEnd": "8025K" 46 | } 47 | }, 48 | "Hue": { 49 | "defaultValue": 0, 50 | "capability": { 51 | "type": "Generic", 52 | "comment": "0…360°" 53 | } 54 | }, 55 | "Saturation": { 56 | "defaultValue": 0, 57 | "capability": { 58 | "type": "Generic", 59 | "comment": "0…100%" 60 | } 61 | } 62 | }, 63 | "modes": [ 64 | { 65 | "name": "HSI", 66 | "shortName": "HSI", 67 | "channels": [ 68 | "Intensity", 69 | "CCT", 70 | "Saturation", 71 | "Hue" 72 | ] 73 | } 74 | ] 75 | } 76 | -------------------------------------------------------------------------------- /public/fixtures/hive/hornet-200-cx.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/fixture.json", 3 | "name": "Hornet 200-CX", 4 | "categories": ["Dimmer"], 5 | "meta": { 6 | "authors": ["Dyami Caliri"], 7 | "createDate": "2021-02-20", 8 | "lastModifyDate": "2021-02-20" 9 | }, 10 | "links": { 11 | "manual": [ 12 | "https://drive.google.com/file/d/1pJK6BaAhvOGTwMP1VhfO8GH25YicCDwS/view" 13 | ], 14 | "productPage": [ 15 | "https://hivelighting.com/hornet-200-cx/" 16 | ], 17 | "video": [ 18 | "https://www.youtube.com/watch?v=n0JaoCZWXVc" 19 | ] 20 | }, 21 | "physical": { 22 | "dimensions": [100, 100, 222], 23 | "weight": 2.2, 24 | "power": 150, 25 | "DMXconnector": "5-pin", 26 | "bulb": { 27 | "type": "LED" 28 | }, 29 | "lens": { 30 | "degreesMinMax": [19, 180] 31 | } 32 | }, 33 | "availableChannels": { 34 | "Intensity": { 35 | "defaultValue": 0, 36 | "highlightValue": 255, 37 | "capability": { 38 | "type": "Intensity" 39 | } 40 | }, 41 | "CCT": { 42 | "capability": { 43 | "type": "ColorTemperature", 44 | "colorTemperatureStart": "1650K", 45 | "colorTemperatureEnd": "8025K" 46 | } 47 | }, 48 | "Hue": { 49 | "defaultValue": 0, 50 | "capability": { 51 | "type": "Generic", 52 | "comment": "0…360°" 53 | } 54 | }, 55 | "Saturation": { 56 | "defaultValue": 0, 57 | "capability": { 58 | "type": "Generic", 59 | "comment": "0…100%" 60 | } 61 | } 62 | }, 63 | "modes": [ 64 | { 65 | "name": "HSI", 66 | "shortName": "HSI", 67 | "channels": [ 68 | "Intensity", 69 | "CCT", 70 | "Saturation", 71 | "Hue" 72 | ] 73 | } 74 | ] 75 | } 76 | -------------------------------------------------------------------------------- /public/fixtures/hive/wasp-100-cx.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/fixture.json", 3 | "name": "Wasp 100-CX", 4 | "categories": ["Dimmer"], 5 | "meta": { 6 | "authors": ["Dyami Caliri"], 7 | "createDate": "2021-02-20", 8 | "lastModifyDate": "2021-02-20" 9 | }, 10 | "links": { 11 | "manual": [ 12 | "https://drive.google.com/file/d/1pJK6BaAhvOGTwMP1VhfO8GH25YicCDwS/view" 13 | ], 14 | "productPage": [ 15 | "https://hivelighting.com/wasp-100-cx/" 16 | ], 17 | "video": [ 18 | "https://www.youtube.com/watch?v=5JuWHXsTSXI&t=22s" 19 | ] 20 | }, 21 | "physical": { 22 | "dimensions": [100, 100, 199], 23 | "weight": 0.9, 24 | "power": 75, 25 | "DMXconnector": "5-pin", 26 | "bulb": { 27 | "type": "LED" 28 | }, 29 | "lens": { 30 | "degreesMinMax": [13, 180] 31 | } 32 | }, 33 | "availableChannels": { 34 | "Intensity": { 35 | "defaultValue": 0, 36 | "highlightValue": 255, 37 | "capability": { 38 | "type": "Intensity" 39 | } 40 | }, 41 | "CCT": { 42 | "capability": { 43 | "type": "ColorTemperature", 44 | "colorTemperatureStart": "1650K", 45 | "colorTemperatureEnd": "8025K" 46 | } 47 | }, 48 | "Hue": { 49 | "defaultValue": 0, 50 | "capability": { 51 | "type": "Generic", 52 | "comment": "0…360°" 53 | } 54 | }, 55 | "Saturation": { 56 | "defaultValue": 0, 57 | "capability": { 58 | "type": "Generic", 59 | "comment": "0…100%" 60 | } 61 | } 62 | }, 63 | "modes": [ 64 | { 65 | "name": "HSI", 66 | "shortName": "HSI", 67 | "channels": [ 68 | "Intensity", 69 | "CCT", 70 | "Saturation", 71 | "Hue" 72 | ] 73 | } 74 | ] 75 | } 76 | -------------------------------------------------------------------------------- /public/fixtures/ibiza-light/ls-005led.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/fixture.json", 3 | "name": "LS-005LED", 4 | "categories": ["Color Changer"], 5 | "meta": { 6 | "authors": ["Tormant"], 7 | "createDate": "2019-07-29", 8 | "lastModifyDate": "2019-07-29" 9 | }, 10 | "links": { 11 | "video": [ 12 | "https://www.youtube.com/watch?v=Ojwpf-J7rvQ" 13 | ] 14 | }, 15 | "helpWanted": "Can you provide a link to a manual, product page, or similar?", 16 | "physical": { 17 | "dimensions": [460, 160, 140], 18 | "power": 30, 19 | "DMXconnector": "3-pin", 20 | "bulb": { 21 | "type": "LED" 22 | } 23 | }, 24 | "availableChannels": { 25 | "Dimmer": { 26 | "capabilities": [ 27 | { 28 | "dmxRange": [0, 0], 29 | "type": "NoFunction" 30 | }, 31 | { 32 | "dmxRange": [1, 127], 33 | "type": "ShutterStrobe", 34 | "shutterEffect": "Strobe", 35 | "speedStart": "slow", 36 | "speedEnd": "fast" 37 | }, 38 | { 39 | "dmxRange": [128, 128], 40 | "type": "NoFunction" 41 | }, 42 | { 43 | "dmxRange": [129, 255], 44 | "type": "Intensity" 45 | } 46 | ] 47 | }, 48 | "Red": { 49 | "capability": { 50 | "type": "ColorIntensity", 51 | "color": "Red" 52 | } 53 | }, 54 | "Green": { 55 | "capability": { 56 | "type": "ColorIntensity", 57 | "color": "Green" 58 | } 59 | }, 60 | "Blue": { 61 | "capability": { 62 | "type": "ColorIntensity", 63 | "color": "Blue" 64 | } 65 | } 66 | }, 67 | "modes": [ 68 | { 69 | "name": "4-channel", 70 | "shortName": "4ch", 71 | "channels": [ 72 | "Dimmer", 73 | "Red", 74 | "Green", 75 | "Blue" 76 | ] 77 | } 78 | ] 79 | } 80 | -------------------------------------------------------------------------------- /public/fixtures/lightmaxx/led-par-56.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/fixture.json", 3 | "name": "LED Par 56", 4 | "categories": ["Color Changer"], 5 | "meta": { 6 | "authors": ["Hannes Rüger"], 7 | "createDate": "2021-08-05", 8 | "lastModifyDate": "2021-08-05" 9 | }, 10 | "links": { 11 | "manual": [ 12 | "https://www.scherloc.com/_media/notice-par56led-10mm.pdf" 13 | ], 14 | "productPage": [ 15 | "https://www.musicstore.de/en_US/USD/lightmaXX-LED-Par-56-RGB-Short-Polish-10mm-LEDs/art-LIG0002658-000" 16 | ] 17 | }, 18 | "physical": { 19 | "dimensions": [220, 210, 220], 20 | "weight": 1.4, 21 | "power": 22, 22 | "DMXconnector": "3-pin", 23 | "bulb": { 24 | "type": "108x LED" 25 | } 26 | }, 27 | "availableChannels": { 28 | "Red": { 29 | "capability": { 30 | "type": "ColorIntensity", 31 | "color": "Red" 32 | } 33 | }, 34 | "Green": { 35 | "capability": { 36 | "type": "ColorIntensity", 37 | "color": "Green" 38 | } 39 | }, 40 | "Blue": { 41 | "capability": { 42 | "type": "ColorIntensity", 43 | "color": "Blue" 44 | } 45 | }, 46 | "Dimmer": { 47 | "capabilities": [ 48 | { 49 | "dmxRange": [0, 189], 50 | "type": "Intensity" 51 | }, 52 | { 53 | "dmxRange": [190, 250], 54 | "type": "ShutterStrobe", 55 | "shutterEffect": "Strobe", 56 | "speedStart": "slow", 57 | "speedEnd": "fast" 58 | }, 59 | { 60 | "dmxRange": [251, 255], 61 | "type": "NoFunction" 62 | } 63 | ] 64 | } 65 | }, 66 | "modes": [ 67 | { 68 | "name": "4-channel", 69 | "shortName": "4ch", 70 | "channels": [ 71 | "Red", 72 | "Green", 73 | "Blue", 74 | "Dimmer" 75 | ] 76 | } 77 | ] 78 | } 79 | -------------------------------------------------------------------------------- /public/fixtures/lixada/mini-beam-rgbw.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/fixture-redirect.json", 3 | "name": "Mini Beam RGBW", 4 | "redirectTo": "stage-right/mini-beam-rgbw", 5 | "reason": "SameAsDifferentBrand" 6 | } 7 | -------------------------------------------------------------------------------- /public/fixtures/lixada/mini-moving-head-rgbw.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/fixture-redirect.json", 3 | "name": "Mini Moving Head RGBW", 4 | "redirectTo": "stage-right/stage-wash-7x10w-led-moving-head", 5 | "reason": "SameAsDifferentBrand" 6 | } 7 | -------------------------------------------------------------------------------- /public/fixtures/look/cryofog.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/fixture.json", 3 | "name": "Cryofog", 4 | "categories": ["Smoke"], 5 | "meta": { 6 | "authors": ["coffeeholic"], 7 | "createDate": "2021-08-05", 8 | "lastModifyDate": "2021-08-05" 9 | }, 10 | "comment": "Low fog machine with CO2 cooling.", 11 | "links": { 12 | "manual": [ 13 | "https://www.looksolutions.com/uploads/pdf/bed_cryo_hp_1d.pdf" 14 | ], 15 | "productPage": [ 16 | "https://www.looksolutions.com/produkte/cryo_fog/2.html" 17 | ] 18 | }, 19 | "physical": { 20 | "dimensions": [510, 300, 670], 21 | "weight": 33, 22 | "power": 2300, 23 | "DMXconnector": "5-pin" 24 | }, 25 | "availableChannels": { 26 | "Fog Intensity": { 27 | "capability": { 28 | "type": "Fog", 29 | "fogType": "Fog", 30 | "fogOutputStart": "off", 31 | "fogOutputEnd": "strong" 32 | } 33 | }, 34 | "Fan": { 35 | "capability": { 36 | "type": "Rotation", 37 | "speedStart": "slow CW", 38 | "speedEnd": "fast CW" 39 | } 40 | }, 41 | "Cooling": { 42 | "capabilities": [ 43 | { 44 | "dmxRange": [0, 0], 45 | "type": "Maintenance", 46 | "comment": "Cooling valve closed" 47 | }, 48 | { 49 | "dmxRange": [1, 254], 50 | "type": "NoFunction" 51 | }, 52 | { 53 | "dmxRange": [255, 255], 54 | "type": "Maintenance", 55 | "comment": "Cooling valve open" 56 | } 57 | ] 58 | } 59 | }, 60 | "modes": [ 61 | { 62 | "name": "3-channel", 63 | "shortName": "3ch", 64 | "channels": [ 65 | "Fog Intensity", 66 | "Fan", 67 | "Cooling" 68 | ] 69 | } 70 | ] 71 | } 72 | -------------------------------------------------------------------------------- /public/fixtures/look/viper-nt.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/fixture.json", 3 | "name": "Viper NT", 4 | "categories": ["Smoke"], 5 | "meta": { 6 | "authors": ["Flo Edelmann"], 7 | "createDate": "2018-02-18", 8 | "lastModifyDate": "2018-08-09" 9 | }, 10 | "links": { 11 | "manual": [ 12 | "https://www.looksolutions.com/uploads/pdf/bed_vipernt_1d.pdf" 13 | ], 14 | "productPage": [ 15 | "https://www.looksolutions.com/produkte/viper_nt/2.html" 16 | ], 17 | "video": [ 18 | "https://www.youtube.com/watch?v=uw4HNAFkKgQ", 19 | "https://www.youtube.com/watch?v=QYufuVasJWc" 20 | ] 21 | }, 22 | "physical": { 23 | "dimensions": [230, 240, 470], 24 | "weight": 8.6, 25 | "power": 1300, 26 | "DMXconnector": "5-pin" 27 | }, 28 | "availableChannels": { 29 | "Pump": { 30 | "capability": { 31 | "type": "Fog", 32 | "fogType": "Fog", 33 | "fogOutputStart": "off", 34 | "fogOutputEnd": "strong" 35 | } 36 | }, 37 | "Heat": { 38 | "capability": { 39 | "type": "Maintenance", 40 | "comment": "Heat", 41 | "parameterStart": "low", 42 | "parameterEnd": "high" 43 | } 44 | } 45 | }, 46 | "modes": [ 47 | { 48 | "name": "2-channel", 49 | "shortName": "2ch", 50 | "channels": [ 51 | "Pump", 52 | "Heat" 53 | ] 54 | } 55 | ] 56 | } 57 | -------------------------------------------------------------------------------- /public/fixtures/magicfx/stage-flame.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/fixture.json", 3 | "name": "Stage Flame", 4 | "shortName": "MFXStageFlame", 5 | "categories": ["Effect"], 6 | "meta": { 7 | "authors": ["Alejo Cervera"], 8 | "createDate": "2018-06-13", 9 | "lastModifyDate": "2018-08-21" 10 | }, 11 | "links": { 12 | "manual": [ 13 | "https://www.magicfx.eu/app/uploads/2020/01/MAGICFX_STAGE-FLAME_MANUAL.pdf" 14 | ], 15 | "productPage": [ 16 | "https://www.magicfx.eu/product/magicfx-stage-flame/" 17 | ], 18 | "video": [ 19 | "https://www.youtube.com/watch?v=YLeYRexsTmc", 20 | "https://www.youtube.com/watch?v=HvRzNTf07aY" 21 | ] 22 | }, 23 | "physical": { 24 | "dimensions": [310, 210, 360], 25 | "weight": 11.5, 26 | "power": 100, 27 | "DMXconnector": "3-pin" 28 | }, 29 | "availableChannels": { 30 | "Safety": { 31 | "defaultValue": 0, 32 | "precedence": "LTP", 33 | "capabilities": [ 34 | { 35 | "dmxRange": [0, 139], 36 | "type": "Maintenance", 37 | "comment": "Safety ON" 38 | }, 39 | { 40 | "dmxRange": [140, 153], 41 | "type": "Maintenance", 42 | "comment": "Safety OFF" 43 | }, 44 | { 45 | "dmxRange": [154, 255], 46 | "type": "Maintenance", 47 | "comment": "Safety ON" 48 | } 49 | ] 50 | }, 51 | "Flame": { 52 | "defaultValue": 0, 53 | "highlightValue": 255, 54 | "precedence": "HTP", 55 | "capability": { 56 | "type": "EffectParameter", 57 | "parameterStart": "off", 58 | "parameterEnd": "high", 59 | "comment": "Flame Intensity" 60 | } 61 | } 62 | }, 63 | "modes": [ 64 | { 65 | "name": "Default", 66 | "channels": [ 67 | "Safety", 68 | "Flame" 69 | ] 70 | } 71 | ] 72 | } 73 | -------------------------------------------------------------------------------- /public/fixtures/martin/magnum-2500-hz.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/fixture.json", 3 | "name": "Magnum 2500 HZ", 4 | "shortName": "MartinMagnum2.5k", 5 | "categories": ["Hazer"], 6 | "meta": { 7 | "authors": ["novasfronteiras.co"], 8 | "createDate": "2017-08-08", 9 | "lastModifyDate": "2018-08-09" 10 | }, 11 | "links": { 12 | "manual": [ 13 | "https://www.martin.com/files/files/productdocuments/11_MANUALS/999/UM_Magnum2500Hz_EN_F.pdf" 14 | ], 15 | "video": [ 16 | "https://www.youtube.com/watch?v=wCQePza8akg", 17 | "https://www.youtube.com/watch?v=Nc0ku6yCe4w" 18 | ] 19 | }, 20 | "physical": { 21 | "dimensions": [285, 286, 455], 22 | "weight": 15.7, 23 | "power": 920, 24 | "DMXconnector": "3-pin" 25 | }, 26 | "availableChannels": { 27 | "Fog": { 28 | "capabilities": [ 29 | { 30 | "dmxRange": [0, 29], 31 | "type": "NoFunction" 32 | }, 33 | { 34 | "dmxRange": [30, 255], 35 | "type": "Fog", 36 | "fogOutputStart": "0m^3/min", 37 | "fogOutputEnd": "2500m^3/min", 38 | "fogType": "Haze" 39 | } 40 | ] 41 | } 42 | }, 43 | "modes": [ 44 | { 45 | "name": "Standard", 46 | "shortName": "std", 47 | "channels": [ 48 | "Fog" 49 | ] 50 | } 51 | ] 52 | } 53 | -------------------------------------------------------------------------------- /public/fixtures/mdg/hazer-atmosphere-aps.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/fixture.json", 3 | "name": "Hazer ATMOSPHERE APS", 4 | "shortName": "MDG-M35A-X", 5 | "categories": ["Hazer"], 6 | "meta": { 7 | "authors": ["novasfronteiras.co"], 8 | "createDate": "2017-08-08", 9 | "lastModifyDate": "2018-08-09" 10 | }, 11 | "links": { 12 | "manual": [ 13 | "https://mdgfog.s3.amazonaws.com/uploads/docs/ATM-MAX-User-Guide-120815-Rev-Ad.pdf", 14 | "https://mdgfog.s3.amazonaws.com/uploads/docs/DMX-M35A-X-2012.pdf" 15 | ], 16 | "productPage": [ 17 | "https://www.mdgfog.com/en/atmosphereaps" 18 | ], 19 | "video": [ 20 | "https://www.youtube.com/watch?v=C9u31D-4icQ" 21 | ] 22 | }, 23 | "physical": { 24 | "dimensions": [180, 300, 68.5], 25 | "weight": 23, 26 | "power": 715, 27 | "DMXconnector": "5-pin" 28 | }, 29 | "availableChannels": { 30 | "Fog": { 31 | "capabilities": [ 32 | { 33 | "dmxRange": [0, 127], 34 | "type": "NoFunction" 35 | }, 36 | { 37 | "dmxRange": [128, 255], 38 | "type": "Fog", 39 | "fogType": "Haze" 40 | } 41 | ] 42 | }, 43 | "Fog Emission": { 44 | "capabilities": [ 45 | { 46 | "dmxRange": [0, 17], 47 | "type": "FogOutput", 48 | "fogOutput": "off" 49 | }, 50 | { 51 | "dmxRange": [18, 255], 52 | "type": "FogOutput", 53 | "fogOutputStart": "weak", 54 | "fogOutputEnd": "strong" 55 | } 56 | ] 57 | } 58 | }, 59 | "modes": [ 60 | { 61 | "name": "Standard", 62 | "shortName": "std", 63 | "channels": [ 64 | "Fog", 65 | "Fog Emission" 66 | ] 67 | } 68 | ] 69 | } 70 | -------------------------------------------------------------------------------- /public/fixtures/minuit-une/m-carre.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/fixture-redirect.json", 3 | "name": "M-Carré", 4 | "redirectTo": "minuit-une/ivl-carre", 5 | "reason": "FixtureRenamed" 6 | } 7 | -------------------------------------------------------------------------------- /public/fixtures/robert-juliat/613sx.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/fixture.json", 3 | "name": "613SX", 4 | "shortName": "RJ613SX", 5 | "categories": ["Dimmer"], 6 | "meta": { 7 | "authors": ["dariovideo"], 8 | "createDate": "2018-11-27", 9 | "lastModifyDate": "2018-11-27" 10 | }, 11 | "comment": "Only controllable via dimmer pack", 12 | "links": { 13 | "manual": [ 14 | "https://www.robertjuliat.com/Product_Specifications/Fiches_EN/Standard/DSEN045_613SX.pdf" 15 | ], 16 | "productPage": [ 17 | "https://www.robertjuliat.com/profilespots/600SX.html" 18 | ] 19 | }, 20 | "physical": { 21 | "dimensions": [330, 415, 565], 22 | "weight": 11, 23 | "power": 1000, 24 | "bulb": { 25 | "type": "Tungsten T19", 26 | "colorTemperature": 3050, 27 | "lumens": 21000 28 | }, 29 | "lens": { 30 | "degreesMinMax": [28, 54] 31 | } 32 | }, 33 | "availableChannels": { 34 | "Dimmer": { 35 | "capability": { 36 | "type": "Intensity" 37 | } 38 | } 39 | }, 40 | "modes": [ 41 | { 42 | "name": "Dimmer", 43 | "channels": [ 44 | "Dimmer" 45 | ] 46 | } 47 | ] 48 | } 49 | -------------------------------------------------------------------------------- /public/fixtures/showtec/atmos-2000.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/fixture.json", 3 | "name": "Atmos 2000", 4 | "shortName": "ShowtecAtm2000", 5 | "categories": ["Smoke"], 6 | "meta": { 7 | "authors": ["Felix Edelmann"], 8 | "createDate": "2018-11-27", 9 | "lastModifyDate": "2018-11-27" 10 | }, 11 | "comment": "Ordercode 60873", 12 | "links": { 13 | "manual": [ 14 | "https://www.highlite.com/media/attachments/MANUAL/60873_MANUAL_GB_V1.pdf" 15 | ], 16 | "video": [ 17 | "https://www.youtube.com/watch?v=0WMvc7GCGFQ" 18 | ] 19 | }, 20 | "physical": { 21 | "dimensions": [320, 320, 500], 22 | "weight": 7.04, 23 | "power": 2000, 24 | "DMXconnector": "3-pin" 25 | }, 26 | "availableChannels": { 27 | "Fog": { 28 | "defaultValue": 0, 29 | "highlightValue": "100%", 30 | "capability": { 31 | "type": "Fog", 32 | "fogType": "Fog", 33 | "fogOutputStart": "0m^3/min", 34 | "fogOutputEnd": "1133m^3/min" 35 | } 36 | } 37 | }, 38 | "modes": [ 39 | { 40 | "name": "1-channel", 41 | "shortName": "1ch", 42 | "channels": [ 43 | "Fog" 44 | ] 45 | } 46 | ] 47 | } 48 | -------------------------------------------------------------------------------- /public/fixtures/soundlight/3204r-h.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/fixture.json", 3 | "name": "3204R-H", 4 | "shortName": "SoundLight3204R-H", 5 | "categories": ["Dimmer"], 6 | "meta": { 7 | "authors": ["LT-P"], 8 | "createDate": "2019-06-03", 9 | "lastModifyDate": "2019-06-03" 10 | }, 11 | "comment": "DMX relay control. DMX connector is not XLR but a simple 3-pin wire connector.", 12 | "links": { 13 | "manual": [ 14 | "https://www.soundlight.de/produkte/manuals/3204r-h/english/3204r-h%20rdm%20mk1%20e.pdf" 15 | ], 16 | "productPage": [ 17 | "https://www.soundlight.de/produkte/3204r-h/index.htm" 18 | ] 19 | }, 20 | "physical": { 21 | "dimensions": [86, 67, 90], 22 | "power": 3, 23 | "DMXconnector": "3-pin" 24 | }, 25 | "availableChannels": { 26 | "Relay 1": { 27 | "capability": { 28 | "type": "Intensity" 29 | } 30 | }, 31 | "Relay 2": { 32 | "capability": { 33 | "type": "Intensity" 34 | } 35 | }, 36 | "Relay 3": { 37 | "capability": { 38 | "type": "Intensity" 39 | } 40 | }, 41 | "Relay 4": { 42 | "capability": { 43 | "type": "Intensity" 44 | } 45 | } 46 | }, 47 | "modes": [ 48 | { 49 | "name": "Relay control", 50 | "channels": [ 51 | "Relay 1", 52 | "Relay 2", 53 | "Relay 3", 54 | "Relay 4" 55 | ] 56 | } 57 | ] 58 | } 59 | -------------------------------------------------------------------------------- /public/fixtures/stairville/af-250.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/fixture.json", 3 | "name": "AF-250", 4 | "categories": ["Smoke"], 5 | "meta": { 6 | "authors": ["Jan Dalheimer"], 7 | "createDate": "2019-09-09", 8 | "lastModifyDate": "2019-09-09" 9 | }, 10 | "links": { 11 | "manual": [ 12 | "https://images.static-thomann.de/pics/atg/atgdata/document/manual/340945_c_340945_v5_en_online.pdf" 13 | ], 14 | "productPage": [ 15 | "https://www.thomann.de/gb/stairville_af_250_fog_machine_1300w_dmx.htm" 16 | ], 17 | "video": [ 18 | "https://video1.thomann.de/vidiot/02591c1c/video_i3289p10_yd59vqpa.mp4" 19 | ] 20 | }, 21 | "physical": { 22 | "dimensions": [310, 190, 430], 23 | "weight": 7.1, 24 | "power": 1300, 25 | "DMXconnector": "3-pin" 26 | }, 27 | "availableChannels": { 28 | "Fog": { 29 | "precedence": "HTP", 30 | "capability": { 31 | "type": "Fog", 32 | "fogType": "Fog", 33 | "fogOutputStart": "0m^3/min", 34 | "fogOutputEnd": "180m^3/min" 35 | } 36 | } 37 | }, 38 | "modes": [ 39 | { 40 | "name": "1-channel", 41 | "shortName": "1ch", 42 | "channels": [ 43 | "Fog" 44 | ] 45 | } 46 | ] 47 | } 48 | -------------------------------------------------------------------------------- /public/fixtures/stairville/afh-600.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/fixture.json", 3 | "name": "AFH-600", 4 | "shortName": "StairvilleAFH600", 5 | "categories": ["Hazer"], 6 | "meta": { 7 | "authors": ["LordVonAdel"], 8 | "createDate": "2019-08-26", 9 | "lastModifyDate": "2019-08-26" 10 | }, 11 | "links": { 12 | "manual": [ 13 | "https://images.static-thomann.de/pics/atg/atgdata/document/manual/306309_c_306309_r4_en_online.pdf" 14 | ], 15 | "productPage": [ 16 | "https://www.thomann.de/intl/stairville_afh_600_dmx_hazer.htm" 17 | ], 18 | "video": [ 19 | "https://video1.thomann.de/vidiot/02591c1c/video_i4312p10_yd59vqpa.mp4", 20 | "https://video1.thomann.de/vidiot/02591c1c/video_i2169p10_yd59vqpa.mp4" 21 | ] 22 | }, 23 | "physical": { 24 | "dimensions": [290, 265, 450], 25 | "weight": 5.5, 26 | "power": 1290, 27 | "DMXconnector": "3-pin" 28 | }, 29 | "availableChannels": { 30 | "Haze": { 31 | "capability": { 32 | "type": "Fog", 33 | "fogType": "Haze", 34 | "fogOutputStart": "0m^3/min", 35 | "fogOutputEnd": "850m^3/min" 36 | } 37 | } 38 | }, 39 | "modes": [ 40 | { 41 | "name": "1-channel", 42 | "shortName": "1ch", 43 | "channels": [ 44 | "Haze" 45 | ] 46 | } 47 | ] 48 | } 49 | -------------------------------------------------------------------------------- /public/fixtures/stairville/mh-x30.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/fixture-redirect.json", 3 | "name": "MH-x30", 4 | "redirectTo": "stairville/mh-x30-led-spot", 5 | "reason": "FixtureRenamed" 6 | } 7 | -------------------------------------------------------------------------------- /public/fixtures/ultratec/radiance-hazer.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/fixture.json", 3 | "name": "Radiance Hazer", 4 | "shortName": "radiance-hazer", 5 | "categories": ["Hazer"], 6 | "meta": { 7 | "authors": ["Ken Harris"], 8 | "createDate": "2022-02-26", 9 | "lastModifyDate": "2022-02-26" 10 | }, 11 | "links": { 12 | "manual": [ 13 | "https://ultratecfx.com/docs/default-source/downloads-radiance-hazer/radiance-haze-manual-2020.pdf?sfvrsn=2" 14 | ], 15 | "productPage": [ 16 | "https://ultratecfx.com/Products/haze/radiance-hazer" 17 | ], 18 | "video": [ 19 | "https://www.youtube.com/watch?v=yOKOLkTNOuw" 20 | ] 21 | }, 22 | "physical": { 23 | "dimensions": [279, 180, 419], 24 | "weight": 13, 25 | "power": 500, 26 | "DMXconnector": "5-pin" 27 | }, 28 | "availableChannels": { 29 | "Haze": { 30 | "capability": { 31 | "type": "Fog", 32 | "fogType": "Haze", 33 | "fogOutputStart": "0%", 34 | "fogOutputEnd": "100%" 35 | } 36 | }, 37 | "Fan": { 38 | "capability": { 39 | "type": "Rotation", 40 | "speedStart": "slow CW", 41 | "speedEnd": "fast CW" 42 | } 43 | } 44 | }, 45 | "modes": [ 46 | { 47 | "name": "2-channel", 48 | "shortName": "2ch", 49 | "channels": [ 50 | "Haze", 51 | "Fan" 52 | ] 53 | } 54 | ] 55 | } 56 | -------------------------------------------------------------------------------- /public/fixtures/update_fixturelist.js: -------------------------------------------------------------------------------- 1 | /** 2 | * This module should be used in order to regenerate fixture list 3 | * When it has been modified (Add/remove fixture and/or manufacturer) 4 | * 5 | */ 6 | 7 | import fs from 'fs'; 8 | 9 | /** 10 | * Fetch manufacturer list 11 | * 12 | * @function getManufacturers 13 | * @async 14 | * @return {*} 15 | */ 16 | async function getManufacturers() { 17 | const files = await fs.promises.readdir(__dirname); 18 | return files.flatMap((file) => (fs.statSync(`${__dirname}/${file}`).isDirectory() ? { 19 | name: file, 20 | fixtures: [], 21 | } : [])); 22 | } 23 | 24 | /** 25 | * Fetch manufacturer fixtures 26 | * 27 | * @function getManufacturers 28 | * @async 29 | * @param {String} manufacturer manufacturer unique name string 30 | */ 31 | async function getManufacturerFixtures(manufacturer) { 32 | const files = await fs.promises.readdir(`${__dirname}/${manufacturer.name}`); 33 | manufacturer.fixtures = files || []; 34 | } 35 | 36 | /** 37 | * Create fixture list 38 | * 39 | * @function getFixtureList 40 | * @async 41 | * @param {String} manufacturer manufacturer unique name string 42 | */ 43 | async function getFixtureList() { 44 | try { 45 | const manufacturers = await getManufacturers(); 46 | await Promise.all( 47 | manufacturers.map( 48 | async (manufacturer) => getManufacturerFixtures(manufacturer), 49 | ), 50 | ); 51 | await fs.promises.writeFile(`${__dirname}/fixture_list.json`, JSON.stringify(manufacturers), 'utf8'); 52 | } catch (err) { 53 | process.stderr(err); 54 | } 55 | } 56 | 57 | getFixtureList(); 58 | -------------------------------------------------------------------------------- /public/fixtures/varytec/led-theater-spot-100.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/fixture.json", 3 | "name": "LED Theater Spot 100", 4 | "shortName": "VarytecThSpot100", 5 | "categories": ["Dimmer"], 6 | "meta": { 7 | "authors": ["benni"], 8 | "createDate": "2019-03-16", 9 | "lastModifyDate": "2019-03-16" 10 | }, 11 | "links": { 12 | "manual": [ 13 | "https://images.static-thomann.de/pics/atg/atgdata/document/manual/414220_c_414220_427226_r5_en_online.pdf" 14 | ], 15 | "productPage": [ 16 | "https://www.thomann.de/intl/varytec_led_theater_spot_100_3000k.htm" 17 | ], 18 | "video": [ 19 | "https://www.thomann.de/gb/thomanntv_video_varytec_led_theater_spot_100_3000k_5959.html" 20 | ] 21 | }, 22 | "physical": { 23 | "dimensions": [160, 185, 260], 24 | "weight": 5, 25 | "power": 115, 26 | "DMXconnector": "3-pin", 27 | "bulb": { 28 | "type": "100W COB LED", 29 | "colorTemperature": 3000 30 | }, 31 | "lens": { 32 | "degreesMinMax": [15, 45] 33 | } 34 | }, 35 | "availableChannels": { 36 | "Dimmer": { 37 | "capability": { 38 | "type": "Intensity" 39 | } 40 | }, 41 | "Strobe": { 42 | "capability": { 43 | "type": "ShutterStrobe", 44 | "shutterEffect": "Strobe", 45 | "speedStart": "slow", 46 | "speedEnd": "fast", 47 | "helpWanted": "At which DMX value is strobe disabled? When is the lamp constantly on/off?" 48 | } 49 | } 50 | }, 51 | "modes": [ 52 | { 53 | "name": "1-channel", 54 | "shortName": "1ch", 55 | "channels": [ 56 | "Dimmer" 57 | ] 58 | }, 59 | { 60 | "name": "2-channel", 61 | "shortName": "2ch", 62 | "channels": [ 63 | "Dimmer", 64 | "Strobe" 65 | ] 66 | } 67 | ] 68 | } 69 | -------------------------------------------------------------------------------- /public/images/Folder2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /public/images/arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 18 | 20 | 21 | 23 | image/svg+xml 24 | 26 | 27 | 28 | 29 | 31 | 51 | 56 | 57 | -------------------------------------------------------------------------------- /public/images/arrow_down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/images/arrow_up.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/images/asls-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/public/images/asls-logo.png -------------------------------------------------------------------------------- /public/images/asls.icon.black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/public/images/asls.icon.black.png -------------------------------------------------------------------------------- /public/images/asls.icon.white.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/public/images/asls.icon.white.ico -------------------------------------------------------------------------------- /public/images/asls.logo.black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/public/images/asls.logo.black.png -------------------------------------------------------------------------------- /public/images/cuepool_idle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/images/diane-picchiottino-m1ONIaOCmSs-unsplash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/public/images/diane-picchiottino-m1ONIaOCmSs-unsplash.jpg -------------------------------------------------------------------------------- /public/images/list_add_button.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /public/images/spline.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /public/images/studio_standalone_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/public/images/studio_standalone_logo.png -------------------------------------------------------------------------------- /public/visualizer/models/model_list.json: -------------------------------------------------------------------------------- 1 | { 2 | "visualizer": { 3 | "models": { 4 | "scenography": { 5 | "beam": "moving_head_lowpoly.glb" 6 | } 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /public/visualizer/models/scenography/moving_head_lowpoly.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/public/visualizer/models/scenography/moving_head_lowpoly.glb -------------------------------------------------------------------------------- /public/visualizer/textures/environment/checkerboard_default.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/public/visualizer/textures/environment/checkerboard_default.jpg -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 21 | 22 | 28 | -------------------------------------------------------------------------------- /src/assets/fonts/Roboto/Roboto-Black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/src/assets/fonts/Roboto/Roboto-Black.ttf -------------------------------------------------------------------------------- /src/assets/fonts/Roboto/Roboto-BlackItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/src/assets/fonts/Roboto/Roboto-BlackItalic.ttf -------------------------------------------------------------------------------- /src/assets/fonts/Roboto/Roboto-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/src/assets/fonts/Roboto/Roboto-Bold.ttf -------------------------------------------------------------------------------- /src/assets/fonts/Roboto/Roboto-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/src/assets/fonts/Roboto/Roboto-BoldItalic.ttf -------------------------------------------------------------------------------- /src/assets/fonts/Roboto/Roboto-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/src/assets/fonts/Roboto/Roboto-Italic.ttf -------------------------------------------------------------------------------- /src/assets/fonts/Roboto/Roboto-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/src/assets/fonts/Roboto/Roboto-Light.ttf -------------------------------------------------------------------------------- /src/assets/fonts/Roboto/Roboto-LightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/src/assets/fonts/Roboto/Roboto-LightItalic.ttf -------------------------------------------------------------------------------- /src/assets/fonts/Roboto/Roboto-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/src/assets/fonts/Roboto/Roboto-Medium.ttf -------------------------------------------------------------------------------- /src/assets/fonts/Roboto/Roboto-MediumItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/src/assets/fonts/Roboto/Roboto-MediumItalic.ttf -------------------------------------------------------------------------------- /src/assets/fonts/Roboto/Roboto-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/src/assets/fonts/Roboto/Roboto-Regular.ttf -------------------------------------------------------------------------------- /src/assets/fonts/Roboto/Roboto-Thin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/src/assets/fonts/Roboto/Roboto-Thin.ttf -------------------------------------------------------------------------------- /src/assets/fonts/Roboto/Roboto-ThinItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/src/assets/fonts/Roboto/Roboto-ThinItalic.ttf -------------------------------------------------------------------------------- /src/assets/images/noise.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/src/assets/images/noise.png -------------------------------------------------------------------------------- /src/assets/styles/fonts.css: -------------------------------------------------------------------------------- 1 | @font-face{ 2 | font-family: 'Roboto-Regular'; 3 | src: url(../fonts/Roboto/Roboto-Regular.ttf); 4 | } 5 | @font-face{ 6 | font-family: 'Roboto-Medium'; 7 | src: url(../fonts/Roboto/Roboto-Medium.ttf); 8 | } 9 | @font-face{ 10 | font-family: 'Roboto-Bold'; 11 | src: url(../fonts/Roboto/Roboto-Bold.ttf); 12 | } -------------------------------------------------------------------------------- /src/assets/styles/fonts.scss: -------------------------------------------------------------------------------- 1 | @font-face{ 2 | font-family: 'Roboto-Regular'; 3 | src: url(../fonts/Roboto/Roboto-Regular.ttf); 4 | } 5 | @font-face{ 6 | font-family: 'Roboto-Medium'; 7 | src: url(../fonts/Roboto/Roboto-Medium.ttf); 8 | } 9 | @font-face{ 10 | font-family: 'Roboto-Bold'; 11 | src: url(../fonts/Roboto/Roboto-Bold.ttf); 12 | } -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import { createApp, reactive } from 'vue'; 2 | import axios from 'axios'; 3 | import uikit from '@/views/components/uikit'; 4 | import utils from '@/views/utils'; 5 | import EventBus from '@/plugins/eventbus'; 6 | import '@/assets/styles/global.css'; 7 | import '@/assets/styles/fonts.css'; 8 | import ShowSingleton from '@/singletons/show.singleton'; 9 | import router from './plugins/router'; 10 | import App from './App.vue'; 11 | 12 | function registerComponents(components, app) { 13 | Object.keys(components).forEach((componentKey) => { 14 | const component = components[componentKey]; 15 | if (component.name) { 16 | app.component(component.name, component); 17 | } else { 18 | registerComponents(component, app); 19 | } 20 | }); 21 | } 22 | 23 | try { 24 | const app = createApp(App); 25 | registerComponents(uikit, app); 26 | app.config.globalProperties.$show = reactive(ShowSingleton); 27 | app.config.globalProperties.$http = axios; 28 | app.config.globalProperties.$utils = reactive(utils); 29 | app.config.errorHandler = (err) => { 30 | console.log(err); 31 | EventBus.emit('app_error', err); 32 | }; 33 | app.use(router); 34 | app.mount('#app'); 35 | } catch (err) { 36 | console.log(err); 37 | } 38 | -------------------------------------------------------------------------------- /src/models/DMX/master.model.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @class Master 3 | * @classdesc Show master model definition. Master holds a reference to 4 | * each individual show group. Master features include grouped chase triggering, 5 | * Global group master output definition and much more. 6 | * Could extend event emitter but callback function for end should work just fine. 7 | */ 8 | class Master { 9 | /** 10 | * Creates an instance of Master. 11 | * @param {Object} groupPoolHandle handle to group pool instance to be mastered. 12 | * @todo This was rushed, it would make more sense to manage group definition though 13 | * a master instance that would be property of Show. 14 | */ 15 | constructor(groupPoolHandle) { 16 | this.groupPool = groupPoolHandle; 17 | this.playingRow = -1; 18 | this.onEnd = () => {}; 19 | } 20 | 21 | cueRow(rowIndex) { 22 | let chaseCount = 0; 23 | const state = rowIndex !== this.playingRow; 24 | this.groupPool.groups.forEach((group) => { 25 | group.chasePool.chases.forEach((chase) => { 26 | chase.cue(false); 27 | chase.onEnd = () => {}; 28 | // chaseCount++; 29 | }); 30 | try { 31 | const chase = group.chasePool.getFromId(rowIndex); 32 | chaseCount++; 33 | chase.cue(state); 34 | chase.onEnd = () => { 35 | chaseCount--; 36 | if (chaseCount === 0) { 37 | this.onEnd(); 38 | } 39 | }; 40 | // eslint-disable-next-line 41 | }catch(err){} 42 | }); 43 | this.playingRow = (state && chaseCount) ? rowIndex : -1; 44 | return this.playingRow; 45 | } 46 | } 47 | 48 | export default Master; 49 | -------------------------------------------------------------------------------- /src/models/DMX/modifier.model.js: -------------------------------------------------------------------------------- 1 | const MODIFIER_STATES = { 2 | DISABLED: true, 3 | ENABLED: false, 4 | }; 5 | 6 | /** 7 | * @todo remove this file 8 | * 9 | * @class Modifier 10 | */ 11 | class Modifier { 12 | constructor(type) { 13 | this.type = type; 14 | this._value = 0; 15 | this.state = MODIFIER_STATES.DISABLED; 16 | this.modifiedInstances = []; 17 | } 18 | 19 | add(fixture, channelIndex) { 20 | this.modifiedInstances.push({ 21 | fixture, 22 | channelId: channelIndex, 23 | }); 24 | } 25 | 26 | set value(value) { 27 | this._value = value; 28 | this.modifiedInstances.forEach((instance) => { 29 | instance.fixture.setChannel(instance.channelId, this.value); 30 | }); 31 | } 32 | 33 | get value() { 34 | return this._value; 35 | } 36 | 37 | get state() { 38 | return this._state; 39 | } 40 | 41 | set state(state) { 42 | this._state = state; 43 | } 44 | } 45 | 46 | export default Modifier; 47 | -------------------------------------------------------------------------------- /src/plugins/eventbus.js: -------------------------------------------------------------------------------- 1 | import mitt from 'mitt'; 2 | 3 | export default mitt(); 4 | -------------------------------------------------------------------------------- /src/plugins/visualizer/scene_manager.js: -------------------------------------------------------------------------------- 1 | import * as THREE from 'three'; 2 | 3 | /** 4 | * @class 5 | * @classdesc Singleton extension of THREE.Scene class 6 | * @extends THREE.Scene 7 | */ 8 | class SceneManager extends THREE.Scene { 9 | constructor() { 10 | // eslint-disable-next-line no-use-before-define 11 | if (!instance) { 12 | super(); 13 | this.background = new THREE.Color('#0C0D0A'); 14 | // this.background.convertLinearToSRGB(); 15 | // eslint-disable-next-line no-use-before-define 16 | instance = this; 17 | } 18 | // eslint-disable-next-line no-use-before-define 19 | return instance; 20 | } 21 | } 22 | 23 | // eslint-disable-next-line vars-on-top, no-var, import/no-mutable-exports 24 | var instance = new SceneManager(); 25 | export default instance; 26 | -------------------------------------------------------------------------------- /src/singletons/show.singleton.js: -------------------------------------------------------------------------------- 1 | import Show from '@/models/DMX/show.model'; 2 | 3 | /** 4 | * @class ShowSingleton 5 | * @extends {Show} 6 | * @classdesc Singleton instance of Show to be used throughout the project 7 | */ 8 | class ShowSingleton extends Show { 9 | constructor() { 10 | // eslint-disable-next-line no-use-before-define 11 | if (!showSingletonInstance) { 12 | super(); 13 | // eslint-disable-next-line no-use-before-define 14 | showSingletonInstance = this; 15 | } 16 | // eslint-disable-next-line no-use-before-define 17 | return showSingletonInstance; 18 | } 19 | } 20 | 21 | // eslint-disable-next-line vars-on-top, no-var, import/no-mutable-exports 22 | var showSingletonInstance = new ShowSingleton(); 23 | export default showSingletonInstance; 24 | -------------------------------------------------------------------------------- /src/views/activities/app/_popups/popup.error.vue: -------------------------------------------------------------------------------- 1 | 25 | 26 | 55 | 56 | 71 | -------------------------------------------------------------------------------- /src/views/activities/app/fragments/modifiers/group/_widgets/group.modifier.widget.settings.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 67 | 68 | 75 | -------------------------------------------------------------------------------- /src/views/activities/app/fragments/modifiers/modifier.fragment.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 33 | 34 | 52 | -------------------------------------------------------------------------------- /src/views/activities/app/fragments/toolbar/_popups/popup.license.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 44 | 45 | 56 | -------------------------------------------------------------------------------- /src/views/activities/app/fragments/toolbar/_popups/popup.saveas.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 56 | 57 | 65 | -------------------------------------------------------------------------------- /src/views/activities/visualizer/visualizer.activity.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 22 | -------------------------------------------------------------------------------- /src/views/components/uikit/buttons/index.js: -------------------------------------------------------------------------------- 1 | import button from './uikit.button.vue'; 2 | 3 | export default { button }; 4 | -------------------------------------------------------------------------------- /src/views/components/uikit/colors/uikit.colors.js: -------------------------------------------------------------------------------- 1 | const documentStyle = getComputedStyle(document.documentElement); 2 | /* 3 | * Full color palette 4 | */ 5 | export default { 6 | Maroon: documentStyle.getPropertyValue('--accent-maroon'), 7 | Pink: documentStyle.getPropertyValue('--accent-pink'), 8 | Violet: documentStyle.getPropertyValue('--accent-violet'), 9 | Purple: documentStyle.getPropertyValue('--accent-purple'), 10 | DarkPurple: documentStyle.getPropertyValue('--accent-dark-purple'), 11 | Blue: documentStyle.getPropertyValue('--accent-blue'), 12 | LightBlue: documentStyle.getPropertyValue('--accent-light-blue'), 13 | Teal: documentStyle.getPropertyValue('--accent-teal'), 14 | SeaGreen: documentStyle.getPropertyValue('--accent-sea-green'), 15 | Green: documentStyle.getPropertyValue('--accent-green'), 16 | LightGreen: documentStyle.getPropertyValue('--accent-light-green'), 17 | Gold: documentStyle.getPropertyValue('--accent-gold'), 18 | Orange: documentStyle.getPropertyValue('--accent-orange'), 19 | Red: documentStyle.getPropertyValue('--accent-red'), 20 | }; 21 | -------------------------------------------------------------------------------- /src/views/components/uikit/containers/index.js: -------------------------------------------------------------------------------- 1 | import flexContainer from './uikit.container.flex.vue'; 2 | import spacer from './uikit.spacer.vue'; 3 | 4 | export default { flexContainer, spacer }; 5 | -------------------------------------------------------------------------------- /src/views/components/uikit/containers/uikit.spacer.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 14 | 15 | 20 | -------------------------------------------------------------------------------- /src/views/components/uikit/cues/index.js: -------------------------------------------------------------------------------- 1 | import cue from './uikit.cue.vue'; 2 | import cueContainer from './uikit.cue.container.vue'; 3 | 4 | export default { cue, cueContainer }; 5 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/Folder2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/add.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 18 | 20 | 21 | 23 | image/svg+xml 24 | 26 | 27 | 28 | 29 | 31 | 51 | 56 | 57 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/arrow_down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/arrow_up.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/blue.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/check.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/circle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/close.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/colorintensity.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/colorintensityblue.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/colorintensitygreen.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/colorintensityred.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/colorintensitywhite.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/colorwheel.svg: -------------------------------------------------------------------------------- 1 | 3 | 7 | 8 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/connection.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/connections.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/contact.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/control.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/cross.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/cuepool_idle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/dimmer.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/effect.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/export.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/fine.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 9 | 10 | 11 | 12 | 13 | 15 | 16 | 17 | 18 | 19 | 21 | 22 | 23 | 24 | 25 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/fixture.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/focus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/fog.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/fold.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/goborotation.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/gobowheel.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/green.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/grid.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/help.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/hide.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 6 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/key.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/library.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | 10 | 13 | 16 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/line.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/list_add_button.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/maintenance.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/move.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/movinghead.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/new.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/newfile.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/opensource.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/pan.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/play.svg: -------------------------------------------------------------------------------- 1 | ionicons-v5-c -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/popout.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/prism.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/prisminsertion.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/prismrotation.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/red.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/redo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/save.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/shutter.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 10 | 11 | 13 | 14 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/spline.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/stop.svg: -------------------------------------------------------------------------------- 1 | 2 | ionicons-v5-c 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/tick.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/trash.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/undef.svg: -------------------------------------------------------------------------------- 1 | undefined--filled -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/undo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/universe.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/visualizer.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/waveform.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/wrench.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/images/zoom.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/index.js: -------------------------------------------------------------------------------- 1 | import icon from './uikit.icon.vue'; 2 | 3 | export default { icon }; 4 | -------------------------------------------------------------------------------- /src/views/components/uikit/icons/uikit.icon.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 56 | 57 | 64 | -------------------------------------------------------------------------------- /src/views/components/uikit/index.js: -------------------------------------------------------------------------------- 1 | import buttons from './buttons'; 2 | import inputs from './inputs'; 3 | import lists from './lists'; 4 | import widgets from './widgets'; 5 | import popups from './popups'; 6 | import menus from './menus'; 7 | import icons from './icons'; 8 | import cues from './cues'; 9 | import containers from './containers'; 10 | 11 | export default { 12 | buttons, inputs, lists, widgets, popups, menus, icons, cues, containers, 13 | }; 14 | -------------------------------------------------------------------------------- /src/views/components/uikit/inputs/checkbox/index.js: -------------------------------------------------------------------------------- 1 | import checkbox from './uikit.input.checkbox.vue'; 2 | 3 | export default (checkbox); 4 | -------------------------------------------------------------------------------- /src/views/components/uikit/inputs/index.js: -------------------------------------------------------------------------------- 1 | import checkbox from './checkbox'; 2 | import ranges from './range'; 3 | import select from './select'; 4 | import textboxes from './textbox'; 5 | 6 | export default { 7 | checkbox, ranges, select, textboxes, 8 | }; 9 | -------------------------------------------------------------------------------- /src/views/components/uikit/inputs/range/index.js: -------------------------------------------------------------------------------- 1 | import fader from './uikit.input.range.fader.vue'; 2 | import gauge from './uikit.input.range.gauge.vue'; 3 | import knob from './uikit.input.range.knob.vue'; 4 | import vumeter from './uikit.input.range.vumeter.vue'; 5 | 6 | export default { 7 | fader, gauge, knob, vumeter, 8 | }; 9 | -------------------------------------------------------------------------------- /src/views/components/uikit/inputs/range/uikit.input.range.vumeter.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 38 | 39 | 58 | -------------------------------------------------------------------------------- /src/views/components/uikit/inputs/select/index.js: -------------------------------------------------------------------------------- 1 | import select from './uikit.input.select.vue'; 2 | 3 | export default { select }; 4 | -------------------------------------------------------------------------------- /src/views/components/uikit/inputs/textbox/index.js: -------------------------------------------------------------------------------- 1 | import numeral from './uikit.input.textbox.num.vue'; 2 | import textual from './uikit.input.textbox.str.vue'; 3 | 4 | export default { numeral, textual }; 5 | -------------------------------------------------------------------------------- /src/views/components/uikit/lists/index.js: -------------------------------------------------------------------------------- 1 | import list from './uikit.list.vue'; 2 | import listItem from './uikit.list.item.vue'; 3 | 4 | export default { list, listItem }; 5 | -------------------------------------------------------------------------------- /src/views/components/uikit/loaders/index.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ASLS-org/studio/94896117968776897985ed7dc951882de216aeaa/src/views/components/uikit/loaders/index.js -------------------------------------------------------------------------------- /src/views/components/uikit/loaders/uikit.loader.bar.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 24 | 25 | 32 | -------------------------------------------------------------------------------- /src/views/components/uikit/menus/index.js: -------------------------------------------------------------------------------- 1 | import menu from './uikit.menu.vue'; 2 | 3 | export default { menu }; 4 | -------------------------------------------------------------------------------- /src/views/components/uikit/popups/index.js: -------------------------------------------------------------------------------- 1 | import popup from './uikit.popup.vue'; 2 | 3 | export default { 4 | popup, 5 | }; 6 | -------------------------------------------------------------------------------- /src/views/components/uikit/widgets/index.js: -------------------------------------------------------------------------------- 1 | import widget from './uikit.widget.vue'; 2 | 3 | export default { widget }; 4 | -------------------------------------------------------------------------------- /src/views/mixins/color.mixin.js: -------------------------------------------------------------------------------- 1 | import ukColors from '@/views/components/uikit/colors/uikit.colors'; 2 | 3 | export default { 4 | methods: { 5 | /** 6 | * Returns uikit color at given index. 7 | * 8 | * @param {Number} colorIndex index of the color 9 | * @returns {String} color string at provided color index 10 | */ 11 | getColorFromIndex(colorIndex) { 12 | return ukColors[Object.keys(ukColors)[colorIndex % Object.keys(ukColors).length]]; 13 | }, 14 | /** 15 | * Returns uikit index for a given color string. 16 | * 17 | * @param {String} colorcolor string 18 | * @returns {String} uikit color index of provided color string 19 | */ 20 | getIndexFromColor(color = 'color') { 21 | return Object.keys(ukColors).findIndex( 22 | (colorString) => ukColors[colorString] === color, 23 | ); 24 | }, 25 | /** 26 | * Returns uiit colors as an array of color strings 27 | * 28 | * @returns {Array} Array of uikit color strings 29 | */ 30 | getColors() { 31 | return Object.keys(ukColors).map((colorKey) => ukColors[colorKey]); 32 | }, 33 | }, 34 | computed: { 35 | /** 36 | * Returns an array of HTML-formated strings s to be fed into uikit select inputs 37 | * 38 | * @returns {Array} An array of HTML-formated strings 39 | */ 40 | colorOptions() { 41 | return Object.keys(ukColors).map((colorName) => ` 42 | 43 |

${colorName}

44 | `); 45 | }, 46 | }, 47 | }; 48 | -------------------------------------------------------------------------------- /src/views/mixins/popup.mixin.js: -------------------------------------------------------------------------------- 1 | export default { 2 | emits: ['update:modelValue', 'submit', 'close', 'input'], 3 | props: { 4 | /** 5 | * Popup display state 6 | */ 7 | modelValue: Boolean, 8 | }, 9 | data() { 10 | return { 11 | state: this.modelValue, 12 | }; 13 | }, 14 | methods: { 15 | /** 16 | * Update popup display state 17 | */ 18 | update() { 19 | this.$emit('update:modelValue', this.state); 20 | this.$emit('input', this.state); 21 | }, 22 | /** 23 | * Close popup 24 | */ 25 | close() { 26 | this.state = false; 27 | this.update(); 28 | }, 29 | }, 30 | watch: { 31 | modelValue(state) { 32 | this.state = state; 33 | }, 34 | }, 35 | }; 36 | -------------------------------------------------------------------------------- /src/views/utils/index.js: -------------------------------------------------------------------------------- 1 | import setCapture from './setcapture.utils'; 2 | 3 | export default { 4 | setCapture, 5 | }; 6 | -------------------------------------------------------------------------------- /src/views/utils/setcapture.utils.js: -------------------------------------------------------------------------------- 1 | const transparentOverlay = document.createElement('div'); 2 | Object.assign(transparentOverlay.style, { 3 | position: 'fixed', 4 | height: '100vh', 5 | width: '100vw', 6 | background: 'transparent', 7 | cursor: 'pointer', 8 | display: 'none', 9 | }); 10 | document.body.appendChild(transparentOverlay); 11 | 12 | let TOHandle = null; 13 | 14 | function releaseCapture() { 15 | transparentOverlay.style.display = 'none'; 16 | transparentOverlay.removeEventListener('mouseup', releaseCapture); 17 | } 18 | 19 | export default function setCapture(el, cursorStyle = 'unset') { 20 | transparentOverlay.addEventListener('mouseup', releaseCapture); 21 | if (TOHandle) { 22 | clearTimeout(TOHandle); 23 | TOHandle = null; 24 | } else if (el && el instanceof HTMLElement) { 25 | transparentOverlay.style.cursor = cursorStyle; 26 | transparentOverlay.style.display = 'block'; 27 | clearTimeout(TOHandle); 28 | TOHandle = null; 29 | } else { 30 | throw new Error({ 31 | message: `Expecting instance of HTMLELement. got ${el}`, 32 | }); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/worker-api.js: -------------------------------------------------------------------------------- 1 | import Worker from './worker?worker'; 2 | 3 | const worker = new Worker(); 4 | export default worker; 5 | -------------------------------------------------------------------------------- /src/worker.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | const WW_MSG_TYPES = { 3 | COMPUTE_FX: 'compute-fx', 4 | }; 5 | 6 | const FX_CHANNEL_WAVEFORMS = { 7 | SINE: 0, 8 | TRIANGLE: 1, 9 | SQUARE: 2, 10 | PWM: 3, 11 | }; 12 | 13 | function update() { 14 | self.postMessage(''); 15 | setTimeout(update, 1000 / 60); 16 | } 17 | 18 | function genSine(t, phaseOffset = 0, average, frequency, phaseRad, amplitude) { 19 | return average + amplitude * Math.sin(2 * Math.PI * frequency * t + phaseRad + phaseOffset); 20 | } 21 | 22 | function genTriangle(t, phaseOffset = 0, average, frequency, phaseRad, amplitude) { 23 | return average + (2 * amplitude / Math.PI) * Math.asin(Math.sin(2 * Math.PI * frequency * t + phaseRad + phaseOffset)); 24 | } 25 | 26 | function getFXValue(t, phaseOffset, waveform, average, min, max, frequency, phaseRad, amplitude) { 27 | switch (waveform) { 28 | case FX_CHANNEL_WAVEFORMS.SINE: 29 | return genSine(t, phaseOffset, average, frequency, phaseRad, amplitude); 30 | case FX_CHANNEL_WAVEFORMS.TRIANGLE: 31 | return genTriangle(t, phaseOffset, average, frequency, phaseRad, amplitude); 32 | case FX_CHANNEL_WAVEFORMS.SQUARE: 33 | return genSine(t, phaseOffset, average, min, max, frequency, phaseRad, amplitude) >= average ? max : min; 34 | default: 35 | return 1; 36 | } 37 | } 38 | 39 | self.addEventListener('message', (e) => { 40 | const parsedData = JSON.parse(e.data); 41 | switch (parsedData.msg) { 42 | case WW_MSG_TYPES.COMPUTE_FX: 43 | self.postMessage(getFXValue(...parsedData.data)); 44 | break; 45 | } 46 | }); 47 | 48 | update(); 49 | /* eslint-enable */ 50 | -------------------------------------------------------------------------------- /vite.config.mjs: -------------------------------------------------------------------------------- 1 | /* eslint-disable import/no-extraneous-dependencies */ 2 | import { defineConfig } from 'vite'; 3 | import vue from '@vitejs/plugin-vue'; 4 | import svgLoader from 'vite-svg-loader'; 5 | import { fileURLToPath } from 'url'; 6 | import path from 'path'; 7 | import util from 'util'; 8 | import { exec } from 'child_process'; 9 | 10 | // const util = require('util'); 11 | const asyncExec = util.promisify(exec); 12 | 13 | async function prepareVersioningEnv() { 14 | try { 15 | const execData = await asyncExec('git describe --tags --abbrev=0'); 16 | process.env.VITE_APP_VERSION = execData.stdout; 17 | } catch (err) { 18 | process.env.VITE_APP_VERSION = ''; 19 | } 20 | 21 | try { 22 | const execData = await asyncExec(`git log -1 --format=%ai ${process.env.VITE_APP_VERSION}`); 23 | process.env.VITE_APP_BUILD_DATE = execData.stdout; 24 | } catch (err) { 25 | process.env.VITE_APP_BUILD_DATE = ''; 26 | } 27 | 28 | try { 29 | const execData = await asyncExec('git rev-parse --abbrev-ref HEAD'); 30 | process.env.VITE_APP_BRANCH = execData.stdout; 31 | } catch (err) { 32 | process.env.VITE_APP_BRANCH = ''; 33 | } 34 | } 35 | 36 | const filename = fileURLToPath(import.meta.url); 37 | const pathSegments = path.dirname(filename); 38 | 39 | export default defineConfig(async () => { 40 | try { 41 | await prepareVersioningEnv(); 42 | return { 43 | plugins: [vue(), svgLoader()], 44 | resolve: { 45 | alias: { 46 | '@': path.resolve(pathSegments, './src'), 47 | '@root': path.resolve(pathSegments, './'), 48 | }, 49 | extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue'], 50 | }, 51 | }; 52 | } catch (err) { 53 | return err; 54 | } 55 | }); 56 | --------------------------------------------------------------------------------