├── OBS.js ├── README.md ├── icon.png └── module.json /OBS.js: -------------------------------------------------------------------------------- 1 | var tempo = ""; 2 | var OBSSave = {}; 3 | var EnumScenes = {}; 4 | var EnumItems = {}; 5 | var IndexItemTab = []; //associative array with sceneName as key and 6 | 7 | function parseHex(str) { 8 | var result = []; 9 | for (var i = 0; i < str.length; i += 2) { 10 | var n = parseInt("0x" + str.substring(i, i + 2)); 11 | result.push(n); 12 | } 13 | return result; 14 | } 15 | 16 | /* Utilitary Function */ 17 | function valueBoolParameter(value, data) { 18 | if (local.values.getChild(value) == null) { 19 | local.values.addBoolParameter(value, "", data); 20 | local.values.getChild(value).setAttribute("readonly", true); 21 | } else { 22 | local.values.getChild(value).set(data); 23 | } 24 | } 25 | 26 | function valueStringParameter(value, data) { 27 | if (local.values.getChild(value) == null) { 28 | local.values.addStringParameter(value, "", data); 29 | local.values.getChild(value).setAttribute("readonly", true); 30 | } else { 31 | local.values.getChild(value).set(data); 32 | } 33 | } 34 | 35 | function valueBoolContainerParameter(container, value, data) { 36 | local.values.addContainer(container); 37 | if (local.values.getChild(container).getChild(value) == null) { 38 | local.values.getChild(container).addBoolParameter(value, "", data); 39 | local.values.getChild(container).getChild(value).setAttribute("readonly", true); 40 | } else { 41 | local.values.getChild(container).getChild(value).set(data); 42 | } 43 | } 44 | 45 | function valueStringContainerParameter(container, value, data) { 46 | local.values.addContainer(container); 47 | if (local.values.getChild(container).getChild(value) == null) { 48 | local.values.getChild(container).addStringParameter(value, "", data); 49 | local.values.getChild(container).getChild(value).setAttribute("readonly", true); 50 | } else { 51 | local.values.getChild(container).getChild(value).set(data); 52 | } 53 | } 54 | 55 | function colorToInt(color) { 56 | var r = parseInt(color[0] * 255); 57 | var g = parseInt(color[1] * 255); 58 | var b = parseInt(color[2] * 255); 59 | return r + (g << 0x8) + (b << 0x10); 60 | } 61 | 62 | function removeAllValues() { 63 | local.values.removeContainer("Scenes"); 64 | local.values.removeContainer("Inputs"); 65 | local.values.removeParameter("CurrentScene"); 66 | local.values.removeContainer("Groups"); 67 | local.values.removeParameter("CurrentCollection"); 68 | local.values.removeContainer("Collections"); 69 | local.values.removeParameter("outputActive"); 70 | local.values.removeParameter("outputState"); 71 | local.values.removeParameter("RecordStateChanged"); 72 | local.values.removeContainer("Audio Input"); 73 | local.values.removeContainer("Stream"); 74 | local.values.removeContainer("Record"); 75 | script.log("All values have been deleted"); 76 | } 77 | 78 | /* 79 | This function will be called each time a value of this module has changed, meaning a parameter or trigger inside the "Values" panel of this module 80 | This function only exists because the script is in a module 81 | */ 82 | function moduleValueChanged(value) { 83 | if (value.name == "removeAllValues") { 84 | removeAllValues(); 85 | } 86 | } 87 | 88 | 89 | function toDecimal(v) { 90 | return parseInt(v, 2); 91 | } 92 | 93 | /* ************************************************************************* */ 94 | /* ***************** WEBSOCKET MESSAGE RECEIVED *************************** */ 95 | 96 | /* ************************************************************************* */ 97 | function wsMessageReceived(message) { 98 | /* ************************* CONNECTION ******************************** */ 99 | var obsObj = JSON.parse(message); 100 | var d = obsObj.d; 101 | 102 | if (obsObj.op == 0) { 103 | var newEventSub = 0; // Start with EventSubscription::None 104 | 105 | // Add event subscriptions based on parameters 106 | if (local.parameters.eventSub.general.get()) newEventSub += (1 << 0); // EventSubscription::General 107 | if (local.parameters.eventSub.config.get()) newEventSub += (1 << 1); // EventSubscription::Config 108 | if (local.parameters.eventSub.scenes.get()) newEventSub += (1 << 2); // EventSubscription::Scenes 109 | if (local.parameters.eventSub.inputs.get()) newEventSub += (1 << 3); // EventSubscription::Inputs 110 | if (local.parameters.eventSub.transitions.get()) newEventSub += (1 << 4); // EventSubscription::Transitions 111 | if (local.parameters.eventSub.filters.get()) newEventSub += (1 << 5); // EventSubscription::Filters 112 | if (local.parameters.eventSub.outputs.get()) newEventSub += (1 << 6); // EventSubscription::Outputs 113 | if (local.parameters.eventSub.sceneItems.get()) newEventSub += (1 << 7); // EventSubscription::SceneItems 114 | if (local.parameters.eventSub.mediaInputs.get()) newEventSub += (1 << 8); // EventSubscription::MediaInputs 115 | if (local.parameters.eventSub.vendors.get()) newEventSub += (1 << 9); // EventSubscription::Vendors 116 | if (local.parameters.eventSub.ui.get()) newEventSub += (1 << 10); // EventSubscription::Ui 117 | if (local.parameters.eventSub.inputVolumeMeters.get()) newEventSub += (1 << 16); // EventSubscription::InputVolumeMeters 118 | if (local.parameters.eventSub.inputActiveStateChanged.get()) newEventSub += (1 << 17); // EventSubscription::InputActiveStateChanged 119 | if (local.parameters.eventSub.inputShowStateChanged.get()) newEventSub += (1 << 18); // EventSubscription::InputShowStateChanged 120 | if (local.parameters.eventSub.sceneItemTransformChanged.get()) newEventSub += (1 << 19); // EventSubscription::SceneItemTransformChanged 121 | 122 | if (d.authentication != null) { 123 | var mdp = local.parameters.password.get() + d.authentication.salt; 124 | var Encode1 = util.toBase64(parseHex(util.encodeSHA256(mdp))); 125 | var Encode2 = util.toBase64(parseHex(util.encodeSHA256(Encode1 + d.authentication.challenge))); 126 | local.send('{"d":{"authentication": "' + Encode2 + '", "eventSubscriptions": ' + toDecimal(newEventSub) + ', "rpcVersion": 1}, "op": 1}'); 127 | } else { 128 | local.send('{"op": 1,"d": {"rpcVersion": 1,"authentication": "Chataigne","eventSubscriptions": ' + toDecimal(newEventSub) + '} }'); 129 | } 130 | } else if (obsObj.op == 2) { 131 | //TODO 132 | GetStudioModeEnabled(7); 133 | removeAllValues(); 134 | GetSceneList(7); 135 | GetInputList(7); 136 | GetCurrentProgramScene(7); 137 | 138 | } 139 | /* ************ CHANGED VALUES WITH MESSAGE RECEIVED ******************** */ 140 | //GetSceneCollectionList 141 | if (d.requestType == "GetSceneCollectionList") { 142 | var n = 0; 143 | local.values.addContainer("Collections"); 144 | valueStringParameter("CurrentCollection", d.responseData.currentSceneCollectionName); 145 | while (d.responseData.sceneCollections[n] != null) { 146 | var collection = d.responseData.sceneCollections[n]; 147 | local.values.getChild("Collections").addStringParameter("Collection" + n, "", collection); 148 | local.values.getChild("Collections").getChild("Collection" + n).setAttribute("readonly", true); 149 | n++; 150 | } 151 | } 152 | 153 | if (d.requestType == "GetStudioModeEnabled") { 154 | local.values.controlsStatus.studioModeStatus.set(d.responseData.studioModeEnabled); 155 | if (d.responseData.studioModeEnabled) { 156 | GetCurrentPreviewScene(7); 157 | } 158 | } 159 | //GetSceneList 160 | if (d.requestType == "GetSceneList") { 161 | var n = 0; 162 | if (local.values.getChild("Scenes") == null) { 163 | local.values.addContainer("Scenes"); 164 | EnumScenes = local.values.getChild("Scenes").addEnumParameter("Slct Scene", "The scene selected for controller"); 165 | EnumItems = local.values.getChild("Scenes").addEnumParameter("Slct Item", "The item selected for controller"); 166 | } 167 | 168 | while (d.responseData['scenes'][n].sceneIndex != null) { 169 | var index = d.responseData['scenes'][n].sceneIndex; 170 | var scene = d.responseData['scenes'][n].sceneName; 171 | if (local.values.getChild("Scenes").getChild(scene) == null) { 172 | local.values.getChild("Scenes").addContainer(scene); 173 | local.values.getChild("Scenes").getChild(scene).addStringParameter("sceneIndex", "", index); 174 | local.values.getChild("Scenes").getChild(scene).getChild("sceneIndex").setAttribute("readonly", true); 175 | local.values.getChild("Scenes").getChild(scene).addStringParameter("sceneName", "", scene); 176 | local.values.getChild("Scenes").getChild(scene).getChild("sceneName").setAttribute("readonly", true); 177 | } 178 | local.values.getChild("Scenes").getChild(scene).getChild("sceneIndex").set(index); 179 | local.values.getChild("Scenes").getChild(scene).getChild("sceneName").set(scene); 180 | GetSceneItemList("updateSceneContainer_" + scene, scene); 181 | OBSSave[scene] = {}; 182 | //local.values.getChild("Scenes").getChild("Slct Scene").addOption(scene,index); 183 | EnumScenes.addOption(scene, scene); 184 | n++; 185 | } 186 | valueStringParameter("CurrentScene", d.responseData.currentProgramSceneName); 187 | if (d.responseData.currentPreviewSceneName != null) { 188 | EnumScenes.set(d.responseData.currentPreviewSceneName); 189 | GetSceneItemList("active_items_" + d.responseData.currentPreviewSceneName, d.responseData.currentPreviewSceneName); 190 | } else { 191 | EnumScenes.set(d.responseData.currentProgramSceneName); 192 | GetSceneItemList("active_items_" + d.responseData.currentProgramSceneName, d.responseData.currentProgramSceneName); 193 | } 194 | } 195 | 196 | //GetInputList 197 | if (d.requestType == "GetInputList") { 198 | var n = 0; 199 | if (local.values.getChild("Inputs") == null) { 200 | local.values.addContainer("Inputs"); 201 | } 202 | while (d.responseData['inputs'][n].inputKind != null) { 203 | var inputKind = d.responseData['inputs'][n].inputKind; 204 | var inputName = d.responseData['inputs'][n].inputName; 205 | if (local.values.getChild("Inputs").getChild(inputName) == null) { 206 | local.values.getChild("Inputs").addContainer(inputName); 207 | local.values.getChild("Inputs").getChild(inputName).addStringParameter("inputName", "", inputName); 208 | local.values.getChild("Inputs").getChild(inputName).getChild("inputName").setAttribute("readonly", true); 209 | local.values.getChild("Inputs").getChild(inputName).addStringParameter("inputKind", "", inputKind); 210 | local.values.getChild("Inputs").getChild(inputName).getChild("inputKind").setAttribute("readonly", true); 211 | } 212 | local.values.getChild("Inputs").getChild(inputName).getChild("inputName").set(inputName); 213 | local.values.getChild("Inputs").getChild(inputName).getChild("inputKind").set(inputKind); 214 | n++; 215 | } 216 | } 217 | 218 | //GetCurrentProgramScene 219 | if (d.requestType == "GetCurrentProgramScene") { 220 | valueStringParameter("CurrentScene", d.responseData.currentProgramSceneName); 221 | if (!local.values.controlsStatus.studioModeStatus.get()) { 222 | EnumScenes.set(d.responseData.currentProgramSceneName); 223 | GetSceneItemList("active_items_" + d.responseData.currentProgramSceneName, d.responseData.currentProgramSceneName); 224 | } 225 | } 226 | 227 | //SetCurrentProgramScene 228 | if (d.requestType == "SetCurrentProgramScene") { 229 | valueStringParameter("CurrentScene", tempo); 230 | } 231 | 232 | //GetGroupList 233 | if (d.requestType == "GetGroupList") { 234 | var n = 0; 235 | local.values.addContainer("Groups"); 236 | while (d.responseData.groups[n] != null) { 237 | var group = d.responseData.groups[n]; 238 | local.values.getChild("Groups").addStringParameter("NameGroup" + n, "", group); 239 | local.values.getChild("Groups").getChild("NameGroup" + n).setAttribute("readonly", true); 240 | n++; 241 | } 242 | } 243 | 244 | //GetSceneItemList 245 | if (d.requestType == "GetSceneItemList") { 246 | var n = 0; 247 | if (d.requestId.startsWith("updateSceneContainer_")) { 248 | var scene = d.requestId.replace("updateSceneContainer_", ""); 249 | while (d.responseData['sceneItems'][n].sourceName != null) { 250 | var sceneItemId = d.responseData['sceneItems'][n].sceneItemId; 251 | var sourceName = d.responseData['sceneItems'][n].sourceName; 252 | local.values.getChild("Scenes").getChild(scene).addContainer(sourceName); 253 | if (local.values.getChild("Scenes").getChild(scene).getChild(sourceName).getChild("IndexItem") == null) { 254 | local.values.getChild("Scenes").getChild(scene).getChild(sourceName).addStringParameter("IndexItem", "", sceneItemId); 255 | local.values.getChild("Scenes").getChild(scene).getChild(sourceName).getChild("IndexItem").setAttribute("readonly", true); 256 | } else { 257 | local.values.getChild("Scenes").getChild(scene).getChild(sourceName).getChild("IndexItem").set(sceneItemId); 258 | } 259 | OBSSave[scene][sourceName] = {}; 260 | OBSSave[scene][sourceName]['sceneItemId'] = sceneItemId; 261 | n++; 262 | } 263 | } 264 | 265 | //Complete EnumScenes and EnumItems menu on scene change 266 | if (d.requestId.startsWith("active_items_")) { 267 | EnumItems.removeOptions(); 268 | if (d.responseData['sceneItems'][0]) { 269 | var n = 0; 270 | while (d.responseData['sceneItems'][n].sourceName != null) { 271 | var sceneItemId = d.responseData['sceneItems'][n].sceneItemId; 272 | var sourceName = d.responseData['sceneItems'][n].sourceName; 273 | EnumItems.addOption(sourceName, sceneItemId); 274 | n++; 275 | } 276 | EnumItems.setPrevious(true); 277 | GetSceneItemTransform('active_item_parameter', EnumScenes.get(), EnumItems.get()); 278 | } 279 | } 280 | 281 | } 282 | 283 | //GetSceneItemTransform get transform parameters for the active item 284 | if (d.requestType == "GetSceneItemTransform") { 285 | if (d.requestId.startsWith("active_item_parameter")) { 286 | local.values.getChild("Active Item Transform").positionX.set(d.responseData.sceneItemTransform.positionX); 287 | local.values.getChild("Active Item Transform").positionY.set(d.responseData.sceneItemTransform.positionY); 288 | local.values.getChild("Active Item Transform").getChild("Zoom").set(d.responseData.sceneItemTransform.scaleX); 289 | local.values.getChild("Active Item Transform").rotation.set(d.responseData.sceneItemTransform.rotation); 290 | local.values.getChild("Active Item Transform").cropBottom.set(d.responseData.sceneItemTransform.cropBottom); 291 | local.values.getChild("Active Item Transform").cropLeft.set(d.responseData.sceneItemTransform.cropLeft); 292 | local.values.getChild("Active Item Transform").cropRight.set(d.responseData.sceneItemTransform.cropRight); 293 | local.values.getChild("Active Item Transform").cropTop.set(d.responseData.sceneItemTransform.cropTop); 294 | 295 | } 296 | } 297 | 298 | //StreamStateChanged Event 299 | if (d.eventType == "StreamStateChanged") { 300 | valueBoolContainerParameter("Stream", "outputActive", d.eventData.outputActive); 301 | valueStringContainerParameter("Stream", "outputState", d.eventData.outputState); 302 | } 303 | //RecordStateChanged Event 304 | if (d.eventType == "RecordStateChanged") { 305 | valueBoolContainerParameter("Record", "outputActive", d.eventData.outputActive); 306 | valueStringContainerParameter("Record", "outputState", d.eventData.outputState); 307 | valueStringContainerParameter("Record", "outputPath", d.eventData.outputPath); 308 | } 309 | //CurrentProgramSceneChanged Event 310 | if (d.eventType == "CurrentProgramSceneChanged") { 311 | if (!local.values.controlsStatus.studioModeStatus.get()) { 312 | EnumScenes.set(d.eventData.sceneName); 313 | GetSceneItemList("active_items_" + d.eventData.sceneName, d.eventData.sceneName); 314 | } 315 | valueStringParameter("CurrentScene", d.eventData.sceneName); 316 | } 317 | //StudioModeStateChanged Event 318 | if (d.eventType == "StudioModeStateChanged") { 319 | local.values.controlsStatus.studioModeStatus.set(d.eventData.studioModeEnabled); 320 | if (!d.eventData.studioModeEnabled) { 321 | GetCurrentProgramScene(7); 322 | } 323 | } 324 | //CurrentPreviewSceneChanged Event (need for studio mode) 325 | if (d.eventType == "CurrentPreviewSceneChanged") { 326 | EnumScenes.set(d.eventData.sceneName); 327 | GetSceneItemList("active_items_" + d.eventData.sceneName, d.eventData.sceneName); 328 | } 329 | 330 | //InputMuteStateChanged 331 | if (d.eventType == "InputMuteStateChanged") { 332 | valueBoolContainerParameter("Audio Input", d.eventData.inputName, d.eventData.inputMuted); 333 | } 334 | 335 | //SceneItemTransformChanged 336 | if (d.eventType == "SceneItemTransformChanged") { 337 | if (d.eventData.sceneName == EnumScenes.get() && d.eventData.sceneItemId == local.values.getChild("Scenes").getChild(EnumScenes.get()).getChild(EnumItems.getKey()).getChild("IndexItem").get()) { 338 | local.values.getChild("Active Item Transform").positionX.set(d.eventData.sceneItemTransform.positionX); 339 | local.values.getChild("Active Item Transform").positionY.set(d.eventData.sceneItemTransform.positionY); 340 | local.values.getChild("Active Item Transform").getChild("Zoom").set(d.eventData.sceneItemTransform.scaleX); 341 | local.values.getChild("Active Item Transform").rotation.set(d.eventData.sceneItemTransform.rotation); 342 | local.values.getChild("Active Item Transform").cropBottom.set(d.eventData.sceneItemTransform.cropBottom); 343 | local.values.getChild("Active Item Transform").cropLeft.set(d.eventData.sceneItemTransform.cropLeft); 344 | local.values.getChild("Active Item Transform").cropRight.set(d.eventData.sceneItemTransform.cropRight); 345 | local.values.getChild("Active Item Transform").cropTop.set(d.eventData.sceneItemTransform.cropTop); 346 | } 347 | } 348 | 349 | if (d.eventType == "SceneItemSelected") { 350 | var options = EnumItems.getAllOptions(); 351 | var i = 0; 352 | for (i = 0; i < options.length; i++) { 353 | if (d.eventData.sceneItemId == options[i].value) { 354 | EnumItems.set(options[i].key); 355 | GetSceneItemTransform('active_item_parameter', d.eventData.sceneName, d.eventData.sceneItemId); 356 | } 357 | } 358 | } 359 | 360 | if (d.eventType == "SceneItemCreated") { 361 | EnumItems.addOption(d.eventData.sourceName, d.eventData.sceneItemId); 362 | local.values.getChild("Scenes").getChild(d.eventData.sceneName).addContainer(d.eventData.sourceName); 363 | local.values.getChild("Scenes").getChild(d.eventData.sceneName).getChild(d.eventData.sourceName).addStringParameter("IndexItem", "", d.eventData.sceneItemId); 364 | local.values.getChild("Scenes").getChild(d.eventData.sceneName).getChild(d.eventData.sourceName).getChild("IndexItem").setAttribute("readonly", true); 365 | } 366 | 367 | if (d.eventType == "SceneItemRemoved") { 368 | local.values.getChild("Scenes").getChild(d.eventData.sceneName).removeContainer(d.eventData.sourceName); 369 | } 370 | 371 | if (d.eventType == "SceneCreated") { 372 | EnumScenes.addOption(d.eventData.sceneName, d.eventData.sceneName); 373 | local.values.getChild("Scenes").addContainer(d.eventData.sceneName); 374 | } 375 | 376 | if (d.eventType == "SceneRemoved") { 377 | local.values.getChild("Scenes").removeContainer(d.eventData.sceneName); 378 | } 379 | 380 | if (d.eventType == "SceneNameChanged") { 381 | local.values.getChild("Scenes").getChild(d.eventData.oldSceneName).setName(d.eventData.sceneName); 382 | local.values.getChild("Scenes").getChild(d.eventData.sceneName).getChild("sceneName").set(d.eventData.sceneName); 383 | GetSceneList(7); 384 | } 385 | 386 | if (d.eventType == "InputCreated") { 387 | local.values.getChild("Inputs").addContainer(d.eventData.inputName); 388 | local.values.getChild("Inputs").getChild(d.eventData.inputName).addStringParameter("inputName", "", d.eventData.inputName); 389 | local.values.getChild("Inputs").getChild(d.eventData.inputName).getChild("inputName").setAttribute("readonly", true); 390 | local.values.getChild("Inputs").getChild(d.eventData.inputName).addStringParameter("inputKind", "", d.eventData.inputKind); 391 | local.values.getChild("Inputs").getChild(d.eventData.inputName).getChild("inputKind").setAttribute("readonly", true); 392 | } 393 | 394 | if (d.eventType == "InputRemoved") { 395 | local.values.getChild("Inputs").removeContainer(d.eventData.inputName); 396 | } 397 | 398 | if (d.eventType == "InputNameChanged") { 399 | var tempoEnumItem = EnumItems.getKey(); 400 | local.values.getChild("Inputs").getChild(d.eventData.oldInputName).getChild("inputName").set(d.eventData.inputName); 401 | local.values.getChild("Inputs").getChild(d.eventData.oldInputName).setName(d.eventData.inputName); 402 | var sceneList = util.getObjectProperties(local.values.getChild("Scenes"), true, false); 403 | for (var i = 0; i < sceneList.length; i++) { 404 | if (sceneList[i] != "slctScene" && sceneList[i] != "slctItem") { 405 | if (local.values.getChild("Scenes")[sceneList[i]].getChild(d.eventData.oldInputName) != null) { 406 | local.values.getChild("Scenes")[sceneList[i]].getChild(d.eventData.oldInputName).setName(d.eventData.inputName); 407 | } 408 | } 409 | } 410 | GetSceneItemList("active_items_" + EnumScenes.get(), EnumScenes.get()); 411 | util.delayThreadMS(500); 412 | EnumItems.set(tempoEnumItem); 413 | } 414 | } 415 | 416 | function wsDataReceived(data) { 417 | script.log("Websocket data received : " + data); 418 | } 419 | 420 | /* ********** STREAMING MODULE (UDP, TCP, SERIAL, WEBSOCKET) SPECIFIC SCRIPTING ********************* */ 421 | /* 422 | 423 | Websoskets modules can be used as standard Streaming Module and use the dataReceived function above, 424 | but you can also intercept messages and data directly from the streaming, before it is processed, using specific 425 | event callbacks below 426 | */ 427 | 428 | 429 | //--------------------------------------------------------------------------------- 430 | /*send requests*/ 431 | function sendObsCommand(req, data, reqId) { 432 | var send = {}; 433 | var para = {}; 434 | para["requestType"] = req; 435 | para["requestId"] = reqId; 436 | para["requestData"] = data; 437 | 438 | /*!== undefined ? data : {}*/ 439 | send["op"] = 6; 440 | send["d"] = para; 441 | 442 | local.send(JSON.stringify(send)); 443 | } 444 | 445 | function sendObsRawCommand(json) { 446 | local.send(json); 447 | } 448 | 449 | //--------------------------------------------------------------------------------- 450 | /*General Requests Menu*/ 451 | function GetVersion(reqId) { 452 | var data = {}; 453 | sendObsCommand("GetVersion", data, reqId); 454 | } 455 | 456 | function GetStats(reqId) { 457 | var data = {}; 458 | sendObsCommand("GetStats", data, reqId); 459 | } 460 | 461 | function BroadcastCustomEvent(reqId) { 462 | var data = {}; 463 | sendObsCommand("BroadcastCustomEvent", data, reqId); 464 | } 465 | 466 | function CallVendorRequest(reqId, vendorName, requestType, requestData) { 467 | var data = {}; 468 | data["vendorName"] = vendorName; 469 | data["requestType"] = requestType; 470 | data["requestData"] = JSON.parse(requestData); 471 | sendObsCommand("CallVendorRequest", data, reqId); 472 | } 473 | 474 | function GetHotkeyList(reqId) { 475 | var data = {}; 476 | sendObsCommand("GetHotkeyList", data, reqId); 477 | } 478 | 479 | function TriggerHotkeyByName(reqId, hotkeyName) { 480 | var data = {}; 481 | data["hotkeyName"] = hotkeyName; 482 | sendObsCommand("TriggerHotkeyByName", data, reqId); 483 | } 484 | 485 | function TriggerHotkeyByKeySequence(reqId, keyId, shift, control, alt, command) { 486 | var data = { 487 | "keyId": keyId, 488 | "keyModifiers": { 489 | "shift": shift, 490 | "control": control, 491 | "alt": alt, 492 | "command": command 493 | } 494 | }; 495 | sendObsCommand("TriggerHotkeyByKeySequence", data, reqId); 496 | } 497 | 498 | //--------------------------------------------------------------------------------- 499 | /*Config requests Menu*/ 500 | function Sleep(reqId, sleepMillis, sleepFrames) { 501 | var data = {}; 502 | data["sleepMillis"] = sleepMillis; 503 | data["sleepFrames"] = sleepFrames; 504 | sendObsCommand("Sleep", data, reqId); 505 | } 506 | 507 | function GetPersistentData(reqId, realm, slotName) { 508 | var data = {}; 509 | data["realm"] = realm; 510 | data["slotName"] = slotName; 511 | sendObsCommand("GetPersistentData", data, reqId); 512 | } 513 | 514 | function SetPersistentData(reqId, realm, slotName, slotValue) { 515 | var data = {}; 516 | data["realm"] = realm; 517 | data["slotName"] = slotName; 518 | data["slotValue"] = slotValue; 519 | sendObsCommand("SetPersistentData", data, reqId); 520 | } 521 | 522 | function GetSceneCollectionList(reqId) { 523 | var data = {}; 524 | sendObsCommand("GetSceneCollectionList", data, reqId); 525 | } 526 | 527 | function SetCurrentSceneCollection(reqId, sceneCollectionName) { 528 | var data = {}; 529 | data["sceneCollectionName"] = sceneCollectionName; 530 | sendObsCommand("SetCurrentSceneCollection", data, reqId); 531 | } 532 | 533 | function CreateSceneCollection(reqId, sceneCollectionName) { 534 | var data = {}; 535 | data["sceneCollectionName"] = sceneCollectionName; 536 | sendObsCommand("CreateSceneCollection", data, reqId); 537 | } 538 | 539 | function GetProfileList(reqId) { 540 | var data = {}; 541 | sendObsCommand("GetProfileList", data, reqId); 542 | } 543 | 544 | function SetCurrentProfile(reqId, profileName) { 545 | var data = {}; 546 | data["profileName"] = profileName; 547 | sendObsCommand("SetCurrentProfile", data, reqId); 548 | } 549 | 550 | function CreateProfile(reqId, profileName) { 551 | var data = {}; 552 | data["profileName"] = profileName; 553 | sendObsCommand("CreateProfile", data, reqId); 554 | } 555 | 556 | function RemoveProfile(reqId, profileName) { 557 | var data = {}; 558 | data["profileName"] = profileName; 559 | sendObsCommand("RemoveProfile", data, reqId); 560 | } 561 | 562 | function GetProfileParameter(reqId, parameterCategory, parameterName) { 563 | var data = {}; 564 | data["parameterCategory"] = parameterCategory; 565 | data["parameterName"] = parameterName; 566 | sendObsCommand("GetProfileParameter", data, reqId); 567 | } 568 | 569 | function SetProfileParameter(reqId, parameterCategory, parameterName, parameterValue) { 570 | var data = {}; 571 | data["parameterCategory"] = parameterCategory; 572 | data["parameterName"] = parameterName; 573 | data["parameterValue"] = parameterValue; 574 | sendObsCommand("SetProfileParameter", data, reqId); 575 | } 576 | 577 | function GetVideoSettings(reqId) { 578 | var data = {}; 579 | sendObsCommand("GetVideoSettings", data, reqId); 580 | } 581 | 582 | function SetVideoSettings(reqId, fpsNumerator, fpsDenominator, baseWidth, baseHeight, outputWidth, outputHeight) { 583 | var data = {}; 584 | data["fpsNumerator"] = fpsNumerator; 585 | data["fpsDenominator"] = fpsDenominator; 586 | data["parametbaseWidtherValue"] = baseWidth; 587 | data["baseHeight"] = baseHeight; 588 | data["outputWidth"] = outputWidth; 589 | data["outputHeight"] = outputHeight; 590 | sendObsCommand("SetVideoSettings", data, reqId); 591 | } 592 | 593 | function GetStreamServiceSettings(reqId) { 594 | var data = {}; 595 | sendObsCommand("GetStreamServiceSettings", data, reqId); 596 | } 597 | 598 | function SetStreamServiceSettings(reqId, streamServiceType, streamServiceSettings) { 599 | var data = {}; 600 | data["streamServiceType"] = streamServiceType; 601 | data["streamServiceSettings"] = JSON.parse(streamServiceSettings); 602 | sendObsCommand("SetStreamServiceSettings", data, reqId); 603 | } 604 | 605 | function GetRecordDirectory(reqId) { 606 | var data = {}; 607 | sendObsCommand("GetRecordDirectory", data, reqId); 608 | } 609 | 610 | //--------------------------------------------------------------------------------- 611 | /*Sources Requests Menu*/ 612 | function GetSourceActive(reqId, sourceName) { 613 | var data = {}; 614 | data["sourceName"] = sourceName; 615 | sendObsCommand("GetSourceActive", data, reqId); 616 | } 617 | 618 | function GetSourceScreenshot(reqId, sourceName, imageFormat, imageWidth, imageHeight, imageCompressionQuality) { 619 | var data = {}; 620 | data["sourceName"] = sourceName; 621 | data["imageFormat"] = imageFormat; 622 | data["imageWidth"] = imageWidth; 623 | data["imageHeight"] = imageHeight; 624 | data["imageCompressionQuality"] = imageCompressionQuality; 625 | sendObsCommand("GetSourceScreenshot", data, reqId); 626 | } 627 | 628 | function SaveSourceScreenshot(reqId, sourceName, imageFormat, imageFilePath, imageWidth, imageHeight, imageCompressionQuality) { 629 | var data = {}; 630 | data["sourceName"] = sourceName; 631 | data["imageFormat"] = imageFormat; 632 | data["imageFilePath"] = imageFilePath; 633 | data["imageWidth"] = imageWidth; 634 | data["imageHeight"] = imageHeight; 635 | data["imageCompressionQuality"] = imageCompressionQuality; 636 | sendObsCommand("SaveSourceScreenshot", data, reqId); 637 | } 638 | 639 | //--------------------------------------------------------------------------------- 640 | /*Scenes Requests menu*/ 641 | function GetSceneList(reqId) { 642 | var data = {}; 643 | sendObsCommand("GetSceneList", data, reqId); 644 | 645 | } 646 | 647 | function GetGroupList(reqId) { 648 | var data = {}; 649 | sendObsCommand("GetGroupList", data, reqId); 650 | } 651 | 652 | function GetCurrentProgramScene(reqId) { 653 | var data = {}; 654 | sendObsCommand("GetCurrentProgramScene", data, reqId); 655 | } 656 | 657 | function SetCurrentProgramScene(reqId, sceneName) { 658 | var data = {}; 659 | tempo = sceneName; 660 | data["sceneName"] = sceneName; 661 | sendObsCommand("SetCurrentProgramScene", data, reqId); 662 | } 663 | 664 | function GetCurrentPreviewScene(reqId) { 665 | var data = {}; 666 | sendObsCommand("GetCurrentPreviewScene", data, reqId); 667 | } 668 | 669 | function SetCurrentPreviewScene(reqId, sceneName) { 670 | var data = {}; 671 | data["sceneName"] = sceneName; 672 | sendObsCommand("SetCurrentPreviewScene", data, reqId); 673 | } 674 | 675 | function CreateScene(reqId, sceneName) { 676 | var data = {}; 677 | data["sceneName"] = sceneName; 678 | sendObsCommand("CreateScene", data, reqId); 679 | } 680 | 681 | function RemoveScene(reqId, sceneName) { 682 | var data = {}; 683 | data["sceneName"] = sceneName; 684 | sendObsCommand("RemoveScene", data, reqId); 685 | } 686 | 687 | function SetSceneName(reqId, sceneName, newSceneName) { 688 | var data = {}; 689 | data["sceneName"] = sceneName; 690 | data["newSceneName"] = newSceneName; 691 | sendObsCommand("SetSceneName", data, reqId); 692 | } 693 | 694 | function GetSceneSceneTransitionOverride(reqId, sceneName) { 695 | var data = {}; 696 | data["sceneName"] = sceneName; 697 | sendObsCommand("GetSceneSceneTransitionOverride", data, reqId); 698 | } 699 | 700 | function SetSceneSceneTransitionOverride(reqId, sceneName, transitionName, transitionDuration) { 701 | var data = {}; 702 | data["sceneName"] = sceneName; 703 | data["transitionName"] = transitionName; 704 | data["transitionDuration"] = transitionDuration; 705 | sendObsCommand("SetSceneSceneTransitionOverride", data, reqId); 706 | } 707 | 708 | //--------------------------------------------------------------------------------- 709 | /*Inputs Requests menu*/ 710 | function GetInputList(reqId, inputKind) { 711 | var data = {}; 712 | if (data["inputKind"] != undefined) { 713 | data["inputKind"] = inputKind; 714 | } else { 715 | 716 | data["inputKind"] = null; 717 | } 718 | sendObsCommand("GetInputList", data, reqId); 719 | } 720 | 721 | function GetInputKindList(reqId, unversioned) { 722 | var data = {}; 723 | data["unversioned"] = unversioned; 724 | sendObsCommand("GetInputKindList", data, reqId); 725 | } 726 | 727 | function GetSpecialInputs(reqId) { 728 | var data = {}; 729 | sendObsCommand("GetSpecialInputs", data, reqId); 730 | } 731 | 732 | function CreateInput(reqId, sceneName, inputName, inputKind, inputSettings, sceneItemEnabled) { 733 | var data = {}; 734 | data["sceneName"] = sceneName; 735 | data["inputName"] = inputName; 736 | data["inputKind"] = inputKind; 737 | data["inputSettings"] = JSON.parse(inputSettings); 738 | data["sceneItemEnabled"] = sceneItemEnabled; 739 | sendObsCommand("CreateInput", data, reqId); 740 | } 741 | 742 | function RemoveInput(reqId, inputName) { 743 | var data = {}; 744 | data["inputName"] = inputName; 745 | sendObsCommand("RemoveInput", data, reqId); 746 | } 747 | 748 | function SetInputName(reqId, inputName, newInputName) { 749 | var data = {}; 750 | data["inputName"] = inputName; 751 | data["newInputName"] = newInputName; 752 | sendObsCommand("SetInputName", data, reqId); 753 | } 754 | 755 | function GetInputDefaultSettings(reqId, inputKind) { 756 | var data = {}; 757 | data["inputKind"] = inputKind; 758 | sendObsCommand("GetInputDefaultSettings", data, reqId); 759 | } 760 | 761 | function GetInputSettings(reqId, inputName) { 762 | var data = {}; 763 | data["inputName"] = inputName; 764 | sendObsCommand("GetInputSettings", data, reqId); 765 | } 766 | 767 | function SetInputSettings(reqId, inputName, inputSettings, overlay) { 768 | var data = {}; 769 | data["inputName"] = inputName; 770 | data["inputSettings"] = JSON.parse(inputSettings); 771 | data["overlay"] = overlay; 772 | sendObsCommand("SetInputSettings", data, reqId); 773 | } 774 | 775 | function GetInputMute(reqId, inputName) { 776 | var data = {}; 777 | data["inputName"] = inputName; 778 | sendObsCommand("GetInputMute", data, reqId); 779 | } 780 | 781 | function SetInputMute(reqId, inputName, inputMuted) { 782 | var data = {}; 783 | data["inputName"] = inputName; 784 | data["inputMuted"] = inputMuted; 785 | sendObsCommand("SetInputMute", data, reqId); 786 | } 787 | 788 | function ToggleInputMute(reqId, inputName) { 789 | var data = {}; 790 | data["inputName"] = inputName; 791 | sendObsCommand("ToggleInputMute", data, reqId); 792 | } 793 | 794 | function GetInputVolume(reqId, inputName) { 795 | var data = {}; 796 | data["inputName"] = inputName; 797 | sendObsCommand("GetInputVolume", data, reqId); 798 | } 799 | 800 | function SetInputVolume(reqId, inputName, Dbsettings, inputVolumeMul, inputVolumeDb) { 801 | var data = {}; 802 | data["inputName"] = inputName; 803 | 804 | if (Dbsettings == false) { 805 | data["inputVolumeMul"] = inputVolumeMul; 806 | } else if (Dbsettings == true) { 807 | data["inputVolumeDb"] = inputVolumeDb; 808 | } 809 | sendObsCommand("SetInputVolume", data, reqId); 810 | } 811 | 812 | function GetInputAudioBalance(reqId, inputName) { 813 | var data = {}; 814 | data["inputName"] = inputName; 815 | sendObsCommand("GetInputAudioBalance", data, reqId); 816 | } 817 | 818 | function SetInputAudioBalance(reqId, inputName, inputAudioBalance) { 819 | var data = {}; 820 | data["inputName"] = inputName; 821 | data["inputAudioBalance"] = inputAudioBalance; 822 | sendObsCommand("SetInputAudioBalance", data, reqId); 823 | } 824 | 825 | function GetInputAudioSyncOffset(reqId, inputName) { 826 | var data = {}; 827 | data["inputName"] = inputName; 828 | sendObsCommand("GetInputAudioSyncOffset", data, reqId); 829 | } 830 | 831 | function SetInputAudioSyncOffset(reqId, inputName, inputAudioSyncOffset) { 832 | var data = {}; 833 | data["inputName"] = inputName; 834 | data["inputAudioSyncOffset"] = inputAudioSyncOffset; 835 | sendObsCommand("SetInputAudioSyncOffset", data, reqId); 836 | } 837 | 838 | function GetInputAudioMonitorType(reqId, inputName) { 839 | var data = {}; 840 | data["inputName"] = inputName; 841 | sendObsCommand("GetInputAudioMonitorType", data, reqId); 842 | } 843 | 844 | function SetInputAudioMonitorType(reqId, inputName, monitorType) { 845 | var data = {}; 846 | data["inputName"] = inputName; 847 | data["monitorType"] = monitorType; 848 | sendObsCommand("SetInputAudioMonitorType", data, reqId); 849 | } 850 | 851 | function GetInputAudioTracks(reqId, inputName) { 852 | var data = {}; 853 | data["inputName"] = inputName; 854 | sendObsCommand("GetInputAudioTracks", data, reqId); 855 | } 856 | 857 | function SetInputAudioTracks(reqId, inputName, inputAudioTracks) { 858 | var data = {}; 859 | data["inputName"] = inputName; 860 | data["inputAudioTracks"] = JSON.parse(inputAudioTracks); 861 | sendObsCommand("SetInputAudioTracks", data, reqId); 862 | } 863 | 864 | function GetInputPropertiesListPropertyItems(reqId, inputName, propertyName) { 865 | var data = {}; 866 | data["inputName"] = inputName; 867 | data["propertyName"] = propertyName; 868 | sendObsCommand("GetInputPropertiesListPropertyItems", data, reqId); 869 | } 870 | 871 | function PressInputPropertiesButton(reqId, inputName, propertyName) { 872 | var data = {}; 873 | data["inputName"] = inputName; 874 | data["propertyName"] = propertyName; 875 | sendObsCommand("PressInputPropertiesButton", data, reqId); 876 | } 877 | 878 | //--------------------------------------------------------------------------------- 879 | /*Transitions Requests menu*/ 880 | function GetTransitionKindList(reqId, transitionKinds) { 881 | var data = {}; 882 | data["transitionKinds"] = transitionKinds; 883 | sendObsCommand("GetTransitionKindList", data, reqId); 884 | } 885 | 886 | function GetSceneTransitionList(reqId, currentSceneTransitionName, currentSceneTransitionKind, transitions) { 887 | var data = {}; 888 | data["currentSceneTransitionName"] = currentSceneTransitionName; 889 | data["currentSceneTransitionKind"] = currentSceneTransitionKind; 890 | data["transitions"] = transitions; 891 | sendObsCommand("GetSceneTransitionList", data, reqId); 892 | } 893 | 894 | function GetCurrentSceneTransition(reqId, transitionName, transitionKind, transitionFixed, transitionDuration, transitionConfigurable, transitionSettings) { 895 | var data = {}; 896 | data["transitionName"] = transitionName; 897 | data["transitionKind"] = transitionKind; 898 | data["transitionFixed"] = transitionFixed; 899 | data["transitionDuration"] = transitionDuration; 900 | data["transitionConfigurable"] = transitionConfigurable; 901 | data["transitionSettings"] = transitionSettings; 902 | sendObsCommand("GetCurrentSceneTransition", data, reqId); 903 | } 904 | 905 | function SetCurrentSceneTransition(reqId, transitionName) { 906 | var data = {}; 907 | data["transitionName"] = transitionName; 908 | sendObsCommand("SetCurrentSceneTransition", data, reqId); 909 | } 910 | 911 | function SetCurrentSceneTransitionDuration(reqId, transitionDuration) { 912 | var data = {}; 913 | data["transitionDuration"] = transitionDuration; 914 | sendObsCommand("SetCurrentSceneTransitionDuration", data, reqId); 915 | } 916 | 917 | function SetCurrentSceneTransitionSettings(reqId, transitionSettings, overlay) { 918 | var data = {}; 919 | data["transitionSettings"] = JSON.parse(transitionSettings); 920 | data["overlay"] = overlay; 921 | sendObsCommand("SetCurrentSceneTransitionSettings", data, reqId); 922 | } 923 | 924 | function GetCurrentSceneTransitionCursor(reqId, transitionCursor) { 925 | var data = {}; 926 | data["transitionCursor"] = transitionCursor; 927 | sendObsCommand("GetCurrentSceneTransitionCursor", data, reqId); 928 | } 929 | 930 | function TriggerStudioModeTransition(reqId) { 931 | var data = {}; 932 | sendObsCommand("TriggerStudioModeTransition", data, reqId); 933 | } 934 | 935 | function SetTBarPosition(reqId, position, release) { 936 | var data = {}; 937 | data["position"] = position; 938 | data["release"] = release; 939 | sendObsCommand("SetTBarPosition", data, reqId); 940 | } 941 | 942 | //--------------------------------------------------------------------------------- 943 | /*Filters Requests menu*/ 944 | function GetSourceFilterList(reqId, sourceName) { 945 | var data = {}; 946 | data["sourceName"] = sourceName; 947 | sendObsCommand("GetSourceFilterList", data, reqId); 948 | } 949 | 950 | function GetSourceFilterDefaultSettings(reqId, filterKind) { 951 | var data = {}; 952 | data["filterKind"] = filterKind; 953 | sendObsCommand("GetSourceFilterDefaultSettings", data, reqId); 954 | } 955 | 956 | function CreateSourceFilter(reqId, sourceName, filterName, filterKind, filterSettings) { 957 | var data = {}; 958 | data["sourceName"] = sourceName; 959 | data["filterName"] = filterName; 960 | data["filterKind"] = filterKind; 961 | data["filterSettings"] = JSON.parse(filterSettings); 962 | sendObsCommand("CreateSourceFilter", data, reqId); 963 | } 964 | 965 | function RemoveSourceFilter(reqId, sourceName, filterName) { 966 | var data = {}; 967 | data["sourceName"] = sourceName; 968 | data["filterName"] = filterName; 969 | sendObsCommand("RemoveSourceFilter", data, reqId); 970 | } 971 | 972 | function SetSourceFilterName(reqId, sourceName, filterName, newFilterName) { 973 | var data = {}; 974 | data["sourceName"] = sourceName; 975 | data["filterName"] = filterName; 976 | data["newFilterName"] = newFilterName; 977 | sendObsCommand("SetSourceFilterName", data, reqId); 978 | } 979 | 980 | function GetSourceFilter(reqId, sourceName, filterName) { 981 | var data = {}; 982 | data["sourceName"] = sourceName; 983 | data["filterName"] = filterName; 984 | sendObsCommand("GetSourceFilter", data, reqId); 985 | } 986 | 987 | function SetSourceFilterIndex(reqId, sourceName, filterName, filterIndex) { 988 | var data = {}; 989 | data["sourceName"] = sourceName; 990 | data["filterName"] = filterName; 991 | data["filterIndex"] = filterIndex; 992 | sendObsCommand("SetSourceFilterIndex", data, reqId); 993 | } 994 | 995 | function SetSourceFilterSettings(reqId, sourceName, filterName, filterSettings, overlay) { 996 | var data = {}; 997 | data["sourceName"] = sourceName; 998 | data["filterName"] = filterName; 999 | data["filterSettings"] = JSON.parse(filterSettings); 1000 | data["overlay"] = overlay; 1001 | sendObsCommand("SetSourceFilterSettings", data, reqId); 1002 | } 1003 | 1004 | function SetSourceFilterColorCorrectionSettings(reqId, sourceName, filterName, gamma, contrast, brightness, saturation, hue, opacity, colorMultiply, colorAdd, overlay) { 1005 | var data = {}; 1006 | data["sourceName"] = sourceName; 1007 | data["filterName"] = filterName; 1008 | data["filterSettings"] = { 1009 | "gamma": gamma, 1010 | "contrast": contrast, 1011 | "brightness": brightness, 1012 | "saturation": saturation, 1013 | "hue_shift": hue, 1014 | "opacity": opacity, 1015 | "color_multiply": colorToInt(colorMultiply), 1016 | "color_add": colorToInt(colorAdd) 1017 | }; 1018 | data["overlay"] = overlay; 1019 | sendObsCommand("SetSourceFilterSettings", data, reqId); 1020 | } 1021 | 1022 | function SetSourceFilterEnabled(reqId, sourceName, filterName, filterEnabled) { 1023 | var data = {}; 1024 | data["sourceName"] = sourceName; 1025 | data["filterName"] = filterName; 1026 | data["filterEnabled"] = filterEnabled; 1027 | sendObsCommand("SetSourceFilterEnabled", data, reqId); 1028 | } 1029 | 1030 | //--------------------------------------------------------------------------------- 1031 | /*Scene Items Requests Menu*/ 1032 | function GetSceneItemList(reqId, sceneName) { 1033 | var data = {}; 1034 | tempo = sceneName; 1035 | data["sceneName"] = sceneName; 1036 | sendObsCommand("GetSceneItemList", data, reqId); 1037 | } 1038 | 1039 | function GetGroupSceneItemList(reqId, sceneName) { 1040 | var data = {}; 1041 | data["sceneName"] = sceneName; 1042 | sendObsCommand("GetGroupSceneItemList", data, reqId); 1043 | } 1044 | 1045 | function GetSceneItemId(reqId, sceneName, sourceName, searchOffset) { 1046 | var data = {}; 1047 | data["sceneName"] = sceneName; 1048 | data["sourceName"] = sourceName; 1049 | data["searchOffset"] = searchOffset; 1050 | sendObsCommand("GetSceneItemId", data, reqId); 1051 | } 1052 | 1053 | function CreateSceneItem(reqId, sceneName, sourceName, sceneItemEnabled) { 1054 | var data = {}; 1055 | data["sceneName"] = sceneName; 1056 | data["sourceName"] = sourceName; 1057 | data["sceneItemEnabled"] = sceneItemEnabled; 1058 | sendObsCommand("CreateSceneItem", data, reqId); 1059 | } 1060 | 1061 | function RemoveSceneItem(reqId, sceneName, sceneItemId) { 1062 | var data = {}; 1063 | data["sceneName"] = sceneName; 1064 | data["sceneItemId"] = sceneItemId; 1065 | sendObsCommand("RemoveSceneItem", data, reqId); 1066 | } 1067 | 1068 | function DuplicateSceneItem(reqId, sceneName, destinationSceneName) { 1069 | var data = {}; 1070 | data["sceneName"] = sceneName; 1071 | data["sceneId"] = sceneId; 1072 | data["destinationSceneName"] = destinationSceneName; 1073 | sendObsCommand("DuplicateSceneItem", data, reqId); 1074 | } 1075 | 1076 | function GetSceneItemTransform(reqId, sceneName, sceneItemId) { 1077 | var data = {}; 1078 | data["sceneName"] = sceneName; 1079 | data["sceneItemId"] = sceneItemId; 1080 | sendObsCommand("GetSceneItemTransform", data, reqId); 1081 | } 1082 | 1083 | function SetSceneItemTransform(reqId, sceneName, sceneItemId, positionXBool, positionX, positionYBool, positionY, scaleXBool, scaleX, scaleYBool, scaleY, rotationBool, rotation, cropBottomBool, cropBottom, cropTopBool, cropTop, cropLeftBool, cropLeft, cropRightBool, cropRight) { 1084 | var data = {}; 1085 | data["sceneName"] = sceneName; 1086 | data["sceneItemId"] = sceneItemId; 1087 | // 1088 | data["sceneItemTransform"] = {}; 1089 | if (positionXBool == true) { 1090 | data["sceneItemTransform"]["positionX"] = positionX; 1091 | } 1092 | if (positionYBool == true) { 1093 | data["sceneItemTransform"]["positionY"] = positionY; 1094 | } 1095 | if (scaleXBool == true) { 1096 | data["sceneItemTransform"]["scaleX"] = scaleX; 1097 | } 1098 | if (scaleYBool == true) { 1099 | data["sceneItemTransform"]["scaleY"] = scaleY; 1100 | } 1101 | // Completing transform parameters for an OBS item 1102 | if (rotationBool == true) { 1103 | data["sceneItemTransform"]["rotation"] = rotation; 1104 | } 1105 | if (cropBottomBool == true) { 1106 | data["sceneItemTransform"]["cropBottom"] = cropBottom; 1107 | } 1108 | if (cropTopBool == true) { 1109 | data["sceneItemTransform"]["cropTop"] = cropTop; 1110 | } 1111 | if (cropLeftBool == true) { 1112 | data["sceneItemTransform"]["cropLeft"] = cropLeft; 1113 | } 1114 | if (cropRightBool == true) { 1115 | data["sceneItemTransform"]["cropRight"] = cropRight; 1116 | } 1117 | //data["sceneItemTransform"] = JSON.parse(sceneItemTransform); 1118 | sendObsCommand("SetSceneItemTransform", data, reqId); 1119 | } 1120 | 1121 | function GetSceneItemEnabled(reqId, sceneName, sceneItemId) { 1122 | var data = {}; 1123 | data["sceneName"] = sceneName; 1124 | data["sceneItemId"] = sceneItemId; 1125 | sendObsCommand("GetSceneItemEnabled", data, reqId); 1126 | } 1127 | 1128 | function SetSceneItemEnabled(reqId, sceneName, sceneItemId, sceneItemEnabled) { 1129 | var data = {}; 1130 | data["sceneName"] = sceneName; 1131 | data["sceneItemId"] = sceneItemId; 1132 | data["sceneItemEnabled"] = sceneItemEnabled; 1133 | sendObsCommand("SetSceneItemEnabled", data, reqId); 1134 | } 1135 | 1136 | function GetSceneItemLocked(reqId, sceneName, sceneItemId) { 1137 | var data = {}; 1138 | data["sceneName"] = sceneName; 1139 | data["sceneItemId"] = sceneItemId; 1140 | sendObsCommand("GetSceneItemLocked", data, reqId); 1141 | } 1142 | 1143 | function SetSceneItemLocked(reqId, sceneName, sceneItemId, sceneItemLocked) { 1144 | var data = {}; 1145 | data["sceneName"] = sceneName; 1146 | data["sceneItemId"] = sceneItemId; 1147 | data["sceneItemLocked"] = sceneItemLocked; 1148 | sendObsCommand("SetSceneItemLocked", data, reqId); 1149 | } 1150 | 1151 | function GetSceneItemIndex(reqId, sceneName, sceneItemId) { 1152 | var data = {}; 1153 | data["sceneName"] = sceneName; 1154 | data["sceneItemId"] = sceneItemId; 1155 | sendObsCommand("GetSceneItemIndex", data, reqId); 1156 | } 1157 | 1158 | function SetSceneItemIndex(reqId, sceneName, sceneItemId, sceneItemIndex) { 1159 | var data = {}; 1160 | data["sceneName"] = sceneName; 1161 | data["sceneItemId"] = sceneItemId; 1162 | data["sceneItemIndex"] = sceneItemIndex; 1163 | sendObsCommand("SetSceneItemIndex", data, reqId); 1164 | } 1165 | 1166 | function GetSceneItemBlendMode(reqId, sceneName, sceneItemId) { 1167 | var data = {}; 1168 | data["sceneName"] = sceneName; 1169 | data["sceneItemId"] = sceneItemId; 1170 | sendObsCommand("GetSceneItemBlendMode", data, reqId); 1171 | } 1172 | 1173 | function SetSceneItemBlendMode(reqId, sceneName, sceneItemId, sceneItemBlendMode) { 1174 | var data = {}; 1175 | data["sceneName"] = sceneName; 1176 | data["sceneItemId"] = sceneItemId; 1177 | data["sceneItemBlendMode"] = sceneItemBlendMode; 1178 | sendObsCommand("SetSceneItemBlendMode", data, reqId); 1179 | } 1180 | 1181 | //--------------------------------------------------------------------------------- 1182 | /*Outputs Requests Menu*/ 1183 | function GetVirtualCamStatus(reqId) { 1184 | var data = {}; 1185 | sendObsCommand("GetVirtualCamStatus", data, reqId); 1186 | } 1187 | 1188 | function ToggleVirtualCam(reqId) { 1189 | var data = {}; 1190 | sendObsCommand("ToggleVirtualCam", data, reqId); 1191 | } 1192 | 1193 | function StartVirtualCam(reqId) { 1194 | var data = {}; 1195 | sendObsCommand("StartVirtualCam", data, reqId); 1196 | } 1197 | 1198 | 1199 | function StopVirtualCam(reqId) { 1200 | var data = {}; 1201 | sendObsCommand("StopVirtualCam", data, reqId); 1202 | } 1203 | 1204 | function GetReplayBufferStatus(reqId) { 1205 | var data = {}; 1206 | sendObsCommand("GetReplayBufferStatus", data, reqId); 1207 | } 1208 | 1209 | function ToggleReplayBuffer(reqId) { 1210 | var data = {}; 1211 | sendObsCommand("ToggleReplayBuffer", data, reqId); 1212 | } 1213 | 1214 | function StartReplayBuffer(reqId) { 1215 | var data = {}; 1216 | sendObsCommand("StartReplayBuffer", data, reqId); 1217 | } 1218 | 1219 | function StopReplayBuffer(reqId) { 1220 | var data = {}; 1221 | sendObsCommand("StopReplayBuffer", data, reqId); 1222 | } 1223 | 1224 | function SaveReplayBuffer(reqId) { 1225 | var data = {}; 1226 | sendObsCommand("SaveReplayBuffer", data, reqId); 1227 | } 1228 | 1229 | function GetLastReplayBufferReplay(reqId) { 1230 | var data = {}; 1231 | sendObsCommand("GetLastReplayBufferReplay", data, reqId); 1232 | } 1233 | 1234 | function GetOutputList(reqId) { 1235 | var data = {}; 1236 | sendObsCommand("GetOutputList", data, reqId); 1237 | } 1238 | 1239 | function GetOutputStatus(reqId, outputName) { 1240 | var data = {}; 1241 | data["outputName"] = outputName; 1242 | sendObsCommand("GetOutputStatus", data, reqId); 1243 | } 1244 | 1245 | function ToggleOutput(reqId, outputName) { 1246 | var data = {}; 1247 | data["outputName"] = outputName; 1248 | sendObsCommand("ToggleOutput", data, reqId); 1249 | } 1250 | 1251 | function StartOutput(reqId, outputName) { 1252 | var data = {}; 1253 | data["outputName"] = outputName; 1254 | sendObsCommand("StartOutput", data, reqId); 1255 | } 1256 | 1257 | function StopOutput(reqId, outputName) { 1258 | var data = {}; 1259 | data["outputName"] = outputName; 1260 | sendObsCommand("StopOutput", data, reqId); 1261 | } 1262 | 1263 | function GetOutputSettings(reqId, outputName) { 1264 | var data = {}; 1265 | data["outputName"] = outputName; 1266 | sendObsCommand("GetOutputSettings", data, reqId); 1267 | } 1268 | 1269 | function SetOutputSettings(reqId, outputName, outputSettings) { 1270 | var data = {}; 1271 | data["outputName"] = outputName; 1272 | data["outputSettings"] = JSON.parse(outputSettings); 1273 | sendObsCommand("SetOutputSettings", data, reqId); 1274 | } 1275 | 1276 | //--------------------------------------------------------------------------------- 1277 | /*Stream Requests Menu*/ 1278 | function GetStreamStatus(reqId) { 1279 | var data = {}; 1280 | sendObsCommand("GetStreamStatus", data, reqId); 1281 | } 1282 | 1283 | function ToggleStream(reqId) { 1284 | var data = {}; 1285 | sendObsCommand("ToggleStream", data, reqId); 1286 | } 1287 | 1288 | 1289 | function StartStream(reqId) { 1290 | var data = {}; 1291 | sendObsCommand("StartStream", data, reqId); 1292 | } 1293 | 1294 | function StopStream(reqId) { 1295 | var data = {}; 1296 | sendObsCommand("StopStream", data, reqId); 1297 | } 1298 | 1299 | function SendStreamCaption(reqId, captionText) { 1300 | var data = {}; 1301 | data["captionText"] = captionText; 1302 | sendObsCommand("SendStreamCaption", data, reqId); 1303 | } 1304 | 1305 | //--------------------------------------------------------------------------------- 1306 | /*Record Requests Menu*/ 1307 | function GetRecordStatus(reqId) { 1308 | var data = {}; 1309 | sendObsCommand("GetRecordStatus", data, reqId); 1310 | } 1311 | 1312 | function ToggleRecord(reqId) { 1313 | var data = {}; 1314 | sendObsCommand("ToggleRecord", data, reqId); 1315 | } 1316 | 1317 | function StartRecord(reqId) { 1318 | var data = {}; 1319 | sendObsCommand("StartRecord", data, reqId); 1320 | } 1321 | 1322 | function StopRecord(reqId) { 1323 | var data = {}; 1324 | sendObsCommand("StopRecord", data, reqId); 1325 | } 1326 | 1327 | function ToggleRecordPause(reqId) { 1328 | var data = {}; 1329 | sendObsCommand("ToggleRecordPause", data, reqId); 1330 | } 1331 | 1332 | function PauseRecord(reqId) { 1333 | var data = {}; 1334 | sendObsCommand("PauseRecord", data, reqId); 1335 | } 1336 | 1337 | function ResumeRecord(reqId) { 1338 | var data = {}; 1339 | sendObsCommand("ResumeRecord", data, reqId); 1340 | } 1341 | 1342 | //--------------------------------------------------------------------------------- 1343 | /*Media Inputs Requests Menu*/ 1344 | function GetMediaInputStatus(reqId, inputName) { 1345 | var data = {}; 1346 | data["inputName"] = inputName; 1347 | sendObsCommand("GetMediaInputStatus", data, reqId); 1348 | } 1349 | 1350 | function SetMediaInputCursor(reqId, inputName, mediaCursor) { 1351 | var data = {}; 1352 | data["inputName"] = inputName; 1353 | data["mediaCursor"] = mediaCursor; 1354 | sendObsCommand("SetMediaInputCursor", data, reqId); 1355 | } 1356 | 1357 | function OffsetMediaInputCursor(reqId, inputName, mediaCursorOffset) { 1358 | var data = {}; 1359 | data["inputName"] = inputName; 1360 | data["mediaCursorOffset"] = mediaCursorOffset; 1361 | sendObsCommand("OffsetMediaInputCursor", data, reqId); 1362 | } 1363 | 1364 | function TriggerMediaInputAction(reqId, inputName, mediaAction) { 1365 | var data = {}; 1366 | data["inputName"] = inputName; 1367 | data["mediaAction"] = mediaAction; 1368 | sendObsCommand("TriggerMediaInputAction", data, reqId); 1369 | } 1370 | 1371 | //--------------------------------------------------------------------------------- 1372 | /*UI Requests Menu*/ 1373 | function GetStudioModeEnabled(reqId) { 1374 | var data = {}; 1375 | sendObsCommand("GetStudioModeEnabled", data, reqId); 1376 | } 1377 | 1378 | function SetStudioModeEnabled(reqId, studioModeEnabled) { 1379 | var data = {}; 1380 | data["studioModeEnabled"] = studioModeEnabled; 1381 | sendObsCommand("SetStudioModeEnabled", data, reqId); 1382 | } 1383 | 1384 | function OpenInputPropertiesDialog(reqId, inputName) { 1385 | var data = {}; 1386 | data["inputName"] = inputName; 1387 | sendObsCommand("OpenInputPropertiesDialog", data, reqId); 1388 | } 1389 | 1390 | function OpenInputFiltersDialog(reqId, inputName) { 1391 | var data = {}; 1392 | data["inputName"] = inputName; 1393 | sendObsCommand("OpenInputFiltersDialog", data, reqId); 1394 | } 1395 | 1396 | function OpenInputInteractDialog(reqId, inputName) { 1397 | var data = {}; 1398 | data["inputName"] = inputName; 1399 | sendObsCommand("OpenInputInteractDialog", data, reqId); 1400 | } 1401 | 1402 | function GetMonitorList(reqId) { 1403 | var data = {}; 1404 | sendObsCommand("GetMonitorList", data, reqId); 1405 | } 1406 | 1407 | function OpenVideoMixProjector(reqId, videoMixType, monitorIndex, projectorGeometry) { 1408 | var data = {}; 1409 | data["videoMixType"] = videoMixType; 1410 | data["monitorIndex"] = monitorIndex; 1411 | data["projectorGeometry"] = projectorGeometry; 1412 | sendObsCommand("OpenVideoMixProjector", data, reqId); 1413 | } 1414 | 1415 | function OpenSourceProjector(reqId, sourceName, monitorIndex, projectorGeometry) { 1416 | var data = {}; 1417 | data["sourceName"] = sourceName; 1418 | data["monitorIndex"] = monitorIndex; 1419 | data["projectorGeometry"] = projectorGeometry; 1420 | sendObsCommand("OpenSourceProjector", data, reqId); 1421 | } 1422 | 1423 | function SwitchActiveItem(direction) { 1424 | if (local.values.controlsStatus.controllerStatus.get()) { 1425 | if (direction == "Next") { 1426 | EnumScenes.setNext(true); 1427 | } else { 1428 | EnumScenes.setPrevious(true); 1429 | } 1430 | GetSceneItemList("active_items_" + EnumScenes.get(), EnumScenes.get()); 1431 | } else { 1432 | if (direction == "Next") { 1433 | EnumItems.setNext(true); 1434 | } else { 1435 | EnumItems.setPrevious(true); 1436 | } 1437 | GetSceneItemTransform('active_item_parameter', EnumScenes.get(), EnumItems.get()); 1438 | } 1439 | } 1440 | 1441 | function ActiveItemTransform(negative, position_type) { 1442 | var data = {}; 1443 | data["sceneName"] = EnumScenes.get(); 1444 | data["sceneItemId"] = EnumItems.get(); 1445 | data["sceneItemTransform"] = {}; 1446 | var step = local.values.getChild("Active Item Transform").getChild("Steppers").x_Y_Crop_RotStep.get(); 1447 | if (position_type == "Zoom") { 1448 | step = local.values.getChild("Active Item Transform").getChild("Steppers").zoomStep.get(); 1449 | if (negative) { 1450 | step = -1 * step; 1451 | } 1452 | data["sceneItemTransform"]["scaleX"] = local.values.getChild("Active Item Transform").getChild("Zoom").get() + step; 1453 | data["sceneItemTransform"]["scaleY"] = local.values.getChild("Active Item Transform").getChild("Zoom").get() + step; 1454 | } else { 1455 | if (negative) { 1456 | step = -1 * step; 1457 | } 1458 | var position = local.values.getChild("Active Item Transform")[position_type].get() + step; 1459 | data["sceneItemTransform"][position_type] = position; 1460 | } 1461 | sendObsCommand("SetSceneItemTransform", data, "transformDelta"); 1462 | } 1463 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # OBS-Websocket-Chataigne-Module 2 | A simple module to use OBS Websocket V5 with the Chataigne Software 3 | 4 | To know all parameters for your requests, see protocol.md of OBS-Websocket at this link : 5 | Protocol.md OBS_Websocket 6 | 7 | link : Chataigne Software By Benjamin Kuperberg 8 | 9 | 10 | 11 |
12 | Table of Contents 13 |
    14 |
  1. Getting Started 15 | 19 |
  2. 20 | 21 | 22 |
  3. Contributing
  4. 23 | 24 |
  5. Contact
  6. 25 |
  7. Acknowledgments
  8. 26 |
