diff --git a/js/Canvas.js b/js/Canvas.js index 25423cd..092846e 100644 --- a/js/Canvas.js +++ b/js/Canvas.js @@ -54,7 +54,8 @@ export class Canvas { }; this.offscreenCanvas = document.createElement('canvas'); this.offscreenCtx = this.offscreenCanvas.getContext('2d', { - alpha: false + alpha: false, + willReadFrequently: true }); this.dataInitialized = false; this.pendingDataCheck = null; diff --git a/js/CanvasLayers.js b/js/CanvasLayers.js index e081ee5..984396b 100644 --- a/js/CanvasLayers.js +++ b/js/CanvasLayers.js @@ -352,7 +352,7 @@ export class CanvasLayers { async getLayerImageData(layer) { try { const tempCanvas = document.createElement('canvas'); - const tempCtx = tempCanvas.getContext('2d'); + const tempCtx = tempCanvas.getContext('2d', { willReadFrequently: true }); if (!tempCtx) throw new Error("Could not create canvas context"); tempCanvas.width = layer.width; @@ -593,7 +593,7 @@ export class CanvasLayers { const tempCanvas = document.createElement('canvas'); tempCanvas.width = this.canvas.width; tempCanvas.height = this.canvas.height; - const tempCtx = tempCanvas.getContext('2d'); + const tempCtx = tempCanvas.getContext('2d', { willReadFrequently: true }); if (!tempCtx) { reject(new Error("Could not create canvas context")); return; @@ -606,7 +606,7 @@ export class CanvasLayers { const tempMaskCanvas = document.createElement('canvas'); tempMaskCanvas.width = this.canvas.width; tempMaskCanvas.height = this.canvas.height; - const tempMaskCtx = tempMaskCanvas.getContext('2d'); + const tempMaskCtx = tempMaskCanvas.getContext('2d', { willReadFrequently: true }); if (!tempMaskCtx) { reject(new Error("Could not create mask canvas context")); return; @@ -655,7 +655,7 @@ export class CanvasLayers { const tempCanvas = document.createElement('canvas'); tempCanvas.width = this.canvas.width; tempCanvas.height = this.canvas.height; - const tempCtx = tempCanvas.getContext('2d'); + const tempCtx = tempCanvas.getContext('2d', { willReadFrequently: true }); if (!tempCtx) { reject(new Error("Could not create canvas context")); return; @@ -712,7 +712,7 @@ export class CanvasLayers { const tempCanvas = document.createElement('canvas'); tempCanvas.width = newWidth; tempCanvas.height = newHeight; - const tempCtx = tempCanvas.getContext('2d'); + const tempCtx = tempCanvas.getContext('2d', { willReadFrequently: true }); if (!tempCtx) { reject(new Error("Could not create canvas context")); return; @@ -766,7 +766,7 @@ export class CanvasLayers { const tempCanvas = document.createElement('canvas'); tempCanvas.width = fusedWidth; tempCanvas.height = fusedHeight; - const tempCtx = tempCanvas.getContext('2d'); + const tempCtx = tempCanvas.getContext('2d', { willReadFrequently: true }); if (!tempCtx) throw new Error("Could not create canvas context"); tempCtx.translate(-minX, -minY); diff --git a/src/Canvas.ts b/src/Canvas.ts index 944bc34..3023388 100644 --- a/src/Canvas.ts +++ b/src/Canvas.ts @@ -98,7 +98,8 @@ export class Canvas { this.offscreenCanvas = document.createElement('canvas'); this.offscreenCtx = this.offscreenCanvas.getContext('2d', { - alpha: false + alpha: false, + willReadFrequently: true }); this.dataInitialized = false; diff --git a/src/CanvasLayers.ts b/src/CanvasLayers.ts index b1a90ee..d2307b6 100644 --- a/src/CanvasLayers.ts +++ b/src/CanvasLayers.ts @@ -410,7 +410,7 @@ export class CanvasLayers { async getLayerImageData(layer: Layer): Promise { try { const tempCanvas = document.createElement('canvas'); - const tempCtx = tempCanvas.getContext('2d'); + const tempCtx = tempCanvas.getContext('2d', { willReadFrequently: true }); if (!tempCtx) throw new Error("Could not create canvas context"); tempCanvas.width = layer.width; @@ -687,7 +687,7 @@ export class CanvasLayers { const tempCanvas = document.createElement('canvas'); tempCanvas.width = this.canvas.width; tempCanvas.height = this.canvas.height; - const tempCtx = tempCanvas.getContext('2d'); + const tempCtx = tempCanvas.getContext('2d', { willReadFrequently: true }); if (!tempCtx) { reject(new Error("Could not create canvas context")); return; @@ -703,7 +703,7 @@ export class CanvasLayers { const tempMaskCanvas = document.createElement('canvas'); tempMaskCanvas.width = this.canvas.width; tempMaskCanvas.height = this.canvas.height; - const tempMaskCtx = tempMaskCanvas.getContext('2d'); + const tempMaskCtx = tempMaskCanvas.getContext('2d', { willReadFrequently: true }); if (!tempMaskCtx) { reject(new Error("Could not create mask canvas context")); return; @@ -764,7 +764,7 @@ export class CanvasLayers { const tempCanvas = document.createElement('canvas'); tempCanvas.width = this.canvas.width; tempCanvas.height = this.canvas.height; - const tempCtx = tempCanvas.getContext('2d'); + const tempCtx = tempCanvas.getContext('2d', { willReadFrequently: true }); if (!tempCtx) { reject(new Error("Could not create canvas context")); return; @@ -831,7 +831,7 @@ export class CanvasLayers { const tempCanvas = document.createElement('canvas'); tempCanvas.width = newWidth; tempCanvas.height = newHeight; - const tempCtx = tempCanvas.getContext('2d'); + const tempCtx = tempCanvas.getContext('2d', { willReadFrequently: true }); if (!tempCtx) { reject(new Error("Could not create canvas context")); return; @@ -898,7 +898,7 @@ export class CanvasLayers { const tempCanvas = document.createElement('canvas'); tempCanvas.width = fusedWidth; tempCanvas.height = fusedHeight; - const tempCtx = tempCanvas.getContext('2d'); + const tempCtx = tempCanvas.getContext('2d', { willReadFrequently: true }); if (!tempCtx) throw new Error("Could not create canvas context"); tempCtx.translate(-minX, -minY); diff --git a/src/SAMDetectorIntegration.ts b/src/SAMDetectorIntegration.ts index e14b1f1..46a7631 100644 --- a/src/SAMDetectorIntegration.ts +++ b/src/SAMDetectorIntegration.ts @@ -338,7 +338,7 @@ async function handleSAMDetectorResult(node: ComfyNode, resultImage: HTMLImageEl const tempCanvas = document.createElement('canvas'); tempCanvas.width = canvas.width; tempCanvas.height = canvas.height; - const tempCtx = tempCanvas.getContext('2d', {willReadFrequently: true}); + const tempCtx = tempCanvas.getContext('2d', { willReadFrequently: true }); if (tempCtx) { tempCtx.drawImage(resultImage, 0, 0, canvas.width, canvas.height);