multimodalart HF Staff commited on
Commit
e8b92ab
·
verified ·
1 Parent(s): 6a06082

Krea 2 Raw + Turbo ZeroGPU demo

Browse files
.gitattributes CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ diffusers-0.39.0.dev0-py3-none-any.whl filter=lfs diff=lfs merge=lfs -text
README.md CHANGED
@@ -1,13 +1,14 @@
1
  ---
2
  title: Krea 2
3
- emoji: 📈
4
- colorFrom: yellow
5
- colorTo: red
6
  sdk: gradio
7
- sdk_version: 6.19.0
8
- python_version: '3.12'
9
  app_file: app.py
10
- pinned: false
 
 
11
  ---
12
 
13
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
  title: Krea 2
3
+ emoji: 🎨
4
+ colorFrom: indigo
5
+ colorTo: purple
6
  sdk: gradio
7
+ sdk_version: 6.15.1
 
8
  app_file: app.py
9
+ short_description: Krea 2 text-to-image (Raw + Turbo)
10
+ python_version: "3.12"
11
+ startup_duration_timeout: 1h
12
  ---
13
 
14
+ Private demo of Krea 2 (Raw and Turbo distilled) text-to-image, both loaded on ZeroGPU.
__pycache__/app.cpython-312.pyc ADDED
Binary file (5.38 kB). View file
 
app.py ADDED
@@ -0,0 +1,107 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import random
3
+
4
+ import spaces
5
+ import torch
6
+ import gradio as gr
7
+ from huggingface_hub import login
8
+
9
+ if os.environ.get("HF_TOKEN"):
10
+ login(token=os.environ["HF_TOKEN"])
11
+
12
+ from diffusers import Krea2Pipeline
13
+
14
+ DTYPE = torch.bfloat16
15
+ RAW_REPO = "krea/Krea-2-Raw"
16
+ TURBO_REPO = "krea/Krea-2-Turbo"
17
+ MAX_SEED = 2**31 - 1
18
+
19
+ # Both models are loaded at global scope. They share the architecture, so Turbo
20
+ # reuses Raw's text encoder / tokenizer / VAE and only loads its own transformer.
21
+ pipe_raw = Krea2Pipeline.from_pretrained(RAW_REPO, torch_dtype=DTYPE)
22
+ pipe_turbo = Krea2Pipeline.from_pretrained(
23
+ TURBO_REPO,
24
+ text_encoder=pipe_raw.text_encoder,
25
+ tokenizer=pipe_raw.tokenizer,
26
+ vae=pipe_raw.vae,
27
+ torch_dtype=DTYPE,
28
+ )
29
+ pipe_raw.to("cuda")
30
+ pipe_turbo.to("cuda")
31
+
32
+ PIPES = {"Raw": pipe_raw, "Turbo": pipe_turbo}
33
+ DEFAULTS = {
34
+ "Raw": {"steps": 28, "guidance": 4.5},
35
+ "Turbo": {"steps": 8, "guidance": 0.0},
36
+ }
37
+
38
+
39
+ def _duration(prompt, negative_prompt, model, steps, guidance, width, height, seed, randomize, progress=None):
40
+ return int(steps) * 2 + 25
41
+
42
+
43
+ @spaces.GPU(duration=_duration, size="xlarge")
44
+ def generate(
45
+ prompt,
46
+ negative_prompt,
47
+ model,
48
+ steps,
49
+ guidance,
50
+ width,
51
+ height,
52
+ seed,
53
+ randomize,
54
+ progress=gr.Progress(track_tqdm=True),
55
+ ):
56
+ if randomize:
57
+ seed = random.randint(0, MAX_SEED)
58
+ seed = int(seed)
59
+ generator = torch.Generator("cuda").manual_seed(seed)
60
+ pipe = PIPES[model]
61
+ image = pipe(
62
+ prompt=prompt,
63
+ negative_prompt=(negative_prompt or None) if guidance > 0 else None,
64
+ height=int(height),
65
+ width=int(width),
66
+ num_inference_steps=int(steps),
67
+ guidance_scale=float(guidance),
68
+ generator=generator,
69
+ ).images[0]
70
+ return image, seed
71
+
72
+
73
+ def on_model_change(model):
74
+ d = DEFAULTS[model]
75
+ return (
76
+ gr.update(value=d["steps"]),
77
+ gr.update(value=d["guidance"]),
78
+ gr.update(interactive=d["guidance"] > 0),
79
+ )
80
+
81
+
82
+ with gr.Blocks() as demo:
83
+ gr.Markdown("# Krea 2\nText-to-image with **Krea 2 Raw** (CFG) and **Krea 2 Turbo** (distilled, few-step).")
84
+ with gr.Row():
85
+ with gr.Column():
86
+ model = gr.Radio(["Raw", "Turbo"], value="Raw", label="Model")
87
+ prompt = gr.Textbox(label="Prompt", lines=3, placeholder="a fox in the snow")
88
+ negative_prompt = gr.Textbox(label="Negative prompt", lines=1)
89
+ run = gr.Button("Generate", variant="primary")
90
+ with gr.Accordion("Advanced", open=False):
91
+ steps = gr.Slider(1, 50, value=28, step=1, label="Steps")
92
+ guidance = gr.Slider(0.0, 10.0, value=4.5, step=0.1, label="Guidance scale")
93
+ with gr.Row():
94
+ width = gr.Slider(512, 1536, value=1024, step=16, label="Width")
95
+ height = gr.Slider(512, 1536, value=1024, step=16, label="Height")
96
+ with gr.Row():
97
+ seed = gr.Slider(0, MAX_SEED, value=0, step=1, label="Seed")
98
+ randomize = gr.Checkbox(value=True, label="Randomize seed")
99
+ with gr.Column():
100
+ output = gr.Image(label="Result", format="png")
101
+
102
+ model.change(on_model_change, model, [steps, guidance, negative_prompt])
103
+ inputs = [prompt, negative_prompt, model, steps, guidance, width, height, seed, randomize]
104
+ run.click(generate, inputs, [output, seed])
105
+ prompt.submit(generate, inputs, [output, seed])
106
+
107
+ demo.launch()
diffusers-0.39.0.dev0-py3-none-any.whl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a0593cfc51465e7414e1dc2c4c6acdf14fadc4e346d49a19d6116e2d50adf856
3
+ size 5594675
requirements.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ ./diffusers-0.39.0.dev0-py3-none-any.whl
2
+ transformers>=4.57.0
3
+ accelerate
4
+ sentencepiece