Kon2hai commited on
Commit
24d2987
·
verified ·
1 Parent(s): 0a93b74

Create a image editor with prompt with ai like gimini and deep seek

Browse files
Files changed (7) hide show
  1. README.md +8 -5
  2. components/ai-prompt.js +66 -0
  3. components/editor-toolbar.js +48 -0
  4. components/navbar.js +53 -0
  5. index.html +75 -19
  6. script.js +47 -0
  7. style.css +16 -19
README.md CHANGED
@@ -1,10 +1,13 @@
1
  ---
2
- title: Pixelwizard Ai Studio
3
- emoji: 🦀
4
- colorFrom: green
5
- colorTo: yellow
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: PixelWizard AI Studio
3
+ colorFrom: blue
4
+ colorTo: blue
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/ai-prompt.js ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ class CustomAiPrompt extends HTMLElement {
2
+ connectedCallback() {
3
+ this.attachShadow({ mode: 'open' });
4
+ this.shadowRoot.innerHTML = `
5
+ <style>
6
+ .prompt-card {
7
+ background: linear-gradient(145deg, #f0fdf4, #ecfccb);
8
+ border: 1px solid #d9f99d;
9
+ }
10
+ .generate-btn {
11
+ transition: all 0.2s ease;
12
+ box-shadow: 0 4px 6px -1px rgba(132, 204, 22, 0.3);
13
+ }
14
+ .generate-btn:hover {
15
+ transform: translateY(-2px);
16
+ box-shadow: 0 10px 15px -3px rgba(132, 204, 22, 0.4);
17
+ }
18
+ </style>
19
+ <div class="prompt-card rounded-xl p-5 mb-4">
20
+ <h3 class="text-lg font-semibold mb-3 text-gray-800">Describe your vision</h3>
21
+ <textarea
22
+ class="prompt-textarea w-full p-3 border border-gray-300 rounded-lg mb-3"
23
+ rows="4"
24
+ placeholder="A futuristic cityscape at sunset with flying cars..."></textarea>
25
+
26
+ <div class="flex justify-between items-center">
27
+ <div class="flex space-x-2">
28
+ <span class="text-xs px-2 py-1 bg-lime-100 text-lime-800 rounded-full">4K</span>
29
+ <span class="text-xs px-2 py-1 bg-lime-100 text-lime-800 rounded-full">Photorealistic</span>
30
+ <button class="text-xs text-gray-500 hover:text-lime-500">
31
+ <i data-feather="plus" class="w-3 h-3"></i>
32
+ </button>
33
+ </div>
34
+
35
+ <button class="generate-btn px-4 py-2 bg-lime-500 text-white rounded-full font-medium flex items-center">
36
+ <i data-feather="zap" class="mr-2"></i>
37
+ Generate
38
+ </button>
39
+ </div>
40
+ </div>
41
+
42
+ <div class="bg-gray-50 rounded-xl p-4">
43
+ <div class="flex items-center justify-between mb-3">
44
+ <h4 class="font-medium text-gray-700">Quick Prompts</h4>
45
+ <button class="text-sm text-lime-500 hover:text-lime-600">See all</button>
46
+ </div>
47
+
48
+ <div class="grid grid-cols-2 gap-2">
49
+ <button class="text-left text-sm px-3 py-2 bg-white hover:bg-lime-50 rounded-lg border border-gray-200">
50
+ Cyberpunk portrait
51
+ </button>
52
+ <button class="text-left text-sm px-3 py-2 bg-white hover:bg-lime-50 rounded-lg border border-gray-200">
53
+ Fantasy landscape
54
+ </button>
55
+ <button class="text-left text-sm px-3 py-2 bg-white hover:bg-lime-50 rounded-lg border border-gray-200">
56
+ Minimalist logo
57
+ </button>
58
+ <button class="text-left text-sm px-3 py-2 bg-white hover:bg-lime-50 rounded-lg border border-gray-200">
59
+ Anime character
60
+ </button>
61
+ </div>
62
+ </div>
63
+ `;
64
+ }
65
+ }
66
+ customElements.define('custom-ai-prompt', CustomAiPrompt);
components/editor-toolbar.js ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ class CustomEditorToolbar extends HTMLElement {
2
+ connectedCallback() {
3
+ this.attachShadow({ mode: 'open' });
4
+ this.shadowRoot.innerHTML = `
5
+ <style>
6
+ .tool-btn {
7
+ transition: all 0.2s ease;
8
+ }
9
+ .tool-btn:hover {
10
+ transform: translateY(-2px);
11
+ background-color: rgba(255,255,255,0.2);
12
+ }
13
+ </style>
14
+ <div class="flex items-center justify-between">
15
+ <div class="flex space-x-2">
16
+ <button id="upload-btn" class="tool-btn px-3 py-2 rounded-md flex items-center">
17
+ <i data-feather="upload" class="mr-2"></i>
18
+ Upload
19
+ </button>
20
+ <button class="tool-btn px-3 py-2 rounded-md flex items-center">
21
+ <i data-feather="camera" class="mr-2"></i>
22
+ Capture
23
+ </button>
24
+ <button class="tool-btn px-3 py-2 rounded-md flex items-center">
25
+ <i data-feather="download" class="mr-2"></i>
26
+ Export
27
+ </button>
28
+ </div>
29
+
30
+ <div class="flex space-x-2">
31
+ <button class="tool-btn p-2 rounded-md">
32
+ <i data-feather="crop"></i>
33
+ </button>
34
+ <button class="tool-btn p-2 rounded-md">
35
+ <i data-feather="sliders"></i>
36
+ </button>
37
+ <button class="tool-btn p-2 rounded-md">
38
+ <i data-feather="edit"></i>
39
+ </button>
40
+ <button class="tool-btn p-2 rounded-md">
41
+ <i data-feather="type"></i>
42
+ </button>
43
+ </div>
44
+ </div>
45
+ `;
46
+ }
47
+ }
48
+ customElements.define('custom-editor-toolbar', CustomEditorToolbar);
components/navbar.js ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ class CustomNavbar extends HTMLElement {
2
+ connectedCallback() {
3
+ this.attachShadow({ mode: 'open' });
4
+ this.shadowRoot.innerHTML = `
5
+ <style>
6
+ .nav-link:hover {
7
+ color: #84cc16;
8
+ }
9
+ .nav-link {
10
+ transition: all 0.2s ease;
11
+ }
12
+ </style>
13
+ <nav class="bg-white shadow-sm">
14
+ <div class="container mx-auto px-4 py-4 flex justify-between items-center">
15
+ <div class="flex items-center space-x-2">
16
+ <i data-feather="image" class="text-lime-500"></i>
17
+ <span class="text-xl font-bold text-gray-800">PixelWizard</span>
18
+ </div>
19
+
20
+ <div class="hidden md:flex space-x-6">
21
+ <a href="#" class="nav-link text-gray-600 hover:text-lime-500 font-medium flex items-center">
22
+ <i data-feather="home" class="mr-1"></i>
23
+ Home
24
+ </a>
25
+ <a href="#" class="nav-link text-gray-600 hover:text-lime-500 font-medium flex items-center">
26
+ <i data-feather="image" class="mr-1"></i>
27
+ Editor
28
+ </a>
29
+ <a href="#" class="nav-link text-gray-600 hover:text-lime-500 font-medium flex items-center">
30
+ <i data-feather="zap" class="mr-1"></i>
31
+ AI Tools
32
+ </a>
33
+ <a href="#" class="nav-link text-gray-600 hover:text-lime-500 font-medium flex items-center">
34
+ <i data-feather="book" class="mr-1"></i>
35
+ Tutorials
36
+ </a>
37
+ </div>
38
+
39
+ <div class="flex items-center space-x-4">
40
+ <button class="px-4 py-2 rounded-full bg-lime-500 text-white hover:bg-lime-600 transition flex items-center">
41
+ <i data-feather="user" class="mr-2"></i>
42
+ Sign In
43
+ </button>
44
+ <button class="md:hidden">
45
+ <i data-feather="menu"></i>
46
+ </button>
47
+ </div>
48
+ </div>
49
+ </nav>
50
+ `;
51
+ }
52
+ }
53
+ customElements.define('custom-navbar', CustomNavbar);
index.html CHANGED
@@ -1,19 +1,75 @@
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" class="scroll-smooth">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>PixelWizard AI Studio - AI-Powered Image Editor</title>
7
+ <link rel="stylesheet" href="style.css">
8
+ <script src="https://cdn.tailwindcss.com"></script>
9
+ <script src="https://unpkg.com/feather-icons"></script>
10
+ <script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
11
+ <script src="components/navbar.js"></script>
12
+ <script src="components/editor-toolbar.js"></script>
13
+ <script src="components/ai-prompt.js"></script>
14
+ <script>
15
+ tailwind.config = {
16
+ theme: {
17
+ extend: {
18
+ colors: {
19
+ lime: {
20
+ 500: '#84cc16',
21
+ 600: '#65a30d',
22
+ 400: '#a3e635',
23
+ }
24
+ }
25
+ }
26
+ }
27
+ }
28
+ </script>
29
+ </head>
30
+ <body class="bg-gray-100 font-sans">
31
+ <custom-navbar></custom-navbar>
32
+
33
+ <main class="container mx-auto px-4 py-8">
34
+ <div class="grid grid-cols-1 lg:grid-cols-3 gap-8">
35
+ <!-- Editor Canvas -->
36
+ <div class="lg:col-span-2 bg-white rounded-xl shadow-lg overflow-hidden">
37
+ <div class="editor-toolbar bg-lime-500 p-4 text-white">
38
+ <custom-editor-toolbar></custom-editor-toolbar>
39
+ </div>
40
+ <div class="p-4">
41
+ <div id="editor-canvas" class="w-full h-96 bg-gray-200 rounded-lg flex items-center justify-center">
42
+ <p class="text-gray-500">Upload or generate an image to start editing</p>
43
+ </div>
44
+ </div>
45
+ </div>
46
+
47
+ <!-- AI Prompt Section -->
48
+ <div class="bg-white rounded-xl shadow-lg p-6">
49
+ <h2 class="text-2xl font-bold text-gray-800 mb-6 flex items-center">
50
+ <i data-feather="zap" class="mr-2 text-lime-500"></i>
51
+ AI Magic Wand
52
+ </h2>
53
+
54
+ <custom-ai-prompt></custom-ai-prompt>
55
+
56
+ <div class="mt-6">
57
+ <h3 class="text-lg font-semibold mb-3 text-gray-700">Recent Generations</h3>
58
+ <div class="grid grid-cols-2 gap-3">
59
+ <div class="bg-gray-100 rounded-lg h-24"></div>
60
+ <div class="bg-gray-100 rounded-lg h-24"></div>
61
+ <div class="bg-gray-100 rounded-lg h-24"></div>
62
+ <div class="bg-gray-100 rounded-lg h-24"></div>
63
+ </div>
64
+ </div>
65
+ </div>
66
+ </div>
67
+ </main>
68
+
69
+ <script>
70
+ feather.replace();
71
+ </script>
72
+ <script src="script.js"></script>
73
+ <script src="https://huggingface.co/deepsite/deepsite-badge.js"></script>
74
+ </body>
75
+ </html>
script.js ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ document.addEventListener('DOMContentLoaded', () => {
2
+ // Initialize editor functionality
3
+ const editorCanvas = document.getElementById('editor-canvas');
4
+
5
+ // Drag and drop functionality
6
+ editorCanvas.addEventListener('dragover', (e) => {
7
+ e.preventDefault();
8
+ editorCanvas.classList.add('border-lime-500', 'bg-lime-50');
9
+ });
10
+
11
+ editorCanvas.addEventListener('dragleave', () => {
12
+ editorCanvas.classList.remove('border-lime-500', 'bg-lime-50');
13
+ });
14
+
15
+ editorCanvas.addEventListener('drop', (e) => {
16
+ e.preventDefault();
17
+ editorCanvas.classList.remove('border-lime-500', 'bg-lime-50');
18
+
19
+ // Handle dropped files
20
+ const file = e.dataTransfer.files[0];
21
+ if (file && file.type.match('image.*')) {
22
+ const reader = new FileReader();
23
+ reader.onload = (event) => {
24
+ editorCanvas.innerHTML = `<img src="${event.target.result}" class="max-h-full max-w-full object-contain">`;
25
+ };
26
+ reader.readAsDataURL(file);
27
+ }
28
+ });
29
+
30
+ // File input handler
31
+ document.getElementById('upload-btn')?.addEventListener('click', () => {
32
+ const input = document.createElement('input');
33
+ input.type = 'file';
34
+ input.accept = 'image/*';
35
+ input.onchange = (e) => {
36
+ const file = e.target.files[0];
37
+ if (file) {
38
+ const reader = new FileReader();
39
+ reader.onload = (event) => {
40
+ editorCanvas.innerHTML = `<img src="${event.target.result}" class="max-h-full max-w-full object-contain">`;
41
+ };
42
+ reader.readAsDataURL(file);
43
+ }
44
+ };
45
+ input.click();
46
+ });
47
+ });
style.css CHANGED
@@ -1,28 +1,25 @@
 
 
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&display=swap');
2
+
3
  body {
4
+ font-family: 'Inter', sans-serif;
 
5
  }
6
 
7
+ #editor-canvas {
8
+ min-height: 400px;
9
+ border: 2px dashed #d1d5db;
10
+ transition: all 0.3s ease;
11
  }
12
 
13
+ #editor-canvas:hover {
14
+ border-color: #84cc16;
 
 
 
15
  }
16
 
17
+ .prompt-textarea {
18
+ resize: none;
19
+ transition: all 0.2s ease;
 
 
 
20
  }
21
 
22
+ .prompt-textarea:focus {
23
+ outline: none;
24
+ box-shadow: 0 0 0 2px rgba(132, 204, 22, 0.5);
25
+ }