cncnc / app.py
hard56961's picture
Upload 8 files
259344d verified
# 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)))