From 862d45f6215fff5317707cdb12e25b264d5bc7eb Mon Sep 17 00:00:00 2001 From: Timo Wagner Date: Fri, 7 Nov 2025 17:58:29 +0100 Subject: [PATCH 1/2] Fix webgl transition from video to slide --- modules/admin.js | 3 +++ modules/bundle.js | 2 +- public/js/displayWebGl.js | 3 ++- templates/bundle/render/empty.png | Bin 0 -> 38656 bytes 4 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 templates/bundle/render/empty.png diff --git a/modules/admin.js b/modules/admin.js index 91b6905..5be93ce 100644 --- a/modules/admin.js +++ b/modules/admin.js @@ -442,6 +442,9 @@ export default class admin { } bundle.save(); + // Adds empty slide render for smooth transitions + // Could be enhanced with the actual last video frame + fs.copyFileSync("./templates/bundle/render/empty.png","./data/bundles/" + data.bundleName + "/render/" + filename + ".png") cli.success("save video link"); socket.emit("callback.saveVideo", {}); diff --git a/modules/bundle.js b/modules/bundle.js index 64f6d28..e1d404b 100644 --- a/modules/bundle.js +++ b/modules/bundle.js @@ -115,7 +115,7 @@ export default class bundleClass { x++; } if (slide.uuid === uuid) { - if (slide.type === "slide") { + if (slide.type === "slide" || slide.type === "video") { let path = process.cwd() + "/data/bundles/" + this.name; try { uuid = checkAndSanitizeFilePathName(uuid) diff --git a/public/js/displayWebGl.js b/public/js/displayWebGl.js index 4f79942..eb45de6 100644 --- a/public/js/displayWebGl.js +++ b/public/js/displayWebGl.js @@ -300,6 +300,7 @@ function nextSlide(data) { displayWebPage(serverOptions.currentMeta.webUrl); break; case "video": + sketch.showSlide(serverOptions.currentFile, serverOptions.transition); displayVideo(serverOptions.currentMeta.url, serverOptions.currentMeta.loop, serverOptions.currentMeta.mute); setTimeout(function () { clearIFrame(getWebLayer()); @@ -446,7 +447,7 @@ async function preloadImages(data) { for (let i in allSlides) { try { - if (allSlides[i].type === "slide") { + if (allSlides[i].type === "slide" || allSlides[i].type === "video") { await sketch.loadImage("/render/" + serverOptions.currentBundle + "/" + allSlides[i].uuid + ".png", allSlides[i].uuid); } } catch (err) { diff --git a/templates/bundle/render/empty.png b/templates/bundle/render/empty.png new file mode 100644 index 0000000000000000000000000000000000000000..692398635834719483f0a882c2cc7ae724165655 GIT binary patch literal 38656 zcmeI4J!n%=6vyvtLK;h}2`#16qG{{W$tsBT18p>=2}qUD)f#map`(*NKako%D1t7I z9kmFGgE+)N935P0T{?+E1t%9#Oq0I*-n-|%o2B5;-*$6DllOl4pL5Us-_!Tt!pw9} z*I<`Ys;5#eRh8=Wl}b-!GmV*VpWdBSs-P;R;_QvNjnBorQrV8;_e*R0j$TXk-`W`R zI?~x(VbWLj!GZMS@^ISzp8m6^-fFLYVI34kYU*L%SjPQ9-SwME*Rl1fc`r4;Tt4Kw z;#{Goex;l@m0QRT_@h&cMfbO*UhGc>vw1<2rMem#t9H8)4)}i(;0CBhIx_3!r7OWp z``y*mMyLIq;4X6caW%czch~)GncC^ZU%Pn)w-9HPS&k*7QTxajhgQSdJAG=^!0huu$tbLWVNg6*5Q%=~&A& zc37?rCYy6>W!s7+q=R&XDTS{i>$Y$POVANANGBAEOuI-2=~yd#4kE-N6j2HX5f;lj zaI=vP(viDDjz1kC!||spWb)qJtITB33&1IQqUnT;+%iHsNJp+rjb0CWcOu1YoDjV` zaUMaH+gi<$PMk+SM zj@bOr_7w(*JU*oD%Mmh22kF?Ie%iid|AC&N?Mo~|ktBn3v{2*#=^!1kE2Qm9)@|Vo zZC{R%K{}yOWVZe9(s_IQ`PZNqAZ~|Y55{@K3UQoeoMjo!jT!90SezIkggqG9hL}|r z(m^`1R=^%~gbeneD`b!k(y^9l+vD-9e|dRzu<>ZIdzb%S{P>}|tM62H!oO~;_+~=u z^*VpHeQwvfdhOUzZoYLcJyd_x_K{Ml)r>1Xa)t5yygJ|ZL0P+Nd#$yeR#&}L_fEEb z{1=o#Q>6mqab;hY#=dlvKpG@C9lz9J5l>CXTMIA-d=PqsH} zH=RA;0LMna=a?q>vVHxx6=z$S7Eo4Dz~TR}5`=--ZdR?4nhiL>u@S&*w^b=y83s7O;Upp?fMse+ zp<6Km9N>g*YOD0xp`Go`h`=(9l;37(00%hcHWtg&QEdVTI5q;QkAKh(#o0IoqsSNZ07&~ literal 0 HcmV?d00001 From 27cfd2a553c8e04ce186fa5ad91cbec6598f73ee Mon Sep 17 00:00:00 2001 From: Timo Wagner Date: Sat, 8 Nov 2025 21:54:56 +0100 Subject: [PATCH 2/2] Fix transitions for webpages as well --- modules/admin.js | 3 +++ modules/bundle.js | 26 ++++++++++++-------------- public/js/displayWebGl.js | 3 ++- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/modules/admin.js b/modules/admin.js index 5be93ce..dba73f7 100644 --- a/modules/admin.js +++ b/modules/admin.js @@ -367,6 +367,9 @@ export default class admin { } bundle.save(); + // Adds empty slide render for smooth transitions + fs.copyFileSync("./templates/bundle/render/empty.png","./data/bundles/" + data.bundleName + "/render/" + filename + ".png") + cli.success("save web link"); socket.emit("callback.saveLink", {}); diff --git a/modules/bundle.js b/modules/bundle.js index e1d404b..aebc681 100644 --- a/modules/bundle.js +++ b/modules/bundle.js @@ -115,21 +115,19 @@ export default class bundleClass { x++; } if (slide.uuid === uuid) { - if (slide.type === "slide" || slide.type === "video") { - let path = process.cwd() + "/data/bundles/" + this.name; - try { - uuid = checkAndSanitizeFilePathName(uuid) - if (fs.existsSync(path + "/render/" + uuid + ".png")) { - fs.unlinkSync(path + "/render/" + uuid + ".png"); - cli.success("removing file:" + path + "/render/" + uuid + ".png"); - } - if (fs.existsSync(path + "/slides/" + uuid)) { - fs.unlinkSync(path + "/slides/" + uuid); - cli.success("removing file:" + path + "/slides/" + uuid); - } - } catch (err) { - cli.error("error while deleting file:" + uuid, err); + let path = process.cwd() + "/data/bundles/" + this.name; + try { + uuid = checkAndSanitizeFilePathName(uuid) + if (fs.existsSync(path + "/render/" + uuid + ".png")) { + fs.unlinkSync(path + "/render/" + uuid + ".png"); + cli.success("removing file:" + path + "/render/" + uuid + ".png"); } + if (fs.existsSync(path + "/slides/" + uuid)) { + fs.unlinkSync(path + "/slides/" + uuid); + cli.success("removing file:" + path + "/slides/" + uuid); + } + } catch (err) { + cli.error("error while deleting file:" + uuid, err); } } } diff --git a/public/js/displayWebGl.js b/public/js/displayWebGl.js index eb45de6..7888e68 100644 --- a/public/js/displayWebGl.js +++ b/public/js/displayWebGl.js @@ -295,12 +295,13 @@ function nextSlide(data) { $("#slider").hide(); video.pause(); $("#stream").hide(); + sketch.showSlide(serverOptions.currentFile, serverOptions.transition); $("#" + getWebLayer()).css("transform", "scale(" + serverOptions.currentMeta.zoom + ")"); $("#" + getWebLayer()).addClass("fadeIn").removeClass("fadeOut"); displayWebPage(serverOptions.currentMeta.webUrl); break; case "video": - sketch.showSlide(serverOptions.currentFile, serverOptions.transition); + sketch.showSlide(serverOptions.currentFile, serverOptions.transition); displayVideo(serverOptions.currentMeta.url, serverOptions.currentMeta.loop, serverOptions.currentMeta.mute); setTimeout(function () { clearIFrame(getWebLayer());