vcollos commited on
Commit
76d2d1f
·
verified ·
1 Parent(s): e516d53

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +27 -42
app.py CHANGED
@@ -1,7 +1,7 @@
1
  import spaces
2
  import gradio as gr
3
  import torch
4
- from PIL import Image, PngImagePlugin
5
  from diffusers import DiffusionPipeline
6
  import random
7
  import os
@@ -20,45 +20,25 @@ hf_token = os.getenv("HF_TOKEN")
20
 
21
  # Inicializa o modelo base FLUX.1-dev
22
  base_model = "black-forest-labs/FLUX.1-dev"
23
- pipe = DiffusionPipeline.from_pretrained(base_model, torch_dtype=torch.bfloat16)
24
 
25
- # Carrega os adaptadores LoRA
 
 
 
26
  lora_repo_1 = "markury/AndroFlux"
27
  lora_repo_2 = "vcollos/VitorCollos"
28
 
29
  try:
30
- pipe.load_lora_weights(lora_repo_1, weight_name="AndroFlux-v19.safetensors")
31
  print("✅ Primeiro LoRA carregado")
32
 
33
- pipe.load_lora_weights(lora_repo_2, weight_name="Vitor.safetensors")
34
  print("✅ Segundo LoRA carregado")
35
  except Exception as e:
36
  print(f"❌ Erro ao carregar os LoRA adapters: {e}")
37
 
38
- # Função para combinar os pesos dos LoRA
39
- def combine_lora_weights(pipe, weight_1, weight_2):
40
- """
41
- Combina os pesos de dois LoRA adapters sem depender de named_modules().
42
- """
43
- # Verifica quais componentes do pipeline têm os LoRA adapters
44
- lora_layers = []
45
-
46
- if hasattr(pipe, "text_encoder"):
47
- lora_layers.append(pipe.text_encoder)
48
- if hasattr(pipe, "vae"):
49
- lora_layers.append(pipe.vae)
50
- if hasattr(pipe, "transformer"):
51
- lora_layers.append(pipe.transformer)
52
-
53
- # Aplica a fusão dos pesos LoRA apenas nos componentes relevantes
54
- for module in lora_layers:
55
- for param in module.parameters():
56
- param.data = weight_1 * param.data + weight_2 * param.data
57
-
58
- print("✅ Pesos LoRA combinados com sucesso!")
59
-
60
- pipe.to("cuda")
61
-
62
  MAX_SEED = 2**32 - 1
63
 
64
  @spaces.GPU(duration=80)
