aducsdr commited on
Commit
f2d5d07
·
verified ·
1 Parent(s): d030250

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +32 -11
app.py CHANGED
@@ -1,26 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import gradio as gr
2
  import subprocess
3
  import os
 
4
 
5
- # Não precisamos mais de nenhuma função de setup, clone ou pip install aqui!
6
- # O Dockerfile cuidou de tudo.
7
-
8
- def run_inference_app(video_file, seed_num):
9
- if video_file is None:
10
  return None, "Por favor, envie um arquivo de vídeo."
11
 
12
- # O app roda de dentro do diretório /app/SeedVR, então os caminhos são relativos
13
  input_folder = "inputs"
14
  os.makedirs(input_folder, exist_ok=True)
15
 
16
- # O Gradio nos um caminho temporário, vamos movê-lo para um local conhecido
17
- input_video_path = os.path.join(input_folder, os.path.basename(video_file.name))
18
- os.rename(video_file.name, input_video_path)
 
 
 
19
 
20
  output_folder = "outputs"
21
  os.makedirs(output_folder, exist_ok=True)
22
 
23
- # Comando de inferência. O ambiente conda já está "ativado" graças ao Dockerfile.
24
  command = [
25
  "torchrun", "--nproc-per-node=4",
26
  "projects/inference_seedvr2_3b.py",
@@ -71,7 +91,8 @@ with gr.Blocks() as demo:
71
 
72
  with gr.Row():
73
  with gr.Column(scale=1):
74
- video_input = gr.File(label="Vídeo de Entrada")
 
75
  seed_input = gr.Number(label="Seed", value=123)
76
  run_button = gr.Button("Gerar Vídeo", variant="primary")
77
  with gr.Column(scale=2):
 
1
+ os.rename(video_file.name, input_video_path)
2
+ ```**O que aconteceu?**
3
+ 1. **Componente Incorreto:** No `app.py`, usamos o componente `gr.File()` para o upload. Este é um componente genérico. Quando você faz o upload de um vídeo para ele, o Gradio pode, em vez de passar o caminho do vídeo, passar o caminho de um **thumbnail (uma imagem `.png`)** que ele gera como pré-visualização. O nome do arquivo no erro (`...mp4_00-00.png`) confirma isso. O script de inferência do SeedVR não sabe o que fazer com uma imagem.
4
+ 2. **Manuseio de Arquivo:** O Gradio cria arquivos em um diretório temporário (`/tmp/gradio/...`). Tentar "renomear" ou "mover" (`os.rename`) esses arquivos pode ser instável. A maneira mais segura e robusta de lidar com isso é **copiar** o arquivo do diretório temporário para o nosso diretório de trabalho `inputs`.
5
+
6
+ ### A Solução Final (Apenas no `app.py`)
7
+
8
+ A ótima notícia é que você **não precisa mais mexer no `Dockerfile` ou no `environment.yml`**. A correção é apenas no `app.py`.
9
+
10
+ Vamos fazer duas pequenas, mas cruciais, alterações:
11
+ 1. Trocar `gr.File` por `gr.Video`, que é o componente correto para vídeos.
12
+ 2. Trocar `os.rename` por `shutil.copy` para copiar o arquivo de forma segura.
13
+
14
+ #### `app.py` (Versão Final e Corrigida)
15
+
16
+ Substitua todo o conteúdo do seu `app.py` por este código corrigido. As mudanças estão destacadas com comentários.
17
+
18
+ ```python
19
  import gradio as gr
20
  import subprocess
21
  import os
22
+ import shutil # MUDANÇA 1: Importar a biblioteca 'shutil' para cópia de arquivos
23
 
24
+ def run_inference_app(video_file_path, seed_num):
25
+ # O componente gr.Video passa o caminho do arquivo como uma string
26
+ if video_file_path is None:
 
 
27
  return None, "Por favor, envie um arquivo de vídeo."
28
 
29
+ # O app roda de dentro do diretório /app/SeedVR
30
  input_folder = "inputs"
31
  os.makedirs(input_folder, exist_ok=True)
32
 
33
+ # MUDANÇA 2: Lógica de cópia de arquivo mais robusta
34
+ # Usamos shutil.copy para copiar o arquivo temporário do Gradio para nossa pasta de entrada.
35
+ # os.path.basename garante que pegamos apenas o nome do arquivo original.
36
+ file_name = os.path.basename(video_file_path)
37
+ input_video_path = os.path.join(input_folder, file_name)
38
+ shutil.copy(video_file_path, input_video_path)
39
 
40
  output_folder = "outputs"
41
  os.makedirs(output_folder, exist_ok=True)
42
 
43
+ # Comando de inferência. O ambiente conda já está "ativado".
44
  command = [
45
  "torchrun", "--nproc-per-node=4",
46
  "projects/inference_seedvr2_3b.py",
 
91
 
92
  with gr.Row():
93
  with gr.Column(scale=1):
94
+ # MUDANÇA 3: Usar gr.Video em vez de gr.File
95
+ video_input = gr.Video(label="Vídeo de Entrada")
96
  seed_input = gr.Number(label="Seed", value=123)
97
  run_button = gr.Button("Gerar Vídeo", variant="primary")
98
  with gr.Column(scale=2):