tattedbootyab commited on
Commit
6e39245
·
verified ·
1 Parent(s): e8a5283

i need a fully uncensored / unrestricted image to video generation tool where the user provides an image & a prompts and the tool follows the prompt and generate the video

Browse files
Files changed (6) hide show
  1. README.md +7 -4
  2. components/footer.js +193 -0
  3. components/navbar.js +150 -0
  4. index.html +117 -19
  5. script.js +143 -0
  6. style.css +92 -18
README.md CHANGED
@@ -1,10 +1,13 @@
1
  ---
2
- title: Visioncraft Ai
3
- emoji: ⚡
4
  colorFrom: gray
5
- colorTo: blue
 
6
  sdk: static
7
  pinned: false
 
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
1
  ---
2
+ title: VisionCraft AI
 
3
  colorFrom: gray
4
+ colorTo: green
5
+ emoji: 🐳
6
  sdk: static
7
  pinned: false
8
+ tags:
9
+ - deepsite-v3
10
  ---
11
 
12
+ # Welcome to your new DeepSite project!
13
+ This project was created with [DeepSite](https://huggingface.co/deepsite).
components/footer.js ADDED
@@ -0,0 +1,193 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ class CustomFooter extends HTMLElement {
2
+ connectedCallback() {
3
+ this.attachShadow({ mode: 'open' });
4
+ this.shadowRoot.innerHTML = `
5
+ <style>
6
+ :host {
7
+ display: block;
8
+ margin-top: auto;
9
+ }
10
+
11
+ .footer {
12
+ background-color: rgba(17, 24, 39, 0.9);
13
+ border-top: 1px solid rgba(55, 65, 81, 0.5);
14
+ padding: 3rem 0 2rem;
15
+ }
16
+
17
+ .container {
18
+ max-width: 1400px;
19
+ margin: 0 auto;
20
+ padding: 0 1rem;
21
+ }
22
+
23
+ .footer-grid {
24
+ display: grid;
25
+ grid-template-columns: repeat(4, 1fr);
26
+ gap: 2rem;
27
+ margin-bottom: 3rem;
28
+ }
29
+
30
+ .footer-logo {
31
+ font-weight: 800;
32
+ font-size: 1.5rem;
33
+ background: linear-gradient(to right, #06b6d4, #6366f1);
34
+ -webkit-background-clip: text;
35
+ -webkit-text-fill-color: transparent;
36
+ background-clip: text;
37
+ margin-bottom: 1rem;
38
+ display: inline-block;
39
+ }
40
+
41
+ .footer-description {
42
+ color: #9ca3af;
43
+ line-height: 1.6;
44
+ margin-bottom: 1.5rem;
45
+ }
46
+
47
+ .social-links {
48
+ display: flex;
49
+ gap: 1rem;
50
+ }
51
+
52
+ .social-link {
53
+ display: flex;
54
+ align-items: center;
55
+ justify-content: center;
56
+ width: 40px;
57
+ height: 40px;
58
+ border-radius: 50%;
59
+ background-color: rgba(55, 65, 81, 0.5);
60
+ color: #9ca3af;
61
+ transition: all 0.3s ease;
62
+ }
63
+
64
+ .social-link:hover {
65
+ background: linear-gradient(to right, #06b6d4, #6366f1);
66
+ color: white;
67
+ transform: translateY(-3px);
68
+ }
69
+
70
+ .footer-heading {
71
+ color: white;
72
+ font-weight: 600;
73
+ margin-bottom: 1.5rem;
74
+ font-size: 1.1rem;
75
+ }
76
+
77
+ .footer-links {
78
+ list-style: none;
79
+ }
80
+
81
+ .footer-link {
82
+ margin-bottom: 0.75rem;
83
+ }
84
+
85
+ .footer-link a {
86
+ color: #9ca3af;
87
+ text-decoration: none;
88
+ transition: color 0.3s ease;
89
+ }
90
+
91
+ .footer-link a:hover {
92
+ color: #06b6d4;
93
+ }
94
+
95
+ .copyright {
96
+ border-top: 1px solid rgba(55, 65, 81, 0.5);
97
+ padding-top: 2rem;
98
+ text-align: center;
99
+ color: #6b7280;
100
+ font-size: 0.9rem;
101
+ }
102
+
103
+ @media (max-width: 768px) {
104
+ .footer-grid {
105
+ grid-template-columns: 1fr 1fr;
106
+ }
107
+ }
108
+
109
+ @media (max-width: 480px) {
110
+ .footer-grid {
111
+ grid-template-columns: 1fr;
112
+ }
113
+ }
114
+ </style>
115
+
116
+ <footer class="footer">
117
+ <div class="container">
118
+ <div class="footer-grid">
119
+ <div>
120
+ <a href="/" class="footer-logo">
121
+ <i data-feather="aperture" class="mr-2"></i>VisionCraft
122
+ </a>
123
+ <p class="footer-description">
124
+ Transform your images into stunning videos with our unrestricted AI generation technology.
125
+ </p>
126
+ <div class="social-links">
127
+ <a href="#" class="social-link">
128
+ <i data-feather="twitter" class="w-4 h-4"></i>
129
+ </a>
130
+ <a href="#" class="social-link">
131
+ <i data-feather="github" class="w-4 h-4"></i>
132
+ </a>
133
+ <a href="#" class="social-link">
134
+ <i data-feather="instagram" class="w-4 h-4"></i>
135
+ </a>
136
+ <a href="#" class="social-link">
137
+ <i data-feather="linkedin" class="w-4 h-4"></i>
138
+ </a>
139
+ </div>
140
+ </div>
141
+
142
+ <div>
143
+ <h3 class="footer-heading">Product</h3>
144
+ <ul class="footer-links">
145
+ <li class="footer-link"><a href="#">Features</a></li>
146
+ <li class="footer-link"><a href="#">Gallery</a></li>
147
+ <li class="footer-link"><a href="#">API</a></li>
148
+ <li class="footer-link"><a href="#">Pricing</a></li>
149
+ <li class="footer-link"><a href="#">Changelog</a></li>
150
+ </ul>
151
+ </div>
152
+
153
+ <div>
154
+ <h3 class="footer-heading">Resources</h3>
155
+ <ul class="footer-links">
156
+ <li class="footer-link"><a href="#">Documentation</a></li>
157
+ <li class="footer-link"><a href="#">Tutorials</a></li>
158
+ <li class="footer-link"><a href="#">Blog</a></li>
159
+ <li class="footer-link"><a href="#">Community</a></li>
160
+ <li class="footer-link"><a href="#">Support</a></li>
161
+ </ul>
162
+ </div>
163
+
164
+ <div>
165
+ <h3 class="footer-heading">Company</h3>
166
+ <ul class="footer-links">
167
+ <li class="footer-link"><a href="#">About</a></li>
168
+ <li class="footer-link"><a href="#">Careers</a></li>
169
+ <li class="footer-link"><a href="#">Contact</a></li>
170
+ <li class="footer-link"><a href="#">Partners</a></li>
171
+ <li class="footer-link"><a href="#">Privacy Policy</a></li>
172
+ </ul>
173
+ </div>
174
+ </div>
175
+
176
+ <div class="copyright">
177
+ &copy; 2023 VisionCraft AI. All rights reserved. Unleash your creativity without limits.
178
+ </div>
179
+ </div>
180
+ </footer>
181
+ `;
182
+
183
+ // Initialize feather icons
184
+ const featherScript = document.createElement('script');
185
+ featherScript.src = 'https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js';
186
+ featherScript.onload = () => {
187
+ feather.replace();
188
+ };
189
+ this.shadowRoot.appendChild(featherScript);
190
+ }
191
+ }
192
+
193
+ customElements.define('custom-footer', CustomFooter);
components/navbar.js ADDED
@@ -0,0 +1,150 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ class CustomNavbar extends HTMLElement {
2
+ connectedCallback() {
3
+ this.attachShadow({ mode: 'open' });
4
+ this.shadowRoot.innerHTML = `
5
+ <style>
6
+ :host {
7
+ display: block;
8
+ }
9
+
10
+ .navbar {
11
+ background-color: rgba(17, 24, 39, 0.8);
12
+ backdrop-filter: blur(10px);
13
+ border-bottom: 1px solid rgba(55, 65, 81, 0.5);
14
+ padding: 1rem 0;
15
+ position: sticky;
16
+ top: 0;
17
+ z-index: 100;
18
+ }
19
+
20
+ .container {
21
+ max-width: 1400px;
22
+ margin: 0 auto;
23
+ padding: 0 1rem;
24
+ display: flex;
25
+ justify-content: space-between;
26
+ align-items: center;
27
+ }
28
+
29
+ .logo {
30
+ display: flex;
31
+ align-items: center;
32
+ font-weight: 800;
33
+ font-size: 1.5rem;
34
+ background: linear-gradient(to right, #06b6d4, #6366f1);
35
+ -webkit-background-clip: text;
36
+ -webkit-text-fill-color: transparent;
37
+ background-clip: text;
38
+ }
39
+
40
+ .logo i {
41
+ margin-right: 0.5rem;
42
+ }
43
+
44
+ .nav-links {
45
+ display: flex;
46
+ gap: 2rem;
47
+ }
48
+
49
+ .nav-link {
50
+ color: #9ca3af;
51
+ text-decoration: none;
52
+ font-weight: 500;
53
+ transition: color 0.3s ease;
54
+ }
55
+
56
+ .nav-link:hover {
57
+ color: #06b6d4;
58
+ }
59
+
60
+ .nav-link.active {
61
+ color: #06b6d4;
62
+ }
63
+
64
+ .auth-buttons {
65
+ display: flex;
66
+ gap: 1rem;
67
+ }
68
+
69
+ .btn {
70
+ padding: 0.5rem 1.5rem;
71
+ border-radius: 0.5rem;
72
+ font-weight: 600;
73
+ transition: all 0.3s ease;
74
+ }
75
+
76
+ .btn-outline {
77
+ border: 1px solid #06b6d4;
78
+ color: #06b6d4;
79
+ }
80
+
81
+ .btn-outline:hover {
82
+ background-color: rgba(6, 182, 212, 0.1);
83
+ }
84
+
85
+ .btn-primary {
86
+ background: linear-gradient(to right, #06b6d4, #6366f1);
87
+ color: white;
88
+ }
89
+
90
+ .btn-primary:hover {
91
+ opacity: 0.9;
92
+ transform: translateY(-2px);
93
+ box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.2);
94
+ }
95
+
96
+ .mobile-menu-button {
97
+ display: none;
98
+ background: none;
99
+ border: none;
100
+ color: #9ca3af;
101
+ }
102
+
103
+ @media (max-width: 768px) {
104
+ .nav-links, .auth-buttons {
105
+ display: none;
106
+ }
107
+
108
+ .mobile-menu-button {
109
+ display: block;
110
+ }
111
+ }
112
+ </style>
113
+
114
+ <nav class="navbar">
115
+ <div class="container">
116
+ <a href="/" class="logo">
117
+ <i data-feather="aperture"></i>
118
+ VisionCraft
119
+ </a>
120
+
121
+ <div class="nav-links">
122
+ <a href="/" class="nav-link active">Home</a>
123
+ <a href="#" class="nav-link">Gallery</a>
124
+ <a href="#" class="nav-link">Pricing</a>
125
+ <a href="#" class="nav-link">API</a>
126
+ </div>
127
+
128
+ <div class="auth-buttons">
129
+ <button class="btn btn-outline">Sign In</button>
130
+ <button class="btn btn-primary">Get Started</button>
131
+ </div>
132
+
133
+ <button class="mobile-menu-button">
134
+ <i data-feather="menu" class="w-6 h-6"></i>
135
+ </button>
136
+ </div>
137
+ </nav>
138
+ `;
139
+
140
+ // Initialize feather icons
141
+ const featherScript = document.createElement('script');
142
+ featherScript.src = 'https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js';
143
+ featherScript.onload = () => {
144
+ feather.replace();
145
+ };
146
+ this.shadowRoot.appendChild(featherScript);
147
+ }
148
+ }
149
+
150
+ customElements.define('custom-navbar', CustomNavbar);
index.html CHANGED
@@ -1,19 +1,117 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
19
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>VisionCraft AI - Image to Video Generator</title>
7
+ <link rel="icon" type="image/x-icon" href="/static/favicon.ico">
8
+ <link rel="stylesheet" href="style.css">
9
+ <script src="https://cdn.tailwindcss.com"></script>
10
+ <script src="https://unpkg.com/feather-icons"></script>
11
+ <script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
12
+ </head>
13
+ <body class="bg-gray-900 text-white">
14
+ <custom-navbar></custom-navbar>
15
+
16
+ <main class="container mx-auto px-4 py-8">
17
+ <div class="text-center mb-12">
18
+ <h1 class="text-4xl md:text-6xl font-bold mb-4 bg-gradient-to-r from-cyan-400 to-indigo-500 bg-clip-text text-transparent">
19
+ VisionCraft AI
20
+ </h1>
21
+ <p class="text-xl text-gray-300 max-w-2xl mx-auto">
22
+ Transform your images into stunning videos with AI-powered generation. Unlimited creativity, no restrictions.
23
+ </p>
24
+ </div>
25
+
26
+ <div class="grid grid-cols-1 lg:grid-cols-2 gap-8 mb-12">
27
+ <div class="bg-gray-800 rounded-xl p-6 shadow-2xl">
28
+ <h2 class="text-2xl font-bold mb-6 text-cyan-400">Upload Image</h2>
29
+ <div class="border-2 border-dashed border-cyan-500 rounded-lg p-8 text-center mb-6 transition-all hover:bg-gray-700 cursor-pointer" id="dropZone">
30
+ <i data-feather="upload" class="w-12 h-12 mx-auto text-cyan-400 mb-4"></i>
31
+ <p class="mb-2">Drag & drop your image here</p>
32
+ <p class="text-gray-400 text-sm mb-4">or</p>
33
+ <button class="bg-cyan-600 hover:bg-cyan-700 text-white font-bold py-2 px-6 rounded-lg transition duration-300">
34
+ Browse Files
35
+ </button>
36
+ <input type="file" id="fileInput" class="hidden" accept="image/*">
37
+ </div>
38
+ <div id="imagePreview" class="hidden">
39
+ <img id="previewImage" src="" alt="Preview" class="rounded-lg w-full">
40
+ <button id="removeImage" class="mt-4 text-red-500 hover:text-red-400 flex items-center">
41
+ <i data-feather="trash-2" class="w-5 h-5 mr-2"></i> Remove Image
42
+ </button>
43
+ </div>
44
+ </div>
45
+
46
+ <div class="bg-gray-800 rounded-xl p-6 shadow-2xl">
47
+ <h2 class="text-2xl font-bold mb-6 text-indigo-400">Video Prompt</h2>
48
+ <div class="mb-6">
49
+ <label class="block text-gray-300 mb-2">Describe your video</label>
50
+ <textarea id="promptInput" class="w-full bg-gray-700 border border-gray-600 rounded-lg p-4 text-white focus:outline-none focus:ring-2 focus:ring-cyan-500" rows="5" placeholder="Example: Make the cat dance in space with colorful fireworks"></textarea>
51
+ </div>
52
+ <div class="mb-6">
53
+ <label class="block text-gray-300 mb-2">Video Duration</label>
54
+ <select class="w-full bg-gray-700 border border-gray-600 rounded-lg p-3 text-white focus:outline-none focus:ring-2 focus:ring-cyan-500">
55
+ <option>5 seconds</option>
56
+ <option>10 seconds</option>
57
+ <option>15 seconds</option>
58
+ <option>30 seconds</option>
59
+ </select>
60
+ </div>
61
+ <button id="generateBtn" class="w-full bg-gradient-to-r from-cyan-600 to-indigo-600 hover:from-cyan-700 hover:to-indigo-700 text-white font-bold py-4 px-6 rounded-lg transition duration-300 flex items-center justify-center">
62
+ <i data-feather="zap" class="w-5 h-5 mr-2"></i> Generate Video
63
+ </button>
64
+ </div>
65
+ </div>
66
+
67
+ <div class="bg-gray-800 rounded-xl p-6 shadow-2xl mb-12">
68
+ <div class="flex justify-between items-center mb-6">
69
+ <h2 class="text-2xl font-bold text-cyan-400">Generated Videos</h2>
70
+ <div class="text-sm text-gray-400">0 videos</div>
71
+ </div>
72
+ <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6" id="videoGrid">
73
+ <div class="border-2 border-dashed border-gray-700 rounded-lg h-48 flex items-center justify-center text-gray-500">
74
+ <i data-feather="video" class="w-10 h-10 mr-2"></i> Your videos will appear here
75
+ </div>
76
+ </div>
77
+ </div>
78
+
79
+ <div class="bg-gradient-to-r from-cyan-900/30 to-indigo-900/30 rounded-xl p-8 text-center">
80
+ <h3 class="text-2xl font-bold mb-4">How It Works</h3>
81
+ <div class="grid grid-cols-1 md:grid-cols-3 gap-6 mt-8">
82
+ <div class="bg-gray-800/50 p-6 rounded-lg">
83
+ <div class="w-12 h-12 bg-cyan-600 rounded-full flex items-center justify-center mx-auto mb-4">
84
+ <span class="text-xl font-bold">1</span>
85
+ </div>
86
+ <h4 class="text-xl font-semibold mb-2">Upload Image</h4>
87
+ <p class="text-gray-400">Provide any image you want to transform into a video</p>
88
+ </div>
89
+ <div class="bg-gray-800/50 p-6 rounded-lg">
90
+ <div class="w-12 h-12 bg-indigo-600 rounded-full flex items-center justify-center mx-auto mb-4">
91
+ <span class="text-xl font-bold">2</span>
92
+ </div>
93
+ <h4 class="text-xl font-semibold mb-2">Describe Video</h4>
94
+ <p class="text-gray-400">Write a detailed prompt for your desired video outcome</p>
95
+ </div>
96
+ <div class="bg-gray-800/50 p-6 rounded-lg">
97
+ <div class="w-12 h-12 bg-gradient-to-r from-cyan-600 to-indigo-600 rounded-full flex items-center justify-center mx-auto mb-4">
98
+ <span class="text-xl font-bold">3</span>
99
+ </div>
100
+ <h4 class="text-xl font-semibold mb-2">Generate & Download</h4>
101
+ <p class="text-gray-400">Get your AI-generated video in seconds</p>
102
+ </div>
103
+ </div>
104
+ </div>
105
+ </main>
106
+
107
+ <custom-footer></custom-footer>
108
+
109
+ <script src="components/navbar.js"></script>
110
+ <script src="components/footer.js"></script>
111
+ <script src="script.js"></script>
112
+ <script>
113
+ feather.replace();
114
+ </script>
115
+ <script src="https://huggingface.co/deepsite/deepsite-badge.js"></script>
116
+ </body>
117
+ </html>
script.js ADDED
@@ -0,0 +1,143 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ document.addEventListener('DOMContentLoaded', function() {
2
+ // Elements
3
+ const dropZone = document.getElementById('dropZone');
4
+ const fileInput = document.getElementById('fileInput');
5
+ const imagePreview = document.getElementById('imagePreview');
6
+ const previewImage = document.getElementById('previewImage');
7
+ const removeImage = document.getElementById('removeImage');
8
+ const generateBtn = document.getElementById('generateBtn');
9
+ const promptInput = document.getElementById('promptInput');
10
+ const videoGrid = document.getElementById('videoGrid');
11
+
12
+ // Event Listeners
13
+ dropZone.addEventListener('click', () => fileInput.click());
14
+ fileInput.addEventListener('change', handleFileSelect);
15
+ removeImage.addEventListener('click', removePreview);
16
+ generateBtn.addEventListener('click', generateVideo);
17
+
18
+ // Drag and drop events
19
+ ['dragenter', 'dragover', 'dragleave', 'drop'].forEach(eventName => {
20
+ dropZone.addEventListener(eventName, preventDefaults, false);
21
+ });
22
+
23
+ function preventDefaults(e) {
24
+ e.preventDefault();
25
+ e.stopPropagation();
26
+ }
27
+
28
+ ['dragenter', 'dragover'].forEach(eventName => {
29
+ dropZone.addEventListener(eventName, highlight, false);
30
+ });
31
+
32
+ ['dragleave', 'drop'].forEach(eventName => {
33
+ dropZone.addEventListener(eventName, unhighlight, false);
34
+ });
35
+
36
+ function highlight() {
37
+ dropZone.classList.add('bg-gray-700');
38
+ }
39
+
40
+ function unhighlight() {
41
+ dropZone.classList.remove('bg-gray-700');
42
+ }
43
+
44
+ dropZone.addEventListener('drop', handleDrop, false);
45
+
46
+ function handleDrop(e) {
47
+ const dt = e.dataTransfer;
48
+ const files = dt.files;
49
+ handleFiles(files);
50
+ }
51
+
52
+ function handleFileSelect(e) {
53
+ const files = e.target.files;
54
+ handleFiles(files);
55
+ }
56
+
57
+ function handleFiles(files) {
58
+ if (files.length === 0) return;
59
+
60
+ const file = files[0];
61
+ if (!file.type.match('image.*')) {
62
+ alert('Please select an image file');
63
+ return;
64
+ }
65
+
66
+ const reader = new FileReader();
67
+ reader.onload = function(e) {
68
+ previewImage.src = e.target.result;
69
+ dropZone.classList.add('hidden');
70
+ imagePreview.classList.remove('hidden');
71
+ };
72
+ reader.readAsDataURL(file);
73
+ }
74
+
75
+ function removePreview() {
76
+ imagePreview.classList.add('hidden');
77
+ dropZone.classList.remove('hidden');
78
+ fileInput.value = '';
79
+ previewImage.src = '';
80
+ }
81
+
82
+ function generateVideo() {
83
+ const prompt = promptInput.value.trim();
84
+ if (!prompt) {
85
+ alert('Please enter a video prompt');
86
+ return;
87
+ }
88
+
89
+ if (imagePreview.classList.contains('hidden')) {
90
+ alert('Please upload an image first');
91
+ return;
92
+ }
93
+
94
+ // Show loading state
95
+ generateBtn.disabled = true;
96
+ generateBtn.innerHTML = '<i data-feather="loader" class="w-5 h-5 mr-2 animate-spin"></i> Generating...';
97
+ feather.replace();
98
+
99
+ // Simulate API call
100
+ setTimeout(() => {
101
+ // Create new video card
102
+ const videoCard = document.createElement('div');
103
+ videoCard.className = 'video-card bg-gray-700 rounded-lg overflow-hidden';
104
+ videoCard.innerHTML = `
105
+ <div class="relative">
106
+ <img src="http://static.photos/technology/640x360/42" alt="Generated Video" class="w-full h-48 object-cover">
107
+ <div class="absolute inset-0 bg-gradient-to-t from-black/80 to-transparent flex items-end p-4">
108
+ <div>
109
+ <h3 class="font-bold truncate">${prompt.substring(0, 30)}${prompt.length > 30 ? '...' : ''}</h3>
110
+ <p class="text-sm text-gray-300">Just now</p>
111
+ </div>
112
+ </div>
113
+ </div>
114
+ <div class="p-4">
115
+ <div class="flex justify-between items-center">
116
+ <button class="text-cyan-400 hover:text-cyan-300 flex items-center">
117
+ <i data-feather="download" class="w-4 h-4 mr-1"></i> Download
118
+ </button>
119
+ <button class="text-indigo-400 hover:text-indigo-300 flex items-center">
120
+ <i data-feather="share-2" class="w-4 h-4 mr-1"></i> Share
121
+ </button>
122
+ </div>
123
+ </div>
124
+ `;
125
+
126
+ // Add to grid (remove placeholder first)
127
+ if (videoGrid.children.length === 1 && videoGrid.children[0].textContent.includes('Your videos will appear here')) {
128
+ videoGrid.innerHTML = '';
129
+ }
130
+
131
+ videoGrid.insertBefore(videoCard, videoGrid.firstChild);
132
+ feather.replace();
133
+
134
+ // Reset button
135
+ generateBtn.disabled = false;
136
+ generateBtn.innerHTML = '<i data-feather="zap" class="w-5 h-5 mr-2"></i> Generate Video';
137
+ feather.replace();
138
+
139
+ // Show success message
140
+ alert('Video generated successfully!');
141
+ }, 3000);
142
+ }
143
+ });
style.css CHANGED
@@ -1,28 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  body {
2
- padding: 2rem;
3
- font-family: -apple-system, BlinkMacSystemFont, "Arial", sans-serif;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  }
5
 
6
- h1 {
7
- font-size: 16px;
8
- margin-top: 0;
9
  }
10
 
11
- p {
12
- color: rgb(107, 114, 128);
13
- font-size: 15px;
14
- margin-bottom: 10px;
15
- margin-top: 5px;
16
  }
17
 
18
- .card {
19
- max-width: 620px;
20
- margin: 0 auto;
21
- padding: 16px;
22
- border: 1px solid lightgray;
23
- border-radius: 16px;
24
  }
25
 
26
- .card p:last-child {
27
- margin-bottom: 0;
 
28
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap');
2
+
3
+ :root {
4
+ --cyan-primary: #06b6d4;
5
+ --indigo-secondary: #6366f1;
6
+ }
7
+
8
+ * {
9
+ margin: 0;
10
+ padding: 0;
11
+ box-sizing: border-box;
12
+ }
13
+
14
  body {
15
+ font-family: 'Inter', sans-serif;
16
+ background-color: #111827;
17
+ color: #f9fafb;
18
+ min-height: 100vh;
19
+ display: flex;
20
+ flex-direction: column;
21
+ }
22
+
23
+ .container {
24
+ max-width: 1400px;
25
+ }
26
+
27
+ /* Custom scrollbar */
28
+ ::-webkit-scrollbar {
29
+ width: 8px;
30
+ }
31
+
32
+ ::-webkit-scrollbar-track {
33
+ background: #1f2937;
34
  }
35
 
36
+ ::-webkit-scrollbar-thumb {
37
+ background: var(--cyan-primary);
38
+ border-radius: 4px;
39
  }
40
 
41
+ ::-webkit-scrollbar-thumb:hover {
42
+ background: var(--indigo-secondary);
 
 
 
43
  }
44
 
45
+ /* Drop zone animation */
46
+ #dropZone:hover {
47
+ border-color: var(--indigo-secondary);
48
+ transform: translateY(-2px);
 
 
49
  }
50
 
51
+ /* Button animations */
52
+ button {
53
+ transition: all 0.3s ease;
54
  }
55
+
56
+ button:hover {
57
+ transform: translateY(-2px);
58
+ box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.2);
59
+ }
60
+
61
+ /* Gradient text animation */
62
+ @keyframes gradient {
63
+ 0% {
64
+ background-position: 0% 50%;
65
+ }
66
+ 50% {
67
+ background-position: 100% 50%;
68
+ }
69
+ 100% {
70
+ background-position: 0% 50%;
71
+ }
72
+ }
73
+
74
+ .gradient-text {
75
+ background-size: 200% 200%;
76
+ animation: gradient 3s ease infinite;
77
+ }
78
+
79
+ /* Video card hover effect */
80
+ .video-card {
81
+ transition: all 0.3s ease;
82
+ }
83
+
84
+ .video-card:hover {
85
+ transform: translateY(-5px);
86
+ box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.3);
87
+ }
88
+
89
+ /* Responsive adjustments */
90
+ @media (max-width: 768px) {
91
+ .container {
92
+ padding: 0 1rem;
93
+ }
94
+
95
+ h1 {
96
+ font-size: 2.5rem;
97
+ }
98
+
99
+ .grid-cols-2 {
100
+ grid-template-columns: 1fr;
101
+ }
102
+ }