|
|
|
|
|
import os
|
|
|
import tempfile
|
|
|
import torch
|
|
|
import gradio as gr
|
|
|
from pathlib import Path
|
|
|
|
|
|
|
|
|
|
|
|
def load_model():
|
|
|
|
|
|
|
|
|
|
|
|
device = "cuda" if torch.cuda.is_available() else "cpu"
|
|
|
print("Device:", device)
|
|
|
|
|
|
model = None
|
|
|
return model, device
|
|
|
|
|
|
MODEL, DEVICE = load_model()
|
|
|
|
|
|
def generate_video(prompt: str, duration_sec: int = 3):
|
|
|
"""
|
|
|
Remplacez le contenu de cette fonction par l'appel réel à votre IA.
|
|
|
Doit retourner le chemin d'un fichier vidéo (.mp4).
|
|
|
"""
|
|
|
|
|
|
|
|
|
import numpy as np
|
|
|
import imageio.v2 as imageio
|
|
|
|
|
|
fps = 24
|
|
|
w, h = 320, 240
|
|
|
frames = []
|
|
|
nframes = max(1, int(duration_sec * fps))
|
|
|
for i in range(nframes):
|
|
|
|
|
|
frame = np.zeros((h, w, 3), dtype=np.uint8)
|
|
|
frames.append(frame)
|
|
|
|
|
|
out = tempfile.NamedTemporaryFile(suffix=".mp4", delete=False)
|
|
|
out_path = out.name
|
|
|
out.close()
|
|
|
imageio.mimwrite(out_path, frames, fps=fps, macro_block_size=None)
|
|
|
return out_path
|
|
|
|
|
|
|
|
|
with gr.Blocks() as demo:
|
|
|
gr.Markdown("# Démo IA vidéo")
|
|
|
with gr.Row():
|
|
|
prompt = gr.Textbox(label="Prompt / Description", lines=2, placeholder="Entrez ce que la vidéo doit contenir")
|
|
|
duration = gr.Slider(1, 10, value=3, step=1, label="Durée (sec)")
|
|
|
gen_btn = gr.Button("Générer")
|
|
|
video_out = gr.Video(label="Vidéo générée")
|
|
|
|
|
|
def run(prompt, duration):
|
|
|
path = generate_video(prompt, duration)
|
|
|
return path
|
|
|
|
|
|
gen_btn.click(run, inputs=[prompt, duration], outputs=[video_out])
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
demo.launch(server_name="0.0.0.0", server_port=int(os.environ.get("PORT", 7860)))
|
|
|
|