vcollos commited on
Commit
e516d53
·
verified ·
1 Parent(s): 45467a5

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +25 -37
app.py CHANGED
@@ -10,7 +10,7 @@ from gradio_client import Client as client_gradio
10
  from supabase import create_client, Client
11
  from datetime import datetime
12
 
13
- # Inicializa supabase
14
  url: str = os.getenv('SUPABASE_URL')
15
  key: str = os.getenv('SUPABASE_KEY')
16
  supabase: Client = create_client(url, key)
@@ -18,7 +18,7 @@ supabase: Client = create_client(url, key)
18
  # Obtém token da Hugging Face
19
  hf_token = os.getenv("HF_TOKEN")
20
 
21
- # Inicializa o modelo base
22
  base_model = "black-forest-labs/FLUX.1-dev"
23
  pipe = DiffusionPipeline.from_pretrained(base_model, torch_dtype=torch.bfloat16)
24
 
@@ -37,9 +37,25 @@ except Exception as e:
37
 
38
  # Função para combinar os pesos dos LoRA
39
  def combine_lora_weights(pipe, weight_1, weight_2):
40
- for name, module in pipe.named_modules(): # Percorre os módulos do pipeline
41
- if hasattr(module, "weight") and module.weight is not None:
42
- module.weight.data = weight_1 * module.weight.data + weight_2 * module.weight.data
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
 
44
  pipe.to("cuda")
45
 
@@ -68,13 +84,13 @@ def run_lora(prompt, cfg_scale, steps, randomize_seed, seed, width, height, lora
68
  )
69
  raise gr.Error("🚫 Requisição não autorizada!")
70
 
71
- # Atualiza barra de progresso (0% no início)
72
  progress(0, "Iniciando a geração de imagem...")
73
 
74
- # Combina os LoRA weights corretamente
75
  combine_lora_weights(pipe, lora_scale_1, lora_scale_2)
76
 
77
- # Gera imagem com o pipeline
78
  image = pipe(
79
  prompt=f"{prompt}",
80
  num_inference_steps=steps,
@@ -85,35 +101,7 @@ def run_lora(prompt, cfg_scale, steps, randomize_seed, seed, width, height, lora
85
  max_sequence_length=512
86
  ).images[0]
87
 
88
- # Salva a imagem em um diretório temporário
89
- timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
90
- image_filename = f"generated_image_{timestamp}.png"
91
- image_path = os.path.join("/tmp/gradio", image_filename)
92
-
93
- # Adiciona metadados à imagem
94
- new_metadata_string = f"{prompt}\nNegative prompt: none\nSteps: {steps}, CFG scale: {cfg_scale}, Seed: {seed}, Lora hashes: AndroFlux-v19, VitorCollos"
95
- metadata = PngImagePlugin.PngInfo()
96
- metadata.add_text("parameters", new_metadata_string)
97
-
98
- # Salva a imagem gerada
99
- image.save(image_path, pnginfo=metadata)
100
-
101
- # Registra a imagem no Supabase
102
- try:
103
- if "girl" not in prompt and "woman" not in prompt:
104
- # Salva a imagem no Supabase Storage
105
- response = supabase.storage.from_('generated_images').upload(image_filename, image_path, file_options={"content-type": "image/png;charset=UTF-8"})
106
- print(response.dict)
107
-
108
- # Registra a requisição no Supabase
109
- response_data = (supabase.table("requests")
110
- .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, "image_url": response.full_path})
111
- .execute()
112
- )
113
- except Exception as error:
114
- print("⚠️ Erro ao salvar no Supabase:", error)
115
-
116
- yield image, seed
117
 
118
  # Interface Gradio
119
  gr_theme = os.getenv("THEME")
 
10
  from supabase import create_client, Client
11
  from datetime import datetime
12
 
13
+ # Inicializa Supabase
14
  url: str = os.getenv('SUPABASE_URL')
15
  key: str = os.getenv('SUPABASE_KEY')
16
  supabase: Client = create_client(url, key)
 
18
  # Obtém token da Hugging Face
19
  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
 
 
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
 
 
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,
 
101
  max_sequence_length=512
102
  ).images[0]
103
 
104
+ return image, seed
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
105
 
106
  # Interface Gradio
107
  gr_theme = os.getenv("THEME")