Axel-Student commited on
Commit
5d5fcf2
·
1 Parent(s): eeae64d

change model

Browse files
Files changed (2) hide show
  1. README.md +6 -5
  2. video/main.py +112 -44
README.md CHANGED
@@ -24,15 +24,16 @@ Créez des images et des vidéos de haute qualité avec l'IA grâce aux meilleur
24
  - Paramètres avancés personnalisables
25
  - Interface intuitive avec exemples
26
 
27
- ## 🎬 Text-to-Video (HunyuanVideo)
28
 
29
- **Modèle** : HunyuanVideo de Tencent
30
 
31
  ### Fonctionnalités
32
  - Génération de vidéos depuis du texte
33
- - Qualité vidéo haute définition
34
- - Mouvements naturels et fluides
35
- - Compréhension avancée des prompts
 
36
 
37
  ## 🚀 Utilisation
38
 
 
24
  - Paramètres avancés personnalisables
25
  - Interface intuitive avec exemples
26
 
27
+ ## 🎬 Text-to-Video (Wan2.1-T2V-14B)
28
 
29
+ **Modèle** : Wan2.1-T2V-14B de Wan-AI (basé sur CogVideoX)
30
 
31
  ### Fonctionnalités
32
  - Génération de vidéos depuis du texte
33
+ - Qualité vidéo haute définition (720p)
34
+ - Vidéos de 6 à 10 secondes
35
+ - 14 milliards de paramètres
36
+ - Paramètres avancés personnalisables
37
 
38
  ## 🚀 Utilisation
39
 
video/main.py CHANGED
@@ -1,56 +1,96 @@
1
  import spaces
 
2
  import gradio as gr
3
- from huggingface_hub import InferenceClient
4
- import os
5
 
6
  # Configuration
7
- HF_TOKEN = os.getenv("HF_TOKEN")
8
- client = InferenceClient(token=HF_TOKEN)
 
 
 
 
 
 
 
 
 
 
 
 
9
 
10
  @spaces.GPU(duration=300)
11
  def generate_video(
12
  prompt: str,
 
 
 
13
  progress=gr.Progress(track_tqdm=True)
14
  ):
15
  """
16
- Génère une vidéo à partir d'un prompt texte avec HunyuanVideo
17
-
18
  Args:
19
  prompt: Description de la vidéo à générer
 
 
 
20
  """
21
-
22
  # Validation du prompt
23
  if not prompt or prompt.strip() == "":
24
  raise gr.Error("⚠️ Veuillez entrer un prompt!")
25
-
26
  try:
27
- progress(0, desc="🎬 Génération de la vidéo en cours...")
28
-
29
  # Génération de la vidéo
30
- video = client.text_to_video(
31
- prompt,
32
- model="tencent/HunyuanVideo",
33
- )
34
-
 
 
 
 
 
 
 
 
 
 
 
 
 
35
  progress(1.0, desc="✅ Vidéo générée avec succès!")
36
-
37
  # Métadonnées
38
- metadata = f"Prompt: {prompt}\nModèle: HunyuanVideo"
39
-
40
- return video, metadata
41
-
 
 
 
 
 
42
  except Exception as e:
 
 
 
43
  raise gr.Error(f"❌ Erreur lors de la génération: {str(e)}")
44
 
45
  # Interface Gradio
46
- with gr.Blocks(theme=gr.themes.Soft(), title="HunyuanVideo - Text-to-Video") as demo:
47
  gr.Markdown(
48
  """
49
- # 🎬 Générateur de Vidéos HunyuanVideo
50
  ### Créez des vidéos à partir de descriptions textuelles
51
  """
52
  )
53
-
54
  with gr.Row():
55
  # Colonne gauche - Paramètres
56
  with gr.Column(scale=1):
@@ -60,67 +100,95 @@ with gr.Blocks(theme=gr.themes.Soft(), title="HunyuanVideo - Text-to-Video") as
60
  lines=5,
61
  value="A young man walking on the street"
62
  )
63
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64
  generate_btn = gr.Button("🎬 Générer la Vidéo", variant="primary", size="lg")
65
-
66
  gr.Markdown(
67
  """
68
  ℹ️ **Conseils pour de meilleurs résultats:**
69
  - Décrivez l'action principale clairement
70
  - Mentionnez le mouvement et l'environnement
71
  - Soyez précis mais concis
 
72
  """
73
  )
74
-
75
  # Colonne droite - Résultat
76
  with gr.Column(scale=1):
77
  output_video = gr.Video(
78
  label="🎥 Vidéo Générée",
79
  height=400
80
  )
