Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import spaces | |
| import os | |
| import torch | |
| import random | |
| import uuid | |
| from datetime import datetime | |
| from diffusers import FluxTransformer2DModel, FluxPipeline, GGUFQuantizationConfig | |
| from transformers import T5EncoderModel | |
| from PIL import Image | |
| import numpy as np | |
| # Constants | |
| NUM_INFERENCE_STEPS = 8 | |
| MAX_SEED = np.iinfo(np.int32).max | |
| SAVE_DIR = "saved_images" | |
| os.makedirs(SAVE_DIR, exist_ok=True) | |
| # Initialize device | |
| device = "cuda" if torch.cuda.is_available() else "cpu" | |
| huggingface_token = os.getenv("HUGGINGFACE_TOKEN") | |
| # Load model | |
| dtype = torch.bfloat16 | |
| gguf_file_url = "https://huggingface.co/gokaygokay/flux-game/resolve/main/hyperflux_00001_.q8_0.gguf" | |
| base_model = "black-forest-labs/FLUX.1-dev" | |
| text_encoder_2 = T5EncoderModel.from_pretrained( | |
| base_model, | |
| subfolder="text_encoder_2", | |
| torch_dtype=dtype, | |
| token=huggingface_token | |
| ) | |
| transformer = FluxTransformer2DModel.from_single_file( | |
| gguf_file_url, | |
| quantization_config=GGUFQuantizationConfig(compute_dtype=dtype), | |
| torch_dtype=dtype, | |
| token=huggingface_token | |
| ) | |
| flux_pipeline = FluxPipeline.from_pretrained( | |
| base_model, | |
| transformer=transformer, | |
| text_encoder_2=text_encoder_2, | |
| torch_dtype=dtype, | |
| token=huggingface_token | |
| ).to(device) | |
| def generate_flux_image( | |
| prompt: str, | |
| seed: int, | |
| randomize_seed: bool, | |
| width: int, | |
| height: int, | |
| guidance_scale: float, | |
| progress: gr.Progress = gr.Progress(track_tqdm=True), | |
| ) -> Image.Image: | |
| """Generate image using Flux pipeline""" | |
| if randomize_seed: | |
| seed = random.randint(0, MAX_SEED) | |
| generator = torch.Generator(device=device).manual_seed(seed) | |
| prompt = "wbgmsst, " + prompt + ", 3D isometric, white background" | |
| image = flux_pipeline( | |
| prompt=prompt, | |
| guidance_scale=guidance_scale, | |
| num_inference_steps=NUM_INFERENCE_STEPS, | |
| width=width, | |
| height=height, | |
| generator=generator, | |
| ).images[0] | |
| # Save the generated image | |
| timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") | |
| unique_id = str(uuid.uuid4())[:8] | |
| filename = f"{timestamp}_{unique_id}.png" | |
| filepath = os.path.join(SAVE_DIR, filename) | |
| image.save(filepath) | |
| return image | |
| # Simple Gradio interface | |
| demo = gr.Interface( | |
| fn=generate_flux_image, | |
| inputs=[ | |
| gr.Textbox(label="Prompt", placeholder="Enter your game asset description"), | |
| gr.Slider(0, MAX_SEED, label="Seed", value=42, step=1), | |
| gr.Checkbox(label="Randomize Seed", value=True), | |
| gr.Slider(512, 1024, label="Width", value=1024, step=16), | |
| gr.Slider(512, 1024, label="Height", value=1024, step=16), | |
| gr.Slider(0.0, 10.0, label="Guidance Scale", value=3.5, step=0.1), | |
| ], | |
| outputs=gr.Image(label="Generated Asset", type="pil"), | |
| title="Game Asset Generator", | |
| description="Generate game assets with FLUX" | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch() |