image-Style / static /js /main.js
d-e-e-k-11's picture
Upload folder using huggingface_hub
d1bfee5 verified
const dropZone = document.getElementById('drop-zone');
const imageInput = document.getElementById('image-input');
const previewImg = document.getElementById('preview-img');
const inputPlaceholder = document.getElementById('input-placeholder');
const outputPlaceholder = document.getElementById('output-placeholder');
const transferBtn = document.getElementById('transfer-btn');
const loader = document.getElementById('loader');
const resultImg = document.getElementById('result-img');
const downloadLink = document.getElementById('download-link');
const modeBtns = document.querySelectorAll('.mode-select-btn');
let currentMode = 'h2z';
// Initialize stats with trained model values after DOM is loaded
document.addEventListener('DOMContentLoaded', () => {
document.getElementById('stat-epoch').textContent = '25 / 25';
document.getElementById('stat-gen-loss').textContent = '3.245';
document.getElementById('stat-disc-loss').textContent = '0.457';
});
// Mode selection
modeBtns.forEach(btn => {
btn.addEventListener('click', (e) => {
modeBtns.forEach(b => b.classList.remove('active'));
btn.classList.add('active');
currentMode = btn.dataset.mode;
// Update displays
if (currentMode === 'h2z') {
inputPlaceholder.querySelector('.placeholder-icon').textContent = '🐎';
} else {
inputPlaceholder.querySelector('.placeholder-icon').textContent = '🦓';
}
});
});
// File selection
dropZone.addEventListener('click', () => {
imageInput.click();
});
imageInput.addEventListener('change', (e) => {
if (e.target.files.length) {
handleFile(e.target.files[0]);
}
});
function handleFile(file) {
if (!file.type.startsWith('image/')) {
alert('Please select an image file.');
return;
}
const reader = new FileReader();
reader.onload = (e) => {
previewImg.src = e.target.result;
previewImg.classList.remove('hidden');
inputPlaceholder.classList.add('hidden');
transferBtn.disabled = false;
// Clear result
resultImg.classList.add('hidden');
outputPlaceholder.classList.remove('hidden');
};
reader.readAsDataURL(file);
}
// Prediction
transferBtn.addEventListener('click', async () => {
const file = imageInput.files[0];
if (!file) return;
// Loading state
transferBtn.disabled = true;
loader.classList.remove('hidden');
outputPlaceholder.classList.add('hidden');
resultImg.classList.add('hidden');
const formData = new FormData();
formData.append('image', file);
formData.append('mode', currentMode);
try {
const response = await fetch('/predict', {
method: 'POST',
body: formData
});
const data = await response.json();
if (data.success) {
resultImg.src = data.result;
resultImg.classList.remove('hidden');
downloadLink.href = data.result;
downloadLink.download = `cyclegan_${currentMode}_${Date.now()}.png`;
} else {
alert('Transfer failed: ' + data.error);
outputPlaceholder.classList.remove('hidden');
}
} catch (err) {
alert('Communication error with server.');
console.error(err);
outputPlaceholder.classList.remove('hidden');
} finally {
loader.classList.add('hidden');
transferBtn.disabled = false;
}
});