Some checks failed
Build and Push Docker Image / build-and-push (push) Has been cancelled
104 lines
6.7 KiB
HTML
104 lines
6.7 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="ko">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>AI Media Hub</title>
|
|
<!-- Tailwind CSS (CDN) -->
|
|
<script src="https://cdn.tailwindcss.com"></script>
|
|
<link rel="stylesheet" href="style.css">
|
|
<!-- Google Fonts -->
|
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
|
|
</head>
|
|
<body class="bg-[#121212] text-white font-['Inter'] min-h-screen flex flex-col items-center">
|
|
|
|
<!-- Header -->
|
|
<header class="w-full py-6 px-8 border-b border-gray-800 flex justify-between items-center bg-[#1a1a1a]">
|
|
<h1 class="text-2xl font-bold bg-clip-text text-transparent bg-gradient-to-r from-blue-400 to-purple-500">
|
|
AI Media Hub <span class="text-sm text-gray-400 font-normal">Multimodal Ingest</span>
|
|
</h1>
|
|
<div id="status-bar" class="text-sm px-4 py-2 rounded-full bg-gray-800 border border-gray-700 text-gray-300 w-1/3 flex justify-between items-center transition-all">
|
|
<span id="status-text">Ready</span>
|
|
<div class="h-2 w-2 rounded-full bg-green-500" id="ws-indicator"></div>
|
|
</div>
|
|
</header>
|
|
|
|
<main class="w-full max-w-7xl px-4 py-8 grid grid-cols-1 lg:grid-cols-3 gap-8 flex-grow">
|
|
|
|
<!-- Zone A: AI Smart Discovery -->
|
|
<section class="col-span-1 lg:col-span-2 bg-[#1e1e1e] border border-gray-800 rounded-xl p-6 shadow-2xl flex flex-col">
|
|
<h2 class="text-lg font-semibold mb-4 flex items-center gap-2">
|
|
<span>🎯</span> Zone A: AI Smart Discovery
|
|
</h2>
|
|
<div class="flex gap-2 mb-6">
|
|
<input type="text" id="search-input" placeholder="한글 검색어 입력 (예: 해변 풍경)..."
|
|
class="flex-grow bg-[#2a2a2a] border border-gray-700 rounded-lg px-4 py-3 focus:outline-none focus:border-blue-500 transition-colors">
|
|
<button id="search-btn" class="bg-blue-600 hover:bg-blue-700 text-white font-medium py-3 px-6 rounded-lg transition-colors">
|
|
검색
|
|
</button>
|
|
</div>
|
|
|
|
<div id="discovery-results" class="grid grid-cols-2 sm:grid-cols-3 gap-4 flex-grow overflow-y-auto min-h-[400px]">
|
|
<!-- Results will be injected here -->
|
|
<div class="col-span-full h-full flex flex-col items-center justify-center text-gray-500">
|
|
<svg class="w-12 h-12 mb-2 opacity-50" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607z"></path></svg>
|
|
검색어를 입력하여 이미지를 탐색하세요
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- Right Column: Zone B and C -->
|
|
<div class="flex flex-col gap-8">
|
|
|
|
<!-- Zone B: Smart Ingest (Drag & Drop) -->
|
|
<section class="bg-[#1e1e1e] border border-gray-800 rounded-xl p-6 shadow-2xl flex flex-col h-[300px]">
|
|
<h2 class="text-lg font-semibold mb-4 flex items-center gap-2">
|
|
<span>📥</span> Zone B: Smart Ingest
|
|
</h2>
|
|
<div id="dropzone" class="flex-grow border-2 border-dashed border-gray-600 hover:border-purple-500 rounded-xl flex flex-col items-center justify-center bg-[#252525] transition-all cursor-pointer group">
|
|
<svg class="w-10 h-10 text-gray-400 group-hover:text-purple-400 mb-2 transition-colors" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-8l-4-4m0 0L8 8m4-4v12"></path></svg>
|
|
<p class="text-sm text-gray-400 group-hover:text-gray-300">이곳에 미디어 파일을 드래그 & 드랍</p>
|
|
<input type="file" id="file-input" class="hidden">
|
|
</div>
|
|
</section>
|
|
|
|
<!-- Zone C: Direct Downloader -->
|
|
<section class="bg-[#1e1e1e] border border-gray-800 rounded-xl p-6 shadow-2xl flex-grow">
|
|
<h2 class="text-lg font-semibold mb-4 flex items-center gap-2">
|
|
<span>✂️</span> Zone C: Direct Downloader
|
|
</h2>
|
|
<div class="flex flex-col gap-4">
|
|
<div>
|
|
<label class="block text-xs text-gray-400 mb-1">미디어 URL</label>
|
|
<input type="text" id="dl-url" placeholder="https://youtube.com/..." class="w-full bg-[#2a2a2a] border border-gray-700 rounded-lg px-3 py-2 text-sm focus:outline-none focus:border-purple-500">
|
|
</div>
|
|
<div class="flex gap-4">
|
|
<div class="flex-1">
|
|
<label class="block text-xs text-gray-400 mb-1">시작시간 (선택)</label>
|
|
<input type="text" id="dl-start" placeholder="hh:mm:ss" class="w-full bg-[#2a2a2a] border border-gray-700 rounded-lg px-3 py-2 text-sm focus:outline-none focus:border-purple-500">
|
|
</div>
|
|
<div class="flex-1">
|
|
<label class="block text-xs text-gray-400 mb-1">종료시간 (선택)</label>
|
|
<input type="text" id="dl-end" placeholder="hh:mm:ss" class="w-full bg-[#2a2a2a] border border-gray-700 rounded-lg px-3 py-2 text-sm focus:outline-none focus:border-purple-500">
|
|
</div>
|
|
</div>
|
|
<button id="dl-btn" class="w-full mt-2 bg-gradient-to-r from-purple-600 to-indigo-600 hover:from-purple-500 hover:to-indigo-500 text-white font-medium py-3 rounded-lg transition-colors">
|
|
다운로드 시작
|
|
</button>
|
|
<!-- Confirm Modal (Hidden by default) -->
|
|
<div id="confirm-modal" class="hidden flex-col items-center mt-4 p-4 border border-yellow-600 bg-yellow-900/20 rounded-lg">
|
|
<p class="text-sm text-yellow-300 mb-3 text-center">이미 다운로드 이력이 있는 URL입니다. 그래도 진행하시겠습니까?</p>
|
|
<div class="flex gap-2">
|
|
<button id="dl-confirm-btn" class="bg-yellow-600 hover:bg-yellow-500 text-white text-xs px-4 py-1.5 rounded">강제 진행</button>
|
|
<button id="dl-cancel-btn" class="bg-gray-600 hover:bg-gray-500 text-white text-xs px-4 py-1.5 rounded">취소</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
</div>
|
|
</main>
|
|
|
|
<script src="app.js"></script>
|
|
</body>
|
|
</html>
|