Spaces:
Running
Running
Update index.html
Browse files- index.html +31 -39
index.html
CHANGED
@@ -318,7 +318,7 @@
|
|
318 |
const historyGrid = document.getElementById('history-grid');
|
319 |
|
320 |
// API Endpoint
|
321 |
-
const API_URL = 'https://multimodalart-cosxl.hf.space/
|
322 |
|
323 |
// Current state
|
324 |
let uploadedImage = null;
|
@@ -388,14 +388,6 @@
|
|
388 |
});
|
389 |
});
|
390 |
|
391 |
-
async function fileToBase64(file) {
|
392 |
-
return new Promise((resolve, reject) => {
|
393 |
-
const reader = new FileReader();
|
394 |
-
reader.readAsDataURL(file);
|
395 |
-
reader.onload = () => resolve(reader.result.split(',')[1]);
|
396 |
-
reader.onerror = error => reject(error);
|
397 |
-
});
|
398 |
-
}
|
399 |
generateBtn.addEventListener('click', async () => {
|
400 |
if (!uploadedImage) {
|
401 |
alert('Please upload an image first');
|
@@ -412,28 +404,24 @@
|
|
412 |
loadingIcon.classList.remove('hidden');
|
413 |
generateBtn.disabled = true;
|
414 |
|
415 |
-
|
416 |
-
|
417 |
-
const
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
imageBase64, // Image data
|
423 |
-
colorPrompt.value, // Positive prompt
|
424 |
negativePrompt.value, // Negative prompt
|
425 |
Number(guidanceScale.value), // Guidance scale
|
426 |
-
Number(steps.value) //
|
427 |
-
]
|
428 |
-
|
|
|
429 |
|
430 |
-
// API request
|
431 |
const response = await fetch(API_URL, {
|
432 |
method: 'POST',
|
433 |
-
|
434 |
-
'Content-Type': 'application/json',
|
435 |
-
},
|
436 |
-
body: JSON.stringify(payload)
|
437 |
});
|
438 |
|
439 |
// Handle response errors
|
@@ -443,25 +431,20 @@
|
|
443 |
}
|
444 |
|
445 |
const result = await response.json();
|
446 |
-
|
447 |
-
// Handle
|
448 |
-
|
449 |
-
|
450 |
-
resultImageData = result.data[0];
|
451 |
-
} else if (result.output) {
|
452 |
-
resultImageData = result.output;
|
453 |
-
} else {
|
454 |
-
throw new Error('Unexpected API response format');
|
455 |
}
|
456 |
|
457 |
// Display results
|
458 |
originalImage.src = URL.createObjectURL(uploadedFile);
|
459 |
-
resultImage.src = `data:image/png;base64,${
|
460 |
emptyState.classList.add('hidden');
|
461 |
resultContainer.classList.remove('hidden');
|
462 |
|
463 |
// Add to history
|
464 |
-
addToHistory(URL.createObjectURL(uploadedFile), `data:image/png;base64,${
|
465 |
historySection.classList.remove('hidden');
|
466 |
|
467 |
} catch (error) {
|
@@ -471,9 +454,18 @@
|
|
471 |
generateIcon.classList.remove('hidden');
|
472 |
loadingIcon.classList.add('hidden');
|
473 |
generateBtn.disabled = false;
|
474 |
-
|
475 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
476 |
});
|
|
|
477 |
|
478 |
downloadBtn.addEventListener('click', () => {
|
479 |
if (resultImage.src) {
|
|
|
318 |
const historyGrid = document.getElementById('history-grid');
|
319 |
|
320 |
// API Endpoint
|
321 |
+
const API_URL = 'https://multimodalart-cosxl.hf.space/run/predict';
|
322 |
|
323 |
// Current state
|
324 |
let uploadedImage = null;
|
|
|
388 |
});
|
389 |
});
|
390 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
391 |
generateBtn.addEventListener('click', async () => {
|
392 |
if (!uploadedImage) {
|
393 |
alert('Please upload an image first');
|
|
|
404 |
loadingIcon.classList.remove('hidden');
|
405 |
generateBtn.disabled = true;
|
406 |
|
407 |
+
try {
|
408 |
+
// Prepare form data according to Gradio's API requirements
|
409 |
+
const formData = new FormData();
|
410 |
+
formData.append('data', JSON.stringify({
|
411 |
+
'data': [
|
412 |
+
await fileToBase64(uploadedFile), // Image
|
413 |
+
colorPrompt.value, // Prompt
|
|
|
|
|
414 |
negativePrompt.value, // Negative prompt
|
415 |
Number(guidanceScale.value), // Guidance scale
|
416 |
+
Number(steps.value) // Steps
|
417 |
+
],
|
418 |
+
'fn_index': 0 // Important for Gradio interface
|
419 |
+
}));
|
420 |
|
421 |
+
// API request with proper headers
|
422 |
const response = await fetch(API_URL, {
|
423 |
method: 'POST',
|
424 |
+
body: formData
|
|
|
|
|
|
|
425 |
});
|
426 |
|
427 |
// Handle response errors
|
|
|
431 |
}
|
432 |
|
433 |
const result = await response.json();
|
434 |
+
|
435 |
+
// Handle Gradio response format
|
436 |
+
if (!result.data || !result.data[0]) {
|
437 |
+
throw new Error('Invalid API response format');
|
|
|
|
|
|
|
|
|
|
|
438 |
}
|
439 |
|
440 |
// Display results
|
441 |
originalImage.src = URL.createObjectURL(uploadedFile);
|
442 |
+
resultImage.src = `data:image/png;base64,${result.data[0]}`;
|
443 |
emptyState.classList.add('hidden');
|
444 |
resultContainer.classList.remove('hidden');
|
445 |
|
446 |
// Add to history
|
447 |
+
addToHistory(URL.createObjectURL(uploadedFile), `data:image/png;base64,${result.data[0]}`);
|
448 |
historySection.classList.remove('hidden');
|
449 |
|
450 |
} catch (error) {
|
|
|
454 |
generateIcon.classList.remove('hidden');
|
455 |
loadingIcon.classList.add('hidden');
|
456 |
generateBtn.disabled = false;
|
457 |
+
}
|
458 |
+
});
|
459 |
+
|
460 |
+
// Helper function to convert file to base64
|
461 |
+
async function fileToBase64(file) {
|
462 |
+
return new Promise((resolve, reject) => {
|
463 |
+
const reader = new FileReader();
|
464 |
+
reader.readAsDataURL(file);
|
465 |
+
reader.onload = () => resolve(reader.result.split(',')[1]);
|
466 |
+
reader.onerror = error => reject(error);
|
467 |
});
|
468 |
+
}
|
469 |
|
470 |
downloadBtn.addEventListener('click', () => {
|
471 |
if (resultImage.src) {
|