Spaces:
Runtime error
Runtime error
Update app.py
Browse files
app.py
CHANGED
|
@@ -1,5 +1,6 @@
|
|
| 1 |
"""
|
| 2 |
Pixagram AI Pixel Art Generator - Gradio Interface
|
|
|
|
| 3 |
"""
|
| 4 |
import spaces
|
| 5 |
import gradio as gr
|
|
@@ -10,7 +11,7 @@ from generator import RetroArtConverter
|
|
| 10 |
|
| 11 |
|
| 12 |
# Initialize converter
|
| 13 |
-
print("Initializing RetroArt Converter...")
|
| 14 |
converter = RetroArtConverter()
|
| 15 |
|
| 16 |
|
|
@@ -98,16 +99,16 @@ def process_image(
|
|
| 98 |
raise gr.Error(f"Generation failed: {str(e)}")
|
| 99 |
|
| 100 |
|
| 101 |
-
# Build model status text
|
| 102 |
def get_model_status():
|
| 103 |
"""Generate model status markdown"""
|
| 104 |
if converter.models_loaded:
|
| 105 |
status_text = "**[OK] Loaded Models:**\n"
|
| 106 |
status_text += f"- Custom Checkpoint (Horizon): {'[OK] Loaded' if converter.models_loaded['custom_checkpoint'] else '[OK] Using SDXL base'}\n"
|
| 107 |
status_text += f"- LORA (RetroArt): {'[OK] Loaded' if converter.models_loaded['lora'] else ' Disabled'}\n"
|
| 108 |
-
status_text += f"- InstantID: {'[OK] Loaded' if converter.models_loaded['instantid'] else ' Disabled'}\n"
|
| 109 |
status_text += f"- Zoe Depth: {'[OK] Loaded' if converter.models_loaded['zoe_depth'] else ' Fallback'}\n"
|
| 110 |
-
status_text +=
|
| 111 |
return status_text
|
| 112 |
return "**Model status unavailable**"
|
| 113 |
|
|
@@ -169,22 +170,22 @@ with gr.Blocks(title="Pixagram - AI Pixel Art Generator", theme=gr.themes.Soft()
|
|
| 169 |
# Model status
|
| 170 |
gr.Markdown(get_model_status())
|
| 171 |
|
| 172 |
-
# Scheduler info
|
| 173 |
scheduler_info = f"""
|
| 174 |
**[CONFIG] Advanced Configuration:**
|
| 175 |
-
- Pipeline: **Img2Img** (
|
| 176 |
-
- Face System: **
|
| 177 |
-
- **[
|
| 178 |
-
- **[
|
| 179 |
-
- **[
|
| 180 |
-
- **[ADVANCED] Adaptive Parameters:** Auto-adjust for face quality
|
| 181 |
-
- **[ADVANCED] Face-Aware Color Matching:** LAB space with saturation preservation
|
| 182 |
- Scheduler: **LCM** (12 steps, fast generation)
|
| 183 |
- Recommended CFG: **1.15-1.5** (optimized for LCM)
|
| 184 |
- Identity Boost: **1.15x** (for maximum face fidelity)
|
| 185 |
- CLIP Skip: **2** (enhanced style control)
|
| 186 |
- LORA Trigger: `{TRIGGER_WORD}` (auto-added)
|
| 187 |
-
- **
|
| 188 |
"""
|
| 189 |
gr.Markdown(scheduler_info)
|
| 190 |
|
|
@@ -205,43 +206,51 @@ with gr.Blocks(title="Pixagram - AI Pixel Art Generator", theme=gr.themes.Soft()
|
|
| 205 |
lines=2
|
| 206 |
)
|
| 207 |
|
| 208 |
-
with gr.Accordion(
|
| 209 |
-
# Preset selector
|
| 210 |
with gr.Row():
|
| 211 |
-
gr.
|
|
|
|
|
|
|
| 212 |
|
| 213 |
with gr.Row():
|
| 214 |
-
|
| 215 |
-
|
| 216 |
-
|
| 217 |
-
preset_btn_4 = gr.Button("Artistic\nExcellence", size="sm", variant="secondary")
|
| 218 |
-
preset_btn_5 = gr.Button("Style\nFocus", size="sm", variant="secondary")
|
| 219 |
-
preset_btn_6 = gr.Button("Subtle\nEnhancement", size="sm", variant="secondary")
|
| 220 |
|
| 221 |
preset_status = gr.Textbox(
|
| 222 |
-
label="
|
| 223 |
-
value="
|
| 224 |
-
|
| 225 |
-
|
| 226 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 227 |
|
| 228 |
gr.Markdown("### Core Parameters")
|
| 229 |
|
| 230 |
-
steps = gr.Slider(
|
| 231 |
-
minimum=4,
|
| 232 |
-
maximum=50,
|
| 233 |
-
value=DEFAULT_PARAMS['num_inference_steps'],
|
| 234 |
-
step=1,
|
| 235 |
-
label=f" Inference Steps (LCM optimized for 12)"
|
| 236 |
-
)
|
| 237 |
-
|
| 238 |
with gr.Row():
|
| 239 |
-
|
| 240 |
-
minimum=0.
|
| 241 |
maximum=2.0,
|
| 242 |
-
value=DEFAULT_PARAMS['
|
| 243 |
step=0.05,
|
| 244 |
-
label="
|
| 245 |
)
|
| 246 |
|
| 247 |
strength = gr.Slider(
|
|
@@ -280,14 +289,6 @@ with gr.Blocks(title="Pixagram - AI Pixel Art Generator", theme=gr.themes.Soft()
|
|
| 280 |
label="InstantID ControlNet Scale (facial keypoints structure)"
|
| 281 |
)
|
| 282 |
|
| 283 |
-
identity_preservation = gr.Slider(
|
| 284 |
-
minimum=0.3,
|
| 285 |
-
maximum=2.0,
|
| 286 |
-
value=DEFAULT_PARAMS['identity_preservation'],
|
| 287 |
-
step=0.05,
|
| 288 |
-
label="Identity Preservation (IP-Adapter scale)\nHigher = stronger face preservation"
|
| 289 |
-
)
|
| 290 |
-
|
| 291 |
enable_color_matching = gr.Checkbox(
|
| 292 |
value=DEFAULT_PARAMS['enable_color_matching'],
|
| 293 |
label="[OPTIONAL] Enable Color Matching (gentle skin tone adjustment)",
|
|
@@ -328,17 +329,11 @@ with gr.Blocks(title="Pixagram - AI Pixel Art Generator", theme=gr.themes.Soft()
|
|
| 328 |
gr.Markdown(f"""
|
| 329 |
### Tips for Maximum Quality Results:
|
| 330 |
|
| 331 |
-
**[
|
| 332 |
-
-
|
| 333 |
-
-
|
| 334 |
-
-
|
| 335 |
-
-
|
| 336 |
-
- **Enhanced Color Matching:** Face-aware LAB color space (+1-2% quality)
|
| 337 |
-
|
| 338 |
-
**Expected Quality:**
|
| 339 |
-
- Base system: 90-93% face similarity
|
| 340 |
-
- With optimizations: 96-99% face similarity
|
| 341 |
-
- Ultra Fidelity preset: 97-99%+ face similarity
|
| 342 |
|
| 343 |
**[PRESETS] Optimized Preset Guide:**
|
| 344 |
- **Ultra Fidelity:** 96-98% similarity, minimal transformation
|
|
@@ -359,7 +354,7 @@ with gr.Blocks(title="Pixagram - AI Pixel Art Generator", theme=gr.themes.Soft()
|
|
| 359 |
- `0.38-0.45`: Maximum fidelity (Ultra/Subtle presets)
|
| 360 |
- `0.48-0.55`: Balanced quality (Premium/Balanced presets)
|
| 361 |
- `0.58-0.68`: Artistic freedom (Artistic/Style presets)
|
| 362 |
-
- **Identity Preservation**:
|
| 363 |
- **Guidance Scale (CFG)**: LCM-optimized range 1.1-1.5
|
| 364 |
- **LORA Scale**: Pixel art intensity (inverse to identity)
|
| 365 |
|
|
@@ -383,10 +378,9 @@ with gr.Blocks(title="Pixagram - AI Pixel Art Generator", theme=gr.themes.Soft()
|
|
| 383 |
6. Fix seed for consistent testing
|
| 384 |
|
| 385 |
**[TECHNICAL] System Details:**
|
| 386 |
-
-
|
| 387 |
-
-
|
| 388 |
-
-
|
| 389 |
-
- Color Matching: LAB space, face-aware masking
|
| 390 |
- Resolution: Auto-optimized to 896x1152 or 832x1216
|
| 391 |
""")
|
| 392 |
|
|
@@ -452,4 +446,4 @@ if __name__ == "__main__":
|
|
| 452 |
server_port=7860,
|
| 453 |
share=True,
|
| 454 |
show_api=True
|
| 455 |
-
)
|
|
|
|
| 1 |
"""
|
| 2 |
Pixagram AI Pixel Art Generator - Gradio Interface
|
| 3 |
+
UPDATED VERSION with InstantID pipeline status
|
| 4 |
"""
|
| 5 |
import spaces
|
| 6 |
import gradio as gr
|
|
|
|
| 11 |
|
| 12 |
|
| 13 |
# Initialize converter
|
| 14 |
+
print("Initializing RetroArt Converter with InstantID...")
|
| 15 |
converter = RetroArtConverter()
|
| 16 |
|
| 17 |
|
|
|
|
| 99 |
raise gr.Error(f"Generation failed: {str(e)}")
|
| 100 |
|
| 101 |
|
| 102 |
+
# UPDATED: Build model status text with InstantID info
|
| 103 |
def get_model_status():
|
| 104 |
"""Generate model status markdown"""
|
| 105 |
if converter.models_loaded:
|
| 106 |
status_text = "**[OK] Loaded Models:**\n"
|
| 107 |
status_text += f"- Custom Checkpoint (Horizon): {'[OK] Loaded' if converter.models_loaded['custom_checkpoint'] else '[OK] Using SDXL base'}\n"
|
| 108 |
status_text += f"- LORA (RetroArt): {'[OK] Loaded' if converter.models_loaded['lora'] else ' Disabled'}\n"
|
| 109 |
+
status_text += f"- InstantID Pipeline: {'[OK] Loaded with Face + Depth' if converter.models_loaded['instantid'] else ' Disabled'}\n"
|
| 110 |
status_text += f"- Zoe Depth: {'[OK] Loaded' if converter.models_loaded['zoe_depth'] else ' Fallback'}\n"
|
| 111 |
+
status_text += "- IP-Adapter: [OK] Built into InstantID pipeline\n"
|
| 112 |
return status_text
|
| 113 |
return "**Model status unavailable**"
|
| 114 |
|
|
|
|
| 170 |
# Model status
|
| 171 |
gr.Markdown(get_model_status())
|
| 172 |
|
| 173 |
+
# UPDATED: Scheduler info with InstantID details
|
| 174 |
scheduler_info = f"""
|
| 175 |
**[CONFIG] Advanced Configuration:**
|
| 176 |
+
- Pipeline: **InstantID Img2Img** (native face preservation)
|
| 177 |
+
- Face System: **InstantID + InsightFace** (512D embeddings)
|
| 178 |
+
- **[INSTANTID] Built-in Resampler:** 8 layers, 16 heads (official)
|
| 179 |
+
- **[INSTANTID] IP-Adapter:** Native attention processors
|
| 180 |
+
- **[INSTANTID] Dual ControlNets:** Face keypoints + Depth
|
| 181 |
+
- **[ADVANCED] Adaptive Parameters:** Auto-adjust for face quality
|
| 182 |
+
- **[ADVANCED] Face-Aware Color Matching:** LAB space with saturation preservation
|
| 183 |
- Scheduler: **LCM** (12 steps, fast generation)
|
| 184 |
- Recommended CFG: **1.15-1.5** (optimized for LCM)
|
| 185 |
- Identity Boost: **1.15x** (for maximum face fidelity)
|
| 186 |
- CLIP Skip: **2** (enhanced style control)
|
| 187 |
- LORA Trigger: `{TRIGGER_WORD}` (auto-added)
|
| 188 |
+
- **Expected Quality:** 95-98% face similarity
|
| 189 |
"""
|
| 190 |
gr.Markdown(scheduler_info)
|
| 191 |
|
|
|
|
| 206 |
lines=2
|
| 207 |
)
|
| 208 |
|
| 209 |
+
with gr.Accordion(" Presets", open=True):
|
|
|
|
| 210 |
with gr.Row():
|
| 211 |
+
preset_btn_1 = gr.Button("Ultra Fidelity (96-98%)", variant="secondary", size="sm")
|
| 212 |
+
preset_btn_2 = gr.Button("Premium Portrait", variant="primary", size="sm")
|
| 213 |
+
preset_btn_3 = gr.Button("Balanced Portrait", variant="secondary", size="sm")
|
| 214 |
|
| 215 |
with gr.Row():
|
| 216 |
+
preset_btn_4 = gr.Button("Artistic Excellence", variant="secondary", size="sm")
|
| 217 |
+
preset_btn_5 = gr.Button("Style Focus", variant="secondary", size="sm")
|
| 218 |
+
preset_btn_6 = gr.Button("Subtle Enhancement", variant="secondary", size="sm")
|
|
|
|
|
|
|
|
|
|
| 219 |
|
| 220 |
preset_status = gr.Textbox(
|
| 221 |
+
label="",
|
| 222 |
+
value="Select a preset above or adjust parameters manually",
|
| 223 |
+
lines=2,
|
| 224 |
+
interactive=False
|
| 225 |
)
|
| 226 |
+
|
| 227 |
+
with gr.Accordion(" Generation Parameters", open=True):
|
| 228 |
+
with gr.Row():
|
| 229 |
+
steps = gr.Slider(
|
| 230 |
+
minimum=4,
|
| 231 |
+
maximum=25,
|
| 232 |
+
value=DEFAULT_PARAMS['num_inference_steps'],
|
| 233 |
+
step=1,
|
| 234 |
+
label="Inference Steps\nLCM works best at 8-14 steps"
|
| 235 |
+
)
|
| 236 |
+
|
| 237 |
+
guidance_scale = gr.Slider(
|
| 238 |
+
minimum=1.0,
|
| 239 |
+
maximum=2.0,
|
| 240 |
+
value=DEFAULT_PARAMS['guidance_scale'],
|
| 241 |
+
step=0.05,
|
| 242 |
+
label="Guidance Scale (CFG)\nLower for LCM (1.1-1.5)"
|
| 243 |
+
)
|
| 244 |
|
| 245 |
gr.Markdown("### Core Parameters")
|
| 246 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 247 |
with gr.Row():
|
| 248 |
+
identity_preservation = gr.Slider(
|
| 249 |
+
minimum=0.3,
|
| 250 |
maximum=2.0,
|
| 251 |
+
value=DEFAULT_PARAMS['identity_preservation'],
|
| 252 |
step=0.05,
|
| 253 |
+
label="Identity Preservation (IP-Adapter)\nHigher = stronger face"
|
| 254 |
)
|
| 255 |
|
| 256 |
strength = gr.Slider(
|
|
|
|
| 289 |
label="InstantID ControlNet Scale (facial keypoints structure)"
|
| 290 |
)
|
| 291 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 292 |
enable_color_matching = gr.Checkbox(
|
| 293 |
value=DEFAULT_PARAMS['enable_color_matching'],
|
| 294 |
label="[OPTIONAL] Enable Color Matching (gentle skin tone adjustment)",
|
|
|
|
| 329 |
gr.Markdown(f"""
|
| 330 |
### Tips for Maximum Quality Results:
|
| 331 |
|
| 332 |
+
**[INSTANTID] InstantID Pipeline Active:**
|
| 333 |
+
- Built-in Resampler: 8 layers, 16 query tokens
|
| 334 |
+
- IP-Adapter: Native face preservation
|
| 335 |
+
- Dual ControlNets: Keypoints + Depth
|
| 336 |
+
- Expected quality: 95-98% face similarity
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 337 |
|
| 338 |
**[PRESETS] Optimized Preset Guide:**
|
| 339 |
- **Ultra Fidelity:** 96-98% similarity, minimal transformation
|
|
|
|
| 354 |
- `0.38-0.45`: Maximum fidelity (Ultra/Subtle presets)
|
| 355 |
- `0.48-0.55`: Balanced quality (Premium/Balanced presets)
|
| 356 |
- `0.58-0.68`: Artistic freedom (Artistic/Style presets)
|
| 357 |
+
- **Identity Preservation**: IP-Adapter face embedding strength (auto-boosted 1.15x)
|
| 358 |
- **Guidance Scale (CFG)**: LCM-optimized range 1.1-1.5
|
| 359 |
- **LORA Scale**: Pixel art intensity (inverse to identity)
|
| 360 |
|
|
|
|
| 378 |
6. Fix seed for consistent testing
|
| 379 |
|
| 380 |
**[TECHNICAL] System Details:**
|
| 381 |
+
- InstantID Pipeline: Official implementation
|
| 382 |
+
- Face embeddings: InsightFace 512D → 16×2048D tokens
|
| 383 |
+
- ControlNets: Dual (Identity + Depth)
|
|
|
|
| 384 |
- Resolution: Auto-optimized to 896x1152 or 832x1216
|
| 385 |
""")
|
| 386 |
|
|
|
|
| 446 |
server_port=7860,
|
| 447 |
share=True,
|
| 448 |
show_api=True
|
| 449 |
+
)
|