wip: upload files
Browse files- src/routes/+page.svelte +36 -9
src/routes/+page.svelte
CHANGED
@@ -19,6 +19,7 @@
|
|
19 |
let sketchEl: HTMLCanvasElement;
|
20 |
let isShowSketch = false;
|
21 |
let outputImgs: CanvasImageSource[] = [];
|
|
|
22 |
|
23 |
const animImageDuration = 500 as const;
|
24 |
const animNoiseDuration = 3000 as const;
|
@@ -96,11 +97,11 @@
|
|
96 |
noiseTs = performance.now();
|
97 |
drawNoise();
|
98 |
|
99 |
-
const { imgFile, imgBitmap: initialSketchBitmap } = await getCanvasSnapshot(canvas);
|
100 |
const form = new FormData();
|
101 |
form.append('prompt', promptTxt);
|
102 |
form.append('strength', '0.85');
|
103 |
-
form.append('image',
|
104 |
|
105 |
try {
|
106 |
const response = await fetch('https://sdb.pcuenca.net/i2i', {
|
@@ -131,6 +132,20 @@
|
|
131 |
)) as CanvasImageSource[];
|
132 |
outputImgs.push(initialSketchBitmap);
|
133 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
134 |
isShowSketch = true;
|
135 |
let i = 0;
|
136 |
imageTs = performance.now();
|
@@ -327,9 +342,6 @@
|
|
327 |
}
|
328 |
|
329 |
async function uploadFile(file: File): Promise<string> {
|
330 |
-
// const delay = ms => new Promise(res => setTimeout(res, ms));
|
331 |
-
// await delay(5000);
|
332 |
-
// return "abc.zyx";
|
333 |
const UPLOAD_URL = "https://huggingface.co/uploads";
|
334 |
const response = await fetch(UPLOAD_URL, {
|
335 |
method: "POST",
|
@@ -345,12 +357,27 @@
|
|
345 |
|
346 |
async function createCommunityPost() {
|
347 |
isUploading = true;
|
348 |
-
|
349 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
350 |
|
351 |
const params = new URLSearchParams({
|
352 |
title: promptTxt,
|
353 |
-
description:
|
354 |
});
|
355 |
|
356 |
const paramsStr = params.toString();
|
@@ -417,7 +444,7 @@
|
|
417 |
{#if canvas}
|
418 |
<div>
|
419 |
<div class="w-full flex justify-end">
|
420 |
-
|
421 |
</div>
|
422 |
<div class="flex gap-x-2 mt-3 items-start justify-center {isLoading ? 'animate-pulse' : ''}">
|
423 |
<span
|
|
|
19 |
let sketchEl: HTMLCanvasElement;
|
20 |
let isShowSketch = false;
|
21 |
let outputImgs: CanvasImageSource[] = [];
|
22 |
+
let outputFiles: {sketch: File, generations: File[]};
|
23 |
|
24 |
const animImageDuration = 500 as const;
|
25 |
const animNoiseDuration = 3000 as const;
|
|
|
97 |
noiseTs = performance.now();
|
98 |
drawNoise();
|
99 |
|
100 |
+
const { imgFile: sketch, imgBitmap: initialSketchBitmap } = await getCanvasSnapshot(canvas);
|
101 |
const form = new FormData();
|
102 |
form.append('prompt', promptTxt);
|
103 |
form.append('strength', '0.85');
|
104 |
+
form.append('image', sketch);
|
105 |
|
106 |
try {
|
107 |
const response = await fetch('https://sdb.pcuenca.net/i2i', {
|
|
|
132 |
)) as CanvasImageSource[];
|
133 |
outputImgs.push(initialSketchBitmap);
|
134 |
|
135 |
+
outputFiles = {
|
136 |
+
sketch,
|
137 |
+
generations: (await Promise.all(
|
138 |
+
imagesBase64Strs.map(async (imgBase64Str) => {
|
139 |
+
const dataUrl = `data:image/png;base64, ${imgBase64Str}`;
|
140 |
+
const res: Response = await fetch(dataUrl);
|
141 |
+
const blob: Blob = await res.blob();
|
142 |
+
const imgId = Date.now() % 200;
|
143 |
+
const fileName = `diffuse-the-rest-${imgId}.png`;
|
144 |
+
return new File([blob], fileName, { type: 'image/png' });
|
145 |
+
})
|
146 |
+
)) as File[]
|
147 |
+
};
|
148 |
+
|
149 |
isShowSketch = true;
|
150 |
let i = 0;
|
151 |
imageTs = performance.now();
|
|
|
342 |
}
|
343 |
|
344 |
async function uploadFile(file: File): Promise<string> {
|
|
|
|
|
|
|
345 |
const UPLOAD_URL = "https://huggingface.co/uploads";
|
346 |
const response = await fetch(UPLOAD_URL, {
|
347 |
method: "POST",
|
|
|
357 |
|
358 |
async function createCommunityPost() {
|
359 |
isUploading = true;
|
360 |
+
// was there successful generation dawg
|
361 |
+
|
362 |
+
const files = [outputFiles.sketch, ...outputFiles.generations];
|
363 |
+
const urls = await Promise.all(files.map((f) => uploadFile(f)));
|
364 |
+
const htmlImgs = urls.map(url => `<img src="${url}" width="400" height="400">`);
|
365 |
+
const descriptionMd = `#### Prompt:
|
366 |
+
${promptTxt}
|
367 |
+
|
368 |
+
#### Sketch:
|
369 |
+
<div style="display: flex; overflow: scroll; column-gap: 0.75rem;">
|
370 |
+
${htmlImgs[0]}
|
371 |
+
</div>
|
372 |
+
|
373 |
+
#### Generations:
|
374 |
+
<div style="display: flex; flex-wrap: wrap; column-gap: 0.75rem;">
|
375 |
+
${htmlImgs.slice(1).join("\n")}
|
376 |
+
</div>`;
|
377 |
|
378 |
const params = new URLSearchParams({
|
379 |
title: promptTxt,
|
380 |
+
description: descriptionMd,
|
381 |
});
|
382 |
|
383 |
const paramsStr = params.toString();
|
|
|
444 |
{#if canvas}
|
445 |
<div>
|
446 |
<div class="w-full flex justify-end">
|
447 |
+
<ShareWithCommunity on:createCommunityPost={createCommunityPost} {isUploading}/>
|
448 |
</div>
|
449 |
<div class="flex gap-x-2 mt-3 items-start justify-center {isLoading ? 'animate-pulse' : ''}">
|
450 |
<span
|