newtest / static /index.html
bigbossmonster's picture
Update static/index.html
47a9373 verified
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>MediaToolkit - Verifier</title>
<script src="https://cdn.tailwindcss.com"></script>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="styles.css">
</head>
<body class="bg-slate-50 text-slate-800 flex items-center justify-center min-h-screen py-12">
<div class="container mx-auto p-4 md:p-8 max-w-5xl">
<div class="bg-white rounded-2xl shadow-xl p-6 md:p-10">
<div class="mb-8">
<nav class="tab-nav-container" aria-label="Tabs">
<button class="tab-btn active" data-tab="verifierTab">
Subtitle Verifier
</button>
</nav>
</div>
<div id="verifierTab" class="tab-content">
<header class="text-center mb-8">
<h1 class="text-3xl md:text-4xl font-bold text-slate-900">Subtitle Verifier</h1>
<p class="text-slate-500 mt-2">Batch verify subtitles against PDF pages using Gemini.</p>
</header>
<main>
<div class="bg-slate-100 p-6 rounded-lg mb-8 border border-slate-200">
<h3 class="text-lg font-semibold text-slate-800 mb-4 flex items-center gap-2">
Configuration
</h3>
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
<div>
<label for="apiKeyInput" class="block text-sm font-medium text-slate-700 mb-2">Gemini API Keys</label>
<textarea id="apiKeyInput" rows="5" class="block w-full rounded-md border-slate-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm p-3 font-mono text-xs" placeholder="Paste API keys here (one per line) for parallel processing..."></textarea>
<p class="mt-1 text-xs text-slate-500">Multiple keys = Faster processing (Round-robin).</p>
</div>
<div class="space-y-4">
<div>
<label for="pagesPerRequestInput" class="block text-sm font-medium text-slate-700 mb-2">Pages per API Call</label>
<input type="number" id="pagesPerRequestInput" value="200" min="1" max="500" class="block w-full rounded-md border-slate-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm p-3">
<p class="mt-1 text-xs text-slate-500">How many PDF pages to send to Gemini at once.</p>
</div>
<div>
<label for="modelSelect" class="block text-sm font-medium text-slate-700 mb-2">Select Gemini Model</label>
<select id="modelSelect" class="block w-full rounded-md border-slate-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm p-3 bg-white">
<option value="gemini-3-flash-preview" selected>Gemini 3 Flash</option>
<option value="gemini-3-pro-preview">Gemini 3 Pro</option>
</select>
</div>
</div>
</div>
</div>
<div class="grid grid-cols-1 md:grid-cols-2 gap-6 mb-8">
<div>
<label for="pdfUpload" class="custom-file-upload rounded-lg w-full bg-white hover:bg-slate-50 transition-colors cursor-pointer border-2 border-dashed border-slate-300 p-8 flex flex-col items-center justify-center">
<span class="mt-2 block font-semibold text-indigo-600">Upload PDF Source</span>
<span id="pdfFileName" class="mt-1 block text-sm text-slate-500">Click to select file</span>
</label>
<input type="file" id="pdfUpload" accept=".pdf" class="hidden">
</div>
<div>
<label for="srtUpload" class="custom-file-upload rounded-lg w-full bg-white hover:bg-slate-50 transition-colors cursor-pointer border-2 border-dashed border-slate-300 p-8 flex flex-col items-center justify-center">
<span class="mt-2 block font-semibold text-indigo-600">Upload SRT File</span>
<span id="srtFileName" class="mt-1 block text-sm text-slate-500">Click to select file</span>
</label>
<input type="file" id="srtUpload" accept=".srt" class="hidden">
</div>
</div>
<div class="text-center mb-8">
<button id="verifyButton" class="bg-indigo-600 text-white font-semibold py-3 px-8 rounded-lg shadow-md hover:bg-indigo-700 disabled:bg-slate-400 disabled:cursor-not-allowed transition-all duration-300 transform hover:scale-105">
Run Batch Verification
</button>
</div>
<div id="loader" class="hidden flex flex-col justify-center items-center py-10 bg-slate-50 rounded-lg w-full min-h-[200px]">
<div class="w-10 h-10 border-4 border-indigo-200 border-l-indigo-600 rounded-full animate-spin"></div>
<p id="loaderText" class="mt-4 text-slate-600 text-center font-medium">Initializing Analysis...</p>
<div class="w-full max-w-sm mt-4 bg-slate-200 rounded-full h-2.5 overflow-hidden mx-auto">
<div id="progressBar" class="bg-indigo-600 h-2.5 rounded-full transition-all duration-300 ease-out" style="width: 0%"></div>
</div>
<p id="progressPercent" class="mt-2 text-sm font-medium text-indigo-700 text-center">0%</p>
</div>
<div id="resultsWrapper" class="hidden space-y-8 mt-8">
<div class="grid grid-cols-1 md:grid-cols-4 gap-4">
<div class="bg-emerald-50 p-4 rounded-lg border border-emerald-100 text-center">
<p class="text-sm text-emerald-600 font-medium">Chunks</p>
<p id="statChunks" class="text-2xl font-bold text-emerald-800">0</p>
</div>
<div class="bg-indigo-50 p-4 rounded-lg border border-indigo-100 text-center">
<p class="text-sm text-indigo-600 font-medium">Corrections</p>
<p id="statCorrections" class="text-2xl font-bold text-indigo-800">0</p>
</div>
<div class="bg-rose-50 p-4 rounded-lg border border-rose-100 text-center">
<p class="text-sm text-rose-600 font-medium">OCR Alerts</p>
<p id="statOcrErrors" class="text-2xl font-bold text-rose-800">0</p>
</div>
<div class="bg-amber-50 p-4 rounded-lg border border-amber-100 text-center">
<p class="text-sm text-amber-600 font-medium">System Errors</p>
<p id="statErrors" class="text-2xl font-bold text-amber-800">0</p>
</div>
</div>
<div class="grid grid-cols-1 md:grid-cols-2 gap-6 mt-6">
<div>
<h3 class="text-lg font-semibold mb-2 text-rose-700 flex items-center gap-2">
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"></path></svg>
OCR Error Reports
</h3>
<textarea id="ocrErrorOutput" readonly class="w-full h-64 bg-rose-50 text-rose-800 p-4 rounded-lg text-xs font-mono border border-rose-200 focus:outline-none resize-none"></textarea>
</div>
<div>
<h3 class="text-lg font-semibold mb-2 text-slate-700">Raw Corrections Data</h3>
<textarea id="correctedSrtOutput" readonly class="w-full h-64 bg-slate-100 text-slate-700 p-4 rounded-lg text-xs font-mono border border-slate-300 focus:outline-none resize-none"></textarea>
</div>
</div>
<div class="mt-6">
<div class="flex justify-between items-center mb-2">
<h3 class="text-lg font-semibold text-slate-700">Full JSON Response</h3>
<button id="downloadSrtBtn" class="bg-emerald-600 text-white font-semibold py-2 px-6 rounded-lg shadow hover:bg-emerald-700 transition-colors flex items-center gap-2 text-sm">
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4"></path></svg>
Download Corrected SRT
</button>
</div>
<textarea id="results" readonly class="w-full h-32 bg-slate-800 text-emerald-400 p-4 rounded-lg text-xs font-mono border border-slate-700 focus:outline-none"></textarea>
</div>
</div>
<div id="errorMessage" class="hidden mt-4 text-center bg-red-100 text-red-700 p-4 rounded-lg border border-red-200 font-medium"></div>
</main>
</div>
</div>
</div>
<script src="verify.js"></script>
</body>
</html>