27 |
28 | 29 | 30 | ## Prerequisites 31 | 32 | ### Chataigne 33 | Compatible version with module: 1.9.8b3 or more
34 | Creator: Benjamin Kuperberg
35 | GitHub: Chataigne website
36 | Website: Chataigne website
37 | Resum: Chataigne is made with one goal in mind : create a common tool for artists, technicians and developers who wish to use technology and synchronize softwares for shows, interactive installations or prototyping. It aims to be as simple as possible for basic interactions, but can be easily extended to create complex interactions.
38 | 39 | ### obs-websocket 40 | Compatible version with module: obs-websocket 5 or more
41 | 42 | 43 | ## Contributing 44 | Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. 45 | 46 | If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". 47 | Don't forget to give the project a star! Thanks again! 48 | 49 | 1. Fork the Project 50 | 2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`) 51 | 3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`) 52 | 4. Push to the Branch (`git push origin feature/AmazingFeature`) 53 | 5. Open a Pull Request 54 | 55 | 56 | ## Contact 57 | 58 | Tainalo2: GitHub - https://github.com/tainalo2 59 | Twitch - https://www.twitch.tv/tainalo2 60 | YouTube - https://www.youtube.com/channel/UC2MYhnsKCZJs3B3wROu1B8w 61 | 62 | DrMicka: GitHub - https://github.com/DrMicka 63 | Twitch - https://www.twitch.tv/dr_micka 64 | YouTube - https://www.youtube.com/channel/UCX11UiUYZ_dqAi-FaR2IvxA 65 | 66 | Edrig: GitHub - https://github.com/Edrig 67 | 68 | 69 | Project Link: [https://github.com/Edrig/OBS-Websocket-Chataigne-Module/](https://github.com/Edrig/OBS-Websocket-Chataigne-Module/) 70 | 71 | 72 | ## Acknowledgments 73 | Thanks to Benjamin Kuperberg for his help and his reactivity to upgrade the Chataigne software to make it compatible with this module 74 | -------------------------------------------------------------------------------- /icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Edrig/OBS-Websocket-Chataigne-Module/58baa735a5a7129e802dd53cd7f20ebdeda4a120/icon.png -------------------------------------------------------------------------------- /module.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "OBS Websocket", 3 | "type": "WebSocket Client", 4 | "path": "Software", 5 | "version": "2.0.8", 6 | "description": "To control OBS by Websocket. Module compatible with OBS Websocket 5 or more (directly integrated in OBS 28 or more). To know all requests and parameters, see this link :https://github.com/obsproject/obs-websocket/blob/master/docs/generated/protocol.md#requests ", 7 | "url": "https://github.com/Edrig/OBS-Websocket-Chataigne-Module", 8 | "downloadURL": "https://github.com/Edrig/OBS-Websocket-Chataigne-Module/archive/master.zip", 9 | "hasInput": true, 10 | "hasOutput": true, 11 | "hideDefaultCommands": true, 12 | "hideDefaultParameters": [ 13 | "autoAdd", 14 | "protocol", 15 | "messageStructure", 16 | "firstValueIsTheName", 17 | "useSecureConnection", 18 | "connected" 19 | ], 20 | "defaults": { 21 | "Protocol": "Lines", 22 | "autoAdd": false, 23 | "serverPath": "127.0.0.1:4455" 24 | }, 25 | "parameters": { 26 | "Enable Authentification": { 27 | "type": "Boolean", 28 | "default": true 29 | }, 30 | "Password": { 31 | "type": "String", 32 | "dependency": { 33 | "source": "Enable Authentification", 34 | "value": true, 35 | "check": "equals", 36 | "action": "show" 37 | } 38 | }, 39 | "EventSub": { 40 | "type": "Container", 41 | "General": { 42 | "type": "Boolean", 43 | "default": true 44 | }, 45 | "Config": { 46 | "type": "Boolean", 47 | "default": false 48 | }, 49 | "Scenes": { 50 | "type": "Boolean", 51 | "default": true 52 | }, 53 | "Inputs": { 54 | "type": "Boolean", 55 | "default": true 56 | }, 57 | "Transitions": { 58 | "type": "Boolean", 59 | "default": false 60 | }, 61 | "Filters": { 62 | "type": "Boolean", 63 | "default": false 64 | }, 65 | "Outputs": { 66 | "type": "Boolean", 67 | "default": false 68 | }, 69 | "SceneItems": { 70 | "type": "Boolean", 71 | "default": true 72 | }, 73 | "MediaInputs": { 74 | "type": "Boolean", 75 | "default": false 76 | }, 77 | "Vendors": { 78 | "type": "Boolean", 79 | "default": false 80 | }, 81 | "Ui": { 82 | "type": "Boolean", 83 | "default": true 84 | }, 85 | "InputVolumeMeters": { 86 | "type": "Boolean", 87 | "default": false 88 | }, 89 | "InputActiveStateChanged": { 90 | "type": "Boolean", 91 | "default": false 92 | }, 93 | "InputShowStateChanged": { 94 | "type": "Boolean", 95 | "default": false 96 | }, 97 | "SceneItemTransformChanged": { 98 | "type": "Boolean", 99 | "default": true 100 | } 101 | }, 102 | "See all requests of OBS": { 103 | "type": "String", 104 | "default": "https://github.com/obsproject/obs-websocket/blob/master/docs/generated/protocol.md#requests " 105 | } 106 | }, 107 | "values": { 108 | "removeAllValues": { 109 | "type": "Trigger", 110 | "callback": "removeAllValues" 111 | }, 112 | "ControlsStatus":{ 113 | "type":"Container", 114 | "ControllerStatus": { 115 | "type":"Boolean", 116 | "description": "false = scenes, true = items", 117 | "default": false 118 | }, 119 | "CropBotTopStatus": { 120 | "type":"Boolean", 121 | "description": "false = top, true = bot", 122 | "default": false 123 | }, 124 | "CropLeftRightStatus": { 125 | "type":"Boolean", 126 | "description": "false = left, true = right", 127 | "default": false 128 | }, 129 | "StudioModeStatus": { 130 | "type":"Boolean", 131 | "description": "OBS studio mode status; false = unactive, true = active", 132 | "default": false 133 | } 134 | }, 135 | "Active Item Transform": { 136 | "type": "Container", 137 | "X": { 138 | "type": "Integer", 139 | "min": -9999, 140 | "max": 9999, 141 | "description": "X position", 142 | "shortName": "positionX" 143 | }, 144 | "Y": { 145 | "type": "Integer", 146 | "min": -9999, 147 | "max": 9999, 148 | "description": "Y position", 149 | "shortName": "positionY" 150 | }, 151 | "Zoom": { 152 | "type": "Float", 153 | "min": -5, 154 | "max": 5, 155 | "description": "Zoom in multiplicator" 156 | }, 157 | "Rotation": { 158 | "type": "Integer", 159 | "min": -9999, 160 | "max": 9999, 161 | "description": "In degree", 162 | "shortName": "rotation" 163 | }, 164 | "Crop_Left": { 165 | "type": "Integer", 166 | "min": -9999, 167 | "max": 9999, 168 | "shortName": "cropLeft" 169 | }, 170 | "Crop_Right": { 171 | "type": "Integer", 172 | "min": -9999, 173 | "max": 9999, 174 | "shortName": "cropRight" 175 | }, 176 | "Crop_Top": { 177 | "type": "Integer", 178 | "min": -9999, 179 | "max": 9999, 180 | "shortName": "cropTop" 181 | }, 182 | "Crop_Bot": { 183 | "type": "Integer", 184 | "min": -9999, 185 | "max": 9999, 186 | "shortName": "cropBottom" 187 | }, 188 | "Steppers": { 189 | "type": "Container", 190 | "X/Y/Crop/Rot Step": { 191 | "type": "Integer", 192 | "min": -9999, 193 | "max": 9999, 194 | "description": "Precision step", 195 | "default": 1 196 | }, 197 | "Zoom Step": { 198 | "type": "Float", 199 | "min": -5, 200 | "max": 5, 201 | "description": "Precision step", 202 | "default": 0.001 203 | } 204 | } 205 | } 206 | }, 207 | "scripts": [ 208 | "OBS.js" 209 | ], 210 | "commands": { 211 | "Raw Command": { 212 | "menu": "", 213 | "callback": "sendObsRawCommand", 214 | "parameters": { 215 | "data": { 216 | "type": "String" 217 | } 218 | } 219 | }, 220 | "GetVersion": { 221 | "menu": "General Requests", 222 | "callback": "GetVersion", 223 | "parameters": { 224 | "request Id": { 225 | "type": "String" 226 | } 227 | } 228 | }, 229 | "GetStats": { 230 | "menu": "General Requests", 231 | "callback": "GetStats", 232 | "parameters": { 233 | "request Id": { 234 | "type": "String" 235 | } 236 | } 237 | }, 238 | "BroadcastCustomEvent": { 239 | "menu": "General Requests", 240 | "callback": "BroadcastCustomEvent", 241 | "parameters": { 242 | "request Id": { 243 | "type": "String" 244 | } 245 | } 246 | }, 247 | "CallVendorRequest": { 248 | "menu": "General Requests", 249 | "callback": "CallVendorRequest", 250 | "parameters": { 251 | "request Id": { 252 | "type": "String" 253 | }, 254 | "vendorName": { 255 | "type": "String" 256 | }, 257 | "requestType": { 258 | "type": "String" 259 | }, 260 | "?requestData": { 261 | "type": "String" 262 | } 263 | } 264 | }, 265 | "GetHotkeyList": { 266 | "menu": "General Requests", 267 | "callback": "GetHotkeyList", 268 | "parameters": { 269 | "request Id": { 270 | "type": "String" 271 | } 272 | } 273 | }, 274 | "TriggerHotkeyByName": { 275 | "menu": "General Requests", 276 | "callback": "TriggerHotkeyByName", 277 | "parameters": { 278 | "request Id": { 279 | "type": "String" 280 | }, 281 | "hotkeyName": { 282 | "type": "String" 283 | } 284 | } 285 | }, 286 | "TriggerHotkeyByKeySequence": { 287 | "menu": "General Requests", 288 | "callback": "TriggerHotkeyByKeySequence", 289 | "parameters": { 290 | "request Id": { 291 | "type": "String" 292 | }, 293 | "?keyId": { 294 | "type": "String" 295 | }, 296 | "Shift": { 297 | "type": "Boolean" 298 | }, 299 | "Ctrl": { 300 | "type": "Boolean" 301 | }, 302 | "Alt": { 303 | "type": "Boolean" 304 | }, 305 | "Cmd/Win/Mac": { 306 | "type": "Boolean" 307 | } 308 | } 309 | }, 310 | "Sleep": { 311 | "menu": "General Requests", 312 | "callback": "Sleep", 313 | "parameters": { 314 | "request Id": { 315 | "type": "String" 316 | }, 317 | "sleepMillis": { 318 | "type": "Integer", 319 | "min": 0, 320 | "max": 50000 321 | }, 322 | "sleepFrames": { 323 | "type": "Integer", 324 | "min": 0, 325 | "max": 10000 326 | } 327 | } 328 | }, 329 | "GetPersistentData": { 330 | "menu": "Config Requests", 331 | "callback": "GetPersistentData", 332 | "parameters": { 333 | "request Id": { 334 | "type": "String" 335 | }, 336 | "realm": { 337 | "type": "String" 338 | }, 339 | "slotName": { 340 | "type": "String" 341 | } 342 | } 343 | }, 344 | "SetPersistentData": { 345 | "menu": "Config Requests", 346 | "callback": "SetPersistentData", 347 | "parameters": { 348 | "request Id": { 349 | "type": "String" 350 | }, 351 | "realm": { 352 | "type": "String" 353 | }, 354 | "slotName": { 355 | "type": "String" 356 | }, 357 | "slotValue": { 358 | "type": "String" 359 | } 360 | } 361 | }, 362 | "GetSceneCollectionList": { 363 | "menu": "Config Requests", 364 | "callback": "GetSceneCollectionList", 365 | "parameters": { 366 | "request Id": { 367 | "type": "String" 368 | } 369 | } 370 | }, 371 | "SetCurrentSceneCollection": { 372 | "menu": "Config Requests", 373 | "callback": "SetCurrentSceneCollection", 374 | "parameters": { 375 | "request Id": { 376 | "type": "String" 377 | }, 378 | "sceneCollectionName": { 379 | "type": "String" 380 | } 381 | } 382 | }, 383 | "CreateSceneCollection": { 384 | "menu": "Config Requests", 385 | "callback": "CreateSceneCollection", 386 | "parameters": { 387 | "request Id": { 388 | "type": "String" 389 | }, 390 | "sceneCollectionName": { 391 | "type": "String" 392 | } 393 | } 394 | }, 395 | "GetProfileList": { 396 | "menu": "Config Requests", 397 | "callback": "GetProfileList", 398 | "parameters": { 399 | "request Id": { 400 | "type": "String" 401 | } 402 | } 403 | }, 404 | "SetCurrentProfile": { 405 | "menu": "Config Requests", 406 | "callback": "SetCurrentProfile", 407 | "parameters": { 408 | "request Id": { 409 | "type": "String" 410 | }, 411 | "profileName": { 412 | "type": "String" 413 | } 414 | } 415 | }, 416 | "CreateProfile": { 417 | "menu": "Config Requests", 418 | "callback": "CreateProfile", 419 | "parameters": { 420 | "request Id": { 421 | "type": "String" 422 | }, 423 | "profileName": { 424 | "type": "String" 425 | } 426 | } 427 | }, 428 | "RemoveProfile": { 429 | "menu": "Config Requests", 430 | "callback": "RemoveProfile", 431 | "parameters": { 432 | "request Id": { 433 | "type": "String" 434 | }, 435 | "profileName": { 436 | "type": "String" 437 | } 438 | } 439 | }, 440 | "GetProfileParameter": { 441 | "menu": "Config Requests", 442 | "callback": "GetProfileParameter", 443 | "parameters": { 444 | "request Id": { 445 | "type": "String" 446 | }, 447 | "parameterCategory": { 448 | "type": "String" 449 | }, 450 | "parameterName": { 451 | "type": "String" 452 | } 453 | } 454 | }, 455 | "SetProfileParameter": { 456 | "menu": "Config Requests", 457 | "callback": "SetProfileParameter", 458 | "parameters": { 459 | "request Id": { 460 | "type": "String" 461 | }, 462 | "parameterCategory": { 463 | "type": "String" 464 | }, 465 | "parameterName": { 466 | "type": "String" 467 | }, 468 | "parameterValue": { 469 | "type": "String" 470 | } 471 | } 472 | }, 473 | "GetVideoSettings": { 474 | "menu": "Config Requests", 475 | "callback": "GetVideoSettings", 476 | "parameters": { 477 | "request Id": { 478 | "type": "String" 479 | } 480 | } 481 | }, 482 | "SetVideoSettings": { 483 | "menu": "Config Requests", 484 | "callback": "SetVideoSettings", 485 | "parameters": { 486 | "request Id": { 487 | "type": "String" 488 | }, 489 | "?fpsNumerator": { 490 | "type": "Integer", 491 | "min": 1 492 | }, 493 | "?fpsDenominator": { 494 | "type": "Integer", 495 | "min": 1 496 | }, 497 | "?baseWidth": { 498 | "type": "Integer", 499 | "min": 1, 500 | "max": 4096 501 | }, 502 | "?baseHeight": { 503 | "type": "Integer", 504 | "min": 1, 505 | "max": 4096 506 | }, 507 | "?outputWidth": { 508 | "type": "Integer", 509 | "min": 1, 510 | "max": 4096 511 | }, 512 | "?outputHeight": { 513 | "type": "Integer", 514 | "min": 1, 515 | "max": 4096 516 | } 517 | } 518 | }, 519 | "GetStreamServiceSettings": { 520 | "menu": "Config Requests", 521 | "callback": "GetStreamServiceSettings", 522 | "parameters": { 523 | "request Id": { 524 | "type": "String" 525 | } 526 | } 527 | }, 528 | "SetStreamServiceSettings": { 529 | "menu": "Config Requests", 530 | "callback": "SetStreamServiceSettings", 531 | "parameters": { 532 | "request Id": { 533 | "type": "String" 534 | }, 535 | "streamServiceType": { 536 | "type": "String" 537 | }, 538 | "streamServiceSettings": { 539 | "type": "String" 540 | } 541 | } 542 | }, 543 | "GetRecordDirectory": { 544 | "menu": "Config Requests", 545 | "callback": "GetRecordDirectory", 546 | "parameters": { 547 | "request Id": { 548 | "type": "String" 549 | } 550 | } 551 | }, 552 | "GetSourceActive": { 553 | "menu": "Sources Requests", 554 | "callback": "GetSourceActive", 555 | "parameters": { 556 | "request Id": { 557 | "type": "String" 558 | }, 559 | "sourceName": { 560 | "type": "String" 561 | } 562 | } 563 | }, 564 | "GetSourceScreenshot": { 565 | "menu": "Sources Requests", 566 | "callback": "GetSourceScreenshot", 567 | "parameters": { 568 | "request Id": { 569 | "type": "String" 570 | }, 571 | "sourceName": { 572 | "type": "String" 573 | }, 574 | "imageFormat": { 575 | "type": "String" 576 | }, 577 | "?imageWidth": { 578 | "type": "Integer", 579 | "min": 8, 580 | "max": 4096 581 | }, 582 | "?imageHeight": { 583 | "type": "Integer", 584 | "min": 8, 585 | "max": 4096 586 | }, 587 | "?imageCompressionQuality": { 588 | "type": "Integer", 589 | "min": -1, 590 | "max": 100, 591 | "default": -1 592 | } 593 | } 594 | }, 595 | "SaveSourceScreenshot": { 596 | "menu": "Sources Requests", 597 | "callback": "SaveSourceScreenshot", 598 | "parameters": { 599 | "request Id": { 600 | "type": "String" 601 | }, 602 | "sourceName": { 603 | "type": "String" 604 | }, 605 | "imageFilePath": { 606 | "type": "String" 607 | }, 608 | "imageFormat": { 609 | "type": "Enum", 610 | "options": { 611 | "bmp": "bmp", 612 | "jpeg": "jpeg", 613 | "jpg": "jpg", 614 | "pbm": "pbm", 615 | "pgm": "pgm", 616 | "png": "png", 617 | "ppm": "ppm", 618 | "xbm": "xbm", 619 | "xpm": "xpm" 620 | } 621 | }, 622 | "?imageWidth": { 623 | "type": "Integer", 624 | "min": 8, 625 | "max": 4096 626 | }, 627 | "?imageHeight": { 628 | "type": "Integer", 629 | "min": 8, 630 | "max": 4096 631 | }, 632 | "?imageCompressionQuality": { 633 | "type": "Integer", 634 | "min": -1, 635 | "max": 100, 636 | "default": -1 637 | } 638 | } 639 | }, 640 | "GetSceneList": { 641 | "menu": "Scenes Requests", 642 | "callback": "GetSceneList", 643 | "parameters": { 644 | "request Id": { 645 | "type": "String" 646 | } 647 | } 648 | }, 649 | "GetGroupList": { 650 | "menu": "Scenes Requests", 651 | "callback": "GetGroupList", 652 | "parameters": { 653 | "request Id": { 654 | "type": "String" 655 | } 656 | } 657 | }, 658 | "GetCurrentProgramScene": { 659 | "menu": "Scenes Requests", 660 | "callback": "GetCurrentProgramScene", 661 | "parameters": { 662 | "request Id": { 663 | "type": "String" 664 | } 665 | } 666 | }, 667 | "SetCurrentProgramScene": { 668 | "menu": "Scenes Requests", 669 | "callback": "SetCurrentProgramScene", 670 | "parameters": { 671 | "request Id": { 672 | "type": "String" 673 | }, 674 | "sceneName": { 675 | "type": "String" 676 | } 677 | } 678 | }, 679 | "GetCurrentPreviewScene": { 680 | "menu": "Scenes Requests", 681 | "callback": "GetCurrentPreviewScene", 682 | "parameters": { 683 | "request Id": { 684 | "type": "String" 685 | } 686 | } 687 | }, 688 | "SetCurrentPreviewScene": { 689 | "menu": "Scenes Requests", 690 | "callback": "SetCurrentPreviewScene", 691 | "parameters": { 692 | "request Id": { 693 | "type": "String" 694 | }, 695 | "sceneName": { 696 | "type": "String" 697 | } 698 | } 699 | }, 700 | "CreateScene": { 701 | "menu": "Scenes Requests", 702 | "callback": "CreateScene", 703 | "parameters": { 704 | "request Id": { 705 | "type": "String" 706 | }, 707 | "sceneName": { 708 | "type": "String" 709 | } 710 | } 711 | }, 712 | "RemoveScene": { 713 | "menu": "Scenes Requests", 714 | "callback": "RemoveScene", 715 | "parameters": { 716 | "request Id": { 717 | "type": "String" 718 | }, 719 | "sceneName": { 720 | "type": "String" 721 | } 722 | } 723 | }, 724 | "SetSceneName": { 725 | "menu": "Scenes Requests", 726 | "callback": "SetSceneName", 727 | "parameters": { 728 | "request Id": { 729 | "type": "String" 730 | }, 731 | "sceneName": { 732 | "type": "String" 733 | }, 734 | "newSceneName": { 735 | "type": "String" 736 | } 737 | } 738 | }, 739 | "GetSceneSceneTransitionOverride": { 740 | "menu": "Scenes Requests", 741 | "callback": "GetSceneSceneTransitionOverride", 742 | "parameters": { 743 | "request Id": { 744 | "type": "String" 745 | }, 746 | "sceneName": { 747 | "type": "String" 748 | } 749 | } 750 | }, 751 | "SetSceneSceneTransitionOverride": { 752 | "menu": "Scenes Requests", 753 | "callback": "SetSceneSceneTransitionOverride", 754 | "parameters": { 755 | "request Id": { 756 | "type": "String" 757 | }, 758 | "sceneName": { 759 | "type": "String" 760 | }, 761 | "?transitionName": { 762 | "type": "String" 763 | }, 764 | "?transitionDuration": { 765 | "type": "Integer", 766 | "min": 50, 767 | "max": 20000 768 | } 769 | } 770 | }, 771 | "GetInputList": { 772 | "menu": "Inputs Requests", 773 | "callback": "GetInputList", 774 | "parameters": { 775 | "request Id": { 776 | "type": "String" 777 | }, 778 | "?inputKind": { 779 | "type": "String" 780 | } 781 | } 782 | }, 783 | "GetInputKindList": { 784 | "menu": "Inputs Requests", 785 | "callback": "GetInputKindList", 786 | "parameters": { 787 | "request Id": { 788 | "type": "String" 789 | }, 790 | "?unversioned": { 791 | "type": "Boolean" 792 | } 793 | } 794 | }, 795 | "GetSpecialInputs": { 796 | "menu": "Inputs Requests", 797 | "callback": "GetSpecialInputs", 798 | "parameters": { 799 | "request Id": { 800 | "type": "String" 801 | } 802 | } 803 | }, 804 | "CreateInput": { 805 | "menu": "Inputs Requests", 806 | "callback": "CreateInput", 807 | "parameters": { 808 | "request Id": { 809 | "type": "String" 810 | }, 811 | "sceneName": { 812 | "type": "String" 813 | }, 814 | "inputName": { 815 | "type": "String" 816 | }, 817 | "inputKind": { 818 | "type": "String" 819 | }, 820 | "?inputSettings": { 821 | "type": "String" 822 | }, 823 | "?sceneItemEnabled": { 824 | "type": "Boolean" 825 | } 826 | } 827 | }, 828 | "RemoveInput": { 829 | "menu": "Inputs Requests", 830 | "callback": "RemoveInput", 831 | "parameters": { 832 | "request Id": { 833 | "type": "String" 834 | }, 835 | "inputName": { 836 | "type": "String" 837 | } 838 | } 839 | }, 840 | "SetInputName": { 841 | "menu": "Inputs Requests", 842 | "callback": "SetInputName", 843 | "parameters": { 844 | "request Id": { 845 | "type": "String" 846 | }, 847 | "inputName": { 848 | "type": "String" 849 | }, 850 | "newInputName": { 851 | "type": "String" 852 | } 853 | } 854 | }, 855 | "GetInputDefaultSettings": { 856 | "menu": "Inputs Requests", 857 | "callback": "GetInputDefaultSettings", 858 | "parameters": { 859 | "request Id": { 860 | "type": "String" 861 | }, 862 | "inputKind": { 863 | "type": "String" 864 | } 865 | } 866 | }, 867 | "GetInputSettings": { 868 | "menu": "Inputs Requests", 869 | "callback": "GetInputSettings", 870 | "parameters": { 871 | "request Id": { 872 | "type": "String" 873 | }, 874 | "inputName": { 875 | "type": "String" 876 | } 877 | } 878 | }, 879 | "SetInputSettings": { 880 | "menu": "Inputs Requests", 881 | "callback": "SetInputSettings", 882 | "parameters": { 883 | "request Id": { 884 | "type": "String" 885 | }, 886 | "inputName": { 887 | "type": "String" 888 | }, 889 | "inputSettings": { 890 | "type": "String" 891 | }, 892 | "?overlay": { 893 | "type": "Boolean", 894 | "default": true 895 | } 896 | } 897 | }, 898 | "GetInputMute": { 899 | "menu": "Inputs Requests", 900 | "callback": "GetInputMute", 901 | "parameters": { 902 | "request Id": { 903 | "type": "String" 904 | }, 905 | "inputName": { 906 | "type": "String" 907 | } 908 | } 909 | }, 910 | "SetInputMute": { 911 | "menu": "Inputs Requests", 912 | "callback": "SetInputMute", 913 | "parameters": { 914 | "request Id": { 915 | "type": "String" 916 | }, 917 | "inputName": { 918 | "type": "String" 919 | }, 920 | "inputMuted": { 921 | "type": "Boolean" 922 | } 923 | } 924 | }, 925 | "ToggleInputMute": { 926 | "menu": "Inputs Requests", 927 | "callback": "ToggleInputMute", 928 | "parameters": { 929 | "request Id": { 930 | "type": "String" 931 | }, 932 | "inputName": { 933 | "type": "String" 934 | } 935 | } 936 | }, 937 | "GetInputVolume": { 938 | "menu": "Inputs Requests", 939 | "callback": "GetInputVolume", 940 | "parameters": { 941 | "request Id": { 942 | "type": "String" 943 | }, 944 | "inputName": { 945 | "type": "String" 946 | } 947 | } 948 | }, 949 | "SetInputVolume": { 950 | "menu": "Inputs Requests", 951 | "callback": "SetInputVolume", 952 | "parameters": { 953 | "request Id": { 954 | "type": "String" 955 | }, 956 | "inputName": { 957 | "type": "String" 958 | }, 959 | "Db settings ?": { 960 | "type": "Boolean" 961 | }, 962 | "?inputVolumeMul": { 963 | "type": "Float", 964 | "min": 0, 965 | "max": 20, 966 | "dependency": { 967 | "source": "Db settings ?", 968 | "value": "Boolean", 969 | "check": "equals", 970 | "action": "show" 971 | } 972 | }, 973 | "?inputVolumeDb": { 974 | "type": "Float", 975 | "min": -100, 976 | "max": 26, 977 | "dependency": { 978 | "source": "Db settings ?", 979 | "value": "Boolean", 980 | "check": "notEquals", 981 | "action": "show" 982 | } 983 | } 984 | } 985 | }, 986 | "GetInputAudioBalance": { 987 | "menu": "Inputs Requests", 988 | "callback": "GetInputAudioBalance", 989 | "parameters": { 990 | "request Id": { 991 | "type": "String" 992 | }, 993 | "inputName": { 994 | "type": "String" 995 | } 996 | } 997 | }, 998 | "SetInputAudioBalance": { 999 | "menu": "Inputs Requests", 1000 | "callback": "SetInputAudioBalance", 1001 | "parameters": { 1002 | "request Id": { 1003 | "type": "String" 1004 | }, 1005 | "inputName": { 1006 | "type": "String" 1007 | }, 1008 | "inputAudioBalance": { 1009 | "type": "Float", 1010 | "min": 0, 1011 | "max": 1 1012 | } 1013 | } 1014 | }, 1015 | "GetInputAudioSyncOffset": { 1016 | "menu": "Inputs Requests", 1017 | "callback": "GetInputAudioSyncOffset", 1018 | "parameters": { 1019 | "request Id": { 1020 | "type": "String" 1021 | }, 1022 | "inputName": { 1023 | "type": "String" 1024 | } 1025 | } 1026 | }, 1027 | "SetInputAudioSyncOffset": { 1028 | "menu": "Inputs Requests", 1029 | "callback": "SetInputAudioSyncOffset", 1030 | "parameters": { 1031 | "request Id": { 1032 | "type": "String" 1033 | }, 1034 | "inputName": { 1035 | "type": "String" 1036 | }, 1037 | "inputAudioSyncOffset": { 1038 | "type": "Integer", 1039 | "min": -950, 1040 | "max": 20000 1041 | } 1042 | } 1043 | }, 1044 | "GetInputAudioMonitorType": { 1045 | "menu": "Inputs Requests", 1046 | "callback": "GetInputAudioMonitorType", 1047 | "parameters": { 1048 | "request Id": { 1049 | "type": "String" 1050 | }, 1051 | "inputName": { 1052 | "type": "String" 1053 | } 1054 | } 1055 | }, 1056 | "SetInputAudioMonitorType": { 1057 | "menu": "Inputs Requests", 1058 | "callback": "SetInputAudioMonitorType", 1059 | "parameters": { 1060 | "request Id": { 1061 | "type": "String" 1062 | }, 1063 | "inputName": { 1064 | "type": "String" 1065 | }, 1066 | "monitorType": { 1067 | "type": "Enum", 1068 | "options": { 1069 | "OBS_MONITORING_TYPE_NONE": "OBS_MONITORING_TYPE_NONE", 1070 | "OBS_MONITORING_TYPE_MONITOR_ONLY": "OBS_MONITORING_TYPE_MONITOR_ONLY", 1071 | "OBS_MONITORING_TYPE_MONITOR_AND_OUTPUT": "OBS_MONITORING_TYPE_MONITOR_AND_OUTPUT" 1072 | } 1073 | } 1074 | } 1075 | }, 1076 | "GetInputAudioTracks": { 1077 | "menu": "Inputs Requests", 1078 | "callback": "GetInputAudioTracks", 1079 | "parameters": { 1080 | "request Id": { 1081 | "type": "String" 1082 | }, 1083 | "inputName": { 1084 | "type": "String" 1085 | } 1086 | } 1087 | }, 1088 | "SetInputAudioTracks": { 1089 | "menu": "Inputs Requests", 1090 | "callback": "SetInputAudioTracks", 1091 | "parameters": { 1092 | "request Id": { 1093 | "type": "String" 1094 | }, 1095 | "inputName": { 1096 | "type": "String" 1097 | }, 1098 | "inputAudioTracks": { 1099 | "type": "String" 1100 | } 1101 | } 1102 | }, 1103 | "GetInputPropertiesListPropertyItems": { 1104 | "menu": "Inputs Requests", 1105 | "callback": "GetInputPropertiesListPropertyItems", 1106 | "parameters": { 1107 | "request Id": { 1108 | "type": "String" 1109 | }, 1110 | "inputName": { 1111 | "type": "String" 1112 | }, 1113 | "propertyName": { 1114 | "type": "String" 1115 | } 1116 | } 1117 | }, 1118 | "PressInputPropertiesButton": { 1119 | "menu": "Inputs Requests", 1120 | "callback": "PressInputPropertiesButton", 1121 | "parameters": { 1122 | "request Id": { 1123 | "type": "String" 1124 | }, 1125 | "inputName": { 1126 | "type": "String" 1127 | }, 1128 | "propertyName": { 1129 | "type": "String" 1130 | } 1131 | } 1132 | }, 1133 | "GetTransitionKindList": { 1134 | "menu": "Transitions Requests", 1135 | "callback": "GetTransitionKindList", 1136 | "parameters": { 1137 | "request Id": { 1138 | "type": "String" 1139 | }, 1140 | "transitionKinds": { 1141 | "type": "String" 1142 | } 1143 | } 1144 | }, 1145 | "GetSceneTransitionList": { 1146 | "menu": "Transitions Requests", 1147 | "callback": "GetSceneTransitionList", 1148 | "parameters": { 1149 | "request Id": { 1150 | "type": "String" 1151 | }, 1152 | "currentSceneTransitionName": { 1153 | "type": "String" 1154 | }, 1155 | "currentSceneTransitionKind": { 1156 | "type": "String" 1157 | }, 1158 | "transitions": { 1159 | "type": "String" 1160 | } 1161 | } 1162 | }, 1163 | "GetCurrentSceneTransition": { 1164 | "menu": "Transitions Requests", 1165 | "callback": "GetCurrentSceneTransition", 1166 | "parameters": { 1167 | "request Id": { 1168 | "type": "String" 1169 | }, 1170 | "transitionName": { 1171 | "type": "String" 1172 | }, 1173 | "transitionKind": { 1174 | "type": "String" 1175 | }, 1176 | "transitionFixed": { 1177 | "type": "Boolean" 1178 | }, 1179 | "transitionDuration (ms)": { 1180 | "type": "Integer" 1181 | }, 1182 | "transitionConfigurable": { 1183 | "type": "Boolean" 1184 | }, 1185 | "transitionSettings": { 1186 | "type": "String" 1187 | } 1188 | } 1189 | }, 1190 | "SetCurrentSceneTransition": { 1191 | "menu": "Transitions Requests", 1192 | "callback": "SetCurrentSceneTransition", 1193 | "parameters": { 1194 | "request Id": { 1195 | "type": "String" 1196 | }, 1197 | "transitionName": { 1198 | "type": "String" 1199 | } 1200 | } 1201 | }, 1202 | "SetCurrentSceneTransitionDuration": { 1203 | "menu": "Transitions Requests", 1204 | "callback": "SetCurrentSceneTransitionDuration", 1205 | "parameters": { 1206 | "request Id": { 1207 | "type": "String" 1208 | }, 1209 | "transitionDuration (ms)": { 1210 | "type": "Integer", 1211 | "min": 50, 1212 | "max": 20000 1213 | } 1214 | } 1215 | }, 1216 | "SetCurrentSceneTransitionSettings": { 1217 | "menu": "Transitions Requests", 1218 | "callback": "SetCurrentSceneTransitionSettings", 1219 | "parameters": { 1220 | "request Id": { 1221 | "type": "String" 1222 | }, 1223 | "transitionSettings": { 1224 | "type": "String" 1225 | }, 1226 | "?overlay": { 1227 | "type": "Boolean", 1228 | "default": true 1229 | } 1230 | } 1231 | }, 1232 | "GetCurrentSceneTransitionCursor": { 1233 | "menu": "Transitions Requests", 1234 | "callback": "GetCurrentSceneTransitionCursor", 1235 | "parameters": { 1236 | "request Id": { 1237 | "type": "String" 1238 | }, 1239 | "transitionCursor": { 1240 | "type": "Float", 1241 | "min": 0.0, 1242 | "max": 1.0 1243 | } 1244 | } 1245 | }, 1246 | "TriggerStudioModeTransition": { 1247 | "menu": "Transitions Requests", 1248 | "callback": "TriggerStudioModeTransition", 1249 | "parameters": { 1250 | "request Id": { 1251 | "type": "String" 1252 | } 1253 | } 1254 | }, 1255 | "SetTBarPosition": { 1256 | "menu": "Transitions Requests", 1257 | "callback": "SetTBarPosition", 1258 | "parameters": { 1259 | "request Id": { 1260 | "type": "String" 1261 | }, 1262 | "position": { 1263 | "type": "Float", 1264 | "min": 0.0, 1265 | "max": 1.0 1266 | }, 1267 | "?release": { 1268 | "type": "Boolean", 1269 | "default": true 1270 | } 1271 | } 1272 | }, 1273 | "GetSourceFilterList": { 1274 | "menu": "Scene Items Requests", 1275 | "callback": "GetSourceFilterList", 1276 | "parameters": { 1277 | "request Id": { 1278 | "type": "String" 1279 | }, 1280 | "sourceName": { 1281 | "type": "String" 1282 | } 1283 | } 1284 | }, 1285 | "GetSourceFilterDefaultSettings": { 1286 | "menu": "Filters Requests", 1287 | "callback": "GetSourceFilterDefaultSettings", 1288 | "parameters": { 1289 | "request Id": { 1290 | "type": "String" 1291 | }, 1292 | "filterKind": { 1293 | "type": "String" 1294 | } 1295 | } 1296 | }, 1297 | "CreateSourceFilter": { 1298 | "menu": "Filters Requests", 1299 | "callback": "CreateSourceFilter", 1300 | "parameters": { 1301 | "request Id": { 1302 | "type": "String" 1303 | }, 1304 | "sourceName": { 1305 | "type": "String" 1306 | }, 1307 | "filterName": { 1308 | "type": "String" 1309 | }, 1310 | "filterKind": { 1311 | "type": "String" 1312 | }, 1313 | "?filterSettings": { 1314 | "type": "String" 1315 | } 1316 | } 1317 | }, 1318 | "RemoveSourceFilter": { 1319 | "menu": "Filters Requests", 1320 | "callback": "RemoveSourceFilter", 1321 | "parameters": { 1322 | "request Id": { 1323 | "type": "String" 1324 | }, 1325 | "sourceName": { 1326 | "type": "String" 1327 | }, 1328 | "filterName": { 1329 | "type": "String" 1330 | } 1331 | } 1332 | }, 1333 | "SetSourceFilterName": { 1334 | "menu": "Filters Requests", 1335 | "callback": "SetSourceFilterName", 1336 | "parameters": { 1337 | "request Id": { 1338 | "type": "String" 1339 | }, 1340 | "sourceName": { 1341 | "type": "String" 1342 | }, 1343 | "filterName": { 1344 | "type": "String" 1345 | }, 1346 | "newFilterName": { 1347 | "type": "String" 1348 | } 1349 | } 1350 | }, 1351 | "GetSourceFilter": { 1352 | "menu": "Filters Requests", 1353 | "callback": "GetSourceFilter", 1354 | "parameters": { 1355 | "request Id": { 1356 | "type": "String" 1357 | }, 1358 | "sourceName": { 1359 | "type": "String" 1360 | }, 1361 | "newFilterName": { 1362 | "type": "String" 1363 | } 1364 | } 1365 | }, 1366 | "SetSourceFilterIndex": { 1367 | "menu": "Filters Requests", 1368 | "callback": "SetSourceFilterIndex", 1369 | "parameters": { 1370 | "request Id": { 1371 | "type": "String" 1372 | }, 1373 | "sourceName": { 1374 | "type": "String" 1375 | }, 1376 | "filterName": { 1377 | "type": "String" 1378 | }, 1379 | "filterIndex": { 1380 | "type": "Integer", 1381 | "min": 0 1382 | } 1383 | } 1384 | }, 1385 | "SetSourceFilterSettings": { 1386 | "menu": "Filters Requests", 1387 | "callback": "SetSourceFilterSettings", 1388 | "parameters": { 1389 | "request Id": { 1390 | "type": "String" 1391 | }, 1392 | "sourceName": { 1393 | "type": "String" 1394 | }, 1395 | "filterName": { 1396 | "type": "String" 1397 | }, 1398 | "filterSettings": { 1399 | "type": "String" 1400 | }, 1401 | "overlay": { 1402 | "type": "Boolean", 1403 | "default": true 1404 | } 1405 | } 1406 | }, 1407 | "SetSourceFilterColorCorrectionSettings": { 1408 | "menu": "Filters Requests", 1409 | "callback": "SetSourceFilterColorCorrectionSettings", 1410 | "parameters": { 1411 | "request Id": { 1412 | "type": "String" 1413 | }, 1414 | "sourceName": { 1415 | "type": "String" 1416 | }, 1417 | "filterName": { 1418 | "type": "String" 1419 | }, 1420 | "Gamma": { 1421 | "type": "Float", 1422 | "min": -3, 1423 | "max": 3, 1424 | "default": 0 1425 | }, 1426 | "Contrast": { 1427 | "type": "Float", 1428 | "min": -4, 1429 | "max": 4, 1430 | "default": 0 1431 | }, 1432 | "Brightness": { 1433 | "type": "Float", 1434 | "min": -1, 1435 | "max": 1, 1436 | "default": 0 1437 | }, 1438 | "Saturation": { 1439 | "type": "Float", 1440 | "min": -1, 1441 | "max": 5, 1442 | "default": 0 1443 | }, 1444 | "Hue Shift": { 1445 | "type": "Float", 1446 | "min": -180, 1447 | "max": 180, 1448 | "default": 0 1449 | }, 1450 | "Opacity": { 1451 | "type": "Float", 1452 | "min": 0, 1453 | "max": 1, 1454 | "default": 1 1455 | }, 1456 | "Color Multiply": { 1457 | "type": "Color", 1458 | "default": [ 1459 | 1, 1460 | 1, 1461 | 1, 1462 | 1 1463 | ] 1464 | }, 1465 | "Color Add": { 1466 | "type": "Color", 1467 | "default": [ 1468 | 0, 1469 | 0, 1470 | 0, 1471 | 1 1472 | ] 1473 | }, 1474 | "overlay": { 1475 | "type": "Boolean", 1476 | "default": true 1477 | } 1478 | } 1479 | }, 1480 | "SetSourceFilterEnabled": { 1481 | "menu": "Filters Requests", 1482 | "callback": "SetSourceFilterEnabled", 1483 | "parameters": { 1484 | "request Id": { 1485 | "type": "String" 1486 | }, 1487 | "sourceName": { 1488 | "type": "String" 1489 | }, 1490 | "filterName": { 1491 | "type": "String" 1492 | }, 1493 | "filterEnabled": { 1494 | "type": "Boolean" 1495 | } 1496 | } 1497 | }, 1498 | "GetSceneItemList": { 1499 | "menu": "Scene Items Requests", 1500 | "callback": "GetSceneItemList", 1501 | "parameters": { 1502 | "request Id": { 1503 | "type": "String" 1504 | }, 1505 | "sceneName": { 1506 | "type": "String" 1507 | } 1508 | } 1509 | }, 1510 | "GetGroupSceneItemList": { 1511 | "menu": "Scene Items Requests", 1512 | "callback": "GetGroupSceneItemList", 1513 | "parameters": { 1514 | "request Id": { 1515 | "type": "String" 1516 | }, 1517 | "sceneName": { 1518 | "type": "String" 1519 | } 1520 | } 1521 | }, 1522 | "GetSceneItemId": { 1523 | "menu": "Scene Items Requests", 1524 | "callback": "GetSceneItemId", 1525 | "parameters": { 1526 | "request Id": { 1527 | "type": "String" 1528 | }, 1529 | "sceneName": { 1530 | "type": "String" 1531 | }, 1532 | "sourceName": { 1533 | "type": "String" 1534 | }, 1535 | "?searchOffset": { 1536 | "type": "Integer", 1537 | "min": -1, 1538 | "default": 0 1539 | } 1540 | } 1541 | }, 1542 | "CreateSceneItem": { 1543 | "menu": "Scene Items Requests", 1544 | "callback": "CreateSceneItem", 1545 | "parameters": { 1546 | "request Id": { 1547 | "type": "String" 1548 | }, 1549 | "sceneName": { 1550 | "type": "String" 1551 | }, 1552 | "sourceName": { 1553 | "type": "String" 1554 | }, 1555 | "?sceneItemEnabled": { 1556 | "type": "Boolean", 1557 | "default": true 1558 | } 1559 | } 1560 | }, 1561 | "RemoveSceneItem": { 1562 | "menu": "Scene Items Requests", 1563 | "callback": "RemoveSceneItem", 1564 | "parameters": { 1565 | "request Id": { 1566 | "type": "String" 1567 | }, 1568 | "sceneName": { 1569 | "type": "String" 1570 | }, 1571 | "sceneItemId": { 1572 | "type": "Integer", 1573 | "min": 0 1574 | } 1575 | } 1576 | }, 1577 | "DuplicateSceneItem": { 1578 | "menu": "Scene Items Requests", 1579 | "callback": "DuplicateSceneItem", 1580 | "parameters": { 1581 | "request Id": { 1582 | "type": "String" 1583 | }, 1584 | "sceneName": { 1585 | "type": "String" 1586 | }, 1587 | "sceneId": { 1588 | "type": "Integer", 1589 | "min": 0 1590 | }, 1591 | "?destinationSceneName": { 1592 | "type": "String" 1593 | } 1594 | } 1595 | }, 1596 | "GetSceneItemTransform": { 1597 | "menu": "Scene Items Requests", 1598 | "callback": "GetSceneItemTransform", 1599 | "parameters": { 1600 | "request Id": { 1601 | "type": "String" 1602 | }, 1603 | "sceneName": { 1604 | "type": "String" 1605 | }, 1606 | "sceneItemId": { 1607 | "type": "Integer", 1608 | "min": 0 1609 | } 1610 | } 1611 | }, 1612 | "SetSceneItemTransform": { 1613 | "menu": "Scene Items Requests", 1614 | "callback": "SetSceneItemTransform", 1615 | "parameters": { 1616 | "request Id": { 1617 | "type": "String" 1618 | }, 1619 | "sceneName": { 1620 | "type": "String" 1621 | }, 1622 | "sceneItemId": { 1623 | "type": "Integer", 1624 | "min": 0 1625 | }, 1626 | "positionX status": { 1627 | "type": "Boolean" 1628 | }, 1629 | "positionX": { 1630 | "type": "Float", 1631 | "dependency": { 1632 | "source": "positionX status", 1633 | "value": "Boolean", 1634 | "check": "notEquals", 1635 | "action": "show" 1636 | } 1637 | }, 1638 | "positionY status": { 1639 | "type": "Boolean" 1640 | }, 1641 | "positionY": { 1642 | "type": "Float", 1643 | "dependency": { 1644 | "source": "positionY status", 1645 | "value": "Boolean", 1646 | "check": "notEquals", 1647 | "action": "show" 1648 | } 1649 | }, 1650 | "scaleX status": { 1651 | "type": "Boolean" 1652 | }, 1653 | "scaleX": { 1654 | "type": "Float", 1655 | "dependency": { 1656 | "source": "scaleX status", 1657 | "value": "Boolean", 1658 | "check": "notEquals", 1659 | "action": "show" 1660 | } 1661 | }, 1662 | "scaleY status": { 1663 | "type": "Boolean" 1664 | }, 1665 | "scaleY": { 1666 | "type": "Float", 1667 | "dependency": { 1668 | "source": "scaleY status", 1669 | "value": "Boolean", 1670 | "check": "notEquals", 1671 | "action": "show" 1672 | } 1673 | }, 1674 | "rotation status": { 1675 | "type": "Boolean" 1676 | }, 1677 | "rotation": { 1678 | "type": "Float", 1679 | "dependency": { 1680 | "source": "rotation status", 1681 | "value": "Boolean", 1682 | "check": "notEquals", 1683 | "action": "show" 1684 | } 1685 | }, 1686 | "cropBottom status": { 1687 | "type": "Boolean" 1688 | }, 1689 | "cropBottom": { 1690 | "type": "Float", 1691 | "dependency": { 1692 | "source": "cropBottom status", 1693 | "value": "Boolean", 1694 | "check": "notEquals", 1695 | "action": "show" 1696 | } 1697 | }, 1698 | "cropTop status": { 1699 | "type": "Boolean" 1700 | }, 1701 | "cropTop": { 1702 | "type": "Float", 1703 | "dependency": { 1704 | "source": "cropTop status", 1705 | "value": "Boolean", 1706 | "check": "notEquals", 1707 | "action": "show" 1708 | } 1709 | }, 1710 | "cropLeft status": { 1711 | "type": "Boolean" 1712 | }, 1713 | "cropLeft": { 1714 | "type": "Float", 1715 | "dependency": { 1716 | "source": "cropLeft status", 1717 | "value": "Boolean", 1718 | "check": "notEquals", 1719 | "action": "show" 1720 | } 1721 | }, 1722 | "cropRight status": { 1723 | "type": "Boolean" 1724 | }, 1725 | "cropRight": { 1726 | "type": "Float", 1727 | "dependency": { 1728 | "source": "cropRight status", 1729 | "value": "Boolean", 1730 | "check": "notEquals", 1731 | "action": "show" 1732 | } 1733 | } 1734 | } 1735 | }, 1736 | "GetSceneItemEnabled": { 1737 | "menu": "Scene Items Requests", 1738 | "callback": "GetSceneItemEnabled", 1739 | "parameters": { 1740 | "request Id": { 1741 | "type": "String" 1742 | }, 1743 | "sceneName": { 1744 | "type": "String" 1745 | }, 1746 | "sceneItemId": { 1747 | "type": "Integer", 1748 | "min": 0 1749 | } 1750 | } 1751 | }, 1752 | "SetSceneItemEnabled": { 1753 | "menu": "Scene Items Requests", 1754 | "callback": "SetSceneItemEnabled", 1755 | "parameters": { 1756 | "request Id": { 1757 | "type": "String" 1758 | }, 1759 | "sceneName": { 1760 | "type": "String" 1761 | }, 1762 | "sceneItemId": { 1763 | "type": "Integer", 1764 | "min": 0 1765 | }, 1766 | "sceneItemEnabled": { 1767 | "type": "Boolean" 1768 | } 1769 | } 1770 | }, 1771 | "GetSceneItemLocked": { 1772 | "menu": "Scene Items Requests", 1773 | "callback": "GetSceneItemLocked", 1774 | "parameters": { 1775 | "request Id": { 1776 | "type": "String" 1777 | }, 1778 | "sceneName": { 1779 | "type": "String" 1780 | }, 1781 | "sceneItemId": { 1782 | "type": "Integer", 1783 | "min": 0 1784 | } 1785 | } 1786 | }, 1787 | "SetSceneItemLocked": { 1788 | "menu": "Scene Items Requests", 1789 | "callback": "SetSceneItemLocked", 1790 | "parameters": { 1791 | "request Id": { 1792 | "type": "String" 1793 | }, 1794 | "sceneName": { 1795 | "type": "String" 1796 | }, 1797 | "sceneItemId": { 1798 | "type": "Integer", 1799 | "min": 0 1800 | }, 1801 | "sceneItemLocked": { 1802 | "type": "Boolean" 1803 | } 1804 | } 1805 | }, 1806 | "GetSceneItemIndex": { 1807 | "menu": "Scene Items Requests", 1808 | "callback": "GetSceneItemIndex", 1809 | "parameters": { 1810 | "request Id": { 1811 | "type": "String" 1812 | }, 1813 | "sceneName": { 1814 | "type": "String" 1815 | }, 1816 | "sceneItemId": { 1817 | "type": "Integer", 1818 | "min": 0 1819 | } 1820 | } 1821 | }, 1822 | "SetSceneItemIndex": { 1823 | "menu": "Scene Items Requests", 1824 | "callback": "SetSceneItemIndex", 1825 | "parameters": { 1826 | "request Id": { 1827 | "type": "String" 1828 | }, 1829 | "sceneName": { 1830 | "type": "String" 1831 | }, 1832 | "sceneItemId": { 1833 | "type": "Integer", 1834 | "min": 0 1835 | }, 1836 | "sceneItemIndex": { 1837 | "type": "Integer", 1838 | "min": 0 1839 | } 1840 | } 1841 | }, 1842 | "GetSceneItemBlendMode": { 1843 | "menu": "Scene Items Requests", 1844 | "callback": "GetSceneItemBlendMode", 1845 | "parameters": { 1846 | "request Id": { 1847 | "type": "String" 1848 | }, 1849 | "sceneName": { 1850 | "type": "String" 1851 | }, 1852 | "sceneItemId": { 1853 | "type": "Integer", 1854 | "min": 0 1855 | } 1856 | } 1857 | }, 1858 | "SetSceneItemBlendMode": { 1859 | "menu": "Scene Items Requests", 1860 | "callback": "SetSceneItemBlendMode", 1861 | "parameters": { 1862 | "request Id": { 1863 | "type": "String" 1864 | }, 1865 | "sceneName": { 1866 | "type": "String" 1867 | }, 1868 | "sceneItemId": { 1869 | "type": "Integer", 1870 | "min": 0 1871 | }, 1872 | "sceneItemBlendMode": { 1873 | "type": "Enum", 1874 | "options": { 1875 | "OBS_BLEND_NORMAL": "OBS_BLEND_NORMAL", 1876 | "OBS_BLEND_ADDITIVE": "OBS_BLEND_ADDITIVE", 1877 | "OBS_BLEND_SUBTRACT": "OBS_BLEND_SUBTRACT", 1878 | "OBS_BLEND_SCREEN": "OBS_BLEND_SCREEN", 1879 | "OBS_BLEND_MULTIPLY": "OBS_BLEND_MULTIPLY", 1880 | "OBS_BLEND_LIGHTEN": "OBS_BLEND_LIGHTEN", 1881 | "OBS_BLEND_DARKEN": "OBS_BLEND_DARKEN" 1882 | } 1883 | } 1884 | } 1885 | }, 1886 | "GetVirtualCamStatus": { 1887 | "menu": "Outputs Requests", 1888 | "callback": "GetVirtualCamStatus", 1889 | "parameters": { 1890 | "request Id": { 1891 | "type": "String" 1892 | } 1893 | } 1894 | }, 1895 | "ToggleVirtualCam": { 1896 | "menu": "Outputs Requests", 1897 | "callback": "ToggleVirtualCam", 1898 | "parameters": { 1899 | "request Id": { 1900 | "type": "String" 1901 | } 1902 | } 1903 | }, 1904 | "StartVirtualCam": { 1905 | "menu": "Outputs Requests", 1906 | "callback": "StartVirtualCam", 1907 | "parameters": { 1908 | "request Id": { 1909 | "type": "String" 1910 | } 1911 | } 1912 | }, 1913 | "StopVirtualCam": { 1914 | "menu": "Outputs Requests", 1915 | "callback": "StopVirtualCam", 1916 | "parameters": { 1917 | "request Id": { 1918 | "type": "String" 1919 | } 1920 | } 1921 | }, 1922 | "GetReplayBufferStatus": { 1923 | "menu": "Outputs Requests", 1924 | "callback": "GetReplayBufferStatus", 1925 | "parameters": { 1926 | "request Id": { 1927 | "type": "String" 1928 | } 1929 | } 1930 | }, 1931 | "ToggleReplayBuffer": { 1932 | "menu": "Outputs Requests", 1933 | "callback": "ToggleReplayBuffer", 1934 | "parameters": { 1935 | "request Id": { 1936 | "type": "String" 1937 | } 1938 | } 1939 | }, 1940 | "StartReplayBuffer": { 1941 | "menu": "Outputs Requests", 1942 | "callback": "StartReplayBuffer", 1943 | "parameters": { 1944 | "request Id": { 1945 | "type": "String" 1946 | } 1947 | } 1948 | }, 1949 | "StopReplayBuffer": { 1950 | "menu": "Outputs Requests", 1951 | "callback": "StopReplayBuffer", 1952 | "parameters": { 1953 | "request Id": { 1954 | "type": "String" 1955 | } 1956 | } 1957 | }, 1958 | "SaveReplayBuffer": { 1959 | "menu": "Outputs Requests", 1960 | "callback": "SaveReplayBuffer", 1961 | "parameters": { 1962 | "request Id": { 1963 | "type": "String" 1964 | } 1965 | } 1966 | }, 1967 | "GetLastReplayBufferReplay": { 1968 | "menu": "Outputs Requests", 1969 | "callback": "GetLastReplayBufferReplay", 1970 | "parameters": { 1971 | "request Id": { 1972 | "type": "String" 1973 | } 1974 | } 1975 | }, 1976 | "GetOutputList": { 1977 | "menu": "Outputs Requests", 1978 | "callback": "GetOutputList", 1979 | "parameters": { 1980 | "request Id": { 1981 | "type": "String" 1982 | } 1983 | } 1984 | }, 1985 | "GetOutputStatus": { 1986 | "menu": "Outputs Requests", 1987 | "callback": "GetOutputStatus", 1988 | "parameters": { 1989 | "request Id": { 1990 | "type": "String" 1991 | }, 1992 | "outputName": { 1993 | "type": "String" 1994 | } 1995 | } 1996 | }, 1997 | "ToggleOutput": { 1998 | "menu": "Outputs Requests", 1999 | "callback": "ToggleOutput", 2000 | "parameters": { 2001 | "request Id": { 2002 | "type": "String" 2003 | }, 2004 | "outputName": { 2005 | "type": "String" 2006 | } 2007 | } 2008 | }, 2009 | "StartOutput": { 2010 | "menu": "Outputs Requests", 2011 | "callback": "StartOutput", 2012 | "parameters": { 2013 | "request Id": { 2014 | "type": "String" 2015 | }, 2016 | "outputName": { 2017 | "type": "String" 2018 | } 2019 | } 2020 | }, 2021 | "StopOutput": { 2022 | "menu": "Outputs Requests", 2023 | "callback": "StopOutput", 2024 | "parameters": { 2025 | "request Id": { 2026 | "type": "String" 2027 | }, 2028 | "outputName": { 2029 | "type": "String" 2030 | } 2031 | } 2032 | }, 2033 | "GetOutputSettings": { 2034 | "menu": "Outputs Requests", 2035 | "callback": "GetOutputSettings", 2036 | "parameters": { 2037 | "request Id": { 2038 | "type": "String" 2039 | }, 2040 | "outputName": { 2041 | "type": "String" 2042 | } 2043 | } 2044 | }, 2045 | "SetOutputSettings": { 2046 | "menu": "Outputs Requests", 2047 | "callback": "SetOutputSettings", 2048 | "parameters": { 2049 | "request Id": { 2050 | "type": "String" 2051 | }, 2052 | "outputName": { 2053 | "type": "String" 2054 | }, 2055 | "outputSettings": { 2056 | "type": "String" 2057 | } 2058 | } 2059 | }, 2060 | "GetStreamStatus": { 2061 | "menu": "Stream Requests", 2062 | "callback": "GetStreamStatus", 2063 | "parameters": { 2064 | "request Id": { 2065 | "type": "String" 2066 | } 2067 | } 2068 | }, 2069 | "ToggleStream": { 2070 | "menu": "Stream Requests", 2071 | "callback": "ToggleStream", 2072 | "parameters": { 2073 | "request Id": { 2074 | "type": "String" 2075 | } 2076 | } 2077 | }, 2078 | "StartStream": { 2079 | "menu": "Stream Requests", 2080 | "callback": "StartStream", 2081 | "parameters": { 2082 | "request Id": { 2083 | "type": "String" 2084 | } 2085 | } 2086 | }, 2087 | "StopStream": { 2088 | "menu": "Stream Requests", 2089 | "callback": "StopStream", 2090 | "parameters": { 2091 | "request Id": { 2092 | "type": "String" 2093 | } 2094 | } 2095 | }, 2096 | "SendStreamCaption": { 2097 | "menu": "Stream Requests", 2098 | "callback": "SendStreamCaption", 2099 | "parameters": { 2100 | "request Id": { 2101 | "type": "String" 2102 | }, 2103 | "captionText": { 2104 | "type": "String" 2105 | } 2106 | } 2107 | }, 2108 | "GetRecordStatus": { 2109 | "menu": "Record Requests", 2110 | "callback": "GetRecordStatus", 2111 | "parameters": { 2112 | "request Id": { 2113 | "type": "String" 2114 | } 2115 | } 2116 | }, 2117 | "ToggleRecord": { 2118 | "menu": "Record Requests", 2119 | "callback": "ToggleRecord", 2120 | "parameters": { 2121 | "request Id": { 2122 | "type": "String" 2123 | } 2124 | } 2125 | }, 2126 | "StartRecord": { 2127 | "menu": "Record Requests", 2128 | "callback": "StartRecord", 2129 | "parameters": { 2130 | "request Id": { 2131 | "type": "String" 2132 | } 2133 | } 2134 | }, 2135 | "StopRecord": { 2136 | "menu": "Record Requests", 2137 | "callback": "StopRecord", 2138 | "parameters": { 2139 | "request Id": { 2140 | "type": "String" 2141 | } 2142 | } 2143 | }, 2144 | "ToggleRecordPause": { 2145 | "menu": "Record Requests", 2146 | "callback": "ToggleRecordPause", 2147 | "parameters": { 2148 | "request Id": { 2149 | "type": "String" 2150 | } 2151 | } 2152 | }, 2153 | "PauseRecord": { 2154 | "menu": "Record Requests", 2155 | "callback": "PauseRecord", 2156 | "parameters": { 2157 | "request Id": { 2158 | "type": "String" 2159 | } 2160 | } 2161 | }, 2162 | "ResumeRecord": { 2163 | "menu": "Record Requests", 2164 | "callback": "ResumeRecord", 2165 | "parameters": { 2166 | "request Id": { 2167 | "type": "String" 2168 | } 2169 | } 2170 | }, 2171 | "GetMediaInputStatus": { 2172 | "menu": "Media Inputs Requests", 2173 | "callback": "GetMediaInputStatus", 2174 | "parameters": { 2175 | "request Id": { 2176 | "type": "String" 2177 | }, 2178 | "inputName": { 2179 | "type": "String" 2180 | } 2181 | } 2182 | }, 2183 | "SetMediaInputCursor": { 2184 | "menu": "Media Inputs Requests", 2185 | "callback": "SetMediaInputCursor", 2186 | "parameters": { 2187 | "request Id": { 2188 | "type": "String" 2189 | }, 2190 | "inputName": { 2191 | "type": "String" 2192 | }, 2193 | "mediaCursor": { 2194 | "type": "Float", 2195 | "min": 0 2196 | } 2197 | } 2198 | }, 2199 | "OffsetMediaInputCursor": { 2200 | "menu": "Media Inputs Requests", 2201 | "callback": "OffsetMediaInputCursor", 2202 | "parameters": { 2203 | "request Id": { 2204 | "type": "String" 2205 | }, 2206 | "inputName": { 2207 | "type": "String" 2208 | }, 2209 | "mediaCursorOffset": { 2210 | "type": "Float" 2211 | } 2212 | } 2213 | }, 2214 | "TriggerMediaInputAction": { 2215 | "menu": "Media Inputs Requests", 2216 | "callback": "TriggerMediaInputAction", 2217 | "parameters": { 2218 | "request Id": { 2219 | "type": "String" 2220 | }, 2221 | "inputName": { 2222 | "type": "String" 2223 | }, 2224 | "mediaAction": { 2225 | "type": "Enum", 2226 | "options": { 2227 | "OBS_MEDIA_STATE_NONE": "OBS_MEDIA_STATE_NONE", 2228 | "OBS_MEDIA_STATE_PLAYING": "OBS_MEDIA_STATE_PLAYING", 2229 | "OBS_MEDIA_STATE_OPENING": "OBS_MEDIA_STATE_OPENING", 2230 | "OBS_MEDIA_STATE_BUFFERING": "OBS_MEDIA_STATE_BUFFERING", 2231 | "OBS_MEDIA_STATE_PAUSED": "OBS_MEDIA_STATE_PAUSED", 2232 | "OBS_MEDIA_STATE_STOPPED": "OBS_MEDIA_STATE_STOPPED", 2233 | "OBS_MEDIA_STATE_ENDED": "OBS_MEDIA_STATE_ENDED", 2234 | "OBS_MEDIA_STATE_ERROR": "OBS_MEDIA_STATE_ERROR" 2235 | } 2236 | } 2237 | } 2238 | }, 2239 | "GetStudioModeEnabled": { 2240 | "menu": "UI Requests", 2241 | "callback": "GetStudioModeEnabled", 2242 | "parameters": { 2243 | "request Id": { 2244 | "type": "String" 2245 | } 2246 | } 2247 | }, 2248 | "SetStudioModeEnabled": { 2249 | "menu": "UI Requests", 2250 | "callback": "SetStudioModeEnabled", 2251 | "parameters": { 2252 | "request Id": { 2253 | "type": "String" 2254 | }, 2255 | "studioModeEnabled": { 2256 | "type": "Boolean" 2257 | } 2258 | } 2259 | }, 2260 | "OpenInputPropertiesDialog": { 2261 | "menu": "UI Requests", 2262 | "callback": "OpenInputPropertiesDialog", 2263 | "parameters": { 2264 | "request Id": { 2265 | "type": "String" 2266 | }, 2267 | "inputName": { 2268 | "type": "String" 2269 | } 2270 | } 2271 | }, 2272 | "OpenInputFiltersDialog": { 2273 | "menu": "UI Requests", 2274 | "callback": "OpenInputFiltersDialog", 2275 | "parameters": { 2276 | "request Id": { 2277 | "type": "String" 2278 | }, 2279 | "inputName": { 2280 | "type": "String" 2281 | } 2282 | } 2283 | }, 2284 | "OpenInputInteractDialog": { 2285 | "menu": "UI Requests", 2286 | "callback": "OpenInputInteractDialog", 2287 | "parameters": { 2288 | "request Id": { 2289 | "type": "String" 2290 | }, 2291 | "inputName": { 2292 | "type": "String" 2293 | } 2294 | } 2295 | }, 2296 | "GetMonitorList": { 2297 | "menu": "UI Requests", 2298 | "callback": "GetMonitorList", 2299 | "parameters": { 2300 | "request Id": { 2301 | "type": "String" 2302 | } 2303 | } 2304 | }, 2305 | "OpenVideoMixProjector": { 2306 | "menu": "UI Requests", 2307 | "callback": "OpenVideoMixProjector", 2308 | "parameters": { 2309 | "request Id": { 2310 | "type": "String" 2311 | }, 2312 | "videoMixType": { 2313 | "type": "Enum", 2314 | "options": { 2315 | "OBS_WEBSOCKET_VIDEO_MIX_TYPE_PREVIEW": "OBS_WEBSOCKET_VIDEO_MIX_TYPE_PREVIEW", 2316 | "OBS_WEBSOCKET_VIDEO_MIX_TYPE_PROGRAM": "OBS_WEBSOCKET_VIDEO_MIX_TYPE_PROGRAM", 2317 | "OBS_WEBSOCKET_VIDEO_MIX_TYPE_MULTIVIEW": "OBS_WEBSOCKET_VIDEO_MIX_TYPE_MULTIVIEW" 2318 | } 2319 | }, 2320 | "?monitorIndex Id": { 2321 | "type": "Integer" 2322 | }, 2323 | "?projectorGeometry Id": { 2324 | "type": "String" 2325 | } 2326 | } 2327 | }, 2328 | "OpenSourceProjector": { 2329 | "menu": "UI Requests", 2330 | "callback": "OpenSourceProjector", 2331 | "parameters": { 2332 | "request Id": { 2333 | "type": "String" 2334 | }, 2335 | "sourceName": { 2336 | "type": "String" 2337 | }, 2338 | "?monitorIndex": { 2339 | "type": "Integer" 2340 | }, 2341 | "?projectorGeometry": { 2342 | "type": "String" 2343 | } 2344 | } 2345 | }, 2346 | "Active item switch": { 2347 | "menu": "Module Requests", 2348 | "callback": "SwitchActiveItem", 2349 | "parameters": { 2350 | "direction": { 2351 | "type": "Enum", 2352 | "options": { 2353 | "Previous": "Previous", 2354 | "Next": "Next" 2355 | } 2356 | } 2357 | } 2358 | }, 2359 | "Transform X": { 2360 | "menu": "Active Item", 2361 | "callback": "ActiveItemTransformX", 2362 | "parameters": { 2363 | "Negative": { 2364 | "type": "Boolean", 2365 | "default": false 2366 | } 2367 | } 2368 | }, 2369 | "Transform Delta": { 2370 | "menu": "Active Item", 2371 | "callback": "ActiveItemTransform", 2372 | "parameters": { 2373 | "Negative": { 2374 | "type": "Boolean", 2375 | "default": false 2376 | }, 2377 | "Position": { 2378 | "type": "Enum", 2379 | "options": { 2380 | "X": "positionX", 2381 | "Y": "positionY", 2382 | "Zoom": "Zoom", 2383 | "Rotation": "rotation", 2384 | "Crop_Left": "cropLeft", 2385 | "Crop_Right": "cropRight", 2386 | "Crop_Top": "cropTop", 2387 | "Crop_Bot": "cropBottom" 2388 | } 2389 | } 2390 | } 2391 | } 2392 | } 2393 | } 2394 | --------------------------------------------------------------------------------