mirror of
https://github.com/eliasstepanik/vdo.ninja.git
synced 2026-01-18 17:18:34 +00:00
Add files via upload
This commit is contained in:
parent
4b174b11ff
commit
e4813d0ac1
123
filters/anon.js
Normal file
123
filters/anon.js
Normal file
@ -0,0 +1,123 @@
|
||||
function effectsEngine(effectName){
|
||||
var functions = {};
|
||||
|
||||
function loadScript(url){
|
||||
var script = document.createElement('script');
|
||||
script.type = 'text/javascript';
|
||||
script.src = url;
|
||||
script.onload = function(){
|
||||
this.remove();
|
||||
if (loadList.length){
|
||||
loadScript(loadList.pop());
|
||||
}
|
||||
}
|
||||
document.head.appendChild(script);
|
||||
}
|
||||
var loadList = [
|
||||
"./thirdparty/jeeliz/jeelizFaceFilter.js",
|
||||
"./thirdparty/jeeliz/three.min.js",
|
||||
"./thirdparty/jeeliz/JeelizThreeHelper.js",
|
||||
'./thirdparty/jeeliz/Tween.min.js'
|
||||
];
|
||||
loadList.reverse();
|
||||
loadScript(loadList.pop());
|
||||
|
||||
// some globals:
|
||||
let THREECAMERA = null; // should be prop of window
|
||||
let ANONYMOUSMESH = null;
|
||||
let ANONYMOUSOBJ3D = null;
|
||||
let isTransformed = false;
|
||||
|
||||
|
||||
// callback: launched if a face is detected or lost.
|
||||
function detect_callback(isDetected) {
|
||||
if (isDetected) {
|
||||
console.log('INFO in detect_callback(): DETECTED');
|
||||
} else {
|
||||
console.log('INFO in detect_callback(): LOST');
|
||||
}
|
||||
}
|
||||
|
||||
// entry point:
|
||||
function main(){
|
||||
if (session.canvasSource && document.getElementById("effectsCanvasTarget") && JEELIZFACEFILTER){
|
||||
//try {JEELIZFACEFILTER.destroy();}catch(e){}
|
||||
try {
|
||||
init_faceFilter("effectsCanvasTarget", session.canvasSource);
|
||||
} catch(e){
|
||||
}
|
||||
} else {
|
||||
setTimeout(function(){main();},500);
|
||||
errorlog("...");
|
||||
}
|
||||
}
|
||||
|
||||
function init_faceFilter(canvasId, videoElement){
|
||||
JEELIZFACEFILTER.init({
|
||||
canvasId: canvasId,
|
||||
NNCPath: 'https://stevesserver.com/neuralNets/',
|
||||
videoSettings: {
|
||||
videoElement: videoElement
|
||||
},
|
||||
callbackReady: function (errCode, spec) {
|
||||
if (errCode) {
|
||||
console.error(errCode);
|
||||
try{
|
||||
JEELIZFACEFILTER.toggle_pause(true,true);
|
||||
} catch(e){}
|
||||
try{
|
||||
JEELIZFACEFILTER.destroy();
|
||||
} catch(e){}
|
||||
setTimeout(function(){main();},500);
|
||||
return;
|
||||
}
|
||||
const threeStuffs = JeelizThreeHelper.init(spec, detect_callback);
|
||||
// CREATE OUR ANONYMOUS MASK:
|
||||
const headLoader = new THREE.BufferGeometryLoader();
|
||||
headLoader.load('./filters/anon/anonymous.json',(geometryHead) => {
|
||||
const mat = new THREE.MeshLambertMaterial({
|
||||
map: new THREE.TextureLoader().load('./filters/anon/anonymous.png'),
|
||||
transparent: true
|
||||
});
|
||||
|
||||
ANONYMOUSMESH = new THREE.Mesh(geometryHead, mat);
|
||||
ANONYMOUSMESH.frustumCulled = false;
|
||||
ANONYMOUSMESH.scale.multiplyScalar(0.065); // mask scale
|
||||
ANONYMOUSMESH.position.fromArray([0, -0.75, 0.35]); // maskPositionOffset
|
||||
ANONYMOUSMESH.renderOrder = 1000000;
|
||||
ANONYMOUSMESH.material.opacity = 0;
|
||||
ANONYMOUSOBJ3D = new THREE.Object3D();
|
||||
ANONYMOUSOBJ3D.add(ANONYMOUSMESH);
|
||||
threeStuffs.faceObject.add(ANONYMOUSOBJ3D);
|
||||
});
|
||||
THREECAMERA = JeelizThreeHelper.create_camera();
|
||||
const ambient = new THREE.AmbientLight(0xffffff, 0.8);
|
||||
threeStuffs.scene.add(ambient);
|
||||
const dirLight = new THREE.DirectionalLight(0xffffff, 0.5);
|
||||
dirLight.position.set(100, 1000, 1000);
|
||||
threeStuffs.scene.add(dirLight);
|
||||
},
|
||||
callbackTrack: function (detectState) {
|
||||
if (effectName !== session.effects){
|
||||
try{
|
||||
JEELIZFACEFILTER.toggle_pause(true,true); // unload the filter when no longer active.
|
||||
} catch(e){}
|
||||
try{
|
||||
JEELIZFACEFILTER.destroy();
|
||||
} catch(e){}
|
||||
return;
|
||||
}
|
||||
warnlog("FOUND");
|
||||
const isDetected = JeelizThreeHelper.get_isDetected();
|
||||
//if (isDetected && detectState.expressions[0] >= 0.8 && !isTransformed) {
|
||||
if (isDetected && !isTransformed){
|
||||
isTransformed = true;
|
||||
new TWEEN.Tween( ANONYMOUSMESH.material ).to({ opacity: 1}, 700).start(); // animation
|
||||
}
|
||||
TWEEN.update();
|
||||
JeelizThreeHelper.render(detectState, THREECAMERA);
|
||||
}
|
||||
});
|
||||
}
|
||||
return main;
|
||||
}
|
||||
75
filters/anon/addVideoRecordingEffect.js
Normal file
75
filters/anon/addVideoRecordingEffect.js
Normal file
@ -0,0 +1,75 @@
|
||||
function addVideoRecordingEffect(canvas) {
|
||||
var viewWidth,
|
||||
viewHeight,
|
||||
canvas = document.getElementById("canvasVideoEffect"),
|
||||
ctx;
|
||||
// change these settings
|
||||
var patternSize = 64,
|
||||
patternScaleX = 3,
|
||||
patternScaleY = 1,
|
||||
patternRefreshInterval = 8,
|
||||
patternAlpha = 25; // int between 0 and 255,
|
||||
|
||||
var patternPixelDataLength = patternSize * patternSize * 4,
|
||||
patternCanvas,
|
||||
patternCtx,
|
||||
patternData,
|
||||
frame = 0;
|
||||
|
||||
// create a canvas which will render the grain
|
||||
function initCanvas() {
|
||||
viewWidth = canvas.width = canvas.clientWidth;
|
||||
viewHeight = canvas.height = canvas.clientHeight;
|
||||
ctx = canvas.getContext('2d');
|
||||
|
||||
ctx.scale(patternScaleX, patternScaleY);
|
||||
}
|
||||
|
||||
// create a canvas which will be used as a pattern
|
||||
function initGrain() {
|
||||
patternCanvas = document.createElement('canvas');
|
||||
patternCanvas.width = patternSize;
|
||||
patternCanvas.height = patternSize;
|
||||
patternCtx = patternCanvas.getContext('2d');
|
||||
patternData = patternCtx.createImageData(patternSize, patternSize);
|
||||
}
|
||||
|
||||
// put a random shade of gray into every pixel of the pattern
|
||||
function update() {
|
||||
var value;
|
||||
|
||||
for (var i = 0; i < patternPixelDataLength; i += 1) {
|
||||
value = (Math.random() * 155) | 0;
|
||||
|
||||
patternData.data[i ] = value;
|
||||
patternData.data[i + 10] = value;
|
||||
patternData.data[i + 15] = value;
|
||||
patternData.data[i + 11] = patternAlpha;
|
||||
}
|
||||
|
||||
patternCtx.putImageData(patternData, 0, 0);
|
||||
}
|
||||
|
||||
// fill the canvas using the pattern
|
||||
function draw() {
|
||||
ctx.clearRect(0, 0, viewWidth, viewHeight);
|
||||
|
||||
ctx.fillStyle = ctx.createPattern(patternCanvas, 'repeat');
|
||||
ctx.fillRect(0, 0, viewWidth, viewHeight);
|
||||
}
|
||||
|
||||
function loop() {
|
||||
if (++frame % patternRefreshInterval === 0) {
|
||||
update();
|
||||
draw();
|
||||
}
|
||||
|
||||
requestAnimationFrame(loop);
|
||||
}
|
||||
|
||||
|
||||
|
||||
initCanvas();
|
||||
initGrain();
|
||||
requestAnimationFrame(loop);
|
||||
}
|
||||
1
filters/anon/anonymous.json
Normal file
1
filters/anon/anonymous.json
Normal file
File diff suppressed because one or more lines are too long
BIN
filters/anon/anonymous.png
Normal file
BIN
filters/anon/anonymous.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 158 KiB |
BIN
filters/anon/anonymous_mask.blend
Normal file
BIN
filters/anon/anonymous_mask.blend
Normal file
Binary file not shown.
BIN
filters/anon/frame.png
Normal file
BIN
filters/anon/frame.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 150 KiB |
BIN
filters/anon/téléchargement.png
Normal file
BIN
filters/anon/téléchargement.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 444 KiB |
65
filters/cube.js
Normal file
65
filters/cube.js
Normal file
@ -0,0 +1,65 @@
|
||||
function effectsEngine(){
|
||||
console.log('LOADED SAMPLE');
|
||||
function loadScript(url, callback=false){
|
||||
var script = document.createElement('script');
|
||||
script.type = 'text/javascript';
|
||||
script.src = url;
|
||||
script.onload = function(){this.remove();if(callback){callback();}}
|
||||
document.head.appendChild(script);
|
||||
|
||||
}
|
||||
|
||||
loadScript("https://stevesserver.com/dist/jeelizFaceFilter.js",
|
||||
function(){
|
||||
loadScript("https://stevesserver.com/helpers/JeelizCanvas2DHelper.js");
|
||||
}
|
||||
);
|
||||
|
||||
function main(){ // entry point
|
||||
console.log(".");
|
||||
if (session.canvasSource && session.canvasSource.videoWidth && session.canvasSource.videoHeight && session.canvasWebGL){
|
||||
if (session.canvasWebGL && !(document.getElementById("effectsCanvasTarget"))){
|
||||
session.canvasWebGL.id = "effectsCanvasTarget";
|
||||
session.canvasWebGL.style.position="fixed";
|
||||
session.canvasWebGL.style.top= "-9999px";
|
||||
session.canvasWebGL.style.left= "-9999px";
|
||||
document.body.appendChild(session.canvasWebGL);
|
||||
}
|
||||
start(JEELIZFACEFILTER, "effectsCanvasTarget", session.canvasSource, 'yellow');
|
||||
} else {
|
||||
setTimeout(main, 500);
|
||||
}
|
||||
}
|
||||
|
||||
function start(jeeFaceFilterAPIInstance, canvasId, videoElement, borderColor){
|
||||
let cvd = null; // return of Canvas2DDisplay
|
||||
|
||||
jeeFaceFilterAPIInstance.init({
|
||||
canvasId: canvasId,
|
||||
videoSettings: {
|
||||
videoElement: videoElement
|
||||
},
|
||||
NNCPath: 'https://stevesserver.com/neuralNets/', // root of NN_DEFAULT.json file
|
||||
callbackReady: function(errCode, spec){
|
||||
if (errCode){
|
||||
console.log('AN ERROR HAPPENS. SORRY BRO :( . ERR =', errCode);
|
||||
return;
|
||||
}
|
||||
console.log('INFO: JEELIZFACEFILTER IS READY');
|
||||
cvd = JeelizCanvas2DHelper(spec);
|
||||
cvd.ctx.strokeStyle = borderColor;
|
||||
},
|
||||
callbackTrack: function(detectState){ // drawing loop
|
||||
if (detectState.detected>0.6){
|
||||
// draw a border around the face:
|
||||
const faceCoo = cvd.getCoordinates(detectState);
|
||||
cvd.ctx.clearRect(0,0,cvd.canvas.width, cvd.canvas.height);
|
||||
cvd.ctx.strokeRect(faceCoo.x, faceCoo.y, faceCoo.w, faceCoo.h);
|
||||
cvd.update_canvasTexture();
|
||||
}
|
||||
cvd.draw();
|
||||
}
|
||||
});
|
||||
}
|
||||
main();
|
||||
};
|
||||
3
filters/readme.md
Normal file
3
filters/readme.md
Normal file
@ -0,0 +1,3 @@
|
||||
Some of the code in this folder is based on the sample code made available from Jeeliz;
|
||||
Apache-2.0 License
|
||||
https://github.com/jeeliz/jeelizFaceFilter/blob/master/LICENSE
|
||||
65
filters/sample.js
Normal file
65
filters/sample.js
Normal file
@ -0,0 +1,65 @@
|
||||
function effectsEngine(){
|
||||
console.log('LOADED SAMPLE');
|
||||
function loadScript(url, callback=false){
|
||||
var script = document.createElement('script');
|
||||
script.type = 'text/javascript';
|
||||
script.src = url;
|
||||
script.onload = function(){this.remove();if(callback){callback();}}
|
||||
document.head.appendChild(script);
|
||||
|
||||
}
|
||||
|
||||
loadScript("./thirdparty/jeeliz/jeelizFaceFilter.js",
|
||||
function(){
|
||||
loadScript("./thirdparty/jeeliz/helpers/JeelizCanvas2DHelper.js");
|
||||
}
|
||||
);
|
||||
|
||||
function main(){ // entry point
|
||||
console.log(".");
|
||||
if (session.canvasSource && session.canvasSource.videoWidth && session.canvasSource.videoHeight && session.canvasWebGL){
|
||||
if (session.canvasWebGL && !(document.getElementById("effectsCanvasTarget"))){
|
||||
session.canvasWebGL.id = "effectsCanvasTarget";
|
||||
session.canvasWebGL.style.position="fixed";
|
||||
session.canvasWebGL.style.top= "-9999px";
|
||||
session.canvasWebGL.style.left= "-9999px";
|
||||
document.body.appendChild(session.canvasWebGL);
|
||||
}
|
||||
start(JEELIZFACEFILTER, "effectsCanvasTarget", session.canvasSource, 'yellow');
|
||||
} else {
|
||||
setTimeout(main, 500);
|
||||
}
|
||||
}
|
||||
|
||||
function start(jeeFaceFilterAPIInstance, canvasId, videoElement, borderColor){
|
||||
let cvd = null; // return of Canvas2DDisplay
|
||||
|
||||
jeeFaceFilterAPIInstance.init({
|
||||
canvasId: canvasId,
|
||||
videoSettings: {
|
||||
videoElement: videoElement
|
||||
},
|
||||
NNCPath: './thirdparty/jeeliz/neuralNets/', // root of NN_DEFAULT.json file
|
||||
callbackReady: function(errCode, spec){
|
||||
if (errCode){
|
||||
console.log('AN ERROR HAPPENS. SORRY BRO :( . ERR =', errCode);
|
||||
return;
|
||||
}
|
||||
console.log('INFO: JEELIZFACEFILTER IS READY');
|
||||
cvd = JeelizCanvas2DHelper(spec);
|
||||
cvd.ctx.strokeStyle = borderColor;
|
||||
},
|
||||
callbackTrack: function(detectState){ // drawing loop
|
||||
if (detectState.detected>0.6){
|
||||
// draw a border around the face:
|
||||
const faceCoo = cvd.getCoordinates(detectState);
|
||||
cvd.ctx.clearRect(0,0,cvd.canvas.width, cvd.canvas.height);
|
||||
cvd.ctx.strokeRect(faceCoo.x, faceCoo.y, faceCoo.w, faceCoo.h);
|
||||
cvd.update_canvasTexture();
|
||||
}
|
||||
cvd.draw();
|
||||
}
|
||||
});
|
||||
}
|
||||
main();
|
||||
};
|
||||
16
index.html
16
index.html
@ -55,7 +55,7 @@
|
||||
}
|
||||
</style>
|
||||
<link rel="stylesheet" href="./lineawesome/css/line-awesome.min.css" />
|
||||
<link rel="stylesheet" href="./main.css?ver=72" />
|
||||
<link rel="stylesheet" href="./main.css?ver=78" />
|
||||
<script type="text/javascript" crossorigin="anonymous" src="./thirdparty/adapter.min.js"></script>
|
||||
<style id="lightbox-animations" type="text/css"></style>
|
||||
</head>
|
||||
@ -86,6 +86,8 @@
|
||||
<font style="color: #888;" id="copythisurl">
|
||||
<span data-translate="copy-this-url">Copy this URL into an OBS "Browser Source"</span> <i style="color: #CCC;" class="las la-long-arrow-alt-right"></i>
|
||||
</font>
|
||||
</div>
|
||||
<div id="head3a" style="display: inline-block;" class="advanced">
|
||||
<a
|
||||
id="reshare"
|
||||
data-drag="1"
|
||||
@ -737,7 +739,7 @@
|
||||
Some devices that use H264 hardware encoding can experience video glitching; switching to VP8 or VP9 as a codec can help.
|
||||
</li>
|
||||
<li>
|
||||
If using multiple group scenes at a time, iOS devices may fail to work if the hardware encoders max out. Perhaps try VP8 as a codec instead.
|
||||
Video glitching and random audio-loss can occur when using the OBS browser source. The <a href='https://github.com/steveseguin/electroncapture/blob/master/README.md'>Electron Capture app</a> avoids these issues.
|
||||
</li>
|
||||
<li>
|
||||
A list of less common issues can <a href="https://docs.vdo.ninja/common-errors-and-known-issues/known-issues-browser-bugs-and-more">be found here</a>.
|
||||
@ -747,7 +749,7 @@
|
||||
👋 👀 Welcome to VDO Ninja! We've rebranded! 📼 Nothing else is changing and we're staying 100% free.
|
||||
</h4>
|
||||
<br />
|
||||
🌻 Site Updated on August 29th. The <a href="https://docs.vdo.ninja/release-notes/v19">v19.0 release notes are coming soon</a>. If new issues occur, the previous version can also be <a href="https://vdo.ninja/v183/">found here</a>.
|
||||
🎁 Site Updated September 1st 🎈🎈 The <a href="https://docs.vdo.ninja/release-notes/v19">v19.0 release notes are here</a>. If new issues occur, the previous version can be <a href="https://vdo.ninja/v183/">found here</a>.
|
||||
|
||||
<br />
|
||||
<br />
|
||||
@ -925,7 +927,7 @@
|
||||
<input type="checkbox" data-param="&safemode" onchange="updateLink(1,this);">
|
||||
<span class="slider"></span>
|
||||
</label>
|
||||
<span data-translate="compatibility-mode">Compatibility Mode</span>
|
||||
<span data-translate="compatibility-mode">Compatibility mode</span>
|
||||
<Br />
|
||||
<label class="switch" title="The guest won't have access to changing camera settings or screenshare">
|
||||
<input type="checkbox" data-param="&ns" onchange="updateLink(1,this);">
|
||||
@ -940,11 +942,11 @@
|
||||
<font class="tooltip" style='cursor: help;position:relative;bottom:2px;font-family:"Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort;'>⚠<span class="tooltiptext">Uses more CPU and freezes the video if the guest doesn't keep the tab visible.</span></font> <span data-translate="virtual-backgrounds">Virtual backgrounds</span>
|
||||
|
||||
<br />
|
||||
<label class="switch" title="Videos use an animated transition when being remixed">
|
||||
<input type="checkbox" data-param="&animate" onchange="updateLink(1,this);">
|
||||
<label class="switch" title="Disable animated transitions during video mixing">
|
||||
<input type="checkbox" data-param="&animate=0" onchange="updateLink(1,this);">
|
||||
<span class="slider"></span>
|
||||
</label>
|
||||
<span data-translate="animate-mixing">Animate mixing</span>
|
||||
<span data-translate="disable-animated-mixing">Disable animations</span>
|
||||
|
||||
</div>
|
||||
<div style="display:inline-block;margin-top: 12px; position: relative; margin-right:10px;">
|
||||
|
||||
4
main.css
4
main.css
@ -677,6 +677,9 @@ button.btnArmTransferRoom.selected{
|
||||
#controlButtons {
|
||||
height:54px;
|
||||
}
|
||||
#copythisurl {
|
||||
font-size:80%;
|
||||
}
|
||||
}
|
||||
@media only screen and (max-height: 500px){
|
||||
#subControlButtons {
|
||||
@ -728,6 +731,7 @@ button.btnArmTransferRoom.selected{
|
||||
#head2 {
|
||||
display:none !important;
|
||||
}
|
||||
|
||||
}
|
||||
@media only screen and (max-height: 240px){
|
||||
#gridlayout>#container.vidcon {
|
||||
|
||||
90
main.js
90
main.js
@ -542,7 +542,8 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
if (session.webcamonly == true) {
|
||||
if (session.introButton){
|
||||
getById("container-2").className = 'column columnfade advanced'; // Hide screen share
|
||||
getById("head3").className = 'advanced';
|
||||
getById("head3").classList.add('advanced');
|
||||
getById("head3a").classList.add('advanced');
|
||||
} else {
|
||||
getById("container-2").className = 'column columnfade advanced'; // Hide screen share
|
||||
getById("container-3").classList.add("skip-animation");
|
||||
@ -875,15 +876,6 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
session.outboundVideoBitrate = parseInt(urlParams.get('outboundvideobitrate')) || parseInt(urlParams.get('ovb')) || false;
|
||||
}
|
||||
|
||||
if (urlParams.has('nofileshare') || urlParams.has('nodownloads') || urlParams.has('nofiles')){
|
||||
session.hostedFiles = false;
|
||||
session.nodownloads = true;
|
||||
getById('sharefilebutton').style.display = "none";
|
||||
getById('sharefilebutton').classList.add("advanced");
|
||||
} else if (session.mobile){
|
||||
getById('sharefilebutton').style.display = "none";
|
||||
getById('sharefilebutton').classList.add("advanced");
|
||||
}
|
||||
|
||||
if (urlParams.has('webp')){
|
||||
session.webp = true;
|
||||
@ -1632,7 +1624,6 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
} catch (e) {
|
||||
errorlog(e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -1819,18 +1810,16 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
session.effects = urlParams.get('effects') || urlParams.get('effect') || null;
|
||||
if (session.effects === null){
|
||||
getById("effectsDiv").style.display = "block";
|
||||
session.effects = 0;
|
||||
session.effects = "0";
|
||||
} else if (session.effects === "0" || session.effects === "false" || session.effects === "off"){
|
||||
session.effects = false;
|
||||
getById("effectSelector3").style.display = "none";
|
||||
getById("effectsDiv3").style.display = "none";
|
||||
getById("effectSelector").style.display = "none";
|
||||
getById("effectsDiv").style.display = "none";
|
||||
} else {
|
||||
session.effects = parseInt(session.effects);
|
||||
}
|
||||
|
||||
if (session.effects === 5){
|
||||
if (session.effects === "5"){
|
||||
getById("selectImageTFLITE").style.display = "block";
|
||||
getById("selectImageTFLITE3").style.display = "block";
|
||||
getById("effectSelector").style.display = "none";
|
||||
@ -2269,7 +2258,8 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
getById("add_screen").innerHTML = "Share your Screen";
|
||||
miniTranslate(getById("add_screen"), "share-your-screen");
|
||||
}
|
||||
getById("head3").className = 'advanced';
|
||||
getById("head3").classList.add('advanced');
|
||||
getById("head3a").classList.add('advanced');
|
||||
|
||||
if (session.scene !== false) {
|
||||
getById("container-4").className = 'column columnfade';
|
||||
@ -2297,7 +2287,8 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
} else {
|
||||
if ((session.permaid === null) && (session.roomid == "")) {
|
||||
if (!(session.cleanOutput)) {
|
||||
getById("head3").className = '';
|
||||
getById("head3").classList.remove('advanced');
|
||||
getById("head3a").classList.remove('advanced');
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2353,6 +2344,19 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
getById("chatbutton").classList.add("advanced");
|
||||
}
|
||||
}
|
||||
|
||||
if (urlParams.has('nofileshare') || urlParams.has('nodownloads') || urlParams.has('nofiles')){
|
||||
session.hostedFiles = false;
|
||||
session.nodownloads = true;
|
||||
getById('sharefilebutton').style.display = "none";
|
||||
getById('sharefilebutton').classList.add("advanced");
|
||||
} else if (session.mobile){
|
||||
getById('sharefilebutton').style.display = "none";
|
||||
getById('sharefilebutton').classList.add("advanced");
|
||||
} else if (session.roomid==false){
|
||||
getById('sharefilebutton').style.display = "none";
|
||||
getById('sharefilebutton').classList.add("advanced");
|
||||
}
|
||||
|
||||
if (session.audioEffects === null) {
|
||||
session.audioEffects = true;
|
||||
@ -2402,7 +2406,8 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
getById("header").className = 'advanced';
|
||||
getById("head1").className = 'advanced';
|
||||
getById("head2").className = 'advanced';
|
||||
getById("head3").className = 'advanced';
|
||||
getById("head3").classList.add('advanced');
|
||||
getById("head3a").classList.add('advanced');
|
||||
|
||||
|
||||
getById("mainmenu").style.backgroundRepeat = "no-repeat";
|
||||
@ -2468,39 +2473,11 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
delayedStartupFuncs = [];
|
||||
},50);
|
||||
|
||||
if ((session.effects==3) || (session.effects==4) || (session.effects==5)){
|
||||
if ((session.effects=="3") || (session.effects=="4") || (session.effects=="5")){
|
||||
attemptTFLiteJsFileLoad();
|
||||
} else if (session.effects==6){
|
||||
var script = document.createElement('script');
|
||||
var script2 = document.createElement('script');
|
||||
var script3 = document.createElement('script');
|
||||
var script4 = document.createElement('script');
|
||||
model = false;
|
||||
script.onload = function() {
|
||||
document.head.appendChild(script2);
|
||||
}
|
||||
script2.onload = function() {
|
||||
document.head.appendChild(script3);
|
||||
}
|
||||
script3.onload = function() {
|
||||
document.head.appendChild(script4);
|
||||
}
|
||||
script4.onload = function() {
|
||||
closeModal();
|
||||
async function loadModel(){
|
||||
model = await faceLandmarksDetection.load(faceLandmarksDetection.SupportedPackages.mediapipeFacemesh);
|
||||
}
|
||||
loadModel();
|
||||
}
|
||||
script.src = "./thirdparty/tfjs/tf-core.js";
|
||||
script2.src = "./thirdparty/tfjs/tf-converter.js";
|
||||
script3.src = "./thirdparty/tfjs/tf-backend-webgl.js";
|
||||
script4.src = "./thirdparty/tfjs/face-landmarks-detection.js";
|
||||
warnUser("Loading effects model...");
|
||||
|
||||
script.type = 'text/javascript';script2.type = 'text/javascript';script3.type = 'text/javascript';script4.type = 'text/javascript';
|
||||
document.head.appendChild(script);
|
||||
} else if (session.effects==9){
|
||||
} else if (session.effects=="6"){
|
||||
loadTensorflowJS();
|
||||
} else if (session.effects=="9"){
|
||||
var script = document.createElement('script');
|
||||
script.onload = function() {
|
||||
effectsEngine();
|
||||
@ -2508,7 +2485,7 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
script.src = "./filters/sample.js";
|
||||
document.head.appendChild(script);
|
||||
warnUser("Loading custom effects model...",1000);
|
||||
} else if (session.effects==10){
|
||||
} else if (session.effects=="10"){
|
||||
var script = document.createElement('script');
|
||||
script.onload = function() {
|
||||
effectsEngine();
|
||||
@ -2516,14 +2493,9 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
script.src = "./filters/cube.js";
|
||||
document.head.appendChild(script);
|
||||
warnUser("Loading custom effects model...",1000);
|
||||
} else if (session.effects==11){
|
||||
var script = document.createElement('script');
|
||||
script.onload = function() {
|
||||
effectsEngine();
|
||||
}
|
||||
script.src = "./filters/anon.js";
|
||||
document.head.appendChild(script);
|
||||
warnUser("Loading custom effects model...",1000);
|
||||
} else if (session.effects=="11"){
|
||||
session.effects="anon";
|
||||
//loadEffect(session.effects);
|
||||
}
|
||||
|
||||
if (location.protocol !== 'https:') {
|
||||
|
||||
97
minidirector.css
Normal file
97
minidirector.css
Normal file
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@ -342,7 +342,7 @@
|
||||
"password-incorrect": "The password was incorrect.\n\nRefresh and try again.",
|
||||
"enter-display-name": "Please enter your display name:",
|
||||
"enter-new-display-name": "Enter a new Display Name for this stream",
|
||||
"what-bitrate": "What bitrate would you like to record at? (kbps)",
|
||||
"what-bitrate":"What bitrate would you like to record at? (kbps)\n(note: This feature is experimental, so have backup recordings going)",
|
||||
"enter-website": "Enter a website URL to share",
|
||||
"press-ok-to-record": "Press OK to start recording. Press again to stop and download.\n\nWarning: Keep this browser tab active to continue recording.\n\nYou can change the default video bitrate if desired below (kbps)",
|
||||
"no-streamID-provided": "No streamID was provided; one will be generated randomily.\n\nStream ID: ",
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user