|
<!DOCTYPE html> |
|
<html lang="en"> |
|
<head> |
|
<meta charset="UTF-8"> |
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|
<title>ElevenLabs AI Voice Cloning Studio</title> |
|
<script src="https://cdn.tailwindcss.com"></script> |
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> |
|
<style> |
|
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap'); |
|
|
|
body { |
|
font-family: 'Inter', sans-serif; |
|
background-color: #f8fafc; |
|
} |
|
|
|
.gradient-bg { |
|
background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 50%, #d946ef 100%); |
|
} |
|
|
|
.waveform { |
|
background: repeating-linear-gradient( |
|
90deg, |
|
#e2e8f0, |
|
#e2e8f0 2px, |
|
transparent 2px, |
|
transparent 4px |
|
); |
|
height: 60px; |
|
} |
|
|
|
.voice-card:hover { |
|
transform: translateY(-5px); |
|
box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); |
|
} |
|
|
|
.recording { |
|
animation: pulse 1.5s infinite; |
|
} |
|
|
|
@keyframes pulse { |
|
0% { box-shadow: 0 0 0 0 rgba(239, 68, 68, 0.7); } |
|
70% { box-shadow: 0 0 0 10px rgba(239, 68, 68, 0); } |
|
100% { box-shadow: 0 0 0 0 rgba(239, 68, 68, 0); } |
|
} |
|
|
|
.play-btn { |
|
transition: all 0.3s ease; |
|
} |
|
|
|
.play-btn:hover { |
|
transform: scale(1.1); |
|
} |
|
</style> |
|
</head> |
|
<body> |
|
<div class="min-h-screen"> |
|
|
|
<header class="gradient-bg text-white"> |
|
<div class="container mx-auto px-4 py-6"> |
|
<div class="flex justify-between items-center"> |
|
<div class="flex items-center space-x-2"> |
|
<i class="fas fa-robot text-3xl"></i> |
|
<h1 class="text-2xl font-bold">ElevenLabs Voice Studio</h1> |
|
</div> |
|
<div class="flex items-center space-x-4"> |
|
<button class="px-4 py-2 bg-white text-indigo-600 rounded-lg font-medium hover:bg-gray-100 transition"> |
|
<i class="fas fa-key mr-2"></i>API Key |
|
</button> |
|
<button class="px-4 py-2 bg-indigo-700 text-white rounded-lg font-medium hover:bg-indigo-800 transition"> |
|
<i class="fas fa-user mr-2"></i>Account |
|
</button> |
|
</div> |
|
</div> |
|
</div> |
|
</header> |
|
|
|
|
|
<main class="container mx-auto px-4 py-8"> |
|
<div class="grid grid-cols-1 lg:grid-cols-3 gap-8"> |
|
|
|
<div class="lg:col-span-1 bg-white rounded-xl shadow-md p-6"> |
|
<div class="flex justify-between items-center mb-6"> |
|
<h2 class="text-xl font-semibold text-gray-800">My Voices</h2> |
|
<button id="newVoiceBtn" class="px-3 py-1 bg-indigo-600 text-white rounded-lg text-sm hover:bg-indigo-700 transition"> |
|
<i class="fas fa-plus mr-1"></i> New |
|
</button> |
|
</div> |
|
|
|
<div class="space-y-4"> |
|
|
|
<div class="voice-card bg-gray-50 rounded-lg p-4 border border-gray-200 transition duration-300 cursor-pointer"> |
|
<div class="flex items-center space-x-3"> |
|
<div class="w-12 h-12 rounded-full bg-indigo-100 flex items-center justify-center"> |
|
<i class="fas fa-user text-indigo-600"></i> |
|
</div> |
|
<div> |
|
<h3 class="font-medium text-gray-800">Professional Male</h3> |
|
<p class="text-xs text-gray-500">English • Standard</p> |
|
</div> |
|
</div> |
|
<div class="mt-3 flex justify-between items-center"> |
|
<span class="text-xs px-2 py-1 bg-green-100 text-green-800 rounded">Active</span> |
|
<div class="flex space-x-2"> |
|
<button class="text-gray-500 hover:text-indigo-600"> |
|
<i class="fas fa-play play-btn"></i> |
|
</button> |
|
<button class="text-gray-500 hover:text-indigo-600"> |
|
<i class="fas fa-edit"></i> |
|
</button> |
|
</div> |
|
</div> |
|
</div> |
|
|
|
<div class="voice-card bg-gray-50 rounded-lg p-4 border border-gray-200 transition duration-300 cursor-pointer"> |
|
<div class="flex items-center space-x-3"> |
|
<div class="w-12 h-12 rounded-full bg-pink-100 flex items-center justify-center"> |
|
<i class="fas fa-user text-pink-600"></i> |
|
</div> |
|
<div> |
|
<h3 class="font-medium text-gray-800">Friendly Female</h3> |
|
<p class="text-xs text-gray-500">English • Conversational</p> |
|
</div> |
|
</div> |
|
<div class="mt-3 flex justify-between items-center"> |
|
<span class="text-xs px-2 py-1 bg-gray-100 text-gray-800 rounded">Inactive</span> |
|
<div class="flex space-x-2"> |
|
<button class="text-gray-500 hover:text-indigo-600"> |
|
<i class="fas fa-play play-btn"></i> |
|
</button> |
|
<button class="text-gray-500 hover:text-indigo-600"> |
|
<i class="fas fa-edit"></i> |
|
</button> |
|
</div> |
|
</div> |
|
</div> |
|
|
|
<div class="voice-card bg-gray-50 rounded-lg p-4 border border-gray-200 transition duration-300 cursor-pointer"> |
|
<div class="flex items-center space-x-3"> |
|
<div class="w-12 h-12 rounded-full bg-purple-100 flex items-center justify-center"> |
|
<i class="fas fa-user text-purple-600"></i> |
|
</div> |
|
<div> |
|
<h3 class="font-medium text-gray-800">British Narrator</h3> |
|
<p class="text-xs text-gray-500">English • British</p> |
|
</div> |
|
</div> |
|
<div class="mt-3 flex justify-between items-center"> |
|
<span class="text-xs px-2 py-1 bg-gray-100 text-gray-800 rounded">Inactive</span> |
|
<div class="flex space-x-2"> |
|
<button class="text-gray-500 hover:text-indigo-600"> |
|
<i class="fas fa-play play-btn"></i> |
|
</button> |
|
<button class="text-gray-500 hover:text-indigo-600"> |
|
<i class="fas fa-edit"></i> |
|
</button> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
|
|
|
|
<div id="addVoiceModal" class="hidden fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50"> |
|
<div class="bg-white rounded-xl p-6 w-full max-w-md"> |
|
<div class="flex justify-between items-center mb-4"> |
|
<h3 class="text-lg font-semibold">Create New Voice</h3> |
|
<button id="closeModalBtn" class="text-gray-500 hover:text-gray-700"> |
|
<i class="fas fa-times"></i> |
|
</button> |
|
</div> |
|
|
|
<div class="space-y-4"> |
|
<div> |
|
<label class="block text-sm font-medium text-gray-700 mb-1">Voice Name</label> |
|
<input type="text" class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-indigo-500 focus:border-indigo-500"> |
|
</div> |
|
|
|
<div> |
|
<label class="block text-sm font-medium text-gray-700 mb-1">Voice Type</label> |
|
<select class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-indigo-500 focus:border-indigo-500"> |
|
<option>Clone from audio</option> |
|
<option>Use preset voice</option> |
|
<option>Generate random voice</option> |
|
</select> |
|
</div> |
|
|
|
<div id="audioUploadSection"> |
|
<label class="block text-sm font-medium text-gray-700 mb-1">Upload Audio Samples</label> |
|
<div class="border-2 border-dashed border-gray-300 rounded-lg p-6 text-center"> |
|
<i class="fas fa-microphone text-3xl text-gray-400 mb-2"></i> |
|
<p class="text-sm text-gray-500">Drag & drop audio files here or click to browse</p> |
|
<input type="file" class="hidden" accept="audio/*"> |
|
</div> |
|
<p class="mt-1 text-xs text-gray-500">Upload at least 30 seconds of clear speech for best results</p> |
|
</div> |
|
|
|
<div class="flex justify-end space-x-3 pt-4"> |
|
<button class="px-4 py-2 border border-gray-300 rounded-lg text-gray-700 hover:bg-gray-50">Cancel</button> |
|
<button class="px-4 py-2 bg-indigo-600 text-white rounded-lg hover:bg-indigo-700">Create Voice</button> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
|
|
|
|
<div class="lg:col-span-2 space-y-6"> |
|
<div class="bg-white rounded-xl shadow-md p-6"> |
|
<h2 class="text-xl font-semibold text-gray-800 mb-4">Text to Speech</h2> |
|
|
|
<div class="mb-4"> |
|
<label class="block text-sm font-medium text-gray-700 mb-1">Select Voice</label> |
|
<div class="flex items-center space-x-3"> |
|
<select class="flex-1 px-3 py-2 border border-gray-300 rounded-lg focus:ring-indigo-500 focus:border-indigo-500"> |
|
<option>Professional Male</option> |
|
<option>Friendly Female</option> |
|
<option>British Narrator</option> |
|
</select> |
|
<button class="px-3 py-2 bg-gray-100 text-gray-700 rounded-lg hover:bg-gray-200"> |
|
<i class="fas fa-random"></i> |
|
</button> |
|
</div> |
|
</div> |
|
|
|
<div class="mb-4"> |
|
<label class="block text-sm font-medium text-gray-700 mb-1">Enter Text</label> |
|
<textarea rows="5" class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-indigo-500 focus:border-indigo-500" placeholder="Type or paste your text here...">Hello, this is a demonstration of the ElevenLabs AI voice cloning technology. The voice you're hearing has been generated by artificial intelligence.</textarea> |
|
</div> |
|
|
|
<div class="grid grid-cols-1 md:grid-cols-2 gap-4 mb-4"> |
|
<div> |
|
<label class="block text-sm font-medium text-gray-700 mb-1">Stability</label> |
|
<input type="range" min="0" max="100" value="75" class="w-full h-2 bg-gray-200 rounded-lg appearance-none cursor-pointer"> |
|
<div class="flex justify-between text-xs text-gray-500 mt-1"> |
|
<span>More variable</span> |
|
<span>More stable</span> |
|
</div> |
|
</div> |
|
<div> |
|
<label class="block text-sm font-medium text-gray-700 mb-1">Clarity + Similarity</label> |
|
<input type="range" min="0" max="100" value="65" class="w-full h-2 bg-gray-200 rounded-lg appearance-none cursor-pointer"> |
|
<div class="flex justify-between text-xs text-gray-500 mt-1"> |
|
<span>More clear</span> |
|
<span>More similar</span> |
|
</div> |
|
</div> |
|
</div> |
|
|
|
<div class="flex flex-wrap gap-3"> |
|
<button class="px-4 py-2 bg-indigo-600 text-white rounded-lg hover:bg-indigo-700 flex items-center"> |
|
<i class="fas fa-play mr-2"></i> Generate |
|
</button> |
|
<button class="px-4 py-2 border border-gray-300 text-gray-700 rounded-lg hover:bg-gray-50 flex items-center"> |
|
<i class="fas fa-download mr-2"></i> Download |
|
</button> |
|
<button class="px-4 py-2 border border-gray-300 text-gray-700 rounded-lg hover:bg-gray-50 flex items-center"> |
|
<i class="fas fa-share-alt mr-2"></i> Share |
|
|
|
</html> |