support fal kontext loras

#5
by linoyts HF Staff - opened
Files changed (3) hide show
  1. app.py +19 -12
  2. flux_loras.json +27 -0
  3. requirements.txt +3 -2
app.py CHANGED
@@ -30,6 +30,7 @@ with open("flux_loras.json", "r") as file:
30
  "trigger_word": item.get("trigger_word", ""),
31
  "trigger_position": item.get("trigger_position", "prepend"),
32
  "weights": item.get("weights", "pytorch_lora_weights.safetensors"),
 
33
  }
34
  for item in data
35
  ]
@@ -126,12 +127,12 @@ def classify_gallery(flux_loras):
126
  sorted_gallery = sorted(flux_loras, key=lambda x: x.get("likes", 0), reverse=True)
127
  return [(item["image"], item["title"]) for item in sorted_gallery], sorted_gallery
128
 
129
- def infer_with_lora_wrapper(input_image, prompt, selected_index, custom_lora, seed=42, randomize_seed=False, guidance_scale=2.5, lora_scale=1.75, flux_loras=None, progress=gr.Progress(track_tqdm=True)):
130
  """Wrapper function to handle state serialization"""
131
- return infer_with_lora(input_image, prompt, selected_index, custom_lora, seed, randomize_seed, guidance_scale, lora_scale, flux_loras, progress)
132
 
133
  @spaces.GPU
134
- def infer_with_lora(input_image, prompt, selected_index, custom_lora, seed=42, randomize_seed=False, guidance_scale=2.5, lora_scale=1.0, flux_loras=None, progress=gr.Progress(track_tqdm=True)):
135
  """Generate image with selected LoRA"""
136
  global current_lora, pipe
137
 
