| document.addEventListener('DOMContentLoaded', function() { |
| |
| const clothingDropzone = new Dropzone("#clothing-dropzone", { |
| url: "/upload", |
| maxFiles: 1, |
| acceptedFiles: "image/*", |
| autoProcessQueue: false, |
| addRemoveLinks: true, |
| dictDefaultMessage: "", |
| dictRemoveFile: "Remove", |
| clickable: true, |
| previewTemplate: ` |
| <div class="dz-preview dz-file-preview p-2"> |
| <div class="dz-image"> |
| <img data-dz-thumbnail class="w-full h-auto rounded" /> |
| </div> |
| <div class="dz-details"> |
| <div class="dz-filename"><span data-dz-name></span></div> |
| <div class="dz-size" data-dz-size></div> |
| </div> |
| <a class="dz-remove" href="javascript:undefined;" data-dz-remove>Remove</a> |
| </div> |
| `, |
| init: function() { |
| this.on("dragenter", function() { |
| this.element.classList.add('border-purple-500'); |
| }); |
| this.on("dragleave", function() { |
| this.element.classList.remove('border-purple-500'); |
| }); |
| this.on("drop", function() { |
| this.element.classList.remove('border-purple-500'); |
| }); |
| this.on("addedfile", function() { |
| this.element.classList.remove('border-purple-500'); |
| }); |
| } |
| }); |
| |
| const personDropzone = new Dropzone("#person-dropzone", { |
| url: "/upload", |
| maxFiles: 1, |
| acceptedFiles: "image/*", |
| autoProcessQueue: false, |
| addRemoveLinks: true, |
| dictDefaultMessage: "", |
| dictRemoveFile: "Remove", |
| clickable: true, |
| previewTemplate: ` |
| <div class="dz-preview dz-file-preview p-2"> |
| <div class="dz-image"> |
| <img data-dz-thumbnail class="w-full h-auto rounded" /> |
| </div> |
| <div class="dz-details"> |
| <div class="dz-filename"><span data-dz-name></span></div> |
| <div class="dz-size" data-dz-size></div> |
| </div> |
| <a class="dz-remove" href="javascript:undefined;" data-dz-remove>Remove</a> |
| </div> |
| `, |
| init: function() { |
| this.on("dragenter", function() { |
| this.element.classList.add('border-purple-500'); |
| }); |
| this.on("dragleave", function() { |
| this.element.classList.remove('border-purple-500'); |
| }); |
| this.on("drop", function() { |
| this.element.classList.remove('border-purple-500'); |
| }); |
| this.on("addedfile", function() { |
| this.element.classList.remove('border-purple-500'); |
| }); |
| } |
| }); |
| const generateBtn = document.getElementById('generate-btn'); |
| const resultImage = document.getElementById('result-image'); |
| const resultMessage = document.getElementById('result-message'); |
| const downloadBtn = document.getElementById('download-btn'); |
| const resultContainer = document.getElementById('result-container'); |
|
|
| generateBtn.addEventListener('click', async function() { |
| if (clothingDropzone.files.length === 0 || personDropzone.files.length === 0) { |
| alert('Please upload both a clothing item and your photo first!'); |
| return; |
| } |
|
|
| |
| generateBtn.disabled = true; |
| generateBtn.innerHTML = '<i data-feather="loader" class="animate-spin mr-2"></i> Processing...'; |
| feather.replace(); |
|
|
| try { |
| |
| |
| |
| |
| await new Promise(resolve => setTimeout(resolve, 2000)); |
| |
| |
| resultMessage.classList.add('hidden'); |
| resultImage.src = "http://static.photos/fashion/640x360/123"; |
| resultImage.classList.remove('hidden'); |
| downloadBtn.classList.remove('hidden'); |
| |
| } catch (error) { |
| console.error('Error:', error); |
| alert('An error occurred while generating your virtual try-on. Please try again.'); |
| } finally { |
| |
| generateBtn.disabled = false; |
| generateBtn.innerHTML = '<i data-feather="magic" class="mr-2"></i> Generate Virtual Try-On'; |
| feather.replace(); |
| } |
| }); |
|
|
| downloadBtn.addEventListener('click', function() { |
| if (!resultImage.src) return; |
| |
| |
| const link = document.createElement('a'); |
| link.href = resultImage.src; |
| link.download = 'virtual-tryon-result.png'; |
| document.body.appendChild(link); |
| link.click(); |
| document.body.removeChild(link); |
| }); |
|
|
| |
| async function callVirtualTryOnAPI(clothingImage, personImage) { |
| |
| |
| |
| |
| |
| |
| |
| return { |
| success: true, |
| resultImageUrl: "http://static.photos/fashion/640x360/123" |
| }; |
| } |
| }); |