|
|
<!DOCTYPE html> |
|
|
<html lang="en"> |
|
|
<head> |
|
|
<meta charset="UTF-8"> |
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|
|
<title>Image & Video Editor | Creative 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> |
|
|
.editor-container { |
|
|
background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%); |
|
|
} |
|
|
.tool-btn { |
|
|
transition: all 0.3s ease; |
|
|
} |
|
|
.tool-btn:hover { |
|
|
transform: translateY(-3px); |
|
|
box-shadow: 0 10px 20px rgba(0,0,0,0.1); |
|
|
} |
|
|
.preview-box { |
|
|
box-shadow: 0 20px 25px -5px rgba(0,0,0,0.1), 0 10px 10px -5px rgba(0,0,0,0.04); |
|
|
} |
|
|
.slider-thumb::-webkit-slider-thumb { |
|
|
-webkit-appearance: none; |
|
|
appearance: none; |
|
|
width: 20px; |
|
|
height: 20px; |
|
|
border-radius: 50%; |
|
|
background: #4f46e5; |
|
|
cursor: pointer; |
|
|
} |
|
|
.tab-active { |
|
|
border-bottom: 3px solid #4f46e5; |
|
|
} |
|
|
</style> |
|
|
</head> |
|
|
<body class="bg-gray-50"> |
|
|
|
|
|
<header class="bg-white shadow-sm"> |
|
|
<div class="container mx-auto px-4 py-4 flex justify-between items-center"> |
|
|
<div class="flex items-center space-x-2"> |
|
|
<i class="fas fa-camera-retro text-indigo-600 text-2xl"></i> |
|
|
<h1 class="text-xl font-bold text-gray-800">Creative Studio</h1> |
|
|
</div> |
|
|
<nav class="hidden md:flex space-x-8"> |
|
|
<a href="#" class="text-gray-600 hover:text-indigo-600 font-medium">Home</a> |
|
|
<a href="#" class="text-gray-600 hover:text-indigo-600 font-medium">Features</a> |
|
|
<a href="#" class="text-gray-600 hover:text-indigo-600 font-medium">Tutorials</a> |
|
|
<a href="#" class="text-gray-600 hover:text-indigo-600 font-medium">Pricing</a> |
|
|
</nav> |
|
|
<div class="flex items-center space-x-4"> |
|
|
<button class="px-4 py-2 rounded-md text-gray-600 hover:bg-gray-100"> |
|
|
<i class="fas fa-user-circle text-xl"></i> |
|
|
</button> |
|
|
<button class="px-4 py-2 bg-indigo-600 text-white rounded-md hover:bg-indigo-700"> |
|
|
Upgrade |
|
|
</button> |
|
|
</div> |
|
|
</div> |
|
|
</header> |
|
|
|
|
|
|
|
|
<main class="container mx-auto px-4 py-8"> |
|
|
<div class="flex flex-col lg:flex-row gap-8"> |
|
|
|
|
|
<div class="w-full lg:w-1/4 bg-white rounded-xl shadow-md p-6 h-fit"> |
|
|
<div class="flex border-b mb-6"> |
|
|
<button id="image-tab" class="tab-active px-4 py-2 font-medium text-indigo-600">Image</button> |
|
|
<button id="video-tab" class="px-4 py-2 font-medium text-gray-500 hover:text-indigo-600">Video</button> |
|
|
</div> |
|
|
|
|
|
<div id="image-tools"> |
|
|
<div class="mb-6"> |
|
|
<h3 class="font-medium text-gray-700 mb-3">Upload Media</h3> |
|
|
<div class="border-2 border-dashed border-gray-300 rounded-lg p-8 text-center cursor-pointer hover:bg-gray-50"> |
|
|
<i class="fas fa-cloud-upload-alt text-3xl text-gray-400 mb-2"></i> |
|
|
<p class="text-gray-500">Drag & drop files here</p> |
|
|
<p class="text-sm text-gray-400 mt-1">or click to browse</p> |
|
|
<input type="file" id="file-upload" class="hidden" accept="image/*"> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div class="mb-6"> |
|
|
<h3 class="font-medium text-gray-700 mb-3">Face Tools</h3> |
|
|
<div class="grid grid-cols-3 gap-3"> |
|
|
<button class="tool-btn flex flex-col items-center p-3 bg-gray-100 rounded-lg hover:bg-indigo-50"> |
|
|
<i class="fas fa-user-edit text-indigo-600 text-xl mb-1"></i> |
|
|
<span class="text-xs text-gray-700">Face Swap</span> |
|
|
</button> |
|
|
<button class="tool-btn flex flex-col items-center p-3 bg-gray-100 rounded-lg hover:bg-indigo-50"> |
|
|
<i class="fas fa-smile text-indigo-600 text-xl mb-1"></i> |
|
|
<span class="text-xs text-gray-700">Expressions</span> |
|
|
</button> |
|
|
<button class="tool-btn flex flex-col items-center p-3 bg-gray-100 rounded-lg hover:bg-indigo-50"> |
|
|
<i class="fas fa-magic text-indigo-600 text-xl mb-1"></i> |
|
|
<span class="text-xs text-gray-700">Beautify</span> |
|
|
</button> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div class="mb-6"> |
|
|
<h3 class="font-medium text-gray-700 mb-3">Body Tools</h3> |
|
|
<div class="space-y-4"> |
|
|
<div> |
|
|
<label class="block text-sm text-gray-600 mb-1">Body Shape</label> |
|
|
<input type="range" class="w-full slider-thumb"> |
|
|
</div> |
|
|
<div> |
|
|
<label class="block text-sm text-gray-600 mb-1">Height</label> |
|
|
<input type="range" class="w-full slider-thumb"> |
|
|
</div> |
|
|
<div> |
|
|
<label class="block text-sm text-gray-600 mb-1">Slimness</label> |
|
|
<input type="range" class="w-full slider-thumb"> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div class="mb-6"> |
|
|
<h3 class="font-medium text-gray-700 mb-3">Effects</h3> |
|
|
<div class="grid grid-cols-4 gap-2"> |
|
|
<div class="effect-thumb bg-gray-200 rounded-md h-16 cursor-pointer hover:ring-2 hover:ring-indigo-500"></div> |
|
|
<div class="effect-thumb bg-gray-300 rounded-md h-16 cursor-pointer hover:ring-2 hover:ring-indigo-500"></div> |
|
|
<div class="effect-thumb bg-gray-400 rounded-md h-16 cursor-pointer hover:ring-2 hover:ring-indigo-500"></div> |
|
|
<div class="effect-thumb bg-gray-500 rounded-md h-16 cursor-pointer hover:ring-2 hover:ring-indigo-500"></div> |
|
|
<div class="effect-thumb bg-gray-600 rounded-md h-16 cursor-pointer hover:ring-2 hover:ring-indigo-500"></div> |
|
|
<div class="effect-thumb bg-gray-700 rounded-md h-16 cursor-pointer hover:ring-2 hover:ring-indigo-500"></div> |
|
|
<div class="effect-thumb bg-gray-800 rounded-md h-16 cursor-pointer hover:ring-2 hover:ring-indigo-500"></div> |
|
|
<div class="effect-thumb bg-gray-900 rounded-md h-16 cursor-pointer hover:ring-2 hover:ring-indigo-500"></div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div id="video-tools" class="hidden"> |
|
|
<div class="mb-6"> |
|
|
<h3 class="font-medium text-gray-700 mb-3">Video Effects</h3> |
|
|
<div class="grid grid-cols-3 gap-3"> |
|
|
<button class="tool-btn flex flex-col items-center p-3 bg-gray-100 rounded-lg hover:bg-indigo-50"> |
|
|
<i class="fas fa-film text-indigo-600 text-xl mb-1"></i> |
|
|
<span class="text-xs text-gray-700">Filters</span> |
|
|
</button> |
|
|
<button class="tool-btn flex flex-col items-center p-3 bg-gray-100 rounded-lg hover:bg-indigo-50"> |
|
|
<i class="fas fa-exchange-alt text-indigo-600 text-xl mb-1"></i> |
|
|
<span class="text-xs text-gray-700">Transitions</span> |
|
|
</button> |
|
|
<button class="tool-btn flex flex-col items-center p-3 bg-gray-100 rounded-lg hover:bg-indigo-50"> |
|
|
<i class="fas fa-music text-indigo-600 text-xl mb-1"></i> |
|
|
<span class="text-xs text-gray-700">Audio</span> |
|
|
</button> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div class="mb-6"> |
|
|
<h3 class="font-medium text-gray-700 mb-3">Timeline Tools</h3> |
|
|
<div class="space-y-4"> |
|
|
<div> |
|
|
<label class="block text-sm text-gray-600 mb-1">Speed</label> |
|
|
<input type="range" class="w-full slider-thumb"> |
|
|
</div> |
|
|
<div> |
|
|
<label class="block text-sm text-gray-600 mb-1">Trim</label> |
|
|
<div class="bg-gray-200 h-10 rounded-md relative"> |
|
|
<div class="absolute left-2 right-2 top-1/2 transform -translate-y-1/2 h-1 bg-gray-400 rounded-full"> |
|
|
<div class="absolute left-0 right-0 h-6 -top-2.5"> |
|
|
<div class="absolute w-4 h-6 bg-indigo-600 rounded-sm left-0 cursor-move"></div> |
|
|
<div class="absolute w-4 h-6 bg-indigo-600 rounded-sm right-0 cursor-move"></div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div class="mb-6"> |
|
|
<h3 class="font-medium text-gray-700 mb-3">Add Elements</h3> |
|
|
<div class="grid grid-cols-3 gap-3"> |
|
|
<button class="tool-btn flex flex-col items-center p-3 bg-gray-100 rounded-lg hover:bg-indigo-50"> |
|
|
<i class="fas fa-font text-indigo-600 text-xl mb-1"></i> |
|
|
<span class="text-xs text-gray-700">Text</span> |
|
|
</button> |
|
|
<button class="tool-btn flex flex-col items-center p-3 bg-gray-100 rounded-lg hover:bg-indigo-50"> |
|
|
<i class="fas fa-sticky-note text-indigo-600 text-xl mb-1"></i> |
|
|
<span class="text-xs text-gray-700">Stickers</span> |
|
|
</button> |
|
|
<button class="tool-btn flex flex-col items-center p-3 bg-gray-100 rounded-lg hover:bg-indigo-50"> |
|
|
<i class="fas fa-draw-polygon text-indigo-600 text-xl mb-1"></i> |
|
|
<span class="text-xs text-gray-700">Shapes</span> |
|
|
</button> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="w-full lg:w-2/4 editor-container rounded-xl p-6"> |
|
|
<div class="preview-box bg-white rounded-lg overflow-hidden relative" style="height: 500px;"> |
|
|
<div class="absolute inset-0 flex items-center justify-center"> |
|
|
<div class="text-center"> |
|
|
<i class="fas fa-image text-gray-300 text-5xl mb-3"></i> |
|
|
<p class="text-gray-400">Upload an image to start editing</p> |
|
|
</div> |
|
|
</div> |
|
|
<img id="preview-image" src="" alt="" class="hidden w-full h-full object-contain"> |
|
|
<video id="preview-video" controls class="hidden w-full h-full object-contain"></video> |
|
|
</div> |
|
|
|
|
|
<div class="mt-6 flex justify-center space-x-4"> |
|
|
<button id="undo-btn" class="px-4 py-2 bg-gray-200 text-gray-700 rounded-md hover:bg-gray-300 disabled:opacity-50" disabled> |
|
|
<i class="fas fa-undo mr-2"></i> Undo |
|
|
</button> |
|
|
<button id="redo-btn" class="px-4 py-2 bg-gray-200 text-gray-700 rounded-md hover:bg-gray-300 disabled:opacity-50" disabled> |
|
|
<i class="fas fa-redo mr-2"></i> Redo |
|
|
</button> |
|
|
<button id="reset-btn" class="px-4 py-2 bg-gray-200 text-gray-700 rounded-md hover:bg-gray-300"> |
|
|
<i class="fas fa-trash-alt mr-2"></i> Reset |
|
|
</button> |
|
|
<button id="save-btn" class="px-6 py-2 bg-indigo-600 text-white rounded-md hover:bg-indigo-700"> |
|
|
<i class="fas fa-download mr-2"></i> Save |
|
|
</button> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="w-full lg:w-1/4 bg-white rounded-xl shadow-md p-6 h-fit"> |
|
|
<div class="flex justify-between items-center mb-4"> |
|
|
<h3 class="font-medium text-gray-700">Layers</h3> |
|
|
<button class="text-indigo-600 hover:text-indigo-800"> |
|
|
<i class="fas fa-plus"></i> |
|
|
</button> |
|
|
</div> |
|
|
|
|
|
<div class="space-y-3"> |
|
|
<div class="flex items-center p-2 bg-indigo-50 rounded-md"> |
|
|
<div class="w-10 h-10 bg-gray-300 rounded-md mr-3"></div> |
|
|
<div class="flex-1"> |
|
|
<p class="text-sm font-medium">Base Image</p> |
|
|
<p class="text-xs text-gray-500">Original</p> |
|
|
</div> |
|
|
<button class="text-gray-400 hover:text-gray-600"> |
|
|
<i class="fas fa-eye"></i> |
|
|
</button> |
|
|
</div> |
|
|
|
|
|
<div class="flex items-center p-2 hover:bg-gray-50 rounded-md"> |
|
|
<div class="w-10 h-10 bg-gray-200 rounded-md mr-3"></div> |
|
|
<div class="flex-1"> |
|
|
<p class="text-sm font-medium">Face Adjustment</p> |
|
|
<p class="text-xs text-gray-500">Layer 1</p> |
|
|
</div> |
|
|
<button class="text-gray-400 hover:text-gray-600"> |
|
|
<i class="fas fa-eye"></i> |
|
|
</button> |
|
|
</div> |
|
|
|
|
|
<div class="flex items-center p-2 hover:bg-gray-50 rounded-md"> |
|
|
<div class="w-10 h-10 bg-gray-100 rounded-md mr-3"></div> |
|
|
<div class="flex-1"> |
|
|
<p class="text-sm font-medium">Body Shape</p> |
|
|
<p class="text-xs text-gray-500">Layer 2</p> |
|
|
</div> |
|
|
<button class="text-gray-400 hover:text-gray-600"> |
|
|
<i class="fas fa-eye"></i> |
|
|
</button> |
|
|
</div> |
|
|
|
|
|
<div class="flex items-center p-2 hover:bg-gray-50 rounded-md"> |
|
|
<div class="w-10 h-10 bg-gray-50 rounded-md mr-3"></div> |
|
|
<div class="flex-1"> |
|
|
<p class="text-sm font-medium">Color Filter</p> |
|
|
<p class="text-xs text-gray-500">Layer 3</p> |
|
|
</div> |
|
|
<button class="text-gray-400 hover:text-gray-600"> |
|
|
<i class="fas fa-eye-slash text-gray-300"></i> |
|
|
</button> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div class="mt-6"> |
|
|
<h3 class="font-medium text-gray-700 mb-3">Export Options</h3> |
|
|
<div class="space-y-3"> |
|
|
<div class="flex items-center"> |
|
|
<input type="radio" id="format-jpg" name="export-format" class="mr-2" checked> |
|
|
<label for="format-jpg" class="text-sm">JPG</label> |
|
|
</div> |
|
|
<div class="flex items-center"> |
|
|
<input type="radio" id="format-png" name="export-format" class="mr-2"> |
|
|
<label for="format-png" class="text-sm">PNG</label> |
|
|
</div> |
|
|
<div class="flex items-center"> |
|
|
<input type="radio" id="format-webp" name="export-format" class="mr-2"> |
|
|
<label for="format-webp" class="text-sm">WebP</label> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div class="mt-4"> |
|
|
<label class="block text-sm text-gray-600 mb-1">Quality</label> |
|
|
<input type="range" class="w-full slider-thumb"> |
|
|
</div> |
|
|
|
|
|
<div class="mt-4"> |
|
|
<label class="block text-sm text-gray-600 mb-1">Dimensions</label> |
|
|
<select class="w-full p-2 border border-gray-300 rounded-md text-sm"> |
|
|
<option>Original</option> |
|
|
<option>1080p (1920×1080)</option> |
|
|
<option>720p (1280×720)</option> |
|
|
<option>480p (854×480)</option> |
|
|
<option>Custom...</option> |
|
|
</select> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</main> |
|
|
|
|
|
|
|
|
<footer class="bg-gray-800 text-white py-8 mt-12"> |
|
|
<div class="container mx-auto px-4"> |
|
|
<div class="grid grid-cols-1 md:grid-cols-4 gap-8"> |
|
|
<div> |
|
|
<h3 class="text-lg font-medium mb-4">Creative Studio</h3> |
|
|
<p class="text-gray-400 text-sm">Powerful yet simple photo and video editing tools for creators of all levels.</p> |
|
|
</div> |
|
|
<div> |
|
|
<h4 class="font-medium mb-4">Features</h4> |
|
|
<ul class="space-y-2 text-sm text-gray-400"> |
|
|
<li><a href="#" class="hover:text-white">Photo Editor</a></li> |
|
|
<li><a href="#" class="hover:text-white">Video Editor</a></li> |
|
|
<li><a href="#" class="hover:text-white">AI Tools</a></li> |
|
|
<li><a href="#" class="hover:text-white">Effects</a></li> |
|
|
</ul> |
|
|
</div> |
|
|
<div> |
|
|
<h4 class="font-medium mb-4">Company</h4> |
|
|
<ul class="space-y-2 text-sm text-gray-400"> |
|
|
<li><a href="#" class="hover:text-white">About Us</a></li> |
|
|
<li><a href="#" class="hover:text-white">Careers</a></li> |
|
|
<li><a href="#" class="hover:text-white">Blog</a></li> |
|
|
<li><a href="#" class="hover:text-white">Contact</a></li> |
|
|
</ul> |
|
|
</div> |
|
|
<div> |
|
|
<h4 class="font-medium mb-4">Legal</h4> |
|
|
<ul class="space-y-2 text-sm text-gray-400"> |
|
|
<li><a href="#" class="hover:text-white">Terms of Service</a></li> |
|
|
<li><a href="#" class="hover:text-white">Privacy Policy</a></li> |
|
|
<li><a href="#" class="hover:text-white">Content Policy</a></li> |
|
|
<li><a href="#" class="hover:text-white">Community Guidelines</a></li> |
|
|
</ul> |
|
|
</div> |
|
|
</div> |
|
|
<div class="border-t border-gray-700 mt-8 pt-6 text-sm text-gray-400"> |
|
|
<div class="flex flex-col md:flex-row justify-between items-center"> |
|
|
<p>© 2023 Creative Studio. All rights reserved.</p> |
|
|
<div class="flex space-x-6 mt-4 md:mt-0"> |
|
|
<a href="#" class="hover:text-white"><i class="fab fa-facebook-f"></i></a> |
|
|
<a href="#" class="hover:text-white"><i class="fab fa-twitter"></i></a> |
|
|
<a href="#" class="hover:text-white"><i class="fab fa-instagram"></i></a> |
|
|
<a href="#" class="hover:text-white"><i class="fab fa-youtube"></i></a> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</footer> |
|
|
|
|
|
<script> |
|
|
|
|
|
document.getElementById('image-tab').addEventListener('click', function() { |
|
|
this.classList.add('tab-active'); |
|
|
document.getElementById('video-tab').classList.remove('tab-active'); |
|
|
document.getElementById('image-tools').classList.remove('hidden'); |
|
|
document.getElementById('video-tools').classList.add('hidden'); |
|
|
}); |
|
|
|
|
|
document.getElementById('video-tab').addEventListener('click', function() { |
|
|
this.classList.add('tab-active'); |
|
|
document.getElementById('image-tab').classList.remove('tab-active'); |
|
|
document.getElementById('video-tools').classList.remove('hidden'); |
|
|
document.getElementById('image-tools').classList.add('hidden'); |
|
|
}); |
|
|
|
|
|
|
|
|
const fileUpload = document.getElementById('file-upload'); |
|
|
const uploadArea = document.querySelector('.border-dashed'); |
|
|
const previewImage = document.getElementById('preview-image'); |
|
|
const previewVideo = document.getElementById('preview-video'); |
|
|
const placeholder = document.querySelector('.preview-box > div'); |
|
|
|
|
|
uploadArea.addEventListener('click', () => fileUpload.click()); |
|
|
|
|
|
fileUpload.addEventListener('change', function(e) { |
|
|
const file = e.target.files[0]; |
|
|
if (!file) return; |
|
|
|
|
|
const reader = new FileReader(); |
|
|
reader.onload = function(event) { |
|
|
if (file.type.startsWith('image/')) { |
|
|
previewImage.src = event.target.result; |
|
|
previewImage.classList.remove('hidden'); |
|
|
previewVideo.classList.add('hidden'); |
|
|
placeholder.classList.add('hidden'); |
|
|
} else if (file.type.startsWith('video/')) { |
|
|
previewVideo.src = event.target.result; |
|
|
previewVideo.classList.remove('hidden'); |
|
|
previewImage.classList.add('hidden'); |
|
|
placeholder.classList.add('hidden'); |
|
|
} |
|
|
}; |
|
|
reader.readAsDataURL(file); |
|
|
}); |
|
|
|
|
|
|
|
|
document.getElementById('reset-btn').addEventListener('click', function() { |
|
|
previewImage.src = ''; |
|
|
previewVideo.src = ''; |
|
|
previewImage.classList.add('hidden'); |
|
|
previewVideo.classList.add('hidden'); |
|
|
placeholder.classList.remove('hidden'); |
|
|
fileUpload.value = ''; |
|
|
}); |
|
|
|
|
|
|
|
|
document.getElementById('save-btn').addEventListener('click', function() { |
|
|
if (!previewImage.src && !previewVideo.src) { |
|
|
alert('Please upload an image or video first'); |
|
|
return; |
|
|
} |
|
|
|
|
|
|
|
|
const link = document.createElement('a'); |
|
|
if (previewImage.src) { |
|
|
link.href = previewImage.src; |
|
|
link.download = 'edited-image.jpg'; |
|
|
} else { |
|
|
link.href = previewVideo.src; |
|
|
link.download = 'edited-video.mp4'; |
|
|
} |
|
|
document.body.appendChild(link); |
|
|
link.click(); |
|
|
document.body.removeChild(link); |
|
|
|
|
|
|
|
|
alert('Your file has been downloaded!'); |
|
|
}); |
|
|
</script> |
|
|
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=swapit/kates" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body> |
|
|
</html> |