@@ -68,7 +48,7 @@ def run_lora(prompt, cfg_scale, steps, randomize_seed, seed, width, height, lora
68
  seed = random.randint(0, MAX_SEED)
69
  generator = torch.Generator(device="cuda").manual_seed(seed)
70
 
71
- # Moderação de texto
72
  moderation_client = client_gradio("duchaba/Friendly_Text_Moderation")
73
  result = moderation_client.predict(
74
  msg=f"{prompt}",
@@ -78,27 +58,32 @@ def run_lora(prompt, cfg_scale, steps, randomize_seed, seed, width, height, lora
78
 
79
  if float(json.loads(result[1])['sexual_minors']) > 0.03:
80
  print('🔴 Conteúdo não permitido')
81
- response_data = (supabase.table("requests")
82
- .insert({"prompt": prompt, "cfg_scale": cfg_scale, "steps": steps, "randomized_seed": randomize_seed, "seed": seed, "lora_scale_1": lora_scale_1, "lora_scale_2": lora_scale_2, "moderated": 'true'})
83
- .execute()
84
- )
 
 
 
 
 
 
85
  raise gr.Error("🚫 Requisição não autorizada!")
86
 
87
- # Atualiza a barra de progresso (0% no início)
88
  progress(0, "Iniciando a geração de imagem...")
89
 
90
- # Corrige a fusão dos pesos LoRA
91
- combine_lora_weights(pipe, lora_scale_1, lora_scale_2)
92
 
93
  # Gera a imagem com o modelo
94
  image = pipe(
95
- prompt=f"{prompt}",
96
  num_inference_steps=steps,
97
  guidance_scale=cfg_scale,
98
  width=width,
99
  height=height,
100
- generator=generator,
101
- max_sequence_length=512
102
  ).images[0]
103
 
104
  return image, seed
@@ -113,8 +98,8 @@ with gr.Blocks(theme=gr_theme) as app:
113
  generate_button = gr.Button("Gerar")
114
  cfg_scale = gr.Slider(label="CFG Scale", minimum=1, maximum=20, step=0.5, value=3.5)
115
  steps = gr.Slider(label="Steps", minimum=1, maximum=100, step=1, value=25)
116
- width = gr.Slider(label="Width", minimum=256, maximum=1536, step=64, value=896)
117
- height = gr.Slider(label="Height", minimum=256, maximum=1536, step=64, value=1152)
118
  randomize_seed = gr.Checkbox(False, label="Randomize seed")
119
  seed = gr.Slider(label="Seed", minimum=0, maximum=MAX_SEED, step=1, value=556215326)
120
  lora_scale_1 = gr.Slider(label="LoRA Scale (AndroFlux)", minimum=0, maximum=1, step=0.01, value=0.7)
 
1
  import spaces
2
  import gradio as gr
3
  import torch
4
+ from PIL import Image
5
  from diffusers import DiffusionPipeline
6
  import random
7
  import os
 
20
 
21
  # Inicializa o modelo base FLUX.1-dev
22
  base_model = "black-forest-labs/FLUX.1-dev"
23
+ pipe = DiffusionPipeline.from_pretrained(base_model, torch_dtype=torch.float16, use_safetensors=True)
24
 
25
+ # Move o modelo para GPU
26
+ pipe.to("cuda")
27
+
28
+ # Carrega os adaptadores LoRA corretamente
29
  lora_repo_1 = "markury/AndroFlux"
30
  lora_repo_2 = "vcollos/VitorCollos"
31
 
32
  try:
33
+ pipe.load_lora_weights(lora_repo_1, weight_name="AndroFlux-v19.safetensors", adapter_name="AndroFlux-v19")
34
  print("✅ Primeiro LoRA carregado")
35
 
36
+ pipe.load_lora_weights(lora_repo_2, weight_name="Vitor.safetensors", adapter_name="Vitor")
37
  print("✅ Segundo LoRA carregado")
38
  except Exception as e:
39
  print(f"❌ Erro ao carregar os LoRA adapters: {e}")
40
 
41
+ # Define seed máximo
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
  MAX_SEED = 2**32 - 1
43
 
44
  @spaces.GPU(duration=80)
 
48
  seed = random.randint(0, MAX_SEED)
49
  generator = torch.Generator(device="cuda").manual_seed(seed)
50
 
51
+ # Moderação de texto (evita prompts inadequados)
52
  moderation_client = client_gradio("duchaba/Friendly_Text_Moderation")
53
  result = moderation_client.predict(
54
  msg=f"{prompt}",
 
58
 
59
  if float(json.loads(result[1])['sexual_minors']) > 0.03:
60
  print('🔴 Conteúdo não permitido')
61
+ supabase.table("requests").insert({
62
+ "prompt": prompt,
63
+ "cfg_scale": cfg_scale,
64
+ "steps": steps,
65
+ "randomized_seed": randomize_seed,
66
+ "seed": seed,
67
+ "lora_scale_1": lora_scale_1,
68
+ "lora_scale_2": lora_scale_2,
69
+ "moderated": 'true'
70
+ }).execute()
71
  raise gr.Error("🚫 Requisição não autorizada!")
72
 
73
+ # Atualiza a barra de progresso
74
  progress(0, "Iniciando a geração de imagem...")
75
 
76
+ # Aplica os adaptadores LoRA corretamente
77
+ pipe.set_adapters(["AndroFlux-v19", "Vitor"], adapter_weights=[lora_scale_1, lora_scale_2])
78
 
79
  # Gera a imagem com o modelo
80
  image = pipe(
81
+ prompt=prompt,
82
  num_inference_steps=steps,
83
  guidance_scale=cfg_scale,
84
  width=width,
85
  height=height,
86
+ generator=generator
 
87
  ).images[0]
88
 
89
  return image, seed
 
98
  generate_button = gr.Button("Gerar")
99
  cfg_scale = gr.Slider(label="CFG Scale", minimum=1, maximum=20, step=0.5, value=3.5)
100
  steps = gr.Slider(label="Steps", minimum=1, maximum=100, step=1, value=25)
101
+ width = gr.Slider(label="Width", minimum=256, maximum=1024, step=64, value=768) # Reduzido para evitar falta de VRAM
102
+ height = gr.Slider(label="Height", minimum=256, maximum=1024, step=64, value=768) # Reduzido para evitar falta de VRAM
103
  randomize_seed = gr.Checkbox(False, label="Randomize seed")
104
  seed = gr.Slider(label="Seed", minimum=0, maximum=MAX_SEED, step=1, value=556215326)
105
  lora_scale_1 = gr.Slider(label="LoRA Scale (AndroFlux)", minimum=0, maximum=1, step=0.01, value=0.7)