1inkusFace commited on
Commit
a5c228f
·
verified ·
1 Parent(s): 1584ec6

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +48 -52
app.py CHANGED
@@ -1,24 +1,10 @@
1
- import spaces
2
  import gradio as gr
3
- import sys
4
- import time
5
  import os
 
6
  import random
7
 
8
- sys.path.append(".") # Correct path for Hugging Face Space
9
- from skyreelsinfer import TaskType
10
- from skyreelsinfer.offload import OffloadConfig
11
- from skyreelsinfer.skyreels_video_infer import SkyReelsVideoInfer
12
- from diffusers.utils import export_to_video
13
- from diffusers.utils import load_image
14
- import torch
15
- from huggingface_hub import HfApi
16
- from huggingface_hub.utils import RepositoryNotFoundError, RevisionNotFoundError, EntryNotFoundError
17
  os.environ["CUDA_VISIBLE_DEVICES"] = ""
18
 
19
- # --- Model Loading ---
20
- predictor = None
21
-
22
  def get_transformer_model_id(task_type: str) -> str:
23
  if task_type == "i2v":
24
  return "Skywork/skyreels-v1-Hunyuan-i2v"
@@ -26,7 +12,13 @@ def get_transformer_model_id(task_type: str) -> str:
26
  return "Skywork/skyreels-v1-Hunyuan-t2v"
27
 
28
  def init_predictor(task_type: str):
29
- global predictor
 
 
 
 
 
 
30
  try:
31
  predictor = SkyReelsVideoInfer(
32
  task_type=TaskType.I2V if task_type == "i2v" else TaskType.T2V,
@@ -36,25 +28,27 @@ def init_predictor(task_type: str):
36
  offload_config=OffloadConfig(
37
  high_cpu_memory=True,
38
  parameters_level=True,
39
- # compiler_transformer=False, # Keep this consistent
40
  ),
41
- use_multiprocessing=False, # Still pass this, though it's ignored
42
  )
43
- return "Model loaded successfully!"
44
 
45
  except (RepositoryNotFoundError, RevisionNotFoundError, EntryNotFoundError) as e:
46
- return f"Error: Model not found. Details: {e}"
47
  except Exception as e:
48
- return f"Error loading model: {e}"
 
49
 
50
- @spaces.GPU(duration=90)
51
- def generate_video(prompt, seed, image=None, task_type=None):
52
- global predictor
 
 
53
 
54
  if task_type == "i2v" and not isinstance(image, str):
55
- return "Error: For i2v, provide a valid image file path.", "{}"
56
  if not isinstance(prompt, str) or not isinstance(seed, (int, float)):
57
- return "Error: Invalid input types.", "{}"
58
 
59
  if seed == -1:
60
  random.seed(time.time())
@@ -62,68 +56,70 @@ def generate_video(prompt, seed, image=None, task_type=None):
62
 
63
  kwargs = {
64
  "prompt": prompt,
65
- "height": 256, # Reduced for faster CPU processing
66
- "width": 256, # Reduced for faster CPU processing
67
- "num_frames": 64, # Reduced for faster CPU processing
68
- "num_inference_steps": 50, # Reduced for faster CPU processing
69
  "seed": int(seed),
70
- "guidance_scale": 6.0,
71
  "embedded_guidance_scale": 1.0,
72
- "negative_prompt": "bad quality", #shorter prompt
73
  "cfg_for": False,
74
  }
75
 
76
  if task_type == "i2v":
77
  if image is None or not os.path.exists(image):
78
- return "Error: Image not provided or not found.", "{}"
79
  try:
80
  kwargs["image"] = load_image(image=image)
81
  except Exception as e:
82
- return f"Error loading image: {e}", "{}"
83
 
84
  try:
85
  if predictor is None:
86
- return "Error: Model not initialized.", "{}"
 
 
 
87
 
88
- output = predictor.inference(**kwargs)
89
  save_dir = f"./result/{task_type}"
90
  os.makedirs(save_dir, exist_ok=True)
91
- video_out_file = f"{save_dir}/{prompt[:100].replace('/','')}_{int(seed)}.mp4"
92
- print(f"Generating video, local path: {video_out_file}")
93
- export_to_video(output, video_out_file, fps=24)
94
- return output, str(kwargs)
95
 
96
  except Exception as e:
97
- return f"Error during generation: {e}", "{}"
98
 
99
  # --- Gradio Interface ---
100
  with gr.Blocks() as demo:
101
  with gr.Row():
102
  task_type_dropdown = gr.Dropdown(
103
- choices=["i2v", "t2v"], label="Task Type", value="t2v"
104
  )
105
  load_model_button = gr.Button("Load Model")
106
- model_status = gr.Textbox(label="Model Status")
107
  with gr.Row():
108
  with gr.Column():
109
- prompt = gr.Textbox(label="Input Prompt")
110
- seed = gr.Number(label="Random Seed", value=-1)
111
- image = gr.Image(label="Upload Image (for i2v)", type="filepath")
112
- submit_button = gr.Button("Generate Video")
113
  with gr.Column():
114
- output_video = gr.Video(label="Generated Video")
115
- output_params = gr.Textbox(label="Output Parameters")
116
 
117
  load_model_button.click(
118
  fn=init_predictor,
119
  inputs=[task_type_dropdown],
120
- outputs=[model_status]
121
  )
122
 
123
  submit_button.click(
124
  fn=generate_video,
125
- inputs=[prompt, seed, image, task_type_dropdown],
126
  outputs=[output_video, output_params],
127
  )
128
 
129
- demo.launch() # Don't use demo.launch() inside HuggingFace Spaces.
 
 
1
  import gradio as gr
 
 
2
  import os
3
+ import time
4
  import random
5
 
 
 
 
 
 
 
 
 
 
6
  os.environ["CUDA_VISIBLE_DEVICES"] = ""
7
 
 
 
 
8
  def get_transformer_model_id(task_type: str) -> str:
9
  if task_type == "i2v":
10
  return "Skywork/skyreels-v1-Hunyuan-i2v"
 
12
  return "Skywork/skyreels-v1-Hunyuan-t2v"
13
 
14
  def init_predictor(task_type: str):
15
+ # ALL IMPORTS NOW INSIDE THIS FUNCTION
16
+ import torch
17
+ from skyreelsinfer import TaskType
18
+ from skyreelsinfer.offload import OffloadConfig
19
+ from skyreelsinfer.skyreels_video_infer import SkyReelsVideoInfer
20
+ from huggingface_hub.utils import RepositoryNotFoundError, RevisionNotFoundError, EntryNotFoundError
21
+
22
  try:
23
  predictor = SkyReelsVideoInfer(
24
  task_type=TaskType.I2V if task_type == "i2v" else TaskType.T2V,
 
28
  offload_config=OffloadConfig(
29
  high_cpu_memory=True,
30
  parameters_level=True,
 
31
  ),
32
+ use_multiprocessing=False,
33
  )
34
+ return "Model loaded successfully!", predictor # Return predictor
35
 
36
  except (RepositoryNotFoundError, RevisionNotFoundError, EntryNotFoundError) as e:
37
+ return f"Error: Model not found. Details: {e}", None
38
  except Exception as e:
39
+ return f"Error loading model: {e}", None
40
+
41
 
42
+ def generate_video(prompt, seed, image, task_type, predictor): # predictor as argument
43
+ # IMPORTS INSIDE THIS FUNCTION TOO
44
+ from diffusers.utils import export_to_video
45
+ from diffusers.utils import load_image
46
+ import os
47
 
48
  if task_type == "i2v" and not isinstance(image, str):
49
+ return "Error: For i2v, provide image path.", "{}"
50
  if not isinstance(prompt, str) or not isinstance(seed, (int, float)):
51
+ return "Error: Invalid inputs.", "{}"
52
 
53
  if seed == -1:
54
  random.seed(time.time())
 
56
 
57
  kwargs = {
58
  "prompt": prompt,
59
+ "height": 256,
60
+ "width": 256,
61
+ "num_frames": 24,
62
+ "num_inference_steps": 30,
63
  "seed": int(seed),
64
+ "guidance_scale": 7.0,
65
  "embedded_guidance_scale": 1.0,
66
+ "negative_prompt": "bad quality, blur",
67
  "cfg_for": False,
68
  }
69
 
70
  if task_type == "i2v":
71
  if image is None or not os.path.exists(image):
72
+ return "Error: Image not found.", "{}"
73
  try:
74
  kwargs["image"] = load_image(image=image)
75
  except Exception as e:
76
+ return f"Error loading image: {e}", "{}"
77
 
78
  try:
79
  if predictor is None:
80
+ return "Error: Model not init.", "{}"
81
+
82
+ output = predictor.inference(kwargs)
83
+ frames = output
84
 
 
85
  save_dir = f"./result/{task_type}"
86
  os.makedirs(save_dir, exist_ok=True)
87
+ video_out_file = f"{save_dir}/{prompt[:100]}_{int(seed)}.mp4"
88
+ print(f"Generating video: {video_out_file}")
89
+ export_to_video(frames, video_out_file, fps=24)
90
+ return video_out_file, str(kwargs)
91
 
92
  except Exception as e:
93
+ return f"Error: {e}", "{}"
94
 
95
  # --- Gradio Interface ---
96
  with gr.Blocks() as demo:
97
  with gr.Row():
98
  task_type_dropdown = gr.Dropdown(
99
+ choices=["i2v", "t2v"], label="Task", value="t2v"
100
  )
101
  load_model_button = gr.Button("Load Model")
102
+ model_status = gr.Textbox(label="Status")
103
  with gr.Row():
104
  with gr.Column():
105
+ prompt = gr.Textbox(label="Prompt")
106
+ seed = gr.Number(label="Seed", value=-1)
107
+ image = gr.Image(label="Image (i2v)", type="filepath")
108
+ submit_button = gr.Button("Generate")
109
  with gr.Column():
110
+ output_video = gr.Video(label="Video")
111
+ output_params = gr.Textbox(label="Params")
112
 
113
  load_model_button.click(
114
  fn=init_predictor,
115
  inputs=[task_type_dropdown],
116
+ outputs=[model_status, "state"], # Output to a hidden state
117
  )
118
 
119
  submit_button.click(
120
  fn=generate_video,
121
+ inputs=[prompt, seed, image, task_type_dropdown, "state"], # Input from state
122
  outputs=[output_video, output_params],
123
  )
124
 
125
+ demo.launch()