diff --git a/co.meldstudio.streamdeck.sdPlugin/README.md b/co.meldstudio.streamdeck.sdPlugin/README.md
index b483613..d8cc87a 100644
--- a/co.meldstudio.streamdeck.sdPlugin/README.md
+++ b/co.meldstudio.streamdeck.sdPlugin/README.md
@@ -12,8 +12,11 @@ And we're not done yet! We are continually working to bring you even more capabi
## What's New
-Version 0.3.0
-Now you can take screenshots for thumbnails at the touch of a button.
+Version 0.4.0
+Switch between staged scenes and transition with the press of a button -- all from the StreamDeck+.
+Switch between Percent and Decibel volume meters in the Adjust Volume dials.
+Added Monitor key to allow users to monitor tracks from the StreamDeck.
+Added mode selection for Mute, Monitor, Layer and Effects keys to switch between settings a specific state or toggling states.
## Helpful Links
@@ -34,6 +37,15 @@ hi@meldstudio.co
# Change History:
------------
+## 2023-12-05 (v0.4.0)
+### Changes:
+-----------
+- Added support for switching scenes using a dial to the StreamDeck+.
+- Added support for switching volume between percent and dB on the Volume control for StreamDeck+.
+- Added support for monitoring an audio track for all StreamDeck devices.
+- Added support for setting a specific state to set for Mute, Monitor, Layer, and Effects keys.
+
+
## 2023-09-01 (v0.3.0)
### Changes:
-----------
diff --git a/co.meldstudio.streamdeck.sdPlugin/actions/screenshot/inspector.html b/co.meldstudio.streamdeck.sdPlugin/actions/screenshot/inspector.html
index 2321e7c..b80a5c1 100644
--- a/co.meldstudio.streamdeck.sdPlugin/actions/screenshot/inspector.html
+++ b/co.meldstudio.streamdeck.sdPlugin/actions/screenshot/inspector.html
@@ -1,25 +1,25 @@
-
-
-
-
-
- co.meldstudio.streamdeck.screenshot Property Inspector
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+ co.meldstudio.streamdeck.screenshot Property Inspector
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/co.meldstudio.streamdeck.sdPlugin/actions/screenshot/plugin.js b/co.meldstudio.streamdeck.sdPlugin/actions/screenshot/plugin.js
index d963884..562ffeb 100644
--- a/co.meldstudio.streamdeck.sdPlugin/actions/screenshot/plugin.js
+++ b/co.meldstudio.streamdeck.sdPlugin/actions/screenshot/plugin.js
@@ -1,12 +1,12 @@
-class Screenshot extends MeldStudioPlugin {
- constructor() {
- super("co.meldstudio.streamdeck.screenshot");
-
- this.action.onKeyUp(({ action, context, device, event, payload }) => {
- if ($MS.meld?.sendEvent)
- $MS.meld.sendEvent("co.meldstudio.events.screenshot");
- });
- }
-}
-
-const screenshot = new Screenshot();
+class Screenshot extends MeldStudioPlugin {
+ constructor() {
+ super("co.meldstudio.streamdeck.screenshot");
+
+ this.action.onKeyUp(({ action, context, device, event, payload }) => {
+ if ($MS.meld?.sendEvent)
+ $MS.meld.sendEvent("co.meldstudio.events.screenshot");
+ });
+ }
+}
+
+const screenshot = new Screenshot();
diff --git a/co.meldstudio.streamdeck.sdPlugin/actions/show-scene/inspector.html b/co.meldstudio.streamdeck.sdPlugin/actions/show-scene/inspector.html
index 14d4c45..bc9ad16 100644
--- a/co.meldstudio.streamdeck.sdPlugin/actions/show-scene/inspector.html
+++ b/co.meldstudio.streamdeck.sdPlugin/actions/show-scene/inspector.html
@@ -1,40 +1,40 @@
-
-
-
-
-
- co.meldstudio.streamdeck.show-scene Property Inspector
-
-
-
-
-
-
-
-
-
Connecting to Meld Studio...
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+ co.meldstudio.streamdeck.show-scene Property Inspector
+
+
+
+
+
+
+
+
+
Connecting to Meld Studio...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/co.meldstudio.streamdeck.sdPlugin/actions/show-scene/plugin.js b/co.meldstudio.streamdeck.sdPlugin/actions/show-scene/plugin.js
index 7f136d8..8901687 100644
--- a/co.meldstudio.streamdeck.sdPlugin/actions/show-scene/plugin.js
+++ b/co.meldstudio.streamdeck.sdPlugin/actions/show-scene/plugin.js
@@ -1,45 +1,45 @@
-class ShowScene extends MeldStudioPlugin {
- sceneRequested = null;
-
- constructor() {
- super("co.meldstudio.streamdeck.show-scene");
-
- this.action.onKeyUp(({ action, context, device, event, payload }) => {
- const { scene } = this.getSettings(context);
- if (!scene) return;
-
- this.sceneRequested = scene;
- this.updateState(context);
-
- if ($MS.meld?.showScene) $MS.meld.showScene(scene);
- });
-
- $MS.on("sessionChanged", (session) => {
- this.sceneRequested = null;
-
- this.forAllContexts((context, settings) => {
- this.updateState(context);
- });
- });
- }
-
- updateState(context) {
- const { scene } = this.getSettings(context);
- const session = $MS?.meld?.session;
-
- const state = (() => {
- if (!scene) return 0;
- if (!session || !session?.items) return 0;
-
- const item = session.items[scene];
-
- if (!item) return 0;
- if (scene == this.sceneRequested) return 1;
- return item.current ? 1 : 0;
- })();
-
- $SD.setState(context, state);
- }
-}
-
-const showScene = new ShowScene();
+class ShowScene extends MeldStudioPlugin {
+ sceneRequested = null;
+
+ constructor() {
+ super("co.meldstudio.streamdeck.show-scene");
+
+ this.action.onKeyUp(({ action, context, device, event, payload }) => {
+ const { scene } = this.getSettings(context);
+ if (!scene) return;
+
+ this.sceneRequested = scene;
+ this.updateState(context);
+
+ if ($MS.meld?.showScene) $MS.meld.showScene(scene);
+ });
+
+ $MS.on("sessionChanged", (session) => {
+ this.sceneRequested = null;
+
+ this.forAllContexts((context, settings) => {
+ this.updateState(context);
+ });
+ });
+ }
+
+ updateState(context) {
+ const { scene } = this.getSettings(context);
+ const session = $MS?.meld?.session;
+
+ const state = (() => {
+ if (!scene) return 0;
+ if (!session || !session?.items) return 0;
+
+ const item = session.items[scene];
+
+ if (!item) return 0;
+ if (scene == this.sceneRequested) return 1;
+ return item.current ? 1 : 0;
+ })();
+
+ $SD.setState(context, state);
+ }
+}
+
+const showScene = new ShowScene();
diff --git a/co.meldstudio.streamdeck.sdPlugin/actions/toggle-effect/inspector.html b/co.meldstudio.streamdeck.sdPlugin/actions/toggle-effect/inspector.html
index 09e7efd..1830f7d 100644
--- a/co.meldstudio.streamdeck.sdPlugin/actions/toggle-effect/inspector.html
+++ b/co.meldstudio.streamdeck.sdPlugin/actions/toggle-effect/inspector.html
@@ -1,55 +1,65 @@
-
-
-
-
- co.meldstudio.streamdeck.toggle-effect Property Inspector
-
-
-
-
-
-
-
-
-
-
-
Connecting to Meld Studio...
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+ co.meldstudio.streamdeck.toggle-effect Property Inspector
+
+
+
+
+
+
+
+
+
+
Action
+
+ Toggle
+ Show
+ Hide
+
+
+
+
+
Connecting to Meld Studio...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/co.meldstudio.streamdeck.sdPlugin/actions/toggle-effect/plugin.js b/co.meldstudio.streamdeck.sdPlugin/actions/toggle-effect/plugin.js
index 290fb81..54fdb19 100644
--- a/co.meldstudio.streamdeck.sdPlugin/actions/toggle-effect/plugin.js
+++ b/co.meldstudio.streamdeck.sdPlugin/actions/toggle-effect/plugin.js
@@ -1,25 +1,53 @@
-class ToggleEffect extends MeldStudioPlugin {
- constructor() {
- super("co.meldstudio.streamdeck.toggle-effect");
-
- this.action.onKeyUp(({ action, context, device, event, payload }) => {
- const { scene, layer, effect } = this.getSettings(context);
- if (!scene || !layer || !effect) return;
-
- if ($MS.meld?.toggleLayer) $MS.meld.toggleEffect(scene, layer, effect);
- });
-
- $MS.on("sessionChanged", (session) => {
- this.forAllContexts((context, settings) => {
- const { effect } = settings;
- if (!effect) return;
- if (!session.items[effect]) return $SD.setState(context, 0);
-
- const state = session.items[effect].enabled ? 1 : 0;
- $SD.setState(context, state);
- });
- });
- }
-}
-
-const toggleEffect = new ToggleEffect();
+class ToggleEffect extends MeldStudioPlugin {
+ effectState = {};
+
+ setLocalState(context, shown) {
+ const state = shown ? 1 : 0;
+ $SD.setState(context, state);
+ }
+
+ constructor() {
+ super("co.meldstudio.streamdeck.toggle-effect");
+
+ this.action.onKeyUp(({ action, context, device, event, payload }) => {
+ const { scene, layer, effect, action: toggle_action } = this.getSettings(
+ context
+ );
+ if (!scene || !layer || !effect) return;
+
+ if (!toggle_action || toggle_action === "toggle") {
+ if ($MS.meld?.toggleEffect) $MS.meld.toggleEffect(scene, layer, effect);
+ } else {
+ const action_show = toggle_action === "show";
+ const state_show = this.effectState[context];
+
+ // show | state | action
+ // 1 | 0 | 1
+ // 0 | 1 | 1
+ // 1 | 1 | 0
+ // 0 | 0 | 0
+
+ const shouldToggle = action_show ^ state_show;
+ if (!shouldToggle) this.setLocalState(context, state_show);
+ if (shouldToggle && $MS.meld?.toggleEffect)
+ $MS.meld.toggleEffect(scene, layer, effect);
+ }
+ });
+
+ $MS.on("sessionChanged", (session) => {
+ this.forAllContexts((context, settings) => {
+ const { effect } = settings;
+ if (!effect) return;
+ if (!session.items[effect]) return $SD.setState(context, 0);
+
+ const enabled = session.items[effect].enabled;
+ this.effectState[context] = enabled;
+
+ const state = enabled ? 1 : 0;
+ $SD.setState(context, state);
+ });
+ });
+ }
+}
+
+const toggleEffect = new ToggleEffect();
diff --git a/co.meldstudio.streamdeck.sdPlugin/actions/toggle-layer/inspector.html b/co.meldstudio.streamdeck.sdPlugin/actions/toggle-layer/inspector.html
index 6ae68f4..93bd9d9 100644
--- a/co.meldstudio.streamdeck.sdPlugin/actions/toggle-layer/inspector.html
+++ b/co.meldstudio.streamdeck.sdPlugin/actions/toggle-layer/inspector.html
@@ -1,46 +1,56 @@
-
-
-
-
- co.meldstudio.streamdeck.toggle-layer Property Inspector
-
-
-
-
-
-
-
-
-
-
Connecting to Meld Studio...
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+ co.meldstudio.streamdeck.toggle-layer Property Inspector
+
+
+
+
+
+
+
+
+
+
Connecting to Meld Studio...
+
+
+
+
Action
+
+ Toggle
+ Show
+ Hide
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/co.meldstudio.streamdeck.sdPlugin/actions/toggle-layer/plugin.js b/co.meldstudio.streamdeck.sdPlugin/actions/toggle-layer/plugin.js
index ec11ee1..3346f86 100644
--- a/co.meldstudio.streamdeck.sdPlugin/actions/toggle-layer/plugin.js
+++ b/co.meldstudio.streamdeck.sdPlugin/actions/toggle-layer/plugin.js
@@ -1,26 +1,51 @@
-class ToggleLayer extends MeldStudioPlugin {
- constructor() {
- super("co.meldstudio.streamdeck.toggle-layer");
-
- this.action.onKeyUp(({ action, context, device, event, payload }) => {
- const { scene, layer } = this.getSettings(context);
- if (!scene || !layer) return;
-
- if ($MS.meld?.toggleLayer) $MS.meld.toggleLayer(scene, layer);
- });
-
- $MS.on("sessionChanged", (session) => {
- this.forAllContexts((context, settings) => {
- const { layer } = settings;
- if (!layer) return;
- if (!session?.items || !session?.items[layer])
- return $SD.setState(context, 0);
-
- const state = session.items[layer].visible ? 1 : 0;
- $SD.setState(context, state);
- });
- });
- }
-}
-
-const toggleLayer = new ToggleLayer();
+class ToggleLayer extends MeldStudioPlugin {
+ layerState = {};
+
+ setLocalState(context, shown) {
+ const state = shown ? 1 : 0;
+ $SD.setState(context, state);
+ }
+
+ constructor() {
+ super("co.meldstudio.streamdeck.toggle-layer");
+
+ this.action.onKeyUp(({ action, context, device, event, payload }) => {
+ const { scene, layer, action: toggle_action } = this.getSettings(context);
+ if (!scene || !layer) return;
+
+ if (!toggle_action || toggle_action === "toggle") {
+ if ($MS.meld?.toggleLayer) $MS.meld.toggleLayer(scene, layer);
+ } else {
+ const action_show = toggle_action === "show";
+ const state_show = this.layerState[context];
+
+ // show | state | action
+ // 1 | 0 | 1
+ // 0 | 1 | 1
+ // 1 | 1 | 0
+ // 0 | 0 | 0
+
+ const shouldToggle = action_show ^ state_show;
+ if (!shouldToggle) this.setLocalState(context, state_show);
+ if (shouldToggle && $MS.meld?.toggleLayer)
+ $MS.meld.toggleLayer(scene, layer);
+ }
+ });
+
+ $MS.on("sessionChanged", (session) => {
+ this.forAllContexts((context, settings) => {
+ const { layer } = settings;
+ if (!layer) return;
+ if (!session?.items || !session?.items[layer])
+ return $SD.setState(context, 0);
+
+ const visible = session.items[layer].visible;
+ this.layerState[context] = visible;
+
+ this.setLocalState(context, visible);
+ });
+ });
+ }
+}
+
+const toggleLayer = new ToggleLayer();
diff --git a/co.meldstudio.streamdeck.sdPlugin/actions/toggle-monitor/inspector.html b/co.meldstudio.streamdeck.sdPlugin/actions/toggle-monitor/inspector.html
new file mode 100644
index 0000000..c595c6c
--- /dev/null
+++ b/co.meldstudio.streamdeck.sdPlugin/actions/toggle-monitor/inspector.html
@@ -0,0 +1,50 @@
+
+
+
+
+
+ co.meldstudio.streamdeck.toggle-monitor Property Inspector
+
+
+
+
+
+
+
+
Action
+
+ Toggle
+ Cue
+ Uncue
+
+
+
+
+
Connecting to Meld Studio...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/co.meldstudio.streamdeck.sdPlugin/actions/toggle-monitor/plugin.js b/co.meldstudio.streamdeck.sdPlugin/actions/toggle-monitor/plugin.js
new file mode 100644
index 0000000..a0a1b39
--- /dev/null
+++ b/co.meldstudio.streamdeck.sdPlugin/actions/toggle-monitor/plugin.js
@@ -0,0 +1,50 @@
+class ToggleMonitor extends MeldStudioPlugin {
+ cueState = {};
+
+ setLocalState(context, cued) {
+ const state = cued ? 1 : 0;
+ $SD.setState(context, state);
+ }
+
+ constructor() {
+ super("co.meldstudio.streamdeck.toggle-monitor");
+
+ this.action.onKeyUp(({ action, context, device, event, payload }) => {
+ const { track, action: toggle_action } = this.getSettings(context);
+ if (!track) return;
+
+ if (!toggle_action || toggle_action === "toggle") {
+ if ($MS.meld?.toggleMonitor) $MS.meld.toggleMonitor(track);
+ } else {
+ const action_cue = toggle_action === "cue";
+ const state_cue = this.cueState[context];
+
+ // cue | state | action
+ // 1 | 0 | 1
+ // 0 | 1 | 1
+ // 1 | 1 | 0
+ // 0 | 0 | 0
+
+ const shouldToggle = action_cue ^ state_cue;
+ if (!shouldToggle) this.setLocalState(context, state_cue);
+ if (shouldToggle && $MS.meld?.toggleMonitor)
+ $MS.meld.toggleMonitor(track);
+ }
+ });
+
+ $MS.on("sessionChanged", (session) => {
+ this.forAllContexts((context, settings) => {
+ const { track, action } = settings;
+ if (!track) return;
+ if (!session.items[track]) return $SD.setState(context, 0);
+
+ const cued = session.items[track].monitoring;
+ this.cueState[context] = cued;
+
+ this.setLocalState(context, cued);
+ });
+ });
+ }
+}
+
+const toggleMonitor = new ToggleMonitor();
diff --git a/co.meldstudio.streamdeck.sdPlugin/actions/toggle-mute/inspector.html b/co.meldstudio.streamdeck.sdPlugin/actions/toggle-mute/inspector.html
index 962f4b0..cb99062 100644
--- a/co.meldstudio.streamdeck.sdPlugin/actions/toggle-mute/inspector.html
+++ b/co.meldstudio.streamdeck.sdPlugin/actions/toggle-mute/inspector.html
@@ -1,41 +1,50 @@
-
-
-
-
-
- co.meldstudio.streamdeck.toggle-mute Property Inspector
-
-
-
-
-
-
-
-
-
Connecting to Meld Studio...
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+ co.meldstudio.streamdeck.toggle-mute Property Inspector
+
+
+
+
+
+
+
+
Action
+
+ Toggle
+ Mute
+ Unmute
+
+
+
+
+
Connecting to Meld Studio...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/co.meldstudio.streamdeck.sdPlugin/actions/toggle-mute/plugin.js b/co.meldstudio.streamdeck.sdPlugin/actions/toggle-mute/plugin.js
index 69477c7..5d758fc 100644
--- a/co.meldstudio.streamdeck.sdPlugin/actions/toggle-mute/plugin.js
+++ b/co.meldstudio.streamdeck.sdPlugin/actions/toggle-mute/plugin.js
@@ -1,25 +1,49 @@
-class ToggleMute extends MeldStudioPlugin {
- constructor() {
- super("co.meldstudio.streamdeck.toggle-mute");
-
- this.action.onKeyUp(({ action, context, device, event, payload }) => {
- const { track } = this.getSettings(context);
- if (!track) return;
-
- if ($MS.meld?.toggleMute) $MS.meld.toggleMute(track);
- });
-
- $MS.on("sessionChanged", (session) => {
- this.forAllContexts((context, settings) => {
- const { track } = settings;
- if (!track) return;
- if (!session.items[track]) return $SD.setState(context, 1);
-
- const state = session.items[track].muted ? 0 : 1;
- $SD.setState(context, state);
- });
- });
- }
-}
-
-const toggleMate = new ToggleMute();
+class ToggleMute extends MeldStudioPlugin {
+ muteState = {}
+
+ setLocalState(context, muted) {
+ const state = muted ? 0 : 1;
+ $SD.setState(context, state);
+ }
+
+ constructor() {
+ super("co.meldstudio.streamdeck.toggle-mute");
+
+ this.action.onKeyUp(({ action, context, device, event, payload }) => {
+ const { track, action: toggle_action } = this.getSettings(context);
+ if (!track) return;
+
+ if (!toggle_action || toggle_action === "toggle") {
+ if ($MS.meld?.toggleMute) $MS.meld.toggleMute(track);
+ } else {
+ const action_mute = toggle_action === "mute";
+ const state_mute = this.muteState[context];
+
+ // mute | state | action
+ // 1 | 0 | 1
+ // 0 | 1 | 1
+ // 1 | 1 | 0
+ // 0 | 0 | 0
+
+ const shouldToggle = action_mute ^ state_mute;
+ if (!shouldToggle) this.setLocalState(context, state_mute);
+ if (shouldToggle && $MS.meld?.toggleMute) $MS.meld.toggleMute(track);
+ }
+ });
+
+ $MS.on("sessionChanged", (session) => {
+ this.forAllContexts((context, settings) => {
+ const { track, action } = settings;
+ if (!track) return;
+ if (!session.items[track]) return $SD.setState(context, 1);
+
+ const muted = session.items[track].muted;
+ this.muteState[context] = muted;
+
+ this.setLocalState(context, muted);
+ });
+ });
+ }
+}
+
+const toggleMute = new ToggleMute();
diff --git a/co.meldstudio.streamdeck.sdPlugin/actions/toggle-record/inspector.html b/co.meldstudio.streamdeck.sdPlugin/actions/toggle-record/inspector.html
index 85b5d20..3410fdd 100644
--- a/co.meldstudio.streamdeck.sdPlugin/actions/toggle-record/inspector.html
+++ b/co.meldstudio.streamdeck.sdPlugin/actions/toggle-record/inspector.html
@@ -1,28 +1,28 @@
-
-
-
-
-
- co.meldstudio.streamdeck.toggle-record Property Inspector
-
-
-
-
-
-
-
Connecting to Meld Studio...
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+ co.meldstudio.streamdeck.toggle-record Property Inspector
+
+
+
+
+
+
+
Connecting to Meld Studio...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/co.meldstudio.streamdeck.sdPlugin/actions/toggle-record/plugin.js b/co.meldstudio.streamdeck.sdPlugin/actions/toggle-record/plugin.js
index 0cabc06..336c61b 100644
--- a/co.meldstudio.streamdeck.sdPlugin/actions/toggle-record/plugin.js
+++ b/co.meldstudio.streamdeck.sdPlugin/actions/toggle-record/plugin.js
@@ -1,18 +1,18 @@
-class ToggleRecording extends MeldStudioPlugin {
- constructor() {
- super("co.meldstudio.streamdeck.toggle-record");
-
- this.action.onKeyUp(({ action, context, device, event, payload }) => {
- if ($MS.meld?.toggleRecord) $MS.meld.toggleRecord();
- });
-
- $MS.on("isRecordingChanged", (recording) => {
- const state = recording ? 1 : 0;
- this.forAllContexts((context) => {
- $SD.setState(context, state);
- });
- });
- }
-}
-
-const toggleRecord = new ToggleRecording();
+class ToggleRecording extends MeldStudioPlugin {
+ constructor() {
+ super("co.meldstudio.streamdeck.toggle-record");
+
+ this.action.onKeyUp(({ action, context, device, event, payload }) => {
+ if ($MS.meld?.toggleRecord) $MS.meld.toggleRecord();
+ });
+
+ $MS.on("isRecordingChanged", (recording) => {
+ const state = recording ? 1 : 0;
+ this.forAllContexts((context) => {
+ $SD.setState(context, state);
+ });
+ });
+ }
+}
+
+const toggleRecord = new ToggleRecording();
diff --git a/co.meldstudio.streamdeck.sdPlugin/actions/toggle-stream/inspector.html b/co.meldstudio.streamdeck.sdPlugin/actions/toggle-stream/inspector.html
index 87d825b..73d13d2 100644
--- a/co.meldstudio.streamdeck.sdPlugin/actions/toggle-stream/inspector.html
+++ b/co.meldstudio.streamdeck.sdPlugin/actions/toggle-stream/inspector.html
@@ -1,28 +1,28 @@
-
-
-
-
-
- co.meldstudio.streamdeck.toggle-stream Property Inspector
-
-
-
-
-
-
-
Connecting to Meld Studio...
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+ co.meldstudio.streamdeck.toggle-stream Property Inspector
+
+
+
+
+
+
+
Connecting to Meld Studio...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/co.meldstudio.streamdeck.sdPlugin/actions/toggle-stream/plugin.js b/co.meldstudio.streamdeck.sdPlugin/actions/toggle-stream/plugin.js
index dcbb10f..5b64c2e 100644
--- a/co.meldstudio.streamdeck.sdPlugin/actions/toggle-stream/plugin.js
+++ b/co.meldstudio.streamdeck.sdPlugin/actions/toggle-stream/plugin.js
@@ -1,18 +1,18 @@
-class ToggleStreaming extends MeldStudioPlugin {
- constructor() {
- super("co.meldstudio.streamdeck.toggle-stream");
-
- this.action.onKeyUp(({ action, context, device, event, payload }) => {
- if ($MS.meld?.toggleStream) $MS.meld.toggleStream();
- });
-
- $MS.on("isStreamingChanged", (streaming) => {
- const state = streaming ? 1 : 0;
- this.forAllContexts((context) => {
- $SD.setState(context, state);
- });
- });
- }
-}
-
-const toggleStreaming = new ToggleStreaming();
+class ToggleStreaming extends MeldStudioPlugin {
+ constructor() {
+ super("co.meldstudio.streamdeck.toggle-stream");
+
+ this.action.onKeyUp(({ action, context, device, event, payload }) => {
+ if ($MS.meld?.toggleStream) $MS.meld.toggleStream();
+ });
+
+ $MS.on("isStreamingChanged", (streaming) => {
+ const state = streaming ? 1 : 0;
+ this.forAllContexts((context) => {
+ $SD.setState(context, state);
+ });
+ });
+ }
+}
+
+const toggleStreaming = new ToggleStreaming();
diff --git a/co.meldstudio.streamdeck.sdPlugin/actions/transition-stepper/inspector.html b/co.meldstudio.streamdeck.sdPlugin/actions/transition-stepper/inspector.html
new file mode 100644
index 0000000..67160a2
--- /dev/null
+++ b/co.meldstudio.streamdeck.sdPlugin/actions/transition-stepper/inspector.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ co.meldstudio.streamdeck.transition-stepper Property Inspector
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/co.meldstudio.streamdeck.sdPlugin/actions/transition-stepper/plugin.js b/co.meldstudio.streamdeck.sdPlugin/actions/transition-stepper/plugin.js
new file mode 100644
index 0000000..bab5439
--- /dev/null
+++ b/co.meldstudio.streamdeck.sdPlugin/actions/transition-stepper/plugin.js
@@ -0,0 +1,75 @@
+class TransitionStepper extends MeldStudioPlugin {
+ stagedScene = -1;
+ availableScenes = [];
+
+ constructor() {
+ super("co.meldstudio.streamdeck.transition-stepper");
+
+ this.action.onDialRotate(({ context, payload }) => {
+ if (this.availableScenes.length === 0)
+ return;
+
+ const nextScene = () => {
+ this.stagedScene = (this.stagedScene + payload.ticks) % this.availableScenes.length;
+ if (this.stagedScene < 0) this.stagedScene += this.availableScenes.length;
+ return this.availableScenes[this.stagedScene];
+ };
+
+ let item = nextScene();
+ if (!item)
+ item = nextScene();
+
+ if ($MS.meld?.setStagedScene) $MS.meld?.setStagedScene(item.id);
+ });
+
+ this.action.onDialPress(({ action, context, device, event, payload }) => {
+ if (!payload.pressed) return;
+ if (this.stagedScene === -1) return;
+ if ($MS.meld?.showStagedScene) $MS.meld.showStagedScene();
+ });
+
+ this.action.onTouchTap(({ action, context, device, event, payload }) => {
+ if (!payload.hold) return;
+ if (this.stagedScene === -1) return;
+ if ($MS.meld?.showStagedScene) $MS.meld.showStagedScene();
+ });
+
+ $MS.on("sessionChanged", (session) => {
+ this.availableScenes = [];
+
+ for(let key in session?.items) {
+ const item = session?.items[key];
+
+ if (item?.type !== "scene") continue;
+
+ if (item?.staged)
+ this.stagedScene = item.index;
+
+ if (!item?.current)
+ this.availableScenes[item.index] = { name: item.name, id: key };
+ }
+
+ if (this.stagedScene !== -1) {
+ const item = this.availableScenes[this.stagedScene];
+ this.forAllContexts((context) => this.setSceneName(context, item?.name));
+ }
+ });
+ }
+
+ setSceneName(context, name) {
+ $SD.setFeedback(context, {
+ icon: "assets/Scene Transition Control/Action Icon/sceneTransition",
+ title: name ?? "Nothing Staged",
+ });
+ }
+
+ getNameForScene(sceneId) {
+ const defaultName = "No Selection";
+ if (!$MS?.meld?.session?.items) return defaultName;
+
+ const name = $MS.meld.session.items[sceneId]?.name;
+ return name ? name : defaultName;
+ }
+}
+
+const transitionStepper = new TransitionStepper();
diff --git a/co.meldstudio.streamdeck.sdPlugin/actions/volume-stepper/inspector.html b/co.meldstudio.streamdeck.sdPlugin/actions/volume-stepper/inspector.html
index 0e5d504..e43ee89 100644
--- a/co.meldstudio.streamdeck.sdPlugin/actions/volume-stepper/inspector.html
+++ b/co.meldstudio.streamdeck.sdPlugin/actions/volume-stepper/inspector.html
@@ -1,46 +1,55 @@
-
-
-
-
-
- co.meldstudio.streamdeck.volume-stepper Property Inspector
-
-
-
-
-
-
-
-
-
-
Connecting to Meld Studio...
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+ co.meldstudio.streamdeck.volume-stepper Property Inspector
+
+
+
+
+
+
+
+
+
+
Meter
+
+ Percent
+ Decibels
+
+
+
+
+
Connecting to Meld Studio...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/co.meldstudio.streamdeck.sdPlugin/actions/volume-stepper/plugin.js b/co.meldstudio.streamdeck.sdPlugin/actions/volume-stepper/plugin.js
index 7ddbdaf..374a536 100644
--- a/co.meldstudio.streamdeck.sdPlugin/actions/volume-stepper/plugin.js
+++ b/co.meldstudio.streamdeck.sdPlugin/actions/volume-stepper/plugin.js
@@ -1,195 +1,269 @@
-class VolumeStepper extends MeldStudioPlugin {
- trackInfo = {};
- unregisterCallbacks = {};
-
- constructor() {
- super("co.meldstudio.streamdeck.volume-stepper");
-
- this.action.onKeyUp(({ action, context, device, event, payload }) => {
- const { track } = this.getSettings(context);
- if (!track) return;
-
- if ($MS.meld?.toggleMute) $MS.meld.toggleMute(track);
- });
-
- this.action.onDialRotate(({ context, payload }) => {
- const { track, stepsize: stepString } = this.getSettings(context);
- const stepsize = 0.01 * parseFloat(stepString);
- const info = this.trackInfo[track];
-
- if (!track) return;
-
- let gain = +stepsize * payload.ticks + (info?.gain ?? 0.0);
- gain = gain < 0 ? 0 : gain;
- gain = gain > 1 ? 1 : gain;
-
- // Store the new gain until the callback fires.
- this.trackInfo[track] = { ...info, gain };
-
- if ($MS.meld?.setGain) $MS.meld?.setGain(track, gain);
- });
-
- this.action.onDialPress(({ action, context, device, event, payload }) => {
- if (!payload.pressed) return;
-
- const { track } = this.getSettings(context);
- if (!track) return;
-
- if ($MS.meld?.toggleMute) $MS.meld.toggleMute(track);
- });
-
- this.action.onTouchTap(({ action, context, device, event, payload }) => {
- if (payload.hold) return;
-
- const { tapPos } = payload;
- const { track } = this.getSettings(context);
- if (!track) return;
-
- // Indicator starts at x=76 and is 108 pixels wide.
- if (tapPos[0] > 80) {
- if (tapPos[0] > 180) return;
-
- const info = this.trackInfo[track];
- const gain = (tapPos[0] - 80) / 100;
-
- // Store the new gain until the callback fires.
- this.trackInfo[track] = { ...info, gain };
-
- if ($MS.meld?.setGain) $MS.meld?.setGain(track, gain);
- } else {
- if ($MS.meld?.toggleMute) $MS.meld.toggleMute(track);
- }
- });
-
- this.action.onDidReceiveSettings(({ context, payload }) => {
- this.setSettings(context, payload?.settings ?? {});
-
- if ($MS.ready) {
- this.onReady(context, payload?.settings);
- } else {
- // If we lose connection, we may need to reinitialize.
- $MS.on("ready", () => {
- this.onReady(context, payload?.settings);
- });
-
- this.setGainAndMute(context, {
- gain: 0.0,
- muted: true,
- });
- }
- });
-
- $MS.on("sessionChanged", (session) => {
- this.forAllContexts((context, { track }) => {
- if (!track) return;
- if (!session?.items) return;
- if (!session?.items[track]) return;
-
- const { name, muted } = session.items[track];
- const state = muted ? 0 : 1;
-
- this.trackInfo[track] = { ...this.trackInfo[track], name, muted };
-
- this.setGainAndMute(context, this.trackInfo[track]);
- });
- });
-
- $MS.on("gainChanged", ({ trackId, gain, muted }) => {
- let info = this.trackInfo[trackId];
- info = { ...info, gain, muted };
- this.trackInfo[trackId] = info;
-
- this.forAllContexts((context, { track }) => {
- if (!track || trackId != track) return;
- this.setGainAndMute(context, info);
- });
- });
-
- $MS.on("closed", () => {
- // reset all registrations.
- this.unregisterCallbacks = {};
- });
- }
-
- setGainAndMute(context, { gain, muted, name }) {
- // meter colors -
- // green: #6DDE92
- // orange: #FB923C
- // red: #F04A4A
-
- const info = (() => {
- if (!muted) {
- if (gain > 0.4) return { icon: "assets/iconAudioTrack" };
- if (gain > 0.0) return { icon: "assets/audioUnmuted40" };
- }
- return { icon: "assets/audioMute" };
- })();
-
- $SD.setFeedback(context, {
- ...info,
- title: name ?? "Adjust Volume",
- value: `${parseInt(gain * 100)}%`,
- indicator: {
- value: gain * 100,
- enabled: true,
- bar_bg_c: muted ? "0:#666666,1:#666666" : "0:#6DDE92,1:#6DDE92",
- },
- });
- }
-
- register(context, track) {
- console.assert($MS.meld);
-
- const callbackInfo = this.unregisterCallbacks[context];
- // Only register once.
- if (callbackInfo?.track === track) return;
-
- this.maybeUnregister(context, track);
- $MS.meld.registerTrackObserver(context, track);
-
- this.unregisterCallbacks[context] = {
- callback: () => {
- if ($MS.meld) $MS.meld.unregisterTrackObserver(context, track);
- },
- track,
- };
- }
-
- maybeUnregister(context) {
- const callbackInfo = this.unregisterCallbacks[context];
- if (!callbackInfo) return;
-
- callbackInfo.callback();
- this.unregisterCallbacks[context] = undefined;
- }
-
- getNameForTrack(track) {
- const defaultName = "Adjust Volume";
- if (!$MS?.meld?.session?.items) return defaultName;
-
- const name = $MS.meld.session.items[track]?.name;
- return name ? name : defaultName;
- }
-
- connectGain(context, track) {
- this.trackInfo[track] = {
- gain: 0.0,
- muted: false,
- name: this.getNameForTrack(track),
- };
-
- this.setGainAndMute(context, this.trackInfo[track]);
- this.register(context, track);
-
- this.action.onWillDisappear(({ context }) => {
- this.maybeUnregister(context);
- });
- }
-
- onReady(context, { track }) {
- console.assert($MS.ready);
- if (this.isEncoder(context)) this.connectGain(context, track);
- }
-}
-
-const volumeStepper = new VolumeStepper();
+function toDb(gain) {
+ let dB = 20 * Math.log10(gain);
+ if (!isFinite(dB)) {
+ dB = -60;
+ }
+ return dB;
+}
+
+function toGain(dB) {
+ if (!isFinite(dB) || dB < -60) dB = -60;
+ let gain = Math.pow(10, dB / 20);
+
+ gain = gain <= 0.001 ? 0 : gain;
+ gain = gain > 1 ? 1 : gain;
+ return gain;
+}
+
+class VolumeStepper extends MeldStudioPlugin {
+ trackInfo = {};
+ unregisterCallbacks = {};
+
+ constructor() {
+ super("co.meldstudio.streamdeck.volume-stepper");
+
+ this.action.onKeyUp(({ action, context, device, event, payload }) => {
+ const { track } = this.getSettings(context);
+ if (!track) return;
+
+ if ($MS.meld?.toggleMute) $MS.meld.toggleMute(track);
+ });
+
+ this.action.onDialRotate(({ context, payload }) => {
+ const { track, stepsize: stepString, metertype } = this.getSettings(
+ context
+ );
+ let use_percent = metertype === "percent";
+
+ const stepsize = parseFloat(stepString);
+ const info = this.trackInfo[track];
+
+ if (!track) return;
+
+ let offset = +stepsize * payload.ticks;
+ let gain = info?.gain ?? 0.0;
+
+ if (use_percent) {
+ gain += 0.01 * offset; // scale to percent...
+ gain = Math.min(gain, 1.0);
+ gain = Math.max(gain, 0.0);
+ } else {
+ let dB = toDb(gain);
+ dB += offset;
+ gain = toGain(dB);
+ }
+
+ // Store the new gain until the callback fires.
+ this.trackInfo[track] = { ...info, gain };
+
+ if ($MS.meld?.setGain) $MS.meld?.setGain(track, gain);
+ });
+
+ this.action.onDialPress(({ action, context, device, event, payload }) => {
+ if (!payload.pressed) return;
+
+ const { track } = this.getSettings(context);
+ if (!track) return;
+
+ if ($MS.meld?.toggleMute) $MS.meld.toggleMute(track);
+ });
+
+ this.action.onTouchTap(({ action, context, device, event, payload }) => {
+ if (payload.hold) return;
+
+ const { tapPos } = payload;
+ const { track } = this.getSettings(context);
+ if (!track) return;
+
+ // Indicator starts at x=76 and is 108 pixels wide.
+ if (tapPos[0] > 80) {
+ if (tapPos[0] > 180) return;
+
+ const info = this.trackInfo[track];
+ const gain = (tapPos[0] - 80) / 100;
+
+ // Store the new gain until the callback fires.
+ this.trackInfo[track] = { ...info, gain };
+
+ if ($MS.meld?.setGain) $MS.meld?.setGain(track, gain);
+ } else {
+ if ($MS.meld?.toggleMonitor) $MS.meld.toggleMonitor(track);
+ }
+ });
+
+ this.action.onWillAppear(({ context, payload }) => {
+ $SD.setFeedback(context, {
+ icon:
+ "assets/Audio Track/Mute_Unmute Audio Track/Action Icons/audioTrack",
+ title: "",
+ value: "",
+ indicator: {
+ value: 0,
+ enabled: true,
+ bar_bg_c: "0:#666666,1:#666666",
+ },
+ });
+ });
+
+ this.action.onDidReceiveSettings(({ context, payload }) => {
+ this.setSettings(context, payload?.settings ?? {});
+
+ if ($MS.ready) {
+ this.onReady(context, payload?.settings);
+ } else {
+ // If we lose connection, we may need to reinitialize.
+ $MS.on("ready", () => {
+ this.onReady(context, payload?.settings);
+ });
+
+ this.setGainAndMute(context, payload.settings.metertype, {
+ gain: 0.0,
+ muted: true,
+ monitoring: false,
+ });
+ }
+ });
+
+ $MS.on("sessionChanged", (session) => {
+ this.forAllContexts((context, { track, metertype }) => {
+ if (!track) return;
+ if (!session?.items) return;
+ if (!session?.items[track]) return;
+
+ const { name, muted, monitoring } = session.items[track];
+
+ this.trackInfo[track] = {
+ ...this.trackInfo[track],
+ name,
+ muted,
+ monitoring,
+ };
+
+ this.setGainAndMute(context, metertype, this.trackInfo[track]);
+ });
+ });
+
+ $MS.on("gainChanged", ({ trackId, gain, muted }) => {
+ let info = this.trackInfo[trackId];
+ info = { ...info, gain, muted };
+ this.trackInfo[trackId] = info;
+
+ this.forAllContexts((context, { track, metertype }) => {
+ if (!track || trackId != track) return;
+ this.setGainAndMute(context, metertype, info);
+ });
+ });
+
+ $MS.on("closed", () => {
+ // reset all registrations.
+ this.unregisterCallbacks = {};
+ });
+ }
+
+ setGainAndMute(context, metertype, { gain, muted, name, monitoring }) {
+ // meter colors -
+ // green: #6DDE92
+ // orange: #FB923C
+ // red: #F04A4A
+
+ let use_percent = metertype === "percent";
+ let volume;
+ let bar_colors;
+ let bar_value;
+
+ if (use_percent) {
+ volume = `${parseInt(gain * 100)}%`;
+ bar_value = gain;
+ } else {
+ const dB = toDb(gain);
+ volume = dB === -60 ? "-∞ dB" : `${parseInt(Math.round(dB))} dB`;
+ bar_value = (dB + 60) / 60;
+ }
+
+ const info = (() => {
+ if (!muted) {
+ if (gain > 0.4)
+ return {
+ icon:
+ "assets/Audio Track/Mute_Unmute Audio Track/Action Icons/audioTrack",
+ };
+ if (gain > 0.0)
+ return {
+ icon:
+ "assets/Audio Track/Mute_Unmute Audio Track/Action Icons/audioUnmuted40",
+ };
+ }
+ return {
+ icon:
+ "assets/Audio Track/Mute_Unmute Audio Track/Action Icons/audioMute",
+ };
+ })();
+
+ $SD.setFeedback(context, {
+ ...info,
+ title: name ?? "Adjust Volume",
+ value: volume,
+ indicator: {
+ value: bar_value * 100,
+ enabled: true,
+ bar_bg_c: muted ? "0:#666666,1:#666666" : "0:#6DDE92,1:#6DDE92",
+ },
+ });
+ }
+
+ register(context, track) {
+ console.assert($MS.meld);
+
+ const callbackInfo = this.unregisterCallbacks[context];
+ // Only register once.
+ if (callbackInfo?.track === track) return;
+
+ this.maybeUnregister(context, track);
+ $MS.meld.registerTrackObserver(context, track);
+
+ this.unregisterCallbacks[context] = {
+ callback: () => {
+ if ($MS.meld) $MS.meld.unregisterTrackObserver(context, track);
+ },
+ track,
+ };
+ }
+
+ maybeUnregister(context) {
+ const callbackInfo = this.unregisterCallbacks[context];
+ if (!callbackInfo) return;
+
+ callbackInfo.callback();
+ this.unregisterCallbacks[context] = undefined;
+ }
+
+ getNameForTrack(track) {
+ const defaultName = "Adjust Volume";
+ if (!$MS?.meld?.session?.items) return defaultName;
+
+ const name = $MS.meld.session.items[track]?.name;
+ return name ? name : defaultName;
+ }
+
+ connectGain(context, metertype, track) {
+ this.trackInfo[track] = {
+ gain: 0.0,
+ muted: false,
+ name: this.getNameForTrack(track),
+ };
+
+ this.setGainAndMute(context, metertype, this.trackInfo[track]);
+ this.register(context, track);
+
+ this.action.onWillDisappear(({ context }) => {
+ this.maybeUnregister(context);
+ });
+ }
+
+ onReady(context, { track, metertype }) {
+ console.assert($MS.ready);
+ if (this.isEncoder(context)) this.connectGain(context, metertype, track);
+ }
+}
+
+const volumeStepper = new VolumeStepper();
diff --git a/co.meldstudio.streamdeck.sdPlugin/app.html b/co.meldstudio.streamdeck.sdPlugin/app.html
index 03583dc..28aa6ef 100644
--- a/co.meldstudio.streamdeck.sdPlugin/app.html
+++ b/co.meldstudio.streamdeck.sdPlugin/app.html
@@ -1,39 +1,41 @@
-
-
-
-
- co.meldstudio.streamdeck
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+ co.meldstudio.streamdeck
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/co.meldstudio.streamdeck.sdPlugin/app.js b/co.meldstudio.streamdeck.sdPlugin/app.js
index 6dfe150..9ed64ab 100644
--- a/co.meldstudio.streamdeck.sdPlugin/app.js
+++ b/co.meldstudio.streamdeck.sdPlugin/app.js
@@ -1,22 +1,22 @@
-let settingsCache = {};
-
-/**
- * The first event fired when Stream Deck starts
- */
-$SD.onConnected(
- ({ actionInfo, appInfo, connection, messageType, port, uuid }) => {
- console.log("Stream Deck connected!");
- }
-);
-
-$MS.on("connected", () => {
- console.log("Connect Callback.");
-});
-
-$MS.on("ready", () => {
- console.log("Session Ready.");
-});
-
-$MS.on("closed", () => {
- console.log("Closed Callback.");
+let settingsCache = {};
+
+/**
+ * The first event fired when Stream Deck starts
+ */
+$SD.onConnected(
+ ({ actionInfo, appInfo, connection, messageType, port, uuid }) => {
+ console.log("Stream Deck connected!");
+ }
+);
+
+$MS.on("connected", () => {
+ console.log("Connect Callback.");
+});
+
+$MS.on("ready", () => {
+ console.log("Session Ready.");
+});
+
+$MS.on("closed", () => {
+ console.log("Closed Callback.");
});
\ No newline at end of file
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/AppIcon/meldstudio-288px.png b/co.meldstudio.streamdeck.sdPlugin/assets/AppIcon/meldstudio-288px.png
new file mode 100644
index 0000000..cb8a485
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/AppIcon/meldstudio-288px.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/AppIcon/meldstudio.png b/co.meldstudio.streamdeck.sdPlugin/assets/AppIcon/meldstudio.png
new file mode 100644
index 0000000..93c9c9c
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/AppIcon/meldstudio.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/AppIcon/meldstudio@2x.png b/co.meldstudio.streamdeck.sdPlugin/assets/AppIcon/meldstudio@2x.png
new file mode 100644
index 0000000..975338f
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/AppIcon/meldstudio@2x.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/audioMute.svg b/co.meldstudio.streamdeck.sdPlugin/assets/Audio Track/Mute_Unmute Audio Track/Action Icons/audioMute.svg
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/audioMute.svg
rename to co.meldstudio.streamdeck.sdPlugin/assets/Audio Track/Mute_Unmute Audio Track/Action Icons/audioMute.svg
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/iconAudioTrack.svg b/co.meldstudio.streamdeck.sdPlugin/assets/Audio Track/Mute_Unmute Audio Track/Action Icons/audioTrack.svg
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/iconAudioTrack.svg
rename to co.meldstudio.streamdeck.sdPlugin/assets/Audio Track/Mute_Unmute Audio Track/Action Icons/audioTrack.svg
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/iconAudioTrack@2x.svg b/co.meldstudio.streamdeck.sdPlugin/assets/Audio Track/Mute_Unmute Audio Track/Action Icons/audioTrack@2x.svg
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/iconAudioTrack@2x.svg
rename to co.meldstudio.streamdeck.sdPlugin/assets/Audio Track/Mute_Unmute Audio Track/Action Icons/audioTrack@2x.svg
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/audioUnmuted40.svg b/co.meldstudio.streamdeck.sdPlugin/assets/Audio Track/Mute_Unmute Audio Track/Action Icons/audioUnmuted40.svg
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/audioUnmuted40.svg
rename to co.meldstudio.streamdeck.sdPlugin/assets/Audio Track/Mute_Unmute Audio Track/Action Icons/audioUnmuted40.svg
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/audioUnmuted40@2x.svg b/co.meldstudio.streamdeck.sdPlugin/assets/Audio Track/Mute_Unmute Audio Track/Action Icons/audioUnmuted40@2x.svg
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/audioUnmuted40@2x.svg
rename to co.meldstudio.streamdeck.sdPlugin/assets/Audio Track/Mute_Unmute Audio Track/Action Icons/audioUnmuted40@2x.svg
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Audio Track/Mute_Unmute Audio Track/Key Icons/audio-unmuted.gif b/co.meldstudio.streamdeck.sdPlugin/assets/Audio Track/Mute_Unmute Audio Track/Key Icons/audio-unmuted.gif
new file mode 100644
index 0000000..0576074
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Audio Track/Mute_Unmute Audio Track/Key Icons/audio-unmuted.gif differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Audio Track/Mute_Unmute Audio Track/Key Icons/audio-unmuted@2x.gif b/co.meldstudio.streamdeck.sdPlugin/assets/Audio Track/Mute_Unmute Audio Track/Key Icons/audio-unmuted@2x.gif
new file mode 100644
index 0000000..6e76b9f
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Audio Track/Mute_Unmute Audio Track/Key Icons/audio-unmuted@2x.gif differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/mutedTrack.png b/co.meldstudio.streamdeck.sdPlugin/assets/Audio Track/Mute_Unmute Audio Track/Key Icons/mutedTrack.png
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/mutedTrack.png
rename to co.meldstudio.streamdeck.sdPlugin/assets/Audio Track/Mute_Unmute Audio Track/Key Icons/mutedTrack.png
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/mutedTrack@2x.png b/co.meldstudio.streamdeck.sdPlugin/assets/Audio Track/Mute_Unmute Audio Track/Key Icons/mutedTrack@2x.png
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/mutedTrack@2x.png
rename to co.meldstudio.streamdeck.sdPlugin/assets/Audio Track/Mute_Unmute Audio Track/Key Icons/mutedTrack@2x.png
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Audio Track/Mute_Unmute Audio Track/Key Icons/unmuteTrack.png b/co.meldstudio.streamdeck.sdPlugin/assets/Audio Track/Mute_Unmute Audio Track/Key Icons/unmuteTrack.png
new file mode 100644
index 0000000..a3fcee4
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Audio Track/Mute_Unmute Audio Track/Key Icons/unmuteTrack.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Audio Track/Mute_Unmute Audio Track/Key Icons/unmuteTrack@2x.png b/co.meldstudio.streamdeck.sdPlugin/assets/Audio Track/Mute_Unmute Audio Track/Key Icons/unmuteTrack@2x.png
new file mode 100644
index 0000000..9bd5be7
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Audio Track/Mute_Unmute Audio Track/Key Icons/unmuteTrack@2x.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Audio Track/audio-unmuted.psd b/co.meldstudio.streamdeck.sdPlugin/assets/Audio Track/audio-unmuted.psd
new file mode 100644
index 0000000..981deee
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Audio Track/audio-unmuted.psd differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Category Icon/Meld Studio.png b/co.meldstudio.streamdeck.sdPlugin/assets/Category Icon/Meld Studio.png
new file mode 100644
index 0000000..292d0ff
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Category Icon/Meld Studio.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Category Icon/Meld Studio.svg b/co.meldstudio.streamdeck.sdPlugin/assets/Category Icon/Meld Studio.svg
new file mode 100644
index 0000000..3a6ddc9
--- /dev/null
+++ b/co.meldstudio.streamdeck.sdPlugin/assets/Category Icon/Meld Studio.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Category Icon/Meld Studio@2x.png b/co.meldstudio.streamdeck.sdPlugin/assets/Category Icon/Meld Studio@2x.png
new file mode 100644
index 0000000..818a16d
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Category Icon/Meld Studio@2x.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Category Icon/Meld Studio@2x.svg b/co.meldstudio.streamdeck.sdPlugin/assets/Category Icon/Meld Studio@2x.svg
new file mode 100644
index 0000000..a10b648
--- /dev/null
+++ b/co.meldstudio.streamdeck.sdPlugin/assets/Category Icon/Meld Studio@2x.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Cue/action icon/cueAudio.png b/co.meldstudio.streamdeck.sdPlugin/assets/Cue/action icon/cueAudio.png
new file mode 100644
index 0000000..6d32a9d
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Cue/action icon/cueAudio.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Cue/action icon/cueAudio.svg b/co.meldstudio.streamdeck.sdPlugin/assets/Cue/action icon/cueAudio.svg
new file mode 100644
index 0000000..5ac3c6e
--- /dev/null
+++ b/co.meldstudio.streamdeck.sdPlugin/assets/Cue/action icon/cueAudio.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Cue/action icon/cueAudio@2x.png b/co.meldstudio.streamdeck.sdPlugin/assets/Cue/action icon/cueAudio@2x.png
new file mode 100644
index 0000000..24f7b83
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Cue/action icon/cueAudio@2x.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Cue/action icon/cueAudio@2x.svg b/co.meldstudio.streamdeck.sdPlugin/assets/Cue/action icon/cueAudio@2x.svg
new file mode 100644
index 0000000..472420e
--- /dev/null
+++ b/co.meldstudio.streamdeck.sdPlugin/assets/Cue/action icon/cueAudio@2x.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Cue/key icon/cueOff.png b/co.meldstudio.streamdeck.sdPlugin/assets/Cue/key icon/cueOff.png
new file mode 100644
index 0000000..ee264dd
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Cue/key icon/cueOff.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Cue/key icon/cueOff@2x.png b/co.meldstudio.streamdeck.sdPlugin/assets/Cue/key icon/cueOff@2x.png
new file mode 100644
index 0000000..eeaf82e
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Cue/key icon/cueOff@2x.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Cue/key icon/cueOn.png b/co.meldstudio.streamdeck.sdPlugin/assets/Cue/key icon/cueOn.png
new file mode 100644
index 0000000..4831d11
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Cue/key icon/cueOn.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Cue/key icon/cueOn@2x.png b/co.meldstudio.streamdeck.sdPlugin/assets/Cue/key icon/cueOn@2x.png
new file mode 100644
index 0000000..a44006e
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Cue/key icon/cueOn@2x.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/iconEffectVisibility.svg b/co.meldstudio.streamdeck.sdPlugin/assets/Effects/Action Icon/iconEffectVisibility.svg
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/iconEffectVisibility.svg
rename to co.meldstudio.streamdeck.sdPlugin/assets/Effects/Action Icon/iconEffectVisibility.svg
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/iconEffectVisibility@2x.svg b/co.meldstudio.streamdeck.sdPlugin/assets/Effects/Action Icon/iconEffectVisibility@2x.svg
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/iconEffectVisibility@2x.svg
rename to co.meldstudio.streamdeck.sdPlugin/assets/Effects/Action Icon/iconEffectVisibility@2x.svg
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/hideEffect.png b/co.meldstudio.streamdeck.sdPlugin/assets/Effects/Key Icons/hideEffect.png
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/hideEffect.png
rename to co.meldstudio.streamdeck.sdPlugin/assets/Effects/Key Icons/hideEffect.png
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/hideEffect@2x.png b/co.meldstudio.streamdeck.sdPlugin/assets/Effects/Key Icons/hideEffect@2x.png
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/hideEffect@2x.png
rename to co.meldstudio.streamdeck.sdPlugin/assets/Effects/Key Icons/hideEffect@2x.png
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Effects/Key Icons/showEffect.png b/co.meldstudio.streamdeck.sdPlugin/assets/Effects/Key Icons/showEffect.png
new file mode 100644
index 0000000..fac74bb
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Effects/Key Icons/showEffect.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Effects/Key Icons/showEffect@2x.png b/co.meldstudio.streamdeck.sdPlugin/assets/Effects/Key Icons/showEffect@2x.png
new file mode 100644
index 0000000..44cf792
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Effects/Key Icons/showEffect@2x.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/iconGoLive.svg b/co.meldstudio.streamdeck.sdPlugin/assets/Go live/Go live/Action Icons/goLive.svg
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/iconGoLive.svg
rename to co.meldstudio.streamdeck.sdPlugin/assets/Go live/Go live/Action Icons/goLive.svg
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/iconGoLive@2x.svg b/co.meldstudio.streamdeck.sdPlugin/assets/Go live/Go live/Action Icons/goLive@2x.svg
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/iconGoLive@2x.svg
rename to co.meldstudio.streamdeck.sdPlugin/assets/Go live/Go live/Action Icons/goLive@2x.svg
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Go live/Go live/Key Icons/goLive.png b/co.meldstudio.streamdeck.sdPlugin/assets/Go live/Go live/Key Icons/goLive.png
new file mode 100644
index 0000000..f9bfa26
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Go live/Go live/Key Icons/goLive.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Go live/Go live/Key Icons/goLive@2x.png b/co.meldstudio.streamdeck.sdPlugin/assets/Go live/Go live/Key Icons/goLive@2x.png
new file mode 100644
index 0000000..4e52187
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Go live/Go live/Key Icons/goLive@2x.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Go live/Go live/Key Icons/goOffiline.png b/co.meldstudio.streamdeck.sdPlugin/assets/Go live/Go live/Key Icons/goOffiline.png
new file mode 100644
index 0000000..d0f7419
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Go live/Go live/Key Icons/goOffiline.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Go live/Go live/Key Icons/goOffiline@2x.png b/co.meldstudio.streamdeck.sdPlugin/assets/Go live/Go live/Key Icons/goOffiline@2x.png
new file mode 100644
index 0000000..311f178
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Go live/Go live/Key Icons/goOffiline@2x.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/iconLayerVisibility.svg b/co.meldstudio.streamdeck.sdPlugin/assets/Layers/Layer Visibility/Action Icon/iconLayerVisibility.svg
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/iconLayerVisibility.svg
rename to co.meldstudio.streamdeck.sdPlugin/assets/Layers/Layer Visibility/Action Icon/iconLayerVisibility.svg
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/iconLayerVisibility@2x.svg b/co.meldstudio.streamdeck.sdPlugin/assets/Layers/Layer Visibility/Action Icon/iconLayerVisibility@2x.svg
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/iconLayerVisibility@2x.svg
rename to co.meldstudio.streamdeck.sdPlugin/assets/Layers/Layer Visibility/Action Icon/iconLayerVisibility@2x.svg
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/hideLayer.png b/co.meldstudio.streamdeck.sdPlugin/assets/Layers/Layer Visibility/Key Icon/layerHide.png
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/hideLayer.png
rename to co.meldstudio.streamdeck.sdPlugin/assets/Layers/Layer Visibility/Key Icon/layerHide.png
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/hideLayer@2x.png b/co.meldstudio.streamdeck.sdPlugin/assets/Layers/Layer Visibility/Key Icon/layerHide@2x.png
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/hideLayer@2x.png
rename to co.meldstudio.streamdeck.sdPlugin/assets/Layers/Layer Visibility/Key Icon/layerHide@2x.png
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Layers/Layer Visibility/Key Icon/layerShow.png b/co.meldstudio.streamdeck.sdPlugin/assets/Layers/Layer Visibility/Key Icon/layerShow.png
new file mode 100644
index 0000000..333b2b6
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Layers/Layer Visibility/Key Icon/layerShow.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Layers/Layer Visibility/Key Icon/layerShow@2x.png b/co.meldstudio.streamdeck.sdPlugin/assets/Layers/Layer Visibility/Key Icon/layerShow@2x.png
new file mode 100644
index 0000000..a2b8c80
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Layers/Layer Visibility/Key Icon/layerShow@2x.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/iconRecord.svg b/co.meldstudio.streamdeck.sdPlugin/assets/Record/Start_Stop Record/Action Icon/iconRecord.svg
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/iconRecord.svg
rename to co.meldstudio.streamdeck.sdPlugin/assets/Record/Start_Stop Record/Action Icon/iconRecord.svg
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/iconRecord@2x.svg b/co.meldstudio.streamdeck.sdPlugin/assets/Record/Start_Stop Record/Action Icon/iconRecord@2x.svg
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/iconRecord@2x.svg
rename to co.meldstudio.streamdeck.sdPlugin/assets/Record/Start_Stop Record/Action Icon/iconRecord@2x.svg
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/startRecord.png b/co.meldstudio.streamdeck.sdPlugin/assets/Record/Start_Stop Record/Key Icon/startRecord.png
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/startRecord.png
rename to co.meldstudio.streamdeck.sdPlugin/assets/Record/Start_Stop Record/Key Icon/startRecord.png
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/startRecord@2x.png b/co.meldstudio.streamdeck.sdPlugin/assets/Record/Start_Stop Record/Key Icon/startRecord@2x.png
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/startRecord@2x.png
rename to co.meldstudio.streamdeck.sdPlugin/assets/Record/Start_Stop Record/Key Icon/startRecord@2x.png
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Record/Start_Stop Record/Key Icon/stopRecord.gif b/co.meldstudio.streamdeck.sdPlugin/assets/Record/Start_Stop Record/Key Icon/stopRecord.gif
new file mode 100644
index 0000000..55c5035
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Record/Start_Stop Record/Key Icon/stopRecord.gif differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Record/Start_Stop Record/Key Icon/stopRecord.png b/co.meldstudio.streamdeck.sdPlugin/assets/Record/Start_Stop Record/Key Icon/stopRecord.png
new file mode 100644
index 0000000..293322d
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Record/Start_Stop Record/Key Icon/stopRecord.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Record/Start_Stop Record/Key Icon/stopRecord@2x.gif b/co.meldstudio.streamdeck.sdPlugin/assets/Record/Start_Stop Record/Key Icon/stopRecord@2x.gif
new file mode 100644
index 0000000..35ddc62
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Record/Start_Stop Record/Key Icon/stopRecord@2x.gif differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Record/Start_Stop Record/Key Icon/stopRecord@2x.png b/co.meldstudio.streamdeck.sdPlugin/assets/Record/Start_Stop Record/Key Icon/stopRecord@2x.png
new file mode 100644
index 0000000..c4e565b
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Record/Start_Stop Record/Key Icon/stopRecord@2x.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Scene Transition Control/Action Icon/sceneTransition.svg b/co.meldstudio.streamdeck.sdPlugin/assets/Scene Transition Control/Action Icon/sceneTransition.svg
new file mode 100644
index 0000000..7afc414
--- /dev/null
+++ b/co.meldstudio.streamdeck.sdPlugin/assets/Scene Transition Control/Action Icon/sceneTransition.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Scene Transition Control/Action Icon/sceneTransition@2x.svg b/co.meldstudio.streamdeck.sdPlugin/assets/Scene Transition Control/Action Icon/sceneTransition@2x.svg
new file mode 100644
index 0000000..9d7d148
--- /dev/null
+++ b/co.meldstudio.streamdeck.sdPlugin/assets/Scene Transition Control/Action Icon/sceneTransition@2x.svg
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Scene Transition Control/SD Slot/sceneTransition.png b/co.meldstudio.streamdeck.sdPlugin/assets/Scene Transition Control/SD Slot/sceneTransition.png
new file mode 100644
index 0000000..111ab12
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Scene Transition Control/SD Slot/sceneTransition.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Scene Transition Control/SD Slot/sceneTransition.svg b/co.meldstudio.streamdeck.sdPlugin/assets/Scene Transition Control/SD Slot/sceneTransition.svg
new file mode 100644
index 0000000..1355741
--- /dev/null
+++ b/co.meldstudio.streamdeck.sdPlugin/assets/Scene Transition Control/SD Slot/sceneTransition.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Scene Transition Control/SD Slot/sceneTransition@2x.png b/co.meldstudio.streamdeck.sdPlugin/assets/Scene Transition Control/SD Slot/sceneTransition@2x.png
new file mode 100644
index 0000000..99b9708
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Scene Transition Control/SD Slot/sceneTransition@2x.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Scene Transition Control/SD Slot/sceneTransition@2x.svg b/co.meldstudio.streamdeck.sdPlugin/assets/Scene Transition Control/SD Slot/sceneTransition@2x.svg
new file mode 100644
index 0000000..285a124
--- /dev/null
+++ b/co.meldstudio.streamdeck.sdPlugin/assets/Scene Transition Control/SD Slot/sceneTransition@2x.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Scene Transition Control/SD Slot/sceneTransitionBlue.png b/co.meldstudio.streamdeck.sdPlugin/assets/Scene Transition Control/SD Slot/sceneTransitionBlue.png
new file mode 100644
index 0000000..b7131f5
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Scene Transition Control/SD Slot/sceneTransitionBlue.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Scene Transition Control/SD Slot/sceneTransitionBlue@2x.png b/co.meldstudio.streamdeck.sdPlugin/assets/Scene Transition Control/SD Slot/sceneTransitionBlue@2x.png
new file mode 100644
index 0000000..2b75998
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Scene Transition Control/SD Slot/sceneTransitionBlue@2x.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Scenes/Animation/scene-gif-key-icon.psd b/co.meldstudio.streamdeck.sdPlugin/assets/Scenes/Animation/scene-gif-key-icon.psd
new file mode 100644
index 0000000..b8e5d1c
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Scenes/Animation/scene-gif-key-icon.psd differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/iconScene.svg b/co.meldstudio.streamdeck.sdPlugin/assets/Scenes/Change to Scene/Action Icon/iconScene.svg
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/iconScene.svg
rename to co.meldstudio.streamdeck.sdPlugin/assets/Scenes/Change to Scene/Action Icon/iconScene.svg
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/iconScene@2x.svg b/co.meldstudio.streamdeck.sdPlugin/assets/Scenes/Change to Scene/Action Icon/iconScene@2x.svg
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/iconScene@2x.svg
rename to co.meldstudio.streamdeck.sdPlugin/assets/Scenes/Change to Scene/Action Icon/iconScene@2x.svg
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/sceneOff.png b/co.meldstudio.streamdeck.sdPlugin/assets/Scenes/Change to Scene/Key Icon/sceneOff.png
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/sceneOff.png
rename to co.meldstudio.streamdeck.sdPlugin/assets/Scenes/Change to Scene/Key Icon/sceneOff.png
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/sceneOff@2x.png b/co.meldstudio.streamdeck.sdPlugin/assets/Scenes/Change to Scene/Key Icon/sceneOff@2x.png
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/sceneOff@2x.png
rename to co.meldstudio.streamdeck.sdPlugin/assets/Scenes/Change to Scene/Key Icon/sceneOff@2x.png
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Scenes/Change to Scene/Key Icon/sceneOn.gif b/co.meldstudio.streamdeck.sdPlugin/assets/Scenes/Change to Scene/Key Icon/sceneOn.gif
new file mode 100644
index 0000000..5d67376
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Scenes/Change to Scene/Key Icon/sceneOn.gif differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Scenes/Change to Scene/Key Icon/sceneOn.png b/co.meldstudio.streamdeck.sdPlugin/assets/Scenes/Change to Scene/Key Icon/sceneOn.png
new file mode 100644
index 0000000..1db6e7e
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Scenes/Change to Scene/Key Icon/sceneOn.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Scenes/Change to Scene/Key Icon/sceneOn@2x.gif b/co.meldstudio.streamdeck.sdPlugin/assets/Scenes/Change to Scene/Key Icon/sceneOn@2x.gif
new file mode 100644
index 0000000..f9471c3
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Scenes/Change to Scene/Key Icon/sceneOn@2x.gif differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Scenes/Change to Scene/Key Icon/sceneOn@2x.png b/co.meldstudio.streamdeck.sdPlugin/assets/Scenes/Change to Scene/Key Icon/sceneOn@2x.png
new file mode 100644
index 0000000..0133028
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Scenes/Change to Scene/Key Icon/sceneOn@2x.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/iconScreenshot.svg b/co.meldstudio.streamdeck.sdPlugin/assets/Screenshot/iconScreenshot.svg
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/iconScreenshot.svg
rename to co.meldstudio.streamdeck.sdPlugin/assets/Screenshot/iconScreenshot.svg
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/iconScreenshot@2x.svg b/co.meldstudio.streamdeck.sdPlugin/assets/Screenshot/iconScreenshot@2x.svg
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/iconScreenshot@2x.svg
rename to co.meldstudio.streamdeck.sdPlugin/assets/Screenshot/iconScreenshot@2x.svg
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Screenshot/screenshot.png b/co.meldstudio.streamdeck.sdPlugin/assets/Screenshot/screenshot.png
new file mode 100644
index 0000000..825c347
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Screenshot/screenshot.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Screenshot/screenshot@2x.png b/co.meldstudio.streamdeck.sdPlugin/assets/Screenshot/screenshot@2x.png
new file mode 100644
index 0000000..7b83da3
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Screenshot/screenshot@2x.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Touch strip bgs/Touch Strip blue.png b/co.meldstudio.streamdeck.sdPlugin/assets/Touch strip bgs/Touch Strip blue.png
new file mode 100644
index 0000000..156d8d3
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Touch strip bgs/Touch Strip blue.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Touch strip bgs/Touch Strip purple.png b/co.meldstudio.streamdeck.sdPlugin/assets/Touch strip bgs/Touch Strip purple.png
new file mode 100644
index 0000000..81b7bed
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Touch strip bgs/Touch Strip purple.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/Touch strip bgs/Touch Strip teal.png b/co.meldstudio.streamdeck.sdPlugin/assets/Touch strip bgs/Touch Strip teal.png
new file mode 100644
index 0000000..70a8ed3
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/Touch strip bgs/Touch Strip teal.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/MeldStudio.svg b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/MeldStudio.svg
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/MeldStudio.svg
rename to co.meldstudio.streamdeck.sdPlugin/assets/oldicons/MeldStudio.svg
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/MeldStudio@2x.svg b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/MeldStudio@2x.svg
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/MeldStudio@2x.svg
rename to co.meldstudio.streamdeck.sdPlugin/assets/oldicons/MeldStudio@2x.svg
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/goLive.png b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/goLive.png
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/goLive.png
rename to co.meldstudio.streamdeck.sdPlugin/assets/oldicons/goLive.png
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/goLive@2x.png b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/goLive@2x.png
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/goLive@2x.png
rename to co.meldstudio.streamdeck.sdPlugin/assets/oldicons/goLive@2x.png
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/goOffline.png b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/goOffline.png
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/goOffline.png
rename to co.meldstudio.streamdeck.sdPlugin/assets/oldicons/goOffline.png
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/goOffline@2x.png b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/goOffline@2x.png
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/goOffline@2x.png
rename to co.meldstudio.streamdeck.sdPlugin/assets/oldicons/goOffline@2x.png
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/hideEffect.png b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/hideEffect.png
new file mode 100644
index 0000000..018eca6
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/hideEffect.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/hideEffect@2x.png b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/hideEffect@2x.png
new file mode 100644
index 0000000..493f018
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/hideEffect@2x.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/hideLayer.png b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/hideLayer.png
new file mode 100644
index 0000000..fa71384
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/hideLayer.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/hideLayer@2x.png b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/hideLayer@2x.png
new file mode 100644
index 0000000..46dec0c
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/hideLayer@2x.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconAudioTrack.svg b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconAudioTrack.svg
new file mode 100644
index 0000000..04c67da
--- /dev/null
+++ b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconAudioTrack.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconAudioTrack@2x.svg b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconAudioTrack@2x.svg
new file mode 100644
index 0000000..457d111
--- /dev/null
+++ b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconAudioTrack@2x.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconEffectVisibility.svg b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconEffectVisibility.svg
new file mode 100644
index 0000000..b05b513
--- /dev/null
+++ b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconEffectVisibility.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconEffectVisibility@2x.svg b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconEffectVisibility@2x.svg
new file mode 100644
index 0000000..597f1c4
--- /dev/null
+++ b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconEffectVisibility@2x.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconGoLive.svg b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconGoLive.svg
new file mode 100644
index 0000000..4a12732
--- /dev/null
+++ b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconGoLive.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconGoLive@2x.svg b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconGoLive@2x.svg
new file mode 100644
index 0000000..de0ca9a
--- /dev/null
+++ b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconGoLive@2x.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconLayerVisibility.svg b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconLayerVisibility.svg
new file mode 100644
index 0000000..ce9b065
--- /dev/null
+++ b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconLayerVisibility.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconLayerVisibility@2x.svg b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconLayerVisibility@2x.svg
new file mode 100644
index 0000000..a6158aa
--- /dev/null
+++ b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconLayerVisibility@2x.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconRecord.svg b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconRecord.svg
new file mode 100644
index 0000000..3c89ac8
--- /dev/null
+++ b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconRecord.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconRecord@2x.svg b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconRecord@2x.svg
new file mode 100644
index 0000000..69025c9
--- /dev/null
+++ b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconRecord@2x.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconScene.svg b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconScene.svg
new file mode 100644
index 0000000..3ab0013
--- /dev/null
+++ b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconScene.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconScene@2x.svg b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconScene@2x.svg
new file mode 100644
index 0000000..2a4ef26
--- /dev/null
+++ b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconScene@2x.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconSceneSwitcher.svg b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconSceneSwitcher.svg
new file mode 100644
index 0000000..04c67da
--- /dev/null
+++ b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconSceneSwitcher.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconSceneSwitcher@2x.svg b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconSceneSwitcher@2x.svg
new file mode 100644
index 0000000..457d111
--- /dev/null
+++ b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconSceneSwitcher@2x.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconScreenshot.svg b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconScreenshot.svg
new file mode 100644
index 0000000..42bfa5e
--- /dev/null
+++ b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconScreenshot.svg
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconScreenshot@2x.svg b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconScreenshot@2x.svg
new file mode 100644
index 0000000..48c3d0a
--- /dev/null
+++ b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconScreenshot@2x.svg
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/iconSpeaker.png b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconSpeaker.png
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/iconSpeaker.png
rename to co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconSpeaker.png
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/iconSpeaker@2x.png b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconSpeaker@2x.png
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/iconSpeaker@2x.png
rename to co.meldstudio.streamdeck.sdPlugin/assets/oldicons/iconSpeaker@2x.png
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/monitoredTrack.png b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/monitoredTrack.png
new file mode 100644
index 0000000..4831d11
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/monitoredTrack.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/monitoredTrack@2x.png b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/monitoredTrack@2x.png
new file mode 100644
index 0000000..a44006e
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/monitoredTrack@2x.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/mutedTrack.png b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/mutedTrack.png
new file mode 100644
index 0000000..0300edd
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/mutedTrack.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/mutedTrack@2x.png b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/mutedTrack@2x.png
new file mode 100644
index 0000000..640739e
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/mutedTrack@2x.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/sceneOff.png b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/sceneOff.png
new file mode 100644
index 0000000..12610a9
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/sceneOff.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/sceneOff@2x.png b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/sceneOff@2x.png
new file mode 100644
index 0000000..3028150
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/sceneOff@2x.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/sceneOn-gif-preview.png b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/sceneOn-gif-preview.png
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/sceneOn-gif-preview.png
rename to co.meldstudio.streamdeck.sdPlugin/assets/oldicons/sceneOn-gif-preview.png
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/sceneOn.gif b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/sceneOn.gif
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/sceneOn.gif
rename to co.meldstudio.streamdeck.sdPlugin/assets/oldicons/sceneOn.gif
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/sceneOn@2x-gif-preview.png b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/sceneOn@2x-gif-preview.png
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/sceneOn@2x-gif-preview.png
rename to co.meldstudio.streamdeck.sdPlugin/assets/oldicons/sceneOn@2x-gif-preview.png
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/sceneOn@2x.gif b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/sceneOn@2x.gif
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/sceneOn@2x.gif
rename to co.meldstudio.streamdeck.sdPlugin/assets/oldicons/sceneOn@2x.gif
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/screenshot.png b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/screenshot.png
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/screenshot.png
rename to co.meldstudio.streamdeck.sdPlugin/assets/oldicons/screenshot.png
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/screenshot@2x.png b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/screenshot@2x.png
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/screenshot@2x.png
rename to co.meldstudio.streamdeck.sdPlugin/assets/oldicons/screenshot@2x.png
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/showEffect.png b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/showEffect.png
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/showEffect.png
rename to co.meldstudio.streamdeck.sdPlugin/assets/oldicons/showEffect.png
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/showEffect@2x.png b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/showEffect@2x.png
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/showEffect@2x.png
rename to co.meldstudio.streamdeck.sdPlugin/assets/oldicons/showEffect@2x.png
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/showLayer.png b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/showLayer.png
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/showLayer.png
rename to co.meldstudio.streamdeck.sdPlugin/assets/oldicons/showLayer.png
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/showLayer@2x.png b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/showLayer@2x.png
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/showLayer@2x.png
rename to co.meldstudio.streamdeck.sdPlugin/assets/oldicons/showLayer@2x.png
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/spinner_1.gif b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/spinner_1.gif
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/spinner_1.gif
rename to co.meldstudio.streamdeck.sdPlugin/assets/oldicons/spinner_1.gif
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/startRecord.png b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/startRecord.png
new file mode 100644
index 0000000..10db6c5
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/startRecord.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/startRecord@2x.png b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/startRecord@2x.png
new file mode 100644
index 0000000..70f2f1c
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/startRecord@2x.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/stopRecord-gif-preview.png b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/stopRecord-gif-preview.png
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/stopRecord-gif-preview.png
rename to co.meldstudio.streamdeck.sdPlugin/assets/oldicons/stopRecord-gif-preview.png
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/stopRecord.gif b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/stopRecord.gif
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/stopRecord.gif
rename to co.meldstudio.streamdeck.sdPlugin/assets/oldicons/stopRecord.gif
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/stopRecord@2x-gif-preview.png b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/stopRecord@2x-gif-preview.png
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/stopRecord@2x-gif-preview.png
rename to co.meldstudio.streamdeck.sdPlugin/assets/oldicons/stopRecord@2x-gif-preview.png
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/stopRecord@2x.gif b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/stopRecord@2x.gif
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/stopRecord@2x.gif
rename to co.meldstudio.streamdeck.sdPlugin/assets/oldicons/stopRecord@2x.gif
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/unmonitoredTrack.gif b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/unmonitoredTrack.gif
new file mode 100644
index 0000000..abd965a
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/unmonitoredTrack.gif differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/unmonitoredTrack.png b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/unmonitoredTrack.png
new file mode 100644
index 0000000..ee264dd
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/unmonitoredTrack.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/unmonitoredTrack@2x.png b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/unmonitoredTrack@2x.png
new file mode 100644
index 0000000..eeaf82e
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/unmonitoredTrack@2x.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/unmutedTrack-gif-preview.png b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/unmutedTrack-gif-preview.png
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/unmutedTrack-gif-preview.png
rename to co.meldstudio.streamdeck.sdPlugin/assets/oldicons/unmutedTrack-gif-preview.png
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/unmutedTrack.gif b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/unmutedTrack.gif
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/unmutedTrack.gif
rename to co.meldstudio.streamdeck.sdPlugin/assets/oldicons/unmutedTrack.gif
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/unmutedTrack@2x-gif-preview.png b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/unmutedTrack@2x-gif-preview.png
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/unmutedTrack@2x-gif-preview.png
rename to co.meldstudio.streamdeck.sdPlugin/assets/oldicons/unmutedTrack@2x-gif-preview.png
diff --git a/co.meldstudio.streamdeck.sdPlugin/assets/unmutedTrack@2x.gif b/co.meldstudio.streamdeck.sdPlugin/assets/oldicons/unmutedTrack@2x.gif
similarity index 100%
rename from co.meldstudio.streamdeck.sdPlugin/assets/unmutedTrack@2x.gif
rename to co.meldstudio.streamdeck.sdPlugin/assets/oldicons/unmutedTrack@2x.gif
diff --git a/co.meldstudio.streamdeck.sdPlugin/de.json b/co.meldstudio.streamdeck.sdPlugin/de.json
index 95fa798..f769268 100644
--- a/co.meldstudio.streamdeck.sdPlugin/de.json
+++ b/co.meldstudio.streamdeck.sdPlugin/de.json
@@ -6,6 +6,10 @@
"Name": "Spur stumm",
"Tooltip": "Schaltet den Mute-Status einer Spur um."
},
+ "co.meldstudio.streamdeck.toggle-monitor": {
+ "Name": "Spur stumm",
+ "Tooltip": "Schaltet den Cue-Status einer Spur um."
+ },
"co.meldstudio.streamdeck.toggle-layer": {
"Name": "Layer-Sichtbarkeit",
"Tooltip": "Schaltet die Sichtbarkeit einer Ebene um."
@@ -41,11 +45,33 @@
}
}
},
+ "co.meldstudio.streamdeck.transition-stepper": {
+ "Name": "Szenenumschalter",
+ "Tooltip": "Wählen Sie eine Bühnenszene aus und lösen Sie einen Szenenübergang aus.",
+ "Encoder": {
+ "TriggerDescription": {
+ "Rotate": "Szenenumschalter",
+ "Touch": "Übergang",
+ "Push": "Übergang"
+ }
+ }
+ },
"Localization": {
"Scene": "Szene",
"Layer": "Layer",
"Track": "Spur",
"Effect": "Effekt",
- "Connecting": "Verbindungsaufbau zu Meld Studio..."
+ "Connecting": "Verbindungsaufbau zu Meld Studio...",
+ "Action": "Aktion",
+ "Toggle": "Umschalten",
+ "Cue": "Hören",
+ "Unmute": "Stummschaltung aufheben",
+ "Uncue": "Unzuhören",
+ "Mute": "Spur stumm",
+ "Monitor": "Hören",
+ "Meter": "Typ des Volumenmessers",
+ "Decibels": "Dezibels",
+ "Percent": "Prozent",
+ "TransitionStepper": "Für den Szenenumschalter muss die radiale Szenenumschalterfunktion in Meld Studio aktiviert sein. Weitere Informationen finden Sie im Meld Studio Blog."
}
}
\ No newline at end of file
diff --git a/co.meldstudio.streamdeck.sdPlugin/en.json b/co.meldstudio.streamdeck.sdPlugin/en.json
index f8d7a05..822a4b7 100644
--- a/co.meldstudio.streamdeck.sdPlugin/en.json
+++ b/co.meldstudio.streamdeck.sdPlugin/en.json
@@ -6,6 +6,10 @@
"Name": "Track Mute",
"Tooltip": "Toggles the mute status of a track."
},
+ "co.meldstudio.streamdeck.toggle-monitor": {
+ "Name": "Track Monitor",
+ "Tooltip": "Toggles the cue status of a track."
+ },
"co.meldstudio.streamdeck.toggle-layer": {
"Name": "Layer Visibility",
"Tooltip": "Toggles the visibility of a layer."
@@ -41,12 +45,33 @@
}
}
},
+ "co.meldstudio.streamdeck.transition-stepper": {
+ "Name": "Scene Switcher",
+ "Tooltip": "Select a staging scene and trigger a scene transition",
+ "Encoder": {
+ "TriggerDescription": {
+ "Rotate": "Select Staging Scene",
+ "Touch": "Transition to Staging Scene",
+ "Push": "Transition to Staging Scene"
+ }
+ }
+ },
"Localization": {
"Scene": "Scene",
"Layer": "Layer",
"Track": "Track",
"Effect": "Effect",
"StepSize": "Step Size",
- "Connecting": "Connecting to Meld Studio..."
+ "Connecting": "Connecting to Meld Studio...",
+ "Action": "Action",
+ "Toggle": "Toggle",
+ "Mute": "Mute",
+ "Cue": "Cue",
+ "Unmute": "Unmute",
+ "Uncue": "Uncue",
+ "Meter": "Meter Type",
+ "Decibels": "Decibels",
+ "Percent": "Percent",
+ "TransitionStepper": "Scene switcher requires that the radial scene switcher feature be enabled in Meld Studio. For more info, visit the Meld Studio Blog."
}
}
\ No newline at end of file
diff --git a/co.meldstudio.streamdeck.sdPlugin/libs/js/inspector.js b/co.meldstudio.streamdeck.sdPlugin/libs/js/inspector.js
index 0063c17..de8505e 100644
--- a/co.meldstudio.streamdeck.sdPlugin/libs/js/inspector.js
+++ b/co.meldstudio.streamdeck.sdPlugin/libs/js/inspector.js
@@ -1,153 +1,157 @@
-class MeldStudioPropertyInspector {
- settings = {};
-
- createOption(opt) {
- const item = document.createElement('option');
-
- item.innerHTML = opt.text;
- item.value = opt.value;
- item.selected = opt.selected;
-
- return item;
- }
-
- // Get all items of a specific type.
- getItemsByType(type, currentValue, parent) {
- const items = $MS.meld?.session?.items ?? {};
-
- let selectedItems = [
- {
- text: '[No Selection]',
- value: '',
- selected: currentValue == '',
- },
- ];
-
- for (let key in items) {
- const item = items[key];
-
- if (item.type != type) continue;
- if (parent && item.parent != parent) continue;
-
- selectedItems.push({
- text: item.name,
- value: key,
- selected: currentValue == key,
- });
- }
-
- return selectedItems;
- }
-
- getValue(key) {
- return this.settings[key] ?? '';
- }
-
- // Iterators over the items in the session and filters down
- // each pass to the current type, filtered by the previous value.
- updateSelection(elements) {
- if (!$MS.meld) {
- $MS.on('ready', () => {
- this.updateSelection(elements);
- });
- $MS.on('sessionChanged', () => {
- this.updateSelection(elements);
- });
- return;
- }
-
- let last = '';
- for (let elid of elements) {
- const value = this.getValue(elid);
- const element = document.getElementById(elid);
-
- let available = this.getItemsByType(elid, value, last);
-
- element.innerHTML = '';
- element.disabled = false;
-
- for (let opt of available) element.appendChild(this.createOption(opt));
-
- last = value;
- }
- }
-
- initializeSelection(action, elements) {
- for (let id of elements) {
- const el = document.getElementById(id);
- console.assert(el.id, 'Select element not found');
- if (!el) continue;
-
- this.settings[el] = '';
-
- el.onchange = () => {
- if (!this.settings) return;
- this.settings = { ...this.settings, [id]: el.value };
- $PI.setSettings(this.settings);
- this.updateSelection(elements);
- };
- }
-
- $PI.onDidReceiveSettings(action, ({ action, payload }) => {
- const { settings } = payload;
- this.settings = settings;
-
- const suffix = action.split('.').pop();
-
- for (let field of elements) {
- const dom_field = document.getElementById(field);
- dom_field.value = settings[field];
- if (dom_field.value == 'undefined') dom_field.value = '';
- }
-
- this.updateSelection(elements);
- });
-
- $PI.getSettings();
- }
-
- initializeText(action, elements) {
- for (let id of elements) {
- const el = document.getElementById(id);
- console.assert(el.id, 'Input element not found');
- if (!el) continue;
-
- this.settings[el] = '';
-
- el.onchange = () => {
- if (!this.settings) return;
- this.settings = { ...this.settings, [id]: el.value };
- $PI.setSettings(this.settings);
- };
- }
-
- $PI.onDidReceiveSettings(action, ({ action, payload }) => {
- const { settings } = payload;
- this.settings = settings;
-
- for (let field of elements) {
- const dom_field = document.getElementById(field);
- if (settings[field] !== undefined) {
- dom_field.value = settings[field];
- } else {
- // Use the default value specified by the field.
- this.settings[field] = dom_field.value;
- }
- }
- });
- }
-
- watchConnections(id) {
- $MS.on('connected', () => {
- document.getElementById(id).style = 'display: none;';
- });
-
- $MS.on('closed', () => {
- document.getElementById(id).style = '';
- });
-
- if ($MS.connected) document.getElementById(id).style = 'display: none;';
- }
-}
-
-const $MSPI = new MeldStudioPropertyInspector();
+class MeldStudioPropertyInspector {
+ settings = {};
+
+ createOption(opt) {
+ const item = document.createElement('option');
+
+ item.innerHTML = opt.text;
+ item.value = opt.value;
+ item.selected = opt.selected;
+
+ return item;
+ }
+
+ // Get all items of a specific type.
+ getItemsByType(type, currentValue, parent) {
+ const items = $MS.meld?.session?.items ?? {};
+
+ let selectedItems = [
+ {
+ text: '[No Selection]',
+ value: '',
+ selected: currentValue == '',
+ },
+ ];
+
+ for (let key in items) {
+ const item = items[key];
+
+ if (item.type != type) continue;
+ if (parent && item.parent != parent) continue;
+
+ selectedItems.push({
+ text: item.name,
+ value: key,
+ selected: currentValue == key,
+ });
+ }
+
+ return selectedItems;
+ }
+
+ getValue(key) {
+ return this.settings[key] ?? '';
+ }
+
+ // Iterators over the items in the session and filters down
+ // each pass to the current type, filtered by the previous value.
+ updateSelection(elements) {
+ if (!$MS.meld) {
+ $MS.on('ready', () => {
+ this.updateSelection(elements);
+ });
+ $MS.on('sessionChanged', () => {
+ this.updateSelection(elements);
+ });
+ return;
+ }
+
+ let last = '';
+ for (let elid of elements) {
+ const value = this.getValue(elid);
+ const element = document.getElementById(elid);
+
+ let available = this.getItemsByType(elid, value, last);
+
+ element.innerHTML = '';
+ element.disabled = false;
+
+ for (let opt of available) element.appendChild(this.createOption(opt));
+
+ last = value;
+ }
+ }
+
+ initializeSelection(action, elements, data_provided = true) {
+ for (let id of elements) {
+ const el = document.getElementById(id);
+ console.assert(el.id, 'Select element not found');
+ if (!el) continue;
+
+ if (this.settings[el.id] === undefined)
+ this.settings[el.id] = '';
+
+ el.onchange = () => {
+ if (!this.settings) return;
+ this.settings = { ...this.settings, [id]: el.value };
+ $PI.setSettings(this.settings);
+ if (data_provided)
+ this.updateSelection(elements);
+ };
+ }
+
+ $PI.onDidReceiveSettings(action, ({ action, payload }) => {
+ const { settings } = payload;
+ this.settings = settings;
+
+ for (let field of elements) {
+ const dom_field = document.getElementById(field);
+
+ if (settings[field] === undefined)
+ continue;
+
+ dom_field.value = settings[field];
+ }
+
+ if (data_provided)
+ this.updateSelection(elements);
+ });
+
+ $PI.getSettings();
+ }
+
+ initializeText(action, elements) {
+ for (let id of elements) {
+ const el = document.getElementById(id);
+ console.assert(el.id, 'Input element not found');
+ if (!el) continue;
+
+ this.settings[el.id] = '';
+
+ el.onchange = () => {
+ if (!this.settings) return;
+ this.settings = { ...this.settings, [id]: el.value };
+ $PI.setSettings(this.settings);
+ };
+ }
+
+ $PI.onDidReceiveSettings(action, ({ action, payload }) => {
+ const { settings } = payload;
+ this.settings = settings;
+
+ for (let field of elements) {
+ const dom_field = document.getElementById(field);
+ if (settings[field] !== undefined) {
+ dom_field.value = settings[field];
+ } else {
+ // Use the default value specified by the field.
+ this.settings[field] = dom_field.value;
+ }
+ }
+ });
+ }
+
+ watchConnections(id) {
+ $MS.on('connected', () => {
+ document.getElementById(id).style = 'display: none;';
+ });
+
+ $MS.on('closed', () => {
+ document.getElementById(id).style = '';
+ });
+
+ if ($MS.connected) document.getElementById(id).style = 'display: none;';
+ }
+}
+
+const $MSPI = new MeldStudioPropertyInspector();
diff --git a/co.meldstudio.streamdeck.sdPlugin/libs/js/stream-deck.js b/co.meldstudio.streamdeck.sdPlugin/libs/js/stream-deck.js
index bfd8e38..9c74c2b 100644
--- a/co.meldstudio.streamdeck.sdPlugin/libs/js/stream-deck.js
+++ b/co.meldstudio.streamdeck.sdPlugin/libs/js/stream-deck.js
@@ -75,7 +75,7 @@ class ELGSDStreamDeck extends ELGSDApi {
this.send(context, Events.setState, {
payload: {
- state: 1 - Number(state === 0),
+ state: state || 0,
},
});
}
diff --git a/co.meldstudio.streamdeck.sdPlugin/manifest.json b/co.meldstudio.streamdeck.sdPlugin/manifest.json
index 0653256..fad2d88 100644
--- a/co.meldstudio.streamdeck.sdPlugin/manifest.json
+++ b/co.meldstudio.streamdeck.sdPlugin/manifest.json
@@ -1,160 +1,200 @@
-{
- "SDKVersion": 2,
- "Category": "Meld Studio",
- "CategoryIcon": "assets/MeldStudio",
- "Name": "Meld Studio",
- "Icon": "plugin",
- "Author": "MeldStudio",
- "CodePath": "app.html",
- "Description": "Meld Studio 💙 Stream Deck. Take your stream to new heights with powerful new capabilities at your fingertips. Trigger transitions, manage audio tracks, toggle filter effects on and off, and much more.",
- "URL": "https://meldstudio.co",
- "Version": "0.3.1",
- "OS": [
- {
- "Platform": "mac",
- "MinimumVersion": "12.3"
- },
- {
- "Platform": "windows",
- "MinimumVersion": "10"
- }
- ],
- "Software": {
- "MinimumVersion": "6.0"
- },
- "Actions": [
- {
- "Icon": "assets/iconScene",
- "Name": "Change Scene",
- "States": [
- {
- "Image": "assets/sceneOff"
- },
- {
- "Image": "assets/sceneOn"
- }
- ],
- "SupportedInMultiActions": true,
- "Tooltip": "Change scenes!",
- "UUID": "co.meldstudio.streamdeck.show-scene",
- "PropertyInspectorPath": "actions/show-scene/inspector.html"
- },
- {
- "Icon": "assets/iconScreenshot",
- "Name": "Take Screenshot",
- "States": [
- {
- "Image": "assets/screenshot"
- }
- ],
- "SupportedInMultiActions": true,
- "Tooltip": "Take a screenshot!",
- "UUID": "co.meldstudio.streamdeck.screenshot",
- "PropertyInspectorPath": "actions/screenshot/inspector.html"
- },
- {
- "Icon": "assets/iconAudioTrack",
- "Name": "Mute Track",
- "States": [
- {
- "Image": "assets/mutedTrack"
- },
- {
- "Image": "assets/unmutedTrack"
- }
- ],
- "SupportedInMultiActions": true,
- "Tooltip": "Mute an audio track!",
- "UUID": "co.meldstudio.streamdeck.toggle-mute",
- "PropertyInspectorPath": "actions/toggle-mute/inspector.html"
- },
- {
- "Icon": "assets/iconAudioTrack",
- "Name": "Adjust Volume",
- "States": [
- {
- "Image": "assets/iconSpeaker",
- "TitleColor": "#FFFFFF"
- }
- ],
- "Controllers": [
- "Encoder"
- ],
- "Encoder": {
- "layout": "$B2",
- "TriggerDescription": {
- "Rotate": "Adjust Volume",
- "Touch": "Adjust Volume",
- "Push": "Mute Track"
- }
- },
- "Tooltip": "Adjust the volume of a specified audio track.",
- "UUID": "co.meldstudio.streamdeck.volume-stepper",
- "PropertyInspectorPath": "actions/volume-stepper/inspector.html"
- },
- {
- "Icon": "assets/iconLayerVisibility",
- "Name": "Layer Visibility",
- "States": [
- {
- "Image": "assets/hideLayer"
- },
- {
- "Image": "assets/showLayer"
- }
- ],
- "SupportedInMultiActions": true,
- "Tooltip": "Toggle layer visibility!",
- "UUID": "co.meldstudio.streamdeck.toggle-layer",
- "PropertyInspectorPath": "actions/toggle-layer/inspector.html"
- },
- {
- "Icon": "assets/iconEffectVisibility",
- "Name": "Effect Visibility",
- "States": [
- {
- "Image": "assets/hideEffect"
- },
- {
- "Image": "assets/showEffect"
- }
- ],
- "SupportedInMultiActions": true,
- "Tooltip": "Toggle effect visibility!",
- "UUID": "co.meldstudio.streamdeck.toggle-effect",
- "PropertyInspectorPath": "actions/toggle-effect/inspector.html"
- },
- {
- "Icon": "assets/iconRecord",
- "Name": "Record",
- "States": [
- {
- "Image": "assets/startRecord"
- },
- {
- "Image": "assets/stopRecord"
- }
- ],
- "SupportedInMultiActions": true,
- "Tooltip": "Start or stop recording.",
- "UUID": "co.meldstudio.streamdeck.toggle-record",
- "PropertyInspectorPath": "actions/toggle-record/inspector.html"
- },
- {
- "Icon": "assets/iconGoLive",
- "Name": "Go Live",
- "States": [
- {
- "Image": "assets/goLive"
- },
- {
- "Image": "assets/goOffline"
- }
- ],
- "SupportedInMultiActions": true,
- "Tooltip": "Go Live or go offline.",
- "UUID": "co.meldstudio.streamdeck.toggle-stream",
- "PropertyInspectorPath": "actions/toggle-stream/inspector.html"
- }
- ]
-}
\ No newline at end of file
+{
+ "SDKVersion": 2,
+ "Category": "Meld Studio",
+ "CategoryIcon": "assets/Category Icon/Meld Studio",
+ "Name": "Meld Studio",
+ "Icon": "assets/AppIcon/meldstudio",
+ "Author": "MeldStudio",
+ "CodePath": "app.html",
+ "Description": "Meld Studio 💙 Stream Deck. Take your stream to new heights with powerful new capabilities at your fingertips. Trigger transitions, manage audio tracks, toggle filter effects on and off, and much more.",
+ "URL": "https://meldstudio.co",
+ "Version": "0.4.0",
+ "OS": [
+ {
+ "Platform": "mac",
+ "MinimumVersion": "12.3"
+ },
+ {
+ "Platform": "windows",
+ "MinimumVersion": "10"
+ }
+ ],
+ "Software": {
+ "MinimumVersion": "6.0"
+ },
+ "Actions": [
+ {
+ "Icon": "assets/Scenes/Change to Scene/Action Icon/iconScene",
+ "Name": "Change Scene",
+ "States": [
+ {
+ "Image": "assets/Scenes/Change to Scene/Key Icon/sceneOff"
+ },
+ {
+ "Image": "assets/Scenes/Change to Scene/Key Icon/sceneOn"
+ }
+ ],
+ "SupportedInMultiActions": true,
+ "Tooltip": "Change scenes!",
+ "UUID": "co.meldstudio.streamdeck.show-scene",
+ "PropertyInspectorPath": "actions/show-scene/inspector.html"
+ },
+ {
+ "Icon": "assets/Screenshot/iconScreenshot",
+ "Name": "Take Screenshot",
+ "States": [
+ {
+ "Image": "assets/Screenshot/screenshot"
+ }
+ ],
+ "SupportedInMultiActions": true,
+ "Tooltip": "Take a screenshot!",
+ "UUID": "co.meldstudio.streamdeck.screenshot",
+ "PropertyInspectorPath": "actions/screenshot/inspector.html"
+ },
+ {
+ "Icon": "assets/Audio Track/Mute_Unmute Audio Track/Action Icons/audioTrack",
+ "Name": "Mute Track",
+ "States": [
+ {
+ "Image": "assets/Audio Track/Mute_Unmute Audio Track/Key Icons/mutedTrack"
+ },
+ {
+ "Image": "assets/Audio Track/Mute_Unmute Audio Track/Key Icons/audio-unmuted"
+ }
+ ],
+ "SupportedInMultiActions": true,
+ "Tooltip": "Mute an audio track!",
+ "UUID": "co.meldstudio.streamdeck.toggle-mute",
+ "PropertyInspectorPath": "actions/toggle-mute/inspector.html"
+ },
+ {
+ "Icon": "assets/Cue/action icon/cueAudio",
+ "Name": "Cue Track",
+ "States": [
+ {
+ "Image": "assets/Cue/key icon/cueOff"
+ },
+ {
+ "Image": "assets/Cue/key icon/cueOn"
+ }
+ ],
+ "SupportedInMultiActions": true,
+ "Tooltip": "Monitor an audio track!",
+ "UUID": "co.meldstudio.streamdeck.toggle-monitor",
+ "PropertyInspectorPath": "actions/toggle-monitor/inspector.html"
+ },
+ {
+ "Icon": "assets/Audio Track/Mute_Unmute Audio Track/Action Icons/audioTrack",
+ "Name": "Adjust Volume",
+ "States": [
+ {
+ "Image": "assets/Audio Track/Mute_Unmute Audio Track/Key Icons/unmuteTrack",
+ "TitleColor": "#FFFFFF"
+ }
+ ],
+ "Controllers": [
+ "Encoder"
+ ],
+ "Encoder": {
+ "layout": "$B2",
+ "TriggerDescription": {
+ "Rotate": "Adjust Volume",
+ "Touch": "Adjust Volume",
+ "Push": "Mute Track"
+ }
+ },
+ "Tooltip": "Adjust the volume of a specified audio track.",
+ "UUID": "co.meldstudio.streamdeck.volume-stepper",
+ "PropertyInspectorPath": "actions/volume-stepper/inspector.html"
+ },
+ {
+ "Icon": "assets/Scene Transition Control/Action Icon/sceneTransition",
+ "Name": "Scene Switcher",
+ "States": [
+ {
+ "Image": "assets/Scene Transition Control/SD Slot/sceneTransitionBlue",
+ "TitleColor": "#FFFFFF"
+ }
+ ],
+ "Controllers": [
+ "Encoder"
+ ],
+ "Encoder": {
+ "layout": "$X1",
+ "TriggerDescription": {
+ "Rotate": "Select Staging Scene",
+ "Touch": "Select Staging Scene",
+ "Push": "Transition to Staging Scene"
+ }
+ },
+ "Tooltip": "Select a staging scene and trigger a scene transition",
+ "UUID": "co.meldstudio.streamdeck.transition-stepper",
+ "PropertyInspectorPath": "actions/transition-stepper/inspector.html"
+ },
+ {
+ "Icon": "assets/Layers/Layer Visibility/Action Icon/iconLayerVisibility",
+ "Name": "Layer Visibility",
+ "States": [
+ {
+ "Image": "assets/Layers/Layer Visibility/Key Icon/layerHide"
+ },
+ {
+ "Image": "assets/Layers/Layer Visibility/Key Icon/layerShow"
+ }
+ ],
+ "SupportedInMultiActions": true,
+ "Tooltip": "Toggle layer visibility!",
+ "UUID": "co.meldstudio.streamdeck.toggle-layer",
+ "PropertyInspectorPath": "actions/toggle-layer/inspector.html"
+ },
+ {
+ "Icon": "assets/Effects/Action Icon/iconEffectVisibility",
+ "Name": "Effect Visibility",
+ "States": [
+ {
+ "Image": "assets/Effects/Key Icons/hideEffect"
+ },
+ {
+ "Image": "assets/Effects/Key Icons/showEffect"
+ }
+ ],
+ "SupportedInMultiActions": true,
+ "Tooltip": "Toggle effect visibility!",
+ "UUID": "co.meldstudio.streamdeck.toggle-effect",
+ "PropertyInspectorPath": "actions/toggle-effect/inspector.html"
+ },
+ {
+ "Icon": "assets/Record/Start_Stop Record/Action Icon/iconRecord",
+ "Name": "Record",
+ "States": [
+ {
+ "Image": "assets/Record/Start_Stop Record/Key Icon/startRecord"
+ },
+ {
+ "Image": "assets/Record/Start_Stop Record/Key Icon/stopRecord"
+ }
+ ],
+ "SupportedInMultiActions": true,
+ "Tooltip": "Start or stop recording.",
+ "UUID": "co.meldstudio.streamdeck.toggle-record",
+ "PropertyInspectorPath": "actions/toggle-record/inspector.html"
+ },
+ {
+ "Icon": "assets/Go live/Go live/Action Icons/goLive",
+ "Name": "Go Live",
+ "States": [
+ {
+ "Image": "assets/Go live/Go live/Key Icons/goLive"
+ },
+ {
+ "Image": "assets/Go live/Go live/Key Icons/goOffiline"
+ }
+ ],
+ "SupportedInMultiActions": true,
+ "Tooltip": "Go Live or go offline.",
+ "UUID": "co.meldstudio.streamdeck.toggle-stream",
+ "PropertyInspectorPath": "actions/toggle-stream/inspector.html"
+ }
+ ]
+}
diff --git a/co.meldstudio.streamdeck.sdPlugin/plugin.png b/co.meldstudio.streamdeck.sdPlugin/plugin.png
deleted file mode 100644
index 1ff79b7..0000000
Binary files a/co.meldstudio.streamdeck.sdPlugin/plugin.png and /dev/null differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/plugin@2x.png b/co.meldstudio.streamdeck.sdPlugin/plugin@2x.png
deleted file mode 100644
index 0f13358..0000000
Binary files a/co.meldstudio.streamdeck.sdPlugin/plugin@2x.png and /dev/null differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/previews/1-preview.png b/co.meldstudio.streamdeck.sdPlugin/previews/1-preview.png
index ca8aac8..612bc0a 100644
Binary files a/co.meldstudio.streamdeck.sdPlugin/previews/1-preview.png and b/co.meldstudio.streamdeck.sdPlugin/previews/1-preview.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/previews/2-preview.png b/co.meldstudio.streamdeck.sdPlugin/previews/2-preview.png
index 29ec5fd..711ae5a 100644
Binary files a/co.meldstudio.streamdeck.sdPlugin/previews/2-preview.png and b/co.meldstudio.streamdeck.sdPlugin/previews/2-preview.png differ
diff --git a/co.meldstudio.streamdeck.sdPlugin/previews/3-preview.png b/co.meldstudio.streamdeck.sdPlugin/previews/3-preview.png
new file mode 100644
index 0000000..d96b28c
Binary files /dev/null and b/co.meldstudio.streamdeck.sdPlugin/previews/3-preview.png differ
diff --git a/scripts/build.sh b/scripts/build.sh
new file mode 100755
index 0000000..b3a3ddb
--- /dev/null
+++ b/scripts/build.sh
@@ -0,0 +1,16 @@
+#!/usr/bin/env bash
+
+
+VERSION="$(grep '"Version": "'