Spaces:
ginigen
/
Running on Zero

Mockup / app.py
aiqcamp's picture
Update app.py
202b398 verified
raw
history blame
13.8 kB
import gradio as gr
import numpy as np
import random
import torch
from diffusers import DiffusionPipeline
import warnings
import os
from datetime import datetime
import uuid
# κ²½κ³  λ©”μ‹œμ§€ 숨기기
warnings.filterwarnings('ignore', category=UserWarning)
# μ €μž₯ 디렉토리 생성
SAVE_DIR = "saved_images"
if not os.path.exists(SAVE_DIR):
os.makedirs(SAVE_DIR, exist_ok=True)
# μž₯치 및 dtype μ„€μ •
dtype = torch.float32 if torch.cuda.is_available() else torch.float32
device = "cuda" if torch.cuda.is_available() else "cpu"
# λͺ¨λΈ λ‘œλ“œ
pipe = DiffusionPipeline.from_pretrained(
"black-forest-labs/FLUX.1-schnell",
torch_dtype=dtype,
device_map="auto",
use_safetensors=True
).to(device)
# λ©”λͺ¨λ¦¬ μ΅œμ ν™”
pipe.enable_attention_slicing()
if device == "cpu":
pipe.enable_sequential_cpu_offload()
MAX_SEED = np.iinfo(np.int32).max
MAX_IMAGE_SIZE = 2048
def generate_diagram(prompt, seed=42, randomize_seed=False, width=1024, height=1024, num_inference_steps=4):
"""FLUX AIλ₯Ό μ‚¬μš©ν•˜μ—¬ λ‹€μ΄μ–΄κ·Έλž¨ 생성"""
try:
if randomize_seed:
seed = random.randint(0, MAX_SEED)
generator = torch.Generator(device=device).manual_seed(seed)
with torch.no_grad():
image = pipe(
prompt=prompt,
width=width,
height=height,
num_inference_steps=num_inference_steps,
generator=generator,
guidance_scale=0.0
).images[0]
# 이미지 μ €μž₯
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
unique_id = str(uuid.uuid4())[:8]
filename = f"diagram_{timestamp}_{unique_id}.png"
save_path = os.path.join(SAVE_DIR, filename)
image.save(save_path)
return image, seed
except Exception as e:
raise gr.Error(f"λ‹€μ΄μ–΄κ·Έλž¨ 생성 쀑 였λ₯˜ λ°œμƒ: {str(e)}")
finally:
if torch.cuda.is_available():
torch.cuda.empty_cache()
# Enhanced examples with more detailed prompts and specific styling
EXAMPLES = [
{
"title": "Knowledge Tree",
"prompt": """A handrawn colorful mind map diagram, educational style, vibrant colors, clear hierarchy, golden ratio layout.
KNOWLEDGE
β”œβ”€β”€ ACQUISITION [Brain with Lightning ~60px]
β”‚ β”œβ”€β”€ READING [Open Book with Glow]
β”‚ β”œβ”€β”€ PRACTICE [Hands-on Tools]
β”‚ └── OBSERVATION [Eye with Magnifier]
β”œβ”€β”€ PROCESSING [Gear Network ~50px]
β”‚ β”œβ”€β”€ ANALYSIS [Graph Trending Up]
β”‚ └── SYNTHESIS [Puzzle Pieces]
β”œβ”€β”€ RETENTION [Memory Chip ~45px]
β”‚ β”œβ”€β”€ SHORT-TERM [Quick Flash]
β”‚ └── LONG-TERM [Solid Archive]
└── APPLICATION
β”œβ”€β”€ CREATION [Artist Palette]
└── INNOVATION [Lightbulb Constellation]""",
"width": 1024,
"height": 1024
},
{
"title": "Digital Transformation",
"prompt": """A handrawn colorful mind map diagram, tech-focused style, neon accents, circuit board patterns.
DIGITAL TRANSFORM
β”œβ”€β”€ CLOUD [Cloud with Data Rain ~55px]
β”‚ β”œβ”€β”€ STORAGE [Database Cluster]
β”‚ └── COMPUTING [Server Array]
β”œβ”€β”€ AUTOMATION [Robot Arm ~50px]
β”‚ β”œβ”€β”€ WORKFLOWS [Flowchart]
β”‚ └── AI/ML [Neural Network]
β”œβ”€β”€ SECURITY [Shield Matrix ~45px]
β”‚ β”œβ”€β”€ ENCRYPTION [Lock Code]
β”‚ └── MONITORING [Radar Screen]
└── INTEGRATION
β”œβ”€β”€ APIS [Puzzle Connect]
└── MICROSERVICES [Building Blocks]""",
"width": 1024,
"height": 1024
},
{
"title": "Creative Process",
"prompt": """A handrawn colorful mind map diagram, artistic style, watercolor effects, flowing connections.
CREATIVITY
β”œβ”€β”€ INSPIRATION [Constellation Stars ~60px]
β”‚ β”œβ”€β”€ NATURE [Organic Patterns]
β”‚ └── CULTURE [Global Icons]
β”œβ”€β”€ IDEATION [Floating Bubbles ~50px]
β”‚ β”œβ”€β”€ BRAINSTORM [Thunder Cloud]
β”‚ └── REFINEMENT [Diamond Polish]
β”œβ”€β”€ EXECUTION [Artist Tools ~45px]
β”‚ β”œβ”€β”€ TECHNIQUE [Skilled Hands]
β”‚ └── MEDIUM [Palette Mix]
└── PRESENTATION
β”œβ”€β”€ GALLERY [Frame Display]
└── FEEDBACK [Echo Ripples]""",
"width": 1024,
"height": 1024
},
{
"title": "Future Cities",
"prompt": """A handrawn colorful mind map diagram, futuristic style, holographic elements, sustainable themes.
SMART CITY
β”œβ”€β”€ MOBILITY [Hover Transport ~60px]
β”‚ β”œβ”€β”€ AUTONOMOUS [Self-Driving]
β”‚ └── CONNECTED [Network Grid]
β”œβ”€β”€ ENERGY [Solar Crystal ~55px]
β”‚ β”œβ”€β”€ RENEWABLE [Green Power]
β”‚ └── STORAGE [Battery Hub]
β”œβ”€β”€ LIVING [Eco Building ~50px]
β”‚ β”œβ”€β”€ VERTICAL [Sky Gardens]
β”‚ └── COMMUNITY [People Connect]
└── INFRASTRUCTURE
β”œβ”€β”€ AI GRID [Neural City]
└── ECO SYSTEM [Nature Tech]""",
"width": 1024,
"height": 1024
},
{
"title": "Health Evolution",
"prompt": """A handrawn colorful mind map diagram, medical style, DNA helix patterns, wellness focus.
HEALTH 3.0
β”œβ”€β”€ PREVENTION [Shield DNA ~60px]
β”‚ β”œβ”€β”€ LIFESTYLE [Activity Pulse]
β”‚ └── MONITORING [Health Watch]
β”œβ”€β”€ TREATMENT [Caduceus Tech ~55px]
β”‚ β”œβ”€β”€ PERSONALIZED [DNA Code]
β”‚ └── REGENERATIVE [Cell Renew]
β”œβ”€β”€ ENHANCEMENT [Upgrade Spiral ~50px]
β”‚ β”œβ”€β”€ COGNITIVE [Brain Boost]
β”‚ └── PHYSICAL [Body Optimize]
└── INTEGRATION
β”œβ”€β”€ AI HEALTH [Smart Doctor]
└── COMMUNITY [Global Care]""",
"width": 1024,
"height": 1024
},
{
"title": "Space Exploration",
"prompt": """A handrawn colorful mind map diagram, cosmic style, star field background, planetary elements.
SPACE FRONTIER
β”œβ”€β”€ DISCOVERY [Telescope Array ~60px]
β”‚ β”œβ”€β”€ MAPPING [Star Charts]
β”‚ └── ANALYSIS [Data Stream]
β”œβ”€β”€ TRAVEL [Rocket Launch ~55px]
β”‚ β”œβ”€β”€ PROPULSION [Energy Core]
β”‚ └── NAVIGATION [Space Map]
β”œβ”€β”€ COLONIZATION [Dome City ~50px]
β”‚ β”œβ”€β”€ HABITATS [Life Sphere]
β”‚ └── RESOURCES [Mine Extract]
└── RESEARCH
β”œβ”€β”€ ASTROBIOLOGY [Life Search]
└── PHYSICS [Space Time]""",
"width": 1024,
"height": 1024
},
{
"title": "Ocean Innovation",
"prompt": """A handrawn colorful mind map diagram, marine style, wave patterns, aqua themes.
OCEAN TECH
β”œβ”€β”€ EXPLORATION [Deep Submersible ~60px]
β”‚ β”œβ”€β”€ MAPPING [Sonar Wave]
β”‚ └── RESEARCH [Lab Bubble]
β”œβ”€β”€ CONSERVATION [Marine Life ~55px]
β”‚ β”œβ”€β”€ PROTECTION [Reef Shield]
β”‚ └── RESTORATION [Growth Core]
β”œβ”€β”€ HARVESTING [Sustainable Net ~50px]
β”‚ β”œβ”€β”€ ENERGY [Wave Power]
β”‚ └── RESOURCES [Bio Extract]
└── MONITORING
β”œβ”€β”€ AI SYSTEMS [Smart Sensors]
└── ECOLOGY [Life Web]""",
"width": 1024,
"height": 1024
},
{
"title": "Quantum Computing",
"prompt": """A handrawn colorful mind map diagram, quantum style, wave-particle duality, matrix patterns.
QUANTUM TECH
β”œβ”€β”€ COMPUTATION [Qubit Matrix ~60px]
β”‚ β”œβ”€β”€ PROCESSING [Wave Function]
β”‚ └── ALGORITHMS [Code Quantum]
β”œβ”€β”€ APPLICATIONS [Use Cases ~55px]
β”‚ β”œβ”€β”€ SIMULATION [Model World]
β”‚ └── OPTIMIZATION [Peak Find]
β”œβ”€β”€ INFRASTRUCTURE [Q-Hardware ~50px]
β”‚ β”œβ”€β”€ CONTROL [Pulse Shape]
β”‚ └── COOLING [Zero Point]
└── DEVELOPMENT
β”œβ”€β”€ SOFTWARE [Q-Code Web]
└── INTEGRATION [Classical Bridge]""",
"width": 1024,
"height": 1024
},
{
"title": "Bio Engineering",
"prompt": """A handrawn colorful mind map diagram, biological style, DNA patterns, organic flow.
BIOTECH
β”œβ”€β”€ GENETICS [DNA Helix ~60px]
β”‚ β”œβ”€β”€ EDITING [CRISPR Tool]
β”‚ └── SYNTHESIS [Gene Build]
β”œβ”€β”€ APPLICATIONS [Lab Array ~55px]
β”‚ β”œβ”€β”€ MEDICINE [Heal Cell]
β”‚ └── AGRICULTURE [Grow Plus]
β”œβ”€β”€ PLATFORMS [Bio Factory ~50px]
β”‚ β”œβ”€β”€ SENSORS [Live Detect]
β”‚ └── PROCESSORS [Cell Compute]
└── INTEGRATION
β”œβ”€β”€ AI BIOLOGY [Smart Life]
└── ECOSYSTEM [Nature Net]""",
"width": 1024,
"height": 1024
},
{
"title": "AI Evolution",
"prompt": """A handrawn colorful mind map diagram, neural network style, digital patterns, intelligence flow.
AI FUTURE
β”œβ”€β”€ COGNITION [Brain Network ~60px]
β”‚ β”œβ”€β”€ LEARNING [Growth Path]
β”‚ └── REASONING [Logic Tree]
β”œβ”€β”€ PERCEPTION [Sensor Array ~55px]
β”‚ β”œβ”€β”€ VISION [Eye Matrix]
β”‚ └── LANGUAGE [Word Web]
β”œβ”€β”€ INTERACTION [Connect Hub ~50px]
β”‚ β”œβ”€β”€ HUMAN [Bridge Link]
β”‚ └── MACHINE [Code Path]
└── EVOLUTION
β”œβ”€β”€ CONSCIOUSNESS [Mind Spark]
└── CREATIVITY [Art Core]""",
"width": 1024,
"height": 1024
}
]
# Convert examples to Gradio format
GRADIO_EXAMPLES = [
[example["prompt"], example["width"], example["height"]]
for example in EXAMPLES
]
def generate_diagram(prompt, width=1024, height=1024):
"""FLUX AIλ₯Ό μ‚¬μš©ν•˜μ—¬ λ‹€μ΄μ–΄κ·Έλž¨ 생성"""
try:
# μ‹œλ“œ μ„€μ •
seed = random.randint(0, MAX_SEED)
generator = torch.Generator(device=device).manual_seed(seed)
# 이미지 생성
image = pipeline(
prompt=prompt,
width=width,
height=height,
num_inference_steps=4,
generator=generator,
).images[0]
# 이미지 μ €μž₯
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
unique_id = str(uuid.uuid4())[:8]
filename = f"diagram_{timestamp}_{unique_id}.png"
save_path = os.path.join(SAVE_DIR, filename)
image.save(save_path)
return image
except Exception as e:
raise gr.Error(f"λ‹€μ΄μ–΄κ·Έλž¨ 생성 쀑 였λ₯˜ λ°œμƒ: {str(e)}")
# CSS μŠ€νƒ€μΌ
css="""
#col-container {
margin: 0 auto;
max-width: 520px;
}
"""
# Gradio μΈν„°νŽ˜μ΄μŠ€ 생성
with gr.Blocks(css=css) as demo:
with gr.Column(elem_id="col-container"):
gr.Markdown("""# FLUX λ‹€μ΄μ–΄κ·Έλž¨ 생성기
FLUX AIλ₯Ό μ‚¬μš©ν•˜μ—¬ μ•„λ¦„λ‹€μš΄ 손그림 μŠ€νƒ€μΌμ˜ λ‹€μ΄μ–΄κ·Έλž¨μ„ μƒμ„±ν•©λ‹ˆλ‹€
""")
with gr.Row():
prompt = gr.Text(
label="ν”„λ‘¬ν”„νŠΈ",
show_label=False,
max_lines=1,
placeholder="λ‹€μ΄μ–΄κ·Έλž¨ ꡬ쑰λ₯Ό μž…λ ₯ν•˜μ„Έμš”...",
container=False,
)
run_button = gr.Button("생성", scale=0)
result = gr.Image(label="μƒμ„±λœ λ‹€μ΄μ–΄κ·Έλž¨", show_label=False)
with gr.Accordion("κ³ κΈ‰ μ„€μ •", open=False):
seed = gr.Slider(
label="μ‹œλ“œ",
minimum=0,
maximum=MAX_SEED,
step=1,
value=0,
)
randomize_seed = gr.Checkbox(label="랜덀 μ‹œλ“œ", value=True)
with gr.Row():
width = gr.Slider(
label="λ„ˆλΉ„",
minimum=256,
maximum=MAX_IMAGE_SIZE,
step=32,
value=1024,
)
height = gr.Slider(
label="높이",
minimum=256,
maximum=MAX_IMAGE_SIZE,
step=32,
value=1024,
)
num_inference_steps = gr.Slider(
label="μΆ”λ‘  단계 수",
minimum=1,
maximum=50,
step=1,
value=4,
)
# 예제 μΆ”κ°€
gr.Examples(
examples=EXAMPLES, # 이전에 μ •μ˜λœ μ˜ˆμ œλ“€ μ‚¬μš©
fn=generate_diagram,
inputs=[prompt],
outputs=[result, seed],
cache_examples=True
)
# 이벀트 ν•Έλ“€λŸ¬
gr.on(
triggers=[run_button.click, prompt.submit],
fn=generate_diagram,
inputs=[prompt, seed, randomize_seed, width, height, num_inference_steps],
outputs=[result, seed]
)
# μ•± μ‹€ν–‰
if __name__ == "__main__":
demo.queue()
demo.launch(
server_name="0.0.0.0",
server_port=7860,
share=False,
show_error=True,
debug=True
)