@@ -169,13 +170,19 @@ def infer_with_lora(input_image, prompt, selected_index, custom_lora, seed=42, r
169
  input_image = input_image.convert("RGB")
170
  # Add trigger word to prompt
171
  trigger_word = lora_to_use["trigger_word"]
172
- if trigger_word == ", How2Draw":
173
- prompt = f"create a How2Draw sketch of the person of the photo {prompt}, maintain the facial identity of the person and general features"
174
- elif trigger_word == ", video game screenshot in the style of THSMS":
175
- prompt = f"create a video game screenshot in the style of THSMS with the person from the photo, {prompt}. maintain the facial identity of the person and general features"
176
- else:
177
- prompt = f"convert the style of this portrait photo to {trigger_word} while maintaining the identity of the person. {prompt}. Make sure to maintain the person's facial identity and features, while still changing the overall style to {trigger_word}."
178
-
 
 
 
 
 
 
179
  try:
180
  image = pipe(
181
  image=input_image,
@@ -242,7 +249,7 @@ with gr.Blocks(css=css) as demo:
242
  with gr.Column(scale=4, elem_id="box_column"):
243
  with gr.Group(elem_id="gallery_box"):
244
  input_image = gr.Image(label="Upload a picture of yourself", type="pil", height=300)
245
-
246
  gallery = gr.Gallery(
247
  label="Pick a LoRA",
248
  allow_preview=False,
@@ -328,7 +335,7 @@ with gr.Blocks(css=css) as demo:
328
  gr.on(
329
  triggers=[run_button.click, prompt.submit],
330
  fn=infer_with_lora_wrapper,
331
- inputs=[input_image, prompt, selected_state, custom_loaded_lora, seed, randomize_seed, guidance_scale, lora_scale, gr_flux_loras],
332
  outputs=[result, seed, reuse_button]
333
  )
334
 
 
30
  "trigger_word": item.get("trigger_word", ""),
31
  "trigger_position": item.get("trigger_position", "prepend"),
32
  "weights": item.get("weights", "pytorch_lora_weights.safetensors"),
33
+ "lora_type": item.get("lora_type", "flux"),
34
  }
35
  for item in data
36
  ]
 
127
  sorted_gallery = sorted(flux_loras, key=lambda x: x.get("likes", 0), reverse=True)
128
  return [(item["image"], item["title"]) for item in sorted_gallery], sorted_gallery
129
 
130
+ def infer_with_lora_wrapper(input_image, prompt, selected_index, custom_lora, seed=42, randomize_seed=False, guidance_scale=2.5, lora_scale=1.75,portrait_mode=False, flux_loras=None, progress=gr.Progress(track_tqdm=True)):
131
  """Wrapper function to handle state serialization"""
132
+ return infer_with_lora(input_image, prompt, selected_index, custom_lora, seed, randomize_seed, guidance_scale, lora_scale, portrait_mode, flux_loras, progress)
133
 
134
  @spaces.GPU
135
+ def infer_with_lora(input_image, prompt, selected_index, custom_lora, seed=42, randomize_seed=False, guidance_scale=2.5, lora_scale=1.0, portrait_mode=False, flux_loras=None, progress=gr.Progress(track_tqdm=True)):
136
  """Generate image with selected LoRA"""
137
  global current_lora, pipe
138
 
 
170
  input_image = input_image.convert("RGB")
171
  # Add trigger word to prompt
172
  trigger_word = lora_to_use["trigger_word"]
173
+ is_kontext_lora = lora_to_use["lora_type"] == "kontext"
174
+ if not is_kontext_lora:
175
+ if trigger_word == ", How2Draw":
176
+ prompt = f"create a How2Draw sketch of the person of the photo {prompt}, maintain the facial identity of the person and general features"
177
+ elif trigger_word == ", video game screenshot in the style of THSMS":
178
+ prompt = f"create a video game screenshot in the style of THSMS with the person from the photo, {prompt}. maintain the facial identity of the person and general features"
179
+ else:
180
+ prompt = f"convert the style of this portrait photo to {trigger_word} while maintaining the identity of the person. {prompt}. Make sure to maintain the person's facial identity and features, while still changing the overall style to {trigger_word}."
181
+ else:
182
+ if portrait_mode:
183
+ prompt = f"{trigger_word} while maintaining the identity of the person. {prompt}. Make sure to maintain the person's facial identity and features."
184
+ else:
185
+ prompt = f"{trigger_word}. {prompt}."
186
  try:
187
  image = pipe(
188
  image=input_image,
 
249
  with gr.Column(scale=4, elem_id="box_column"):
250
  with gr.Group(elem_id="gallery_box"):
251
  input_image = gr.Image(label="Upload a picture of yourself", type="pil", height=300)
252
+ portrait_mode = gr.Checkbox(label="portrait mode", value=True)
253
  gallery = gr.Gallery(
254
  label="Pick a LoRA",
255
  allow_preview=False,
 
335
  gr.on(
336
  triggers=[run_button.click, prompt.submit],
337
  fn=infer_with_lora_wrapper,
338
+ inputs=[input_image, prompt, selected_state, custom_loaded_lora, seed, randomize_seed, guidance_scale, lora_scale, portrait_mode, gr_flux_loras],
339
  outputs=[result, seed, reuse_button]
340
  )
341
 
flux_loras.json CHANGED
@@ -1,4 +1,31 @@
1
  [
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
  {
3
  "image":"lora_examples/yarn.png",
4
  "title":"Yarn Art",
 
1
  [
2
+ {
3
+ "image": "https://huggingface.co/fal/Wojak-Kontext-Dev-LoRA/resolve/main/images/2.png",
4
+ "title": "Wojak",
5
+ "repo": "fal/Wojak-Kontext-Dev-LoRA",
6
+ "weights": "wojak-kontext-dev-lora.safetensors",
7
+ "trigger_word": "Convert to wojak style drawing",
8
+ "trigger_position": "prepend",
9
+ "lora_type": "kontext"
10
+ },
11
+ {
12
+ "image": "https://huggingface.co/fal/Broccoli-Hair-Kontext-Dev-LoRA/resolve/main/images/3.png",
13
+ "title": "Broccoli Hair",
14
+ "repo": "fal/Broccoli-Hair-Kontext-Dev-LoRA",
15
+ "weights": "broccoli-hair-kontext-dev-lora.safetensors",
16
+ "trigger_word": "Change hair to a broccoli haircut",
17
+ "trigger_position": "prepend",
18
+ "lora_type": "kontext"
19
+ },
20
+ {
21
+ "image": "https://huggingface.co/fal/Plushie-Kontext-Dev-LoRA/resolve/main/images/1.png",
22
+ "title": "Plushie",
23
+ "repo": "fal/Plushie-Kontext-Dev-LoRA",
24
+ "weights": "plushie-kontext-dev-lora.safetensors",
25
+ "trigger_word": "Convert to plushie style",
26
+ "trigger_position": "prepend",
27
+ "lora_type": "kontext"
28
+ },
29
  {
30
  "image":"lora_examples/yarn.png",
31
  "title":"Yarn Art",
requirements.txt CHANGED
@@ -1,6 +1,7 @@
1
  transformers
2
- git+https://github.com/huggingface/diffusers.git
3
  accelerate
4
  safetensors
5
  sentencepiece
6
- peft
 
 
 
1
  transformers
 
2
  accelerate
3
  safetensors
4
  sentencepiece
5
+ peft
6
+
7
+ git+https://github.com/linoytsaban/diffusers.git@kontext-lora