import os import random import gradio as gr import torch import spaces from diffusers import Flux2KleinPipeline BASE = "black-forest-labs/FLUX.2-klein-4B" LORA = "noema-art/impresstation-klein" # Locked-in look (dialed in: strength 1.05 / steps 9 / guidance 3). PROMPT = ( "stationthis, low poly playstation screenshot style. A low-poly PlayStation 2 era 3D model, " "lightly upscaled like a PS2 emulator running at 2x internal resolution: keep the chunky " "low-polygon geometry and flat-shaded surfaces, with cleaner, moderately sharp edges and " "readable textures — but keep a gentle retro softness and a little texture warmth. Slightly " "crisp, not razor-sharp; clean but not clinical. Extrude any flat 2D elements into solid 3D " "polygonal forms with real depth and foreshortening. A nicely emulated PS2 screenshot — " "clearer than the console, softer than 4K." ) STRENGTH = 1.05 STEPS = 9 GUIDANCE = 3.0 HF_TOKEN = os.environ.get("HF_TOKEN") MAX_SEED = 2**31 - 1 dtype = torch.bfloat16 pipe = Flux2KleinPipeline.from_pretrained(BASE, torch_dtype=dtype, token=HF_TOKEN) pipe.load_lora_weights(LORA, adapter_name="stationthis", token=HF_TOKEN) pipe.set_adapters("stationthis", adapter_weights=STRENGTH) pipe.to("cuda") @spaces.GPU(duration=120) def station_this(image, progress=gr.Progress(track_tqdm=True)): if image is None: raise gr.Error("Drop in an image first.") seed = random.randint(0, MAX_SEED) g = torch.Generator("cuda").manual_seed(seed) out = pipe( image=[image.convert("RGB")], prompt=PROMPT, guidance_scale=GUIDANCE, num_inference_steps=STEPS, generator=g, ).images[0] return out CSS = """ :root { --accent:#5b8cff; } body, .gradio-container { background:#08090A; color:#e7eaef; } #title { text-align:center; font-family:ui-monospace,monospace; letter-spacing:.06em; } #title b { color:var(--accent); } .gr-button-primary { background:var(--accent) !important; border:0 !important; color:#06080f !important; } footer { display:none !important; } """ with gr.Blocks(css=CSS, title="stationthis") as demo: gr.HTML( "
Drop an image — get it back as a low-poly PlayStation-era still. " "Powered by FLUX.2 klein + NOEMA. " "noema.art