Spaces:
Runtime error
Runtime error
efficient way to handle images already on canvas
Browse files
frontend/src/lib/App.svelte
CHANGED
@@ -81,7 +81,7 @@
|
|
81 |
};
|
82 |
|
83 |
const datapayload = {
|
84 |
-
data: [base64Crop, prompt, 0.75, 7.5,
|
85 |
};
|
86 |
|
87 |
const websocket = new WebSocket(PUBLIC_WS_INPAINTING);
|
|
|
81 |
};
|
82 |
|
83 |
const datapayload = {
|
84 |
+
data: [base64Crop, prompt, 0.75, 7.5, 40, 'patchmatch']
|
85 |
};
|
86 |
|
87 |
const websocket = new WebSocket(PUBLIC_WS_INPAINTING);
|
frontend/src/lib/PaintCanvas.svelte
CHANGED
@@ -7,7 +7,7 @@
|
|
7 |
|
8 |
import { useMyPresence, useObject } from '$lib/liveblocks';
|
9 |
import type { PromptImgObject } from '$lib/types';
|
10 |
-
import { CANVAS_SIZE } from '$lib/constants';
|
11 |
|
12 |
const myPresence = useMyPresence();
|
13 |
const promptImgStorage = useObject('promptImgStorage');
|
@@ -18,13 +18,34 @@
|
|
18 |
let containerEl: HTMLDivElement;
|
19 |
let canvasCtx: CanvasRenderingContext2D;
|
20 |
|
21 |
-
// keep track of images already rendered
|
22 |
const imagesOnCanvas = new Set();
|
23 |
|
24 |
function getpromptImgList(promptImgList: PromptImgObject[]): PromptImgObject[] {
|
25 |
if (promptImgList) {
|
26 |
-
|
27 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
28 |
}
|
29 |
return [];
|
30 |
}
|
|
|
7 |
|
8 |
import { useMyPresence, useObject } from '$lib/liveblocks';
|
9 |
import type { PromptImgObject } from '$lib/types';
|
10 |
+
import { CANVAS_SIZE, FRAME_SIZE, GRID_SIZE } from '$lib/constants';
|
11 |
|
12 |
const myPresence = useMyPresence();
|
13 |
const promptImgStorage = useObject('promptImgStorage');
|
|
|
18 |
let containerEl: HTMLDivElement;
|
19 |
let canvasCtx: CanvasRenderingContext2D;
|
20 |
|
|
|
21 |
const imagesOnCanvas = new Set();
|
22 |
|
23 |
function getpromptImgList(promptImgList: PromptImgObject[]): PromptImgObject[] {
|
24 |
if (promptImgList) {
|
25 |
+
//sorted by last updated
|
26 |
+
const canvasPixels = new Map();
|
27 |
+
for (const x of Array.from(Array(width / GRID_SIZE).keys())) {
|
28 |
+
for (const y of Array.from(Array(height / GRID_SIZE).keys())) {
|
29 |
+
canvasPixels.set(`${x * GRID_SIZE}_${y * GRID_SIZE}`, null);
|
30 |
+
}
|
31 |
+
}
|
32 |
+
const list: PromptImgObject[] = Object.values(promptImgList).sort((a, b) => b.date - a.date);
|
33 |
+
// init
|
34 |
+
for (const promptImg of list) {
|
35 |
+
const x = promptImg.position.x;
|
36 |
+
const y = promptImg.position.y;
|
37 |
+
for (const i of [...Array(FRAME_SIZE / GRID_SIZE).keys()]) {
|
38 |
+
for (const j of [...Array(FRAME_SIZE / GRID_SIZE).keys()]) {
|
39 |
+
const key = `${x + i * GRID_SIZE}_${y + j * GRID_SIZE}`;
|
40 |
+
if (!canvasPixels.get(key)) {
|
41 |
+
canvasPixels.set(key, promptImg.id);
|
42 |
+
}
|
43 |
+
}
|
44 |
+
}
|
45 |
+
}
|
46 |
+
const ids = new Set([...canvasPixels.values()]);
|
47 |
+
const filteredImages = list.filter((promptImg) => ids.has(promptImg.id));
|
48 |
+
return filteredImages.reverse().filter((promptImg) => !imagesOnCanvas.has(promptImg.id));
|
49 |
}
|
50 |
return [];
|
51 |
}
|
frontend/src/lib/constants.ts
CHANGED
@@ -17,8 +17,8 @@ export const EMOJIS = ['π', 'π', 'π', 'π', 'π¦', 'π', 'π', '
|
|
17 |
export const MAX_CAPACITY = 20;
|
18 |
|
19 |
export const CANVAS_SIZE = {
|
20 |
-
width: 512 *
|
21 |
-
height: 512 *
|
22 |
}
|
23 |
export const GRID_SIZE = 32
|
24 |
|
|
|
17 |
export const MAX_CAPACITY = 20;
|
18 |
|
19 |
export const CANVAS_SIZE = {
|
20 |
+
width: 512 * 6,
|
21 |
+
height: 512 * 6,
|
22 |
}
|
23 |
export const GRID_SIZE = 32
|
24 |
|