multimodalart's picture
multimodalart HF Staff
Upload folder using huggingface_hub
60d901b verified
Raw
History Blame Contribute Delete
5.29 kB
import random
import gradio as gr
import spaces
import torch
from diffusers import Krea2Pipeline
# ---------------------------------------------------------------------------
# Constants
# ---------------------------------------------------------------------------
BASE_MODEL = "krea/Krea-2-Turbo"
LORA_REPO = "ilkerzgi/krea-2-moody-golden-hour-editorial-lora"
LORA_WEIGHT_NAME = "moody-golden-hour-editorial.safetensors"
TRIGGER_WORD = "moody golden hour editorial style"
MAX_SEED = 2**31 - 1
# Resolution presets — all multiples of 16 (Krea 2 requirement).
RESOLUTIONS = {
"Square · 1024×1024": (1024, 1024),
"Portrait · 832×1216": (832, 1216),
"Landscape · 1216×832": (1216, 832),
"Tall · 1024×1280": (1024, 1280),
}
# Example prompts — drawn from the LoRA's own model-card example and
# extended with subjects that showcase the moody golden-hour editorial style.
EXAMPLES = [
"a lighthouse on a rocky cliff",
"a lone figure walking through a misty forest path",
"a vintage car parked on a desert highway at dusk",
"a fashion model leaning against a brick wall in soft warm light",
]
# ---------------------------------------------------------------------------
# Model loading — at module scope, on CUDA (ZeroGPU CUDA emulation).
# Krea 2 LoRAs load via the transformer's adapter API, per the official cards.
# ---------------------------------------------------------------------------
pipe = Krea2Pipeline.from_pretrained(BASE_MODEL, torch_dtype=torch.bfloat16)
pipe.to("cuda")
pipe.transformer.load_lora_adapter(LORA_REPO, weight_name=LORA_WEIGHT_NAME)
pipe.transformer.set_adapters("default", weights=1.0)
def _build_prompt(user_prompt: str) -> str:
"""Prepend the trigger phrase so the user doesn't have to."""
p = user_prompt.strip()
if not p:
return p
if TRIGGER_WORD.lower() in p.lower():
return p
return f"{p}. {TRIGGER_WORD}"
@spaces.GPU(duration=60)
def generate(
prompt,
resolution_label,
lora_scale,
seed,
randomize_seed,
progress=gr.Progress(track_tqdm=True),
):
if not prompt or not prompt.strip():
raise gr.Error("Enter a prompt to generate an image.")
if randomize_seed:
seed = random.randint(0, MAX_SEED)
seed = int(seed)
width, height = RESOLUTIONS[resolution_label]
# Apply the LoRA scale dynamically.
pipe.transformer.set_adapters("default", weights=float(lora_scale))
full_prompt = _build_prompt(prompt)
generator = torch.Generator("cuda").manual_seed(seed)
image = pipe(
prompt=full_prompt,
num_inference_steps=8,
guidance_scale=0.0,
width=width,
height=height,
generator=generator,
).images[0]
return image, seed
# ---------------------------------------------------------------------------
# UI
# ---------------------------------------------------------------------------
with gr.Blocks(title="Krea 2 · Moody Golden Hour Editorial") as demo:
gr.Markdown(
"""
# Krea 2 · Moody Golden Hour Editorial
A style LoRA for [**Krea-2-Turbo**](https://huggingface.co/krea/Krea-2-Turbo) by
[**ilkerzgi**](https://huggingface.co/ilkerzgi). Generates moody, warm, golden-hour
editorial imagery. The trigger phrase *\"moody golden hour editorial style\"* is
auto-appended to your prompt.
"""
)
with gr.Row(equal_height=True):
with gr.Column(scale=5):
prompt = gr.Textbox(
label="Prompt",
lines=3,
placeholder="Describe your scene… e.g. a lighthouse on a rocky cliff",
autofocus=True,
)
resolution = gr.Radio(
choices=list(RESOLUTIONS.keys()),
value="Square · 1024×1024",
label="Aspect ratio",
)
run_button = gr.Button("Generate", variant="primary", size="lg")
with gr.Accordion("Advanced", open=False):
lora_scale = gr.Slider(
label="LoRA scale (style strength)",
minimum=0.0,
maximum=1.5,
step=0.05,
value=1.0,
info="1.0 = default, up to 1.25 for a stronger look.",
)
with gr.Row():
seed = gr.Slider(
label="Seed",
minimum=0,
maximum=MAX_SEED,
step=1,
value=0,
)
randomize_seed = gr.Checkbox(
label="Randomize seed", value=True
)
with gr.Column(scale=5):
result = gr.Image(label="Result", format="png", show_label=False)
gr.Examples(
fn=generate,
examples=EXAMPLES,
inputs=[prompt],
outputs=[result, seed],
cache_examples=True,
cache_mode="lazy",
)
gr.on(
triggers=[run_button.click, prompt.submit],
fn=generate,
inputs=[prompt, resolution, lora_scale, seed, randomize_seed],
outputs=[result, seed],
)
if __name__ == "__main__":
demo.launch(show_error=True)