81
-
82
  output_metadata = gr.Textbox(
83
  label="📊 Informations de Génération",
84
- lines=3,
85
  interactive=False
86
  )
87
-
88
  # Exemples
89
  gr.Markdown("### 🎯 Exemples de Prompts")
90
  gr.Examples(
91
  examples=[
92
- ["A young man walking on the street"],
93
- ["A cat playing with a ball in a sunny garden"],
94
- ["Ocean waves crashing on a beach at sunset"],
95
- ["A bird flying through a forest"],
96
- ["Rain falling on a city street at night"],
97
  ],
98
- inputs=[prompt_input],
99
  outputs=[output_video, output_metadata],
100
  fn=generate_video,
101
  cache_examples=False,
102
  )
103
-
104
  # Event handlers
105
  generate_btn.click(
106
  fn=generate_video,
107
- inputs=[prompt_input],
108
  outputs=[output_video, output_metadata]
109
  )
110
-
111
  gr.Markdown(
112
  """
113
  ---
114
  ### 📚 À propos
115
- Ce générateur utilise **HunyuanVideo** de Tencent, un modèle de génération vidéo text-to-video.
116
-
117
  **Caractéristiques:**
118
  - 🎬 Génération de vidéos depuis des descriptions textuelles
119
  - 🎨 Qualité vidéo haute définition
120
- - ⚡ Génération rapide et efficace
121
- - 🎯 Compréhension naturelle des prompts
122
-
123
- ⏱️ **Note:** La génération peut prendre quelques minutes selon la complexité.
 
124
  """
125
  )
126
 
 
1
  import spaces
2
+ import torch
3
  import gradio as gr
4
+ from diffusers import CogVideoXPipeline
5
+ from diffusers.utils import export_to_video
6
 
7
  # Configuration
8
+ device = "cuda" if torch.cuda.is_available() else "cpu"
9
+ dtype = torch.bfloat16 if torch.cuda.is_available() else torch.float32
10
+
11
+ # Chargement du modèle Wan2.1-T2V-14B
12
+ print("🚀 Chargement du modèle Wan2.1-T2V-14B...")
13
+ pipe = CogVideoXPipeline.from_pretrained(
14
+ "Wan-AI/Wan2.1-T2V-14B",
15
+ torch_dtype=dtype,
16
+ )
17
+ if torch.cuda.is_available():
18
+ pipe.enable_model_cpu_offload()
19
+ pipe.vae.enable_slicing()
20
+ pipe.vae.enable_tiling()
21
+ print("✅ Modèle chargé avec succès!")
22
 
23
  @spaces.GPU(duration=300)
24
  def generate_video(
25
  prompt: str,
26
+ num_inference_steps: int = 50,
27
+ guidance_scale: float = 6.0,
28
+ num_frames: int = 49,
29
  progress=gr.Progress(track_tqdm=True)
30
  ):
31
  """
32
+ Génère une vidéo à partir d'un prompt texte avec Wan2.1-T2V-14B
33
+
34
  Args:
35
  prompt: Description de la vidéo à générer
36
+ num_inference_steps: Nombre d'étapes de diffusion
37
+ guidance_scale: Force de guidage du prompt
38
+ num_frames: Nombre de frames (49 ou 81)
39
  """
40
+
41
  # Validation du prompt
42
  if not prompt or prompt.strip() == "":
43
  raise gr.Error("⚠️ Veuillez entrer un prompt!")
44
+
45
  try:
46
+ progress(0, desc=" Génération de la vidéo en cours...")
47
+
48
  # Génération de la vidéo
49
+ video = pipe(
50
+ prompt=prompt,
51
+ num_videos_per_prompt=1,
52
+ num_inference_steps=num_inference_steps,
53
+ num_frames=num_frames,
54
+ guidance_scale=guidance_scale,
55
+ generator=torch.Generator(device=device).manual_seed(42),
56
+ ).frames[0]
57
+
58
+ progress(0.9, desc="💾 Sauvegarde de la vidéo...")
59
+
60
+ # Sauvegarder la vidéo
61
+ video_path = export_to_video(video, fps=8)
62
+
63
+ # Nettoyage mémoire
64
+ if torch.cuda.is_available():
65
+ torch.cuda.empty_cache()
66
+
67
  progress(1.0, desc="✅ Vidéo générée avec succès!")
68
+
69
  # Métadonnées
