alexandresilva commited on
Commit
0d934e7
·
verified ·
1 Parent(s): 78393c6

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +39 -14
app.py CHANGED
@@ -2,7 +2,7 @@ import gradio as gr
2
  import re
3
  from diffusers import StableDiffusionPipeline
4
  import torch
5
- from transformers import pipeline # Para extração de keywords
6
 
7
  # Carregue modelos (cache para performance)
8
  device = "cuda" if torch.cuda.is_available() else "cpu"
@@ -11,39 +11,64 @@ pipe = StableDiffusionPipeline.from_pretrained(
11
  torch_dtype=torch.float16 if device == "cuda" else torch.float32
12
  )
13
  pipe = pipe.to(device)
 
14
 
15
  extractor = pipeline("token-classification", model="valurank/MiniLM-L6-Keyword-Extraction")
16
 
17
- def gerar_storyboard(roteiro, num_cenas=4, steps=20, guidance=7.5):
18
  # Passo 1: Divida o roteiro em cenas
19
- cenas = re.split(r'(?=CENA \d+:|Seção:)', roteiro)[:num_cenas] # Ajuste para seu formato
20
  cenas = [c.strip() for c in cenas if c.strip()]
21
 
22
- # Passo 2: Extraia prompts visuais por cena
23
  imagens = []
24
  for cena in cenas:
 
25
  keywords = [ent['word'] for ent in extractor(cena)[:5]]
26
- prompt = f"Storyboard scene: {', '.join(keywords)}, cinematic, detailed, historical style" # Adapte para tema (ex.: "máquina de lavar antiga")
27
 
28
- # Passo 3: Gere imagem
 
 
 
 
 
 
 
 
 
29
  with torch.autocast(device):
30
  img = pipe(prompt, num_inference_steps=steps, guidance_scale=guidance).images[0]
31
  imagens.append(img)
32
 
33
- return imagens # Retorna lista de PIL images para galeria
34
 
35
- # Interface Gradio
36
  with gr.Blocks(title="Roteiro to Storyboard") as demo:
37
  gr.Markdown("# Gere Storyboards do Seu Roteiro com IA")
38
- roteiro_input = gr.Textbox(label="Cole seu roteiro aqui", lines=10, placeholder="Ex: Máquina de Lavar – A Batalha Silenciosa...")
39
- num_cenas = gr.Slider(2, 10, value=5, label="Número de Cenas")
40
- steps = gr.Slider(10, 50, value=20, label="Passos de Inferência (qualidade vs. velocidade)")
41
- guidance = gr.Slider(1, 20, value=7.5, label="Guidance Scale (criatividade)")
 
 
 
 
 
 
 
 
 
 
 
42
 
43
  output = gr.Gallery(label="Storyboards Gerados")
44
- gerar_btn = gr.Button("Gerar Storyboard")
45
 
46
- gerar_btn.click(gerar_storyboard, inputs=[roteiro_input, num_cenas, steps, guidance], outputs=output)
 
 
 
 
 
47
 
48
  if __name__ == "__main__":
49
  demo.launch()
 
2
  import re
3
  from diffusers import StableDiffusionPipeline
4
  import torch
5
+ from transformers import pipeline
6
 
7
  # Carregue modelos (cache para performance)
8
  device = "cuda" if torch.cuda.is_available() else "cpu"
 
11
  torch_dtype=torch.float16 if device == "cuda" else torch.float32
12
  )
13
  pipe = pipe.to(device)
14
+ pipe.enable_model_cpu_offload() # Otimização pra acelerar e economizar memória
15
 
16
  extractor = pipeline("token-classification", model="valurank/MiniLM-L6-Keyword-Extraction")
17
 
18
+ def gerar_storyboard(roteiro, num_cenas=4, steps=20, guidance=7.5, estilos_customizados=""):
19
  # Passo 1: Divida o roteiro em cenas
20
+ cenas = re.split(r'(?=CENA \d+:|Seção:|\n[A-Z][a-z]+:)', roteiro)[:num_cenas] # Regex melhorada pra capturar seções como "A Invenção Invisível"
21
  cenas = [c.strip() for c in cenas if c.strip()]
22
 
 
23
  imagens = []
24
  for cena in cenas:
25
+ # Passo 2: Extraia keywords
26
  keywords = [ent['word'] for ent in extractor(cena)[:5]]
 
27
 
28
+ # Passo 3: Construa o prompt base
29
+ prompt = f"Storyboard scene: {', '.join(keywords)}, cinematic, detailed, historical style"
30
+
31
+ # Adicione estilos customizados (se fornecidos, senão usa vazio)
32
+ if estilos_customizados.strip():
33
+ prompt += f", {estilos_customizados}"
34
+
35
+ print(f"Prompt gerado para cena: {prompt}") # Log pra debug (remove se quiser)
36
+
37
+ # Passo 4: Gere imagem
38
  with torch.autocast(device):
39
  img = pipe(prompt, num_inference_steps=steps, guidance_scale=guidance).images[0]
40
  imagens.append(img)
41
 
42
+ return imagens
43
 
44
+ # Interface Gradio com a nova Textbox
45
  with gr.Blocks(title="Roteiro to Storyboard") as demo:
46
  gr.Markdown("# Gere Storyboards do Seu Roteiro com IA")
47
+
48
+ with gr.Row():
49
+ roteiro_input = gr.Textbox(label="Cole seu roteiro aqui", lines=10, placeholder="Ex: Máquina de Lavar A Batalha Silenciosa...")
50
+
51
+ with gr.Row():
52
+ num_cenas = gr.Slider(2, 10, value=5, label="Número de Cenas")
53
+ steps = gr.Slider(10, 50, value=15, label="Passos de Inferência (qualidade vs. velocidade)") # Default menor pra acelerar
54
+ guidance = gr.Slider(1, 20, value=7.5, label="Guidance Scale (criatividade)")
55
+
56
+ # Nova Textbox para estilos
57
+ estilos_input = gr.Textbox(
58
+ label="Estilos Personalizados (opcional)",
59
+ lines=2,
60
+ placeholder="Ex: vintage washing machine, industrial revolution style, era vitoriana, vapor e engrenagens"
61
+ )
62
 
63
  output = gr.Gallery(label="Storyboards Gerados")
64
+ gerar_btn = gr.Button("Gerar Storyboard", variant="primary")
65
 
66
+ # Conecte tudo à função
67
+ gerar_btn.click(
68
+ gerar_storyboard,
69
+ inputs=[roteiro_input, num_cenas, steps, guidance, estilos_input],
70
+ outputs=output
71
+ )
72
 
73
  if __name__ == "__main__":
74
  demo.launch()