OXIESEC PANEL
- Current Dir:
/
/
var
/
www
/
Deeplit transcription
Server IP: 139.59.38.164
Upload:
Create Dir:
Name
Size
Modified
Perms
📁
..
-
05/09/2025 11:18:49 AM
rwxr-xr-x
📄
index.html
13.72 KB
05/09/2025 11:19:22 AM
rw-r--r--
📄
process_image.php
5.76 KB
05/09/2025 11:19:22 AM
rw-r--r--
Editing: index.html
Close
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Deeplit Transcription</title> <style> :root { --primary-color: #10a37f; --secondary-color: #f0f0f0; --text-color: #333; --shadow-color: rgba(0, 0, 0, 0.1); } * { box-sizing: border-box; margin: 0; padding: 0; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; } body { background-color: #f9f9f9; color: var(--text-color); line-height: 1.6; padding: 20px; } .container { max-width: 800px; margin: 0 auto; background-color: #fff; border-radius: 10px; box-shadow: 0 0 20px var(--shadow-color); padding: 20px; } h1 { color: var(--primary-color); text-align: center; margin-bottom: 20px; } .step-container { margin-bottom: 20px; padding: 15px; border-radius: 5px; background-color: var(--secondary-color); } .step-header { display: flex; align-items: center; margin-bottom: 10px; } .step-number { background-color: var(--primary-color); color: white; width: 30px; height: 30px; border-radius: 50%; display: flex; align-items: center; justify-content: center; margin-right: 10px; font-weight: bold; } .step-title { font-size: 1.2rem; font-weight: bold; } .form-group { margin-bottom: 15px; } label { display: block; margin-bottom: 5px; font-weight: bold; } input[type="text"], input[type="file"], textarea, select { width: 100%; padding: 10px; border: 1px solid #ddd; border-radius: 5px; font-size: 16px; } textarea { height: 150px; resize: vertical; } .preview-container { margin-top: 15px; display: none; } .preview-image { max-width: 100%; max-height: 300px; display: block; margin: 0 auto; border-radius: 5px; box-shadow: 0 0 10px var(--shadow-color); } .btn { background-color: var(--primary-color); color: white; border: none; padding: 10px 20px; border-radius: 5px; cursor: pointer; font-size: 16px; display: inline-block; transition: background-color 0.3s; } .btn:hover { background-color: #0d8c6e; } .btn:disabled { background-color: #cccccc; cursor: not-allowed; } .result-container { margin-top: 20px; padding: 15px; border-radius: 5px; background-color: var(--secondary-color); display: none; } .loader { border: 4px solid #f3f3f3; border-top: 4px solid var(--primary-color); border-radius: 50%; width: 30px; height: 30px; animation: spin 2s linear infinite; margin: 20px auto; display: none; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } .error-message { color: #d9534f; margin-top: 5px; display: none; } .success-message { color: #5cb85c; margin-top: 5px; display: none; } .whatsapp-btn { background-color: #25D366; margin-top: 10px; } .whatsapp-btn:hover { background-color: #128C7E; } </style> </head> <body> <div class="container"> <h1>Deeplit Transcription</h1> <!-- API key is hardcoded in PHP file --> <input type="hidden" id="api-key"> <div class="step-container"> <div class="step-header"> <span class="step-number">1</span> <span class="step-title">Upload Image</span> </div> <div class="form-group"> <label for="image-upload">Select Image:</label> <input type="file" id="image-upload" accept="image/*"> <div class="error-message" id="image-error">Please select an image file</div> </div> <div class="preview-container" id="preview-container"> <img id="preview-image" class="preview-image" alt="Preview"> </div> </div> <div class="step-container"> <div class="step-header"> <span class="step-number">2</span> <span class="step-title">Choose Strategy</span> </div> <div class="form-group"> <label for="strategy">Select Strategy:</label> <select id="strategy"> <option value="default">Default - General Transcription</option> <option value="detailed">Detailed - Include all text elements</option> <option value="summary">Summary - Concise overview of content</option> <option value="structured">Structured - Organized in sections</option> <option value="custom">Custom Strategy</option> </select> </div> <div class="form-group" id="custom-strategy-container" style="display: none;"> <label for="custom-strategy">Custom Strategy Instructions:</label> <textarea id="custom-strategy" placeholder="Enter your custom transcription strategy instructions..."></textarea> </div> </div> <div class="form-group"> <button id="process-btn" class="btn">Process Image</button> <div class="loader" id="loader"></div> <div class="error-message" id="process-error">An error occurred while processing your request</div> </div> <div class="result-container" id="result-container"> <h3>Transcription Result</h3> <div class="form-group"> <label for="transcript">Transcript:</label> <textarea id="transcript" readonly></textarea> </div> <div class="form-group"> <button id="share-whatsapp" class="btn whatsapp-btn">Share to WhatsApp</button> <div class="success-message" id="share-success">Ready to share! Click the button above.</div> <div class="error-message" id="share-error">Error preparing WhatsApp share</div> </div> </div> </div> <script> document.addEventListener('DOMContentLoaded', function() { // DOM Elements const apiKeyInput = document.getElementById('api-key'); const imageUpload = document.getElementById('image-upload'); const previewContainer = document.getElementById('preview-container'); const previewImage = document.getElementById('preview-image'); const strategySelect = document.getElementById('strategy'); const customStrategyContainer = document.getElementById('custom-strategy-container'); const customStrategyInput = document.getElementById('custom-strategy'); const processBtn = document.getElementById('process-btn'); const loader = document.getElementById('loader'); const resultContainer = document.getElementById('result-container'); const transcriptTextarea = document.getElementById('transcript'); const shareWhatsappBtn = document.getElementById('share-whatsapp'); // Error message elements const apiKeyError = document.getElementById('api-key-error'); const imageError = document.getElementById('image-error'); const processError = document.getElementById('process-error'); const shareError = document.getElementById('share-error'); const shareSuccess = document.getElementById('share-success'); // Store uploaded image data let imageData = null; // Event Listeners imageUpload.addEventListener('change', handleImageUpload); strategySelect.addEventListener('change', toggleCustomStrategy); processBtn.addEventListener('click', processImage); shareWhatsappBtn.addEventListener('click', shareToWhatsApp); // API key is hardcoded in PHP file, no need to check for saved key // Functions function handleImageUpload(e) { const file = e.target.files[0]; imageError.style.display = 'none'; if (file) { if (!file.type.match('image.*')) { imageError.textContent = 'Please select an image file'; imageError.style.display = 'block'; return; } const reader = new FileReader(); reader.onload = function(event) { previewImage.src = event.target.result; previewContainer.style.display = 'block'; imageData = event.target.result; }; reader.readAsDataURL(file); } } function toggleCustomStrategy() { customStrategyContainer.style.display = strategySelect.value === 'custom' ? 'block' : 'none'; } function validateForm() { let isValid = true; // Validate Image if (!imageData) { imageError.style.display = 'block'; isValid = false; } else { imageError.style.display = 'none'; } return isValid; } function processImage() { if (!validateForm()) { return; } // Show loader and hide previous results loader.style.display = 'block'; resultContainer.style.display = 'none'; processError.style.display = 'none'; processBtn.disabled = true; // Get strategy let strategy = strategySelect.value; let customInstructions = ''; if (strategy === 'custom') { customInstructions = customStrategyInput.value.trim(); } // Prepare data for backend const formData = new FormData(); formData.append('image_data', imageData); formData.append('strategy', strategy); formData.append('custom_instructions', customInstructions); // Send request to backend fetch('process_image.php', { method: 'POST', body: formData }) .then(response => { if (!response.ok) { throw new Error('Network response was not ok'); } return response.json(); }) .then(data => { loader.style.display = 'none'; processBtn.disabled = false; if (data.error) { processError.textContent = data.error; processError.style.display = 'block'; } else { transcriptTextarea.value = data.transcript; resultContainer.style.display = 'block'; shareSuccess.style.display = 'block'; } }) .catch(error => { loader.style.display = 'none'; processBtn.disabled = false; processError.textContent = 'An error occurred: ' + error.message; processError.style.display = 'block'; console.error('Error:', error); }); } function shareToWhatsApp() { const transcript = encodeURIComponent(transcriptTextarea.value); if (transcript) { // Create a temporary link element const a = document.createElement('a'); a.href = `https://api.whatsapp.com/send?text=${transcript}`; a.target = '_blank'; a.click(); } else { shareError.style.display = 'block'; } } }); </script> </body> </html>