70
+ metadata = f"""Prompt: {prompt}
71
+ Modèle: Wan2.1-T2V-14B
72
+ Steps: {num_inference_steps}
73
+ Guidance Scale: {guidance_scale}
74
+ Frames: {num_frames}
75
+ FPS: 8"""
76
+
77
+ return video_path, metadata
78
+
79
  except Exception as e:
80
+ # Nettoyage en cas d'erreur
81
+ if torch.cuda.is_available():
82
+ torch.cuda.empty_cache()
83
  raise gr.Error(f"❌ Erreur lors de la génération: {str(e)}")
84
 
85
  # Interface Gradio
86
+ with gr.Blocks(theme=gr.themes.Soft(), title="Wan2.1-T2V - Text-to-Video") as demo:
87
  gr.Markdown(
88
  """
89
+ # 🎬 Générateur de Vidéos Wan2.1-T2V-14B
90
  ### Créez des vidéos à partir de descriptions textuelles
91
  """
92
  )
93
+
94
  with gr.Row():
95
  # Colonne gauche - Paramètres
96
  with gr.Column(scale=1):
 
100
  lines=5,
101
  value="A young man walking on the street"
102
  )
103
+
104
+ with gr.Accordion("⚙️ Paramètres Avancés", open=False):
105
+ num_inference_steps = gr.Slider(
106
+ minimum=20,
107
+ maximum=100,
108
+ value=50,
109
+ step=1,
110
+ label="Nombre d'étapes",
111
+ info="Plus = meilleure qualité mais plus lent"
112
+ )
113
+
114
+ guidance_scale = gr.Slider(
115
+ minimum=1.0,
116
+ maximum=15.0,
117
+ value=6.0,
118
+ step=0.5,
119
+ label="Guidance Scale",
120
+ info="Force de guidage du prompt"
121
+ )
122
+
123
+ num_frames = gr.Radio(
124
+ choices=[49, 81],
125
+ value=49,
126
+ label="Nombre de frames",
127
+ info="49 frames = ~6s, 81 frames = ~10s"
128
+ )
129
+
130
  generate_btn = gr.Button("🎬 Générer la Vidéo", variant="primary", size="lg")
131
+
132
  gr.Markdown(
133
  """
134
  ℹ️ **Conseils pour de meilleurs résultats:**
135
  - Décrivez l'action principale clairement
136
  - Mentionnez le mouvement et l'environnement
137
  - Soyez précis mais concis
138
+ - Utilisez des descriptions visuelles détaillées
139
  """
140
  )
141
+
142
  # Colonne droite - Résultat
143
  with gr.Column(scale=1):
144
  output_video = gr.Video(
145
  label="🎥 Vidéo Générée",
146
  height=400
147
  )
148
+
149
  output_metadata = gr.Textbox(
150
  label="📊 Informations de Génération",
151
+ lines=6,
152
  interactive=False
153
  )
154
+
155
  # Exemples
156
  gr.Markdown("### 🎯 Exemples de Prompts")
157
  gr.Examples(
158
  examples=[
159
+ ["A young man walking on the street", 50, 6.0, 49],
160
+ ["A cat playing with a ball in a sunny garden", 50, 6.0, 49],
161
+ ["Ocean waves crashing on a beach at sunset", 50, 6.0, 49],
162
+ ["A bird flying through a forest", 50, 6.0, 49],
163
+ ["Rain falling on a city street at night", 50, 6.0, 49],
164
  ],
165
+ inputs=[prompt_input, num_inference_steps, guidance_scale, num_frames],
166
  outputs=[output_video, output_metadata],
167
  fn=generate_video,
168
  cache_examples=False,
169
  )
170
+
171
  # Event handlers
172
  generate_btn.click(
173
  fn=generate_video,
174
+ inputs=[prompt_input, num_inference_steps, guidance_scale, num_frames],
175
  outputs=[output_video, output_metadata]
176
  )
177
+
178
  gr.Markdown(
179
  """
180
  ---
181
  ### 📚 À propos
182
+ Ce générateur utilise **Wan2.1-T2V-14B** de Wan-AI, un modèle de génération vidéo text-to-video basé sur CogVideoX.
183
+
184
  **Caractéristiques:**
185
  - 🎬 Génération de vidéos depuis des descriptions textuelles
186
  - 🎨 Qualité vidéo haute définition
187
+ - ⚡ 14 milliards de paramètres
188
+ - 🎯 Compréhension avancée des prompts
189
+ - 📹 Vidéos de 6 à 10 secondes
190
+
191
+ ⏱️ **Note:** La génération peut prendre 3-5 minutes selon les paramètres.
192
  """
193
  )
194