AItool's picture
Update app.py
e61c952 verified
raw
history blame
2.16 kB
# app.py
import subprocess
from pathlib import Path
import gradio as gr
# --- Paths ---
DEMO_DIR = Path("demo") # Folder with input frames
FRAME1 = DEMO_DIR / "frame1.jpg" # First image
FRAME2 = DEMO_DIR / "frame2.jpg" # Second image
RETRO_GIF = DEMO_DIR / "demo.gif" # Final result
# --- Interpolation function ---
def interpolate(img_a_path, img_b_path):
"""
Run interpolation pipeline using existing shell scripts and commands.
Expects two input image paths. Outputs interpolated GIF.
"""
try:
# Step 1: Run your inference script to generate intermediate frames
subprocess.run([
"python3", "img_inference.py",
"--img", str(img_a_path), str(img_b_path)
], check=True)
# Step 2: Generate optimized palette using ffmpeg
subprocess.run([
"ffmpeg", "-r", "14", "-f", "image2", "-i", "output/img%d.png",
"-vf", "palettegen=stats_mode=single", "palette.png"
], check=True)
# Step 3: Apply palette to produce final gif
subprocess.run([
"ffmpeg", "-r", "14", "-f", "image2", "-i", "output/img%d.png",
"-i", "palette.png", "-lavfi", "paletteuse", str(RETRO_GIF)
], check=True)
return str(RETRO_GIF)
except subprocess.CalledProcessError:
raise gr.Error("Interpolation failed. Please check script and inputs.")
# --- Demo reset: returns static frames ---
def reset_demo():
return str(FRAME1), str(FRAME2)
# --- Gradio UI ---
with gr.Blocks(title="RIFE Image Interpolation") as demo:
with gr.Tab("Demo"):
gr.Markdown("### Interpolate between two images")
img_a = gr.Image(type="filepath", value=str(FRAME1), label="Image A")
img_b = gr.Image(type="filepath", value=str(FRAME2), label="Image B")
run = gr.Button("Interpolate")
reset = gr.Button("Reset")
result = gr.Image(type="filepath", label="Interpolated GIF")
run.click(interpolate, inputs=[img_a, img_b], outputs=result)
reset.click(reset_demo, outputs=[img_a, img_b])
demo.launch()