From 85c2bb822b14389297a2c22d681ea90a645b6780 Mon Sep 17 00:00:00 2001 From: Michael Chung <6252325+ArEnSc@users.noreply.github.com> Date: Fri, 20 Sep 2024 17:34:51 -0400 Subject: [PATCH] Fix to rendering it now guarentees a render. --- .../RenderingPrimitives/RenderEngine.ts | 41 +++++++++++++------ src/KonvaApp/RenderingPrimitives/note.txt | 18 ++++++++ .../Diffusion/DiffusionSharedWorker.ts | 27 +++++++----- .../Diffusion/DiffusionSharedWorkerClient.ts | 2 +- 4 files changed, 65 insertions(+), 23 deletions(-) create mode 100644 src/KonvaApp/RenderingPrimitives/note.txt diff --git a/src/KonvaApp/RenderingPrimitives/RenderEngine.ts b/src/KonvaApp/RenderingPrimitives/RenderEngine.ts index 5303473cdb..4262679c33 100644 --- a/src/KonvaApp/RenderingPrimitives/RenderEngine.ts +++ b/src/KonvaApp/RenderingPrimitives/RenderEngine.ts @@ -363,7 +363,6 @@ export class RenderEngine { } // only pick nodes that intersect with the canvas on screen bounds to freeze. - for (let j = 0; j < largestNumberOfFrames; j++) { // Seek Video Nodes first then draw let frameTime = undefined; @@ -444,24 +443,42 @@ export class RenderEngine { prompt: renderingOptions, }; - let isDoneStreaming = false; + // let isDoneStreaming = false; console.log(`Processing Frame:${j} out of ${largestNumberOfFrames}`); - if (j == Math.floor(largestNumberOfFrames)) { - isDoneStreaming = true; - } + // if (j == Math.floor(largestNumberOfFrames)) { + // isDoneStreaming = true; + // } - console.log(isDoneStreaming); + //console.log(isDoneStreaming); - this.diffusionWorker.sendData(1, data, isDoneStreaming); + this.diffusionWorker.sendData(1, data, false); - // To ensure there is no lingering frames. - if (isDoneStreaming) { - console.log("Done streaming"); - break; - } + // // To ensure there is no lingering frames. + // if (isDoneStreaming) { + // console.log("Done streaming"); + // break; + // } } + } // end of largest number of frames loop + + // finished looping + if (!this.diffusionWorker) { + console.log("Didn't Initialize Diffusion"); + return; } + this.diffusionWorker.sendData( + 1, + { + height: this.height, + width: this.width, + imageBitmap: undefined, + frame: -1, + totalFrames: largestNumberOfFrames, + prompt: renderingOptions, + }, + true, + ); } } diff --git a/src/KonvaApp/RenderingPrimitives/note.txt b/src/KonvaApp/RenderingPrimitives/note.txt new file mode 100644 index 0000000000..36ee2bf8dc --- /dev/null +++ b/src/KonvaApp/RenderingPrimitives/note.txt @@ -0,0 +1,18 @@ + const dataURL = this.videoLayer.toDataURL({ + x: this.captureCanvas.x(), + y: this.captureCanvas.y(), + width: this.captureCanvas.width(), + height: this.captureCanvas.height(), + }); + + + // Create an image element to display the captured area + const img = new Image(); + img.src = dataURL; + document.body.appendChild(img); // Append the image to the body or any other container + + // Optionally, you can download the captured image + const link = document.createElement("a"); + link.href = dataURL; + link.download = "snapshot.png"; + link.click(); \ No newline at end of file diff --git a/src/KonvaApp/SharedWorkers/Diffusion/DiffusionSharedWorker.ts b/src/KonvaApp/SharedWorkers/Diffusion/DiffusionSharedWorker.ts index 766d9022d2..d48beef67a 100644 --- a/src/KonvaApp/SharedWorkers/Diffusion/DiffusionSharedWorker.ts +++ b/src/KonvaApp/SharedWorkers/Diffusion/DiffusionSharedWorker.ts @@ -27,7 +27,7 @@ export interface DiffusionSharedWorkerProgressData { } export interface DiffusionSharedWorkerItemData { - imageBitmap: ImageBitmap; + imageBitmap: ImageBitmap | undefined; totalFrames: number; frame: number; height: number; @@ -74,6 +74,8 @@ export class DiffusionSharedWorker extends SharedWorkerBase< this.mediaAPI = new MediaUploadApi(); this.blobs = []; + + this.totalFrames = 0; } async zipBlobs(): Promise { @@ -102,6 +104,8 @@ export class DiffusionSharedWorker extends SharedWorkerBase< // make request via api with options try { + this.totalFrames = item.totalFrames; + if (this.offscreenCanvas === undefined) { this.offscreenCanvas = new OffscreenCanvas(item.width, item.height); this.bitmapContext = this.offscreenCanvas.getContext("bitmaprenderer"); @@ -112,18 +116,21 @@ export class DiffusionSharedWorker extends SharedWorkerBase< throw Error("Bitmap Rendering Context Not Availible."); } - this.bitmapContext.transferFromImageBitmap(item.imageBitmap); + if (item.imageBitmap !== undefined) { + this.bitmapContext.transferFromImageBitmap(item.imageBitmap); - const blob = await this.offscreenCanvas.convertToBlob({ - quality: 1.0, - type: this.imageType, - }); + const blob = await this.offscreenCanvas.convertToBlob({ + quality: 1.0, + type: this.imageType, + }); + + this.blobs.push(blob); + console.log("Length of blob"); + console.log(this.blobs.length); + } - this.blobs.push(blob); - console.log("Length of blob"); - console.log(this.blobs.length); // progress - const aproxSteps = item.totalFrames; + const aproxSteps = this.totalFrames; const totalPercent = 100.0; const progressData: DiffusionSharedWorkerProgressData = { diff --git a/src/KonvaApp/SharedWorkers/Diffusion/DiffusionSharedWorkerClient.ts b/src/KonvaApp/SharedWorkers/Diffusion/DiffusionSharedWorkerClient.ts index 74c4e2c834..f2d1eccb02 100644 --- a/src/KonvaApp/SharedWorkers/Diffusion/DiffusionSharedWorkerClient.ts +++ b/src/KonvaApp/SharedWorkers/Diffusion/DiffusionSharedWorkerClient.ts @@ -91,7 +91,7 @@ export class DiffusionSharedWorkerClient< async sendData( jobID: number, - data: DiffusionSharedWorkerItemData, + data: DiffusionSharedWorkerItemData | undefined, isDoneStreaming: boolean, ) { const payload: SharedWorkerRequest = {