# app.py import os import tempfile import torch import gradio as gr from pathlib import Path # importez ici votre pipeline / modèle real (ex: from diffuse_video import VideoGenerator) # Exemple minimal : remplacez la fonction `generate_video` par votre pipeline réel. def load_model(): # Exemple : si vous avez un modèle HF Hub, vous pouvez le charger ici # model = YourModelClass.from_pretrained("path_or_repo") # model.to(device) device = "cuda" if torch.cuda.is_available() else "cpu" print("Device:", device) # Placeholder: rien à charger ici 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). """ # === EXEMPLE de stub (génère une vidéo muette noire) === # Dans la version réelle, appelez MODEL et enregistrez la sortie en 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): # image noire + texte (placeholder) 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) # requires ffmpeg return out_path # Interface Gradio 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)))