diff --git a/electron.html b/electron.html
index cbaf502..e251005 100644
--- a/electron.html
+++ b/electron.html
@@ -277,7 +277,7 @@
-
+
✨ Great News! OBS v26.1.2
now supports VDO.Ninja without needing the Electron Capture app! 🥳
@@ -400,15 +400,16 @@ if ((location.hostname.toLowerCase() == "vdo.ninja") || (location.hostname.toLow
var checkVersion = setTimeout(function(){ // pre 1.5.2
compareVersions("0.0.0");
},500);
-
- const ipcRenderer = require('electron').ipcRenderer;
- console.log("ELECTRON DETECTED");
- ipcRenderer.on('appVersion', function(event, version) {
- clearTimeout(checkVersion);
- console.log("version: "+version);
- compareVersions(version);
- })
- ipcRenderer.send('getAppVersion');
+ try{
+ const ipcRenderer = require('electron').ipcRenderer;
+ console.log("ELECTRON DETECTED");
+ ipcRenderer.on('appVersion', function(event, version) {
+ clearTimeout(checkVersion);
+ console.log("version: "+version);
+ compareVersions(version);
+ })
+ ipcRenderer.send('getAppVersion');
+ } catch(e){}
}
}
} catch(e){console.error(e);}
@@ -549,6 +550,20 @@ function modURL(){
var url = document.getElementById('changeText').value;
if (url.startsWith("obs.ninja")){
url = "https://"+url;
+ } else if (url.startsWith("youtube.com")){
+ url = "https://"+url;
+ } else if (url.startsWith("twitch.tv")){
+ url = "https://"+url;
+ } else if (url.startsWith("vdo.ninja")){
+ url = "https://"+url;
+ } else if (url.startsWith("http://")){
+ // pass
+ } else if (url.startsWith("https://")){
+ // pass
+ } else if (url.startsWith("file:")){
+ // pass
+ } else {
+ url = "https://"+url;
}
console.log(url);
return url;
@@ -558,7 +573,7 @@ function gohere(){
localStorage.setItem('lastUrls', JSON.stringify(lastUrls));
var url = modURL();
if ((document.getElementById('changeText').value.includes("obs.ninja")) && (document.getElementById('changeText').value.includes("http")) && (document.getElementById('changeText').value.includes("&sink"))){
- alert("Notice: OBS.Ninja has been replaced by VDO.Ninja.\n\nPlease update your links accordingly for audio output to work correctly.");
+ alert("Notice: OBS.Ninja has been renamed to VDO.Ninja.\n\nPlease update your links accordingly for audio output to work correctly.");
} else if (!(document.getElementById('changeText').value.includes(window.location.hostname)) && (document.getElementById('changeText').value.includes("http")) && (document.getElementById('changeText').value.includes("&sink"))){
alert("Notice: The &sink command is domain specific.\nVisit https://YOURDOMAIN.com/electron instead.");
}
diff --git a/examples/chat.html b/examples/chat.html
new file mode 100644
index 0000000..3a5080b
--- /dev/null
+++ b/examples/chat.html
@@ -0,0 +1,159 @@
+
+
+
+
+
OBSN Chat Overlay
+
+
+
+
+
+
diff --git a/examples/draggable.html b/examples/draggable.html
new file mode 100644
index 0000000..d968048
--- /dev/null
+++ b/examples/draggable.html
@@ -0,0 +1,331 @@
+
+
Dual Input
+
+
+
+
+
+
+
Load URL You can drag and resize the generated windows; multiple can be created.
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/dual.html b/examples/dual.html
index d968048..8873eee 100644
--- a/examples/dual.html
+++ b/examples/dual.html
@@ -1,328 +1,73 @@
Dual Input
+
+
-
-
Load URL You can drag and resize the generated windows; multiple can be created.
-
-
+
+
+
+
+
+
VDO.Ninja MIDI Controller
+
+
+
+
+
+
+
VDO.Ninja MIDI test app
+
+
+
About
+
+ You can check the console debug logs for added details.
+
You can download a virtual MIDI I/O controller for windwos here:
+ http://www.tobias-erichsen.de/software/loopmidi.html
+
This code uses the WebMIDI.js library, referenced here:
+ https://github.com/djipco/webmidi
+
+ Below you can test the
MIDI hotkey commands for VDO.Ninja below:
+
+
+
+
Select the MIDI Output device:
+
+ MIDI Output device:
+
+
+
+
+
+
+
+
&midi=4 ; director
+
+
+
+
+
+
&midi=4 ; guest 1
+
+
+
+
+
+
&midi=4 ; guest 2
+
+
+
+
+
+
Sample Remote Director Control links
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/minidirector.css b/examples/minidirector.css
new file mode 100644
index 0000000..5821180
--- /dev/null
+++ b/examples/minidirector.css
@@ -0,0 +1,97 @@
+body{
+ zoom: 75%;
+}
+.hidden{
+ display:unset!important;
+ visibility: visible;
+ width:unset;
+ height:unset;
+ opacity: 1;
+}
+button[data-action-type='solo-chat'] {
+ display:none! important;
+}
+
+button[data-action-type='recorder-local'] {
+ display:none! important;
+}
+span[data-action-type='ordering'] {
+ display:none! important;
+}
+button[data-action-type='open-file-share'] {
+ display:none! important;
+}
+
+button[data-action-type='add-channel']{
+ display:none! important;
+}
+button[data-action-type='toggle-remote-speaker']{
+ display:none! important;
+}
+button[data-action-type='toggle-remote-display']{
+ display:none! important;
+}
+button[data-action-type='hide-guest']{
+ display:none! important;
+}
+button[data-action-type='create-timer']{
+ display:none! important;
+}
+button[data-action-type='change-url']{
+ display:none! important;
+}
+button[data-action-type='change-params']{
+ display:none! important;
+}
+span[data-action-type='change-quality']{
+ display:none! important;
+}
+
+span[data-action-type='sceneCluster2']{
+ display:none! important;
+}
+span[data-action-type='sceneCluster1']{
+ display:none! important;
+}
+
+.orderspan{
+ display:none! important;
+}
+#roomHeader{
+ display:none! important;
+}
+.directorContainer {
+ display:none!important;
+}
+
+.hideDropMenu{
+ display:none!important;
+}
+
+#header{
+ display:none!important;
+}
+body {
+ background-color: #000;
+}
+
+button[class="pull-right"]{
+ display:none! important;
+}
+
+div#guestFeeds {
+ padding: 1px!important;
+ margin: 1px!important;
+}
+div[class="vidcon directorMargins"] {
+ padding: 1px!important;
+ margin: 1px!important;
+ width: 260px;
+}
+button[data-action-type]{
+ margin: 1px!important;
+}
+
+
+
+
diff --git a/examples/obs_client.html b/examples/obs_client.html
new file mode 100644
index 0000000..b6d0e75
--- /dev/null
+++ b/examples/obs_client.html
@@ -0,0 +1,486 @@
+
+
+
+
+
+
+
+
OBS Controller Demo using VDO.NInja
+
+
+
+
OBS remote (client)
+
+
+
+
General
+
+ GetVersion
+ GetStats
+ GetVideoInfo
+
+
+
+
Output
+
+ ListOutputs
+
+
+
+
+
+
Source debug
+
+ GetMediaSourcesList
+ GetSourcesList
+ GetSourceActive
+ GetAudioActive
+
+
+
+
Audio
+
+ GetVolume
+
+ ToggleMute
+
+
+
+
Custom Commands
+
Create
+
+ A list of possible commands
available here:
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/obs_ws_dock.html b/examples/obs_ws_dock.html
new file mode 100644
index 0000000..172700c
--- /dev/null
+++ b/examples/obs_ws_dock.html
@@ -0,0 +1,388 @@
+
+
+
+
+
OBS Controller Demo using VDO.Ninja
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/p2p.html b/examples/p2p.html
new file mode 100644
index 0000000..36b6989
--- /dev/null
+++ b/examples/p2p.html
@@ -0,0 +1,69 @@
+
+
+
+ starting...
+
+
+
+
\ No newline at end of file
diff --git a/examples/sensors.html b/examples/sensors.html
new file mode 100644
index 0000000..9265939
--- /dev/null
+++ b/examples/sensors.html
@@ -0,0 +1,280 @@
+
+
Sensor and video stream access example
+
+
+
+
+
+
+
+
FOA-Horizontal
+
+
FOA-Vertical
+
+
Draw Delay
+
+Add &sensor to the push link to send data; see:
https://docs.vdo.ninja/source-settings/sensor
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/twitch.html b/examples/twitch.html
new file mode 100644
index 0000000..17ea7fe
--- /dev/null
+++ b/examples/twitch.html
@@ -0,0 +1,111 @@
+
+
Twitch + Video
+
+
+
+
+
+
+
+
+
+
+
+
+
+ START
+
+
+
+
\ No newline at end of file
diff --git a/iframe.html b/iframe.html
index 0881ae3..28df0bd 100644
--- a/iframe.html
+++ b/iframe.html
@@ -38,9 +38,7 @@ function loadIframe(){ // this is pretty important if you want to avoid camera
var iframe = document.createElement("iframe");
var iframeContainer = document.createElement("div");
var iframesrc = document.getElementById("viewlink").value;
- iframe.allow="autoplay;camera;microphone";
- iframe.allowtransparency="true";
- iframe.allowfullscreen ="true";
+ iframe.allow = "autoplay;camera;microphone;fullscreen;picture-in-picture;";
if (iframesrc==""){
iframesrc="./";
@@ -163,8 +161,21 @@ function loadIframe(){ // this is pretty important if you want to avoid camera
iframeContainer.appendChild(button);
var button = document.createElement("button");
- button.innerHTML = "Request Stats";
- button.onclick = function(){iframe.contentWindow.postMessage({"getStats":true}, '*');};
+ button.innerHTML = "Pan Left";
+ button.title = "Requires &panning to be added to the view link";
+ button.onclick = function(){iframe.contentWindow.postMessage({"panning":0}, '*');};
+ iframeContainer.appendChild(button);
+
+ var button = document.createElement("button");
+ button.innerHTML = "Pan right";
+ button.title = "Requires &panning to be added to the view link";
+ button.onclick = function(){iframe.contentWindow.postMessage({"panning":180}, '*');};
+ iframeContainer.appendChild(button);
+
+ var button = document.createElement("button");
+ button.innerHTML = "Pan Center";
+ button.title = "Requires &panning to be added to the view link";
+ button.onclick = function(){iframe.contentWindow.postMessage({"panning":90}, '*');};
iframeContainer.appendChild(button);
var button = document.createElement("button");
@@ -394,7 +405,7 @@ function printValues( obj) {
-
+
ADD
Clean Output
Transparent
diff --git a/index.html b/index.html
index f173550..0d4b4a4 100644
--- a/index.html
+++ b/index.html
@@ -55,7 +55,7 @@
}
-
+
@@ -67,8 +67,8 @@
-
-
+
+
@@ -143,7 +142,7 @@
-
+
@@ -1178,9 +1191,10 @@
- More scene options
+
+
-
+
add to scene 2
@@ -1190,7 +1204,7 @@
mute in scene
-
+
S3
@@ -1202,7 +1216,7 @@
-
+
S6
@@ -1214,7 +1228,7 @@
-
+
Rainbow Puke Fix
@@ -1224,10 +1238,11 @@
- Additional controls
+
+
-
+
Highlight guest
@@ -1245,7 +1260,7 @@
Blind Guest
-
+
@@ -1294,7 +1309,7 @@
100
-
+
@@ -1386,7 +1401,7 @@
- Highlight guest
+ Highlight
@@ -1476,7 +1491,7 @@
Digital greenscreen
Virtual background
-
+
@@ -1517,13 +1532,41 @@
+
+
+
@@ -1697,7 +1743,7 @@
var session = WebRTC.Media; // session is a required global variable if configuring manually. Run before loading main.js but after webrtc.js.
- session.version = "18.4b";
+ session.version = "19.0";
session.streamID = session.generateStreamID(); // randomly generates a streamID for this session. You can set your own programmatically if needed
session.defaultPassword = "someEncryptionKey123"; // Change this password if self-deploying for added security/privacy
@@ -1774,11 +1820,11 @@
// session.title // "zzzz"
-
+
-
+