Semnykcz commited on
Commit
7fc1882
·
verified ·
1 Parent(s): 28b792b

Upload folder using huggingface_hub

Browse files
Files changed (6) hide show
  1. .gitignore +61 -0
  2. .gradio/certificate.pem +31 -0
  3. README.md +142 -12
  4. app.py +240 -0
  5. app_hf_spaces.py +143 -0
  6. requirements.txt +11 -0
.gitignore ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.so
6
+ .Python
7
+ build/
8
+ develop-eggs/
9
+ dist/
10
+ downloads/
11
+ eggs/
12
+ .eggs/
13
+ lib/
14
+ lib64/
15
+ parts/
16
+ sdist/
17
+ var/
18
+ wheels/
19
+ share/python-wheels/
20
+ *.egg-info/
21
+ .installed.cfg
22
+ *.egg
23
+ MANIFEST
24
+
25
+ # Virtual environments
26
+ venv/
27
+ env/
28
+ ENV/
29
+ .venv/
30
+
31
+ # Gradio
32
+ gradio_cached_examples/
33
+ flagged/
34
+
35
+ # Model cache
36
+ .cache/
37
+ huggingface/
38
+ transformers_cache/
39
+
40
+ # IDE
41
+ .vscode/
42
+ .idea/
43
+ *.swp
44
+ *.swo
45
+
46
+ # OS
47
+ .DS_Store
48
+ Thumbs.db
49
+
50
+ # Logs
51
+ *.log
52
+
53
+ # Temporary files
54
+ tmp/
55
+ temp/
56
+ *.tmp
57
+
58
+ # Images (if you don't want to commit test images)
59
+ # *.jpg
60
+ # *.png
61
+ # *.jpeg
.gradio/certificate.pem ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ -----BEGIN CERTIFICATE-----
2
+ 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
31
+ -----END CERTIFICATE-----
README.md CHANGED
@@ -1,12 +1,142 @@
1
- ---
2
- title: App
3
- emoji: 🏆
4
- colorFrom: blue
5
- colorTo: green
6
- sdk: gradio
7
- sdk_version: 5.38.1
8
- app_file: app.py
9
- pinned: false
10
- ---
11
-
12
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: app
3
+ app_file: app.py
4
+ sdk: gradio
5
+ sdk_version: 5.38.1
6
+ ---
7
+ # 🚀 Photo Upscaler - Hugging Face Gradio App
8
+
9
+ Pokročilá aplikace pro zvětšování fotografií pomocí AI modelů z Hugging Face.
10
+
11
+ ## ✨ Funkce
12
+
13
+ - 🔍 **AI Upscaling**: Používá nejmodernější modely pro zvětšování obrázků
14
+ - 🎯 **Více modelů**: Různé modely pro různé typy obrázků
15
+ - 🌐 **Hugging Face integrace**: Přímé propojení s HF modely
16
+ - 🎨 **Moderní UI**: Přehledné a intuitivní rozhraní
17
+ - ⚡ **GPU podpora**: Automatická detekce CUDA
18
+
19
+ ## 🛠️ Instalace
20
+
21
+ ### 1. Klonování a příprava prostředí
22
+
23
+ ```bash
24
+ # Přejděte do složky projektu
25
+ cd gratio
26
+
27
+ # Vytvořte virtuální prostředí
28
+ python -m venv venv
29
+
30
+ # Aktivace prostředí (Windows)
31
+ venv\Scripts\activate
32
+
33
+ # Aktivace prostředí (macOS/Linux)
34
+ source venv/bin/activate
35
+ ```
36
+
37
+ ### 2. Instalace dependencies
38
+
39
+ ```bash
40
+ pip install -r requirements.txt
41
+ ```
42
+
43
+ ### 3. Spuštění aplikace
44
+
45
+ ```bash
46
+ python app.py
47
+ ```
48
+
49
+ Aplikace se spustí na `http://localhost:7860`
50
+
51
+ ## 🎯 Jak používat
52
+
53
+ 1. **Nahrajte obrázek**: Přetáhněte nebo vyberte fotografii
54
+ 2. **Nastavte parametry**:
55
+ - Faktor zvětšení (1.5x - 4x)
56
+ - Vyberte vhodný model
57
+ - Volitelně zadejte HF token
58
+ 3. **Klikněte na "Zvětšit obrázek"**
59
+ 4. **Stáhněte výsledek**
60
+
61
+ ## 🤖 Dostupné modely
62
+
63
+ - **microsoft/swin2SR-compressed-sr-x2-48**: Komprimovaný model pro 2x zvětšení
64
+ - **microsoft/swin2SR-compressed-sr-x4-48**: Komprimovaný model pro 4x zvětšení
65
+ - **caidas/swin2SR-realworld-sr-x4-64-bsrgan-psnr**: Nejlepší pro reálné fotografie
66
+ - **microsoft/swin2SR-classical-sr-x2-64**: Pro umělé/digitální obrázky (2x)
67
+ - **microsoft/swin2SR-classical-sr-x4-64**: Pro umělé/digitální obrázky (4x)
68
+
69
+ ## 🔐 Hugging Face Token
70
+
71
+ Pro nejlepší výsledky doporučujeme:
72
+ 1. Registraci na [Hugging Face](https://huggingface.co/)
73
+ 2. Vytvoření tokenu v [nastavení](https://huggingface.co/settings/tokens)
74
+ 3. Zadání tokenu do aplikace
75
+
76
+ ## 💡 Tipy pro nejlepší výsledky
77
+
78
+ - **Velikost obrázku**: 256x256 až 512x512 pixelů pro nejlepší rychlost
79
+ - **Typ obrázku**: Volte model podle typu (reálné foto vs. digitální)
80
+ - **GPU**: Pro rychlejší zpracování použijte GPU s CUDA
81
+ - **Formát**: PNG poskytuje nejlepší kvalitu
82
+
83
+ ## 🚀 Nápady na rozšíření
84
+
85
+ ### Základní rozšíření:
86
+ - **Batch processing**: Zpracování více obrázků najednou
87
+ - **Noise reduction**: Odstraňování šumu z obrázků
88
+ - **Format converter**: Konverze mezi různými formáty
89
+ - **History**: Historie zpracovaných obrázků
90
+
91
+ ### Pokročilé funkce:
92
+ - **Custom models**: Možnost nahrání vlastních modelů
93
+ - **API endpoint**: RESTful API pro externí integrace
94
+ - **Cloud storage**: Integrace s cloud úložišti
95
+ - **Real-time preview**: Náhled během zpracování
96
+
97
+ ### AI vylepšení:
98
+ - **Style transfer**: Přenos stylu na obrázky
99
+ - **Colorization**: Obarvování černobílých fotek
100
+ - **Face enhancement**: Specializované vylepšování obličejů
101
+ - **HDR processing**: Zpracování HDR obrázků
102
+
103
+ ## 📊 Deployment na Hugging Face Spaces
104
+
105
+ ```bash
106
+ # Přidejte do app.py na konec:
107
+ if __name__ == "__main__":
108
+ demo.launch()
109
+
110
+ # Vytvořte app.py s touto konfigurací pro HF Spaces
111
+ ```
112
+
113
+ ## 🔧 Troubleshooting
114
+
115
+ ### Časté problémy:
116
+
117
+ **Model se nenačte**:
118
+ - Zkontrolujte internetové připojení
119
+ - Ověřte HF token
120
+ - Zkuste jiný model
121
+
122
+ **Pomalé zpracování**:
123
+ - Zmenšete velikost obrázku
124
+ - Použijte GPU
125
+ - Vyberte komprimovaný model
126
+
127
+ **Chyba paměti**:
128
+ - Snižte rozlišení vstupního obrázku
129
+ - Zavřete ostatní aplikace
130
+ - Použijte menší model
131
+
132
+ ## 📝 Licence
133
+
134
+ MIT License - můžete svobodně používat a upravovat.
135
+
136
+ ## 🤝 Přispívání
137
+
138
+ Máte nápad na vylepšení? Vytvořte issue nebo pošlete pull request!
139
+
140
+ ---
141
+
142
+ **Užijte si zvětšování svých fotografií! 📸✨**
app.py ADDED
@@ -0,0 +1,240 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import torch
3
+ from PIL import Image
4
+ import numpy as np
5
+ from transformers import pipeline
6
+ import requests
7
+ from io import BytesIO
8
+ import os
9
+ from huggingface_hub import login
10
+ import warnings
11
+ warnings.filterwarnings("ignore")
12
+
13
+ class PhotoUpscaler:
14
+ def __init__(self):
15
+ self.device = "cuda" if torch.cuda.is_available() else "cpu"
16
+ self.current_model = None
17
+ self.upscaler = None
18
+ self.load_default_model()
19
+
20
+ def load_default_model(self):
21
+ """Load default upscaling model"""
22
+ try:
23
+ # Using a Real-ESRGAN style model from Hugging Face
24
+ self.current_model = "caidas/swin2SR-realworld-sr-x4-64-bsrgan-psnr"
25
+ self.upscaler = pipeline(
26
+ "image-to-image",
27
+ model=self.current_model,
28
+ device=0 if self.device == "cuda" else -1
29
+ )
30
+ return f"✅ Model načten: {self.current_model}"
31
+ except Exception as e:
32
+ # Fallback to a simpler approach
33
+ self.current_model = "microsoft/swin2SR-compressed-sr-x2-48"
34
+ try:
35
+ self.upscaler = pipeline(
36
+ "image-to-image",
37
+ model=self.current_model,
38
+ device=0 if self.device == "cuda" else -1
39
+ )
40
+ return f"✅ Fallback model načten: {self.current_model}"
41
+ except:
42
+ return f"❌ Chyba při načítání modelů: {str(e)}"
43
+
44
+ def upscale_image(self, image, scale_factor=2, model_choice="default"):
45
+ """Upscale image using selected model"""
46
+ if image is None:
47
+ return None, "❌ Žádný obrázek nebyl nahrán"
48
+
49
+ try:
50
+ # Convert to PIL if needed
51
+ if isinstance(image, np.ndarray):
52
+ image = Image.fromarray(image)
53
+
54
+ # Resize for processing if image is too large
55
+ max_size = 1024
56
+ if max(image.size) > max_size:
57
+ ratio = max_size / max(image.size)
58
+ new_size = tuple(int(dim * ratio) for dim in image.size)
59
+ image = image.resize(new_size, Image.Resampling.LANCZOS)
60
+
61
+ # Change model if requested
62
+ if model_choice != "default" and model_choice != self.current_model:
63
+ self.load_model(model_choice)
64
+
65
+ # Perform upscaling
66
+ if self.upscaler:
67
+ # For pipeline-based upscaling
68
+ upscaled = self.upscaler(image)
69
+ if isinstance(upscaled, list):
70
+ upscaled = upscaled[0]
71
+ if hasattr(upscaled, 'images'):
72
+ upscaled = upscaled.images[0]
73
+ elif isinstance(upscaled, dict) and 'image' in upscaled:
74
+ upscaled = upscaled['image']
75
+
76
+ return upscaled, f"✅ Obrázek zvětšen pomocí {self.current_model}"
77
+ else:
78
+ # Simple fallback upscaling
79
+ new_size = tuple(int(dim * scale_factor) for dim in image.size)
80
+ upscaled = image.resize(new_size, Image.Resampling.LANCZOS)
81
+ return upscaled, f"✅ Obrázek zvětšen pomocí klasického algoritmu (fallback)"
82
+
83
+ except Exception as e:
84
+ return None, f"❌ Chyba při zpracování: {str(e)}"
85
+
86
+ def load_model(self, model_name):
87
+ """Load specific model"""
88
+ try:
89
+ self.current_model = model_name
90
+ self.upscaler = pipeline(
91
+ "image-to-image",
92
+ model=model_name,
93
+ device=0 if self.device == "cuda" else -1
94
+ )
95
+ return f"✅ Model změněn na: {model_name}"
96
+ except Exception as e:
97
+ return f"❌ Chyba při načítání modelu {model_name}: {str(e)}"
98
+
99
+ # Initialize upscaler
100
+ upscaler = PhotoUpscaler()
101
+
102
+ # Available models for upscaling
103
+ UPSCALING_MODELS = [
104
+ "default",
105
+ "microsoft/swin2SR-compressed-sr-x2-48",
106
+ "microsoft/swin2SR-compressed-sr-x4-48",
107
+ "caidas/swin2SR-realworld-sr-x4-64-bsrgan-psnr",
108
+ "microsoft/swin2SR-classical-sr-x2-64",
109
+ "microsoft/swin2SR-classical-sr-x4-64"
110
+ ]
111
+
112
+ def process_upscaling(image, scale_factor, model_choice, hf_token):
113
+ """Main processing function"""
114
+ # Login to HuggingFace if token provided
115
+ if hf_token and hf_token.strip():
116
+ try:
117
+ login(hf_token)
118
+ status_msg = "🔐 Přihlášen k Hugging Face | "
119
+ except:
120
+ status_msg = "⚠️ Problém s HF tokenem | "
121
+ else:
122
+ status_msg = "ℹ️ Používám veřejné modely | "
123
+
124
+ # Perform upscaling
125
+ result_image, process_msg = upscaler.upscale_image(image, scale_factor, model_choice)
126
+
127
+ return result_image, status_msg + process_msg
128
+
129
+ def get_model_info():
130
+ """Get current model information"""
131
+ device_info = f"Zařízení: {upscaler.device.upper()}"
132
+ model_info = f"Aktuální model: {upscaler.current_model}"
133
+ return f"ℹ️ {device_info} | {model_info}"
134
+
135
+ # Create Gradio interface
136
+ with gr.Blocks(
137
+ title="🚀 Photo Upscaler - Hugging Face",
138
+ theme=gr.themes.Soft(),
139
+ css="""
140
+ .gradio-container {
141
+ max-width: 1200px !important;
142
+ margin: auto !important;
143
+ }
144
+ .title {
145
+ text-align: center;
146
+ color: #ff6b35;
147
+ margin-bottom: 20px;
148
+ }
149
+ """
150
+ ) as demo:
151
+
152
+ gr.HTML("""
153
+ <div class="title">
154
+ <h1>🚀 Photo Upscaler s Hugging Face</h1>
155
+ <p>Zvětšujte své fotografie pomocí pokročilých AI modelů</p>
156
+ </div>
157
+ """)
158
+
159
+ with gr.Row():
160
+ with gr.Column(scale=1):
161
+ gr.Markdown("### 📤 Vstup")
162
+ input_image = gr.Image(
163
+ label="Nahrajte fotografii",
164
+ type="pil",
165
+ format="png"
166
+ )
167
+
168
+ scale_factor = gr.Slider(
169
+ minimum=1.5,
170
+ maximum=4.0,
171
+ value=2.0,
172
+ step=0.5,
173
+ label="Faktor zvětšení",
174
+ info="Kolikrát zvětšit obrázek"
175
+ )
176
+
177
+ model_choice = gr.Dropdown(
178
+ choices=UPSCALING_MODELS,
179
+ value="default",
180
+ label="Vyberte model",
181
+ info="Různé modely pro různé typy obrázků"
182
+ )
183
+
184
+ hf_token = gr.Textbox(
185
+ label="Hugging Face Token (volitelné)",
186
+ placeholder="hf_xxxxxxxxxxxxx",
187
+ type="password",
188
+ info="Pro přístup k privátním modelům"
189
+ )
190
+
191
+ upscale_btn = gr.Button(
192
+ "🔍 Zvětšit obrázek",
193
+ variant="primary",
194
+ size="lg"
195
+ )
196
+
197
+ with gr.Column(scale=1):
198
+ gr.Markdown("### 📥 Výstup")
199
+ output_image = gr.Image(
200
+ label="Zvětšený obrázek",
201
+ type="pil"
202
+ )
203
+
204
+ status_text = gr.Textbox(
205
+ label="Status",
206
+ interactive=False,
207
+ max_lines=3
208
+ )
209
+
210
+ info_btn = gr.Button("ℹ️ Info o modelu")
211
+
212
+ # Event handlers
213
+ upscale_btn.click(
214
+ fn=process_upscaling,
215
+ inputs=[input_image, scale_factor, model_choice, hf_token],
216
+ outputs=[output_image, status_text]
217
+ )
218
+
219
+ info_btn.click(
220
+ fn=get_model_info,
221
+ outputs=status_text
222
+ )
223
+
224
+ # Examples
225
+ gr.Markdown("### 📋 Tipy pro použití")
226
+ gr.Markdown("""
227
+ - **Nejlepší výsledky**: Používejte obrázky s rozlišením 256x256 až 512x512 pixelů
228
+ - **Modely**: Různé modely jsou optimalizované pro různé typy obrázků
229
+ - **Real-world modely**: Nejlepší pro fotografie z reálného světa
230
+ - **Classical modely**: Vhodné pro umělé nebo digitální obrázky
231
+ - **HF Token**: Zadejte pro přístup k nejnovějším modelům
232
+ """)
233
+
234
+ if __name__ == "__main__":
235
+ demo.launch(
236
+ share=True,
237
+ server_name="0.0.0.0",
238
+ server_port=7860,
239
+ show_error=True
240
+ )
app_hf_spaces.py ADDED
@@ -0,0 +1,143 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import torch
3
+ from PIL import Image
4
+ import numpy as np
5
+ from transformers import pipeline
6
+ import os
7
+ from huggingface_hub import login
8
+ import warnings
9
+ warnings.filterwarnings("ignore")
10
+
11
+ class PhotoUpscaler:
12
+ def __init__(self):
13
+ self.device = "cuda" if torch.cuda.is_available() else "cpu"
14
+ self.current_model = "microsoft/swin2SR-compressed-sr-x2-48"
15
+ self.upscaler = None
16
+ self.load_default_model()
17
+
18
+ def load_default_model(self):
19
+ """Load default upscaling model optimized for HF Spaces"""
20
+ try:
21
+ self.upscaler = pipeline(
22
+ "image-to-image",
23
+ model=self.current_model,
24
+ device=0 if self.device == "cuda" else -1
25
+ )
26
+ return f"✅ Model loaded: {self.current_model}"
27
+ except Exception as e:
28
+ return f"❌ Error loading model: {str(e)}"
29
+
30
+ def upscale_image(self, image, scale_factor=2):
31
+ """Upscale image with simplified processing for HF Spaces"""
32
+ if image is None:
33
+ return None, "❌ No image uploaded"
34
+
35
+ try:
36
+ # Convert to PIL if needed
37
+ if isinstance(image, np.ndarray):
38
+ image = Image.fromarray(image)
39
+
40
+ # Limit size for HF Spaces (smaller memory limits)
41
+ max_size = 512
42
+ if max(image.size) > max_size:
43
+ ratio = max_size / max(image.size)
44
+ new_size = tuple(int(dim * ratio) for dim in image.size)
45
+ image = image.resize(new_size, Image.Resampling.LANCZOS)
46
+
47
+ # Perform upscaling
48
+ if self.upscaler:
49
+ try:
50
+ upscaled = self.upscaler(image)
51
+ if isinstance(upscaled, list):
52
+ upscaled = upscaled[0]
53
+ return upscaled, f"✅ Image upscaled using {self.current_model}"
54
+ except:
55
+ # Fallback to simple upscaling if model fails
56
+ new_size = tuple(int(dim * scale_factor) for dim in image.size)
57
+ upscaled = image.resize(new_size, Image.Resampling.LANCZOS)
58
+ return upscaled, "✅ Image upscaled using fallback method"
59
+ else:
60
+ new_size = tuple(int(dim * scale_factor) for dim in image.size)
61
+ upscaled = image.resize(new_size, Image.Resampling.LANCZOS)
62
+ return upscaled, "✅ Image upscaled using classic algorithm"
63
+
64
+ except Exception as e:
65
+ return None, f"❌ Processing error: {str(e)}"
66
+
67
+ # Initialize upscaler
68
+ upscaler = PhotoUpscaler()
69
+
70
+ def process_upscaling(image, scale_factor):
71
+ """Main processing function for HF Spaces"""
72
+ result_image, process_msg = upscaler.upscale_image(image, scale_factor)
73
+ return result_image, process_msg
74
+
75
+ # Create Gradio interface optimized for HF Spaces
76
+ with gr.Blocks(
77
+ title="🚀 Photo Upscaler",
78
+ theme=gr.themes.Default(),
79
+ css="""
80
+ .gradio-container {
81
+ max-width: 900px !important;
82
+ margin: auto !important;
83
+ }
84
+ """
85
+ ) as demo:
86
+
87
+ gr.HTML("""
88
+ <div style="text-align: center; margin-bottom: 20px;">
89
+ <h1>🚀 Photo Upscaler</h1>
90
+ <p>Enhance your photos with AI-powered upscaling</p>
91
+ </div>
92
+ """)
93
+
94
+ with gr.Row():
95
+ with gr.Column():
96
+ gr.Markdown("### 📤 Input")
97
+ input_image = gr.Image(
98
+ label="Upload Photo",
99
+ type="pil"
100
+ )
101
+
102
+ scale_factor = gr.Slider(
103
+ minimum=1.5,
104
+ maximum=3.0,
105
+ value=2.0,
106
+ step=0.5,
107
+ label="Scale Factor"
108
+ )
109
+
110
+ upscale_btn = gr.Button(
111
+ "🔍 Upscale Image",
112
+ variant="primary"
113
+ )
114
+
115
+ with gr.Column():
116
+ gr.Markdown("### 📥 Output")
117
+ output_image = gr.Image(
118
+ label="Upscaled Image"
119
+ )
120
+
121
+ status_text = gr.Textbox(
122
+ label="Status",
123
+ interactive=False
124
+ )
125
+
126
+ # Event handler
127
+ upscale_btn.click(
128
+ fn=process_upscaling,
129
+ inputs=[input_image, scale_factor],
130
+ outputs=[output_image, status_text]
131
+ )
132
+
133
+ # Tips
134
+ gr.Markdown("""
135
+ ### 💡 Tips for best results:
136
+ - Use images between 256x256 and 512x512 pixels
137
+ - PNG format provides best quality
138
+ - Lower scale factors work faster
139
+ """)
140
+
141
+ # Launch for HF Spaces
142
+ if __name__ == "__main__":
143
+ demo.launch()
requirements.txt ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ gradio>=4.0.0
2
+ torch>=2.0.0
3
+ torchvision>=0.15.0
4
+ transformers>=4.35.0
5
+ huggingface-hub>=0.17.0
6
+ Pillow>=9.0.0
7
+ numpy>=1.21.0
8
+ requests>=2.28.0
9
+ accelerate>=0.20.0
10
+ diffusers>=0.21.0
11
+ opencv-python>=4.7.0