| import gradio as gr |
| import subprocess |
| import os |
| import yaml |
| import time |
|
|
| def run_vimax_task(prompt): |
| output_dir = "/tmp/outputs" |
| config_path = "configs/idea2video.yaml" |
| runtime_config = "/tmp/runtime_config.yaml" |
| |
| |
| try: |
| with open(config_path, 'r') as f: |
| config = yaml.safe_load(f) |
| |
| config['prompt'] = prompt |
| config['output_dir'] = output_dir |
| |
| with open(runtime_config, 'w') as f: |
| yaml.dump(config, f) |
| except Exception as e: |
| yield None, f"Configuration Error: {str(e)}" |
| return |
|
|
| |
| cmd = ["python", "main_idea2video.py", "--config", runtime_config] |
| |
| process = subprocess.Popen( |
| cmd, |
| stdout=subprocess.PIPE, |
| stderr=subprocess.STDOUT, |
| text=True, |
| bufsize=1 |
| ) |
|
|
| full_logs = "" |
| for line in process.stdout: |
| full_logs += line |
| |
| yield None, full_logs |
|
|
| process.wait() |
|
|
| |
| files = [os.path.join(output_dir, f) for f in os.listdir(output_dir) if f.endswith(('.mp4', '.mkv'))] |
| if files: |
| latest_video = max(files, key=os.path.getctime) |
| yield latest_video, full_logs |
| else: |
| yield None, full_logs + "\n[!] لم يتم العثور على فيديو ناتج." |
|
|
| |
| with gr.Blocks(theme=gr.themes.Soft()) as demo: |
| gr.Markdown("# 🎬 ViMax on Hugging Face") |
| |
| with gr.Row(): |
| with gr.Column(): |
| input_text = gr.Textbox(label="Idea Prompt", placeholder="Describe the video story...") |
| btn = gr.Button("Generate Video", variant="primary") |
| |
| with gr.Column(): |
| video_out = gr.Video(label="Final Output") |
| log_out = gr.Code(label="Execution Logs", language="shell", interactive=False) |
|
|
| btn.click(run_vimax_task, inputs=input_text, outputs=[video_out, log_out]) |
|
|
| if __name__ == "__main__": |
| |
| demo.queue(max_size=5).launch(server_name="0.0.0.0", server_port=7860) |
|
|