From 828e192362efe11ac695c915d8e10f6a00e4e3d2 Mon Sep 17 00:00:00 2001 From: edideaur Date: Fri, 6 Mar 2026 08:43:53 +0000 Subject: [PATCH] fix visualizers --- bun.lock | 10 ++++++++ js/visualizers/butterchurn.js | 46 +++++++++++++++++++---------------- 2 files changed, 35 insertions(+), 21 deletions(-) diff --git a/bun.lock b/bun.lock index cb1af31..37c2b91 100644 --- a/bun.lock +++ b/bun.lock @@ -7,7 +7,9 @@ "dependencies": { "@ffmpeg/ffmpeg": "^0.12.15", "@ffmpeg/util": "^0.12.2", + "@kawarp/core": "^1.1.1", "@neutralinojs/lib": "^6.5.0", + "appwrite": "^23.0.0", "butterchurn": "^2.6.7", "butterchurn-presets": "^2.4.7", "cookie-session": "^2.1.1", @@ -338,6 +340,8 @@ "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + "@kawarp/core": ["@kawarp/core@1.1.1", "", {}, "sha512-hnJ0CQQAa6o4HPoUE6Tkn6/cqzpA/tRPNDTNqVeoY9rozL37KweAzbypmdrYTBOdyJRR9MvETyxy4hlpenIa/w=="], + "@keyv/bigmap": ["@keyv/bigmap@1.3.0", "", { "dependencies": { "hashery": "^1.2.0", "hookified": "^1.13.0" }, "peerDependencies": { "keyv": "^5.5.4" } }, "sha512-KT01GjzV6AQD5+IYrcpoYLkCu1Jod3nau1Z7EsEuViO3TZGRacSbO9MfHmbJ1WaOXFtWLxPVj169cn2WNKPkIg=="], "@keyv/serialize": ["@keyv/serialize@1.1.1", "", {}, "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA=="], @@ -454,6 +458,8 @@ "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + "appwrite": ["appwrite@23.0.0", "", { "dependencies": { "json-bigint": "1.0.0" } }, "sha512-K11a597npl3jsnxWKzjw163n4GguH4+/zBCOiU15yc1u+7QF0nP9mxsY4JxKrBU6bmQRtgtMTPv/6YOLSwp/QQ=="], + "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], "array-buffer-byte-length": ["array-buffer-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "is-array-buffer": "^3.0.5" } }, "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw=="], @@ -490,6 +496,8 @@ "bcp-47-normalize": ["bcp-47-normalize@2.3.0", "", { "dependencies": { "bcp-47": "^2.0.0", "bcp-47-match": "^2.0.0" } }, "sha512-8I/wfzqQvttUFz7HVJgIZ7+dj3vUaIyIxYXaTRP1YWoSDfzt6TUmxaKZeuXR62qBmYr+nvuWINFRl6pZ5DlN4Q=="], + "bignumber.js": ["bignumber.js@9.3.1", "", {}, "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ=="], + "brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], @@ -878,6 +886,8 @@ "jsesc": ["jsesc@3.1.0", "", { "bin": "bin/jsesc" }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], + "json-bigint": ["json-bigint@1.0.0", "", { "dependencies": { "bignumber.js": "^9.0.0" } }, "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ=="], + "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], "json-parse-even-better-errors": ["json-parse-even-better-errors@2.3.1", "", {}, "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="], diff --git a/js/visualizers/butterchurn.js b/js/visualizers/butterchurn.js index e040cd5..8fb8414 100644 --- a/js/visualizers/butterchurn.js +++ b/js/visualizers/butterchurn.js @@ -98,6 +98,7 @@ export class ButterchurnPreset { constructor() { this.name = 'Butterchurn'; this.contextType = 'webgl'; + this.managesOwnContext = true; this.visualizer = null; this.canvas = null; @@ -458,31 +459,34 @@ export class ButterchurnPreset { * Lazy initialization helper for when audio context becomes available */ lazyInit(canvas, audioContext, sourceNode) { - if (!this.isInitialized && canvas && audioContext) { - const gl = - canvas.getContext('webgl2', { - alpha: true, - antialias: true, - preserveDrawingBuffer: true, - }) || - canvas.getContext('webgl', { - alpha: true, - antialias: true, - preserveDrawingBuffer: true, - }); + return new Promise((resolve) => { + if (!this.isInitialized && canvas && audioContext) { + const gl = + canvas.getContext('webgl2', { + alpha: true, + antialias: true, + preserveDrawingBuffer: true, + }) || + canvas.getContext('webgl', { + alpha: true, + antialias: true, + preserveDrawingBuffer: true, + }); - if (gl) { - this.init(canvas, gl, audioContext, null); + if (gl) { + this.init(canvas, gl, audioContext, null); - // Connect audio if sourceNode is provided - if (sourceNode) { - this.connectAudioWithDelay(sourceNode); + // Connect audio if sourceNode is provided + if (sourceNode) { + this.connectAudioWithDelay(sourceNode); + } } + } else if (this.isInitialized && sourceNode) { + // Reconnect if source changed + this.connectAudioWithDelay(sourceNode); } - } else if (this.isInitialized && sourceNode) { - // Reconnect if source changed - this.connectAudioWithDelay(sourceNode); - } + resolve(); + }); } /**