File size: 2,085 Bytes
a7bb0d5
 
 
 
3c7b6f6
 
 
 
 
 
 
 
 
 
 
 
 
 
18ead1d
a7bb0d5
 
715cfb3
 
 
a7bb0d5
 
18ead1d
a7bb0d5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18ead1d
a7bb0d5
 
 
 
 
 
18ead1d
a7bb0d5
 
bbe7bfb
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import gradio as gr
import subprocess
import os

from huggingface_hub import snapshot_download

# Define the folder name
folder_name = "lora_models"

# Create the folder
os.makedirs(folder_name, exist_ok=True)

# Download models
snapshot_download(
    repo_id = "Eyeline-Research/Go-with-the-Flow",
    local_dir = folder_name
)

def process_video(video_path, prompt, num_steps):
    
    output_folder="noise_warp_output_folder"
    if os.path.exists(output_folder):
        # Delete the folder and its contents
        shutil.rmtree(output_folder)
    output_video="output.mp4"
    device="cuda"
    num_steps=num_steps
    
    try:
        # Step 1: Warp the noise
        warp_command = [
            "python", "make_warped_noise.py", video_path,
            "--output_folder", output_folder
        ]
        subprocess.run(warp_command, check=True)
        
        # Step 2: Run inference
        inference_command = [
            "python", "cut_and_drag_inference.py", output_folder,
            "--prompt", prompt,
            "--output_mp4_path", output_video,
            "--device", device,
            "--num_inference_steps", str(num_steps)
        ]
        subprocess.run(inference_command, check=True)
        
        # Return the path to the output video
        return output_video
    except subprocess.CalledProcessError as e:
        
        raise gr.Error(f"An error occurred: {str(e)}")

with gr.Blocks() as demo:
    with gr.Column():
        gr.Markdown("# Go-With-The-Flow")
        with gr.Row():
            with gr.Column():
                input_video = gr.Video(label="Input Video")
                prompt = gr.Textbox(label="Prompt")
                num_steps = gr.Slider(label="Inference Steps", minimum=1, maximum=30, value=5, step=1)
                submit_btn = gr.Button("Submit")
            with gr.Column():
                output_video = gr.Video(label="Result")

    submit_btn.click(
        fn = process_video,
        inputs = [input_video, prompt, num_steps],
        outputs = [output_video]
    )

demo.queue().launch(show_api=False)