Spaces:
Running
Running
File size: 3,226 Bytes
6f026d4 c3500d3 6f026d4 c3500d3 6f026d4 c3500d3 6f026d4 4e2e497 853952c 6f026d4 6040d2d b2946a9 6f026d4 4e2e497 6f026d4 4e2e497 6f026d4 4e2e497 6f026d4 6040d2d 01cb113 6f026d4 01cb113 aaf1134 6f026d4 6040d2d 6f026d4 6040d2d fdf3c4a 6f026d4 |
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 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# app.py
import os
import uuid
import subprocess
from pathlib import Path
import gradio as gr
FRAME1 = Path("demo/frame1.png")
FRAME2 = Path("demo/frame2.png")
TARGET_DIR = "/home/user/app/output/"
PALETTE_PNG = Path(TARGET_DIR) / "palette.png"
OUTPUT_GIF = Path(TARGET_DIR) / "output.gif"
os.makedirs(TARGET_DIR, exist_ok=True)
def interpolate_image(img_a_path: str, img_b_path: str) -> str:
# --- clear any previous output ---
if OUTPUT_GIF.exists():
OUTPUT_GIF.unlink() # delete old GIF
if PALETTE_PNG.exists():
PALETTE_PNG.unlink() # delete old palette
# optional: clear any old frame PNGs
for f in TARGET_DIR.glob("img*.png"):
f.unlink()
# 1) Run inference to generate frames into TARGET_DIR/img%d.png
subprocess.run([
"python3", "inference_img.py",
"--img", str(img_a_path), str(img_b_path),
"--exp", "4"
], check=True)
# 2) Generate palette from frames
subprocess.run([
"ffmpeg", "-y", "-r", "14", "-f", "image2",
"-i", f"{TARGET_DIR}img%d.png",
"-vf", "palettegen=stats_mode=single",
"-frames:v", "1",
str(PALETTE_PNG)
], check=True)
# 3) Generate final GIF using palette
subprocess.run([
"ffmpeg", "-y", "-r", "14", "-f", "image2",
"-i", f"{TARGET_DIR}img%d.png",
"-i", str(PALETTE_PNG),
"-lavfi", "paletteuse",
str(OUTPUT_GIF)
], check=True)
return str(OUTPUT_GIF)
# helper to read the Markdown file
def load_description(path):
with open(path, "r", encoding="utf-8") as f:
return f.read()
description_text = load_description("TITLE.md")
with gr.Blocks(title="RIFE Image Interpolation") as demo:
# render the markdown text at the top of the UI
gr.Markdown(description_text)
with gr.Tab("Demo"):
gr.Markdown("### Demo: Preloaded images")
input_imageA = gr.Image(type="filepath", value=str(FRAME1), label="Image A")
input_imageB = gr.Image(type="filepath", value=str(FRAME2), label="Image B")
run_btn = gr.Button("Interpolate")
result_img = gr.Image(type="filepath", label="Interpolated GIF")
#result_path = gr.Textbox(label="Output path", interactive=False)
run_btn.click(interpolate_image, [input_imageA, input_imageB], [result_img])
with gr.Tab("Upload your images"):
gr.Markdown("### Upload any two images")
user_A = gr.Image(type="filepath", label="Image A")
user_B = gr.Image(type="filepath", label="Image B")
run_btn2 = gr.Button("Interpolate")
user_img = gr.Image(type="filepath", label="Interpolated GIF")
#user_path = gr.Textbox(label="Output path", interactive=False)
run_btn2.click(interpolate_image, [user_A, user_B], [user_img])
gr.HTML("""<div style="margin: 0.75em 0;"><a href="https://www.buymeacoffee.com/Artgen" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/default-orange.png" alt="Buy Me A Coffee" height="41" width="174"></a></div>
<div style="margin: 0.75em 0;">But what would really help me is a <strong>PRO subscription</strong> to Google Colab, Kaggle or Hugging Face. Many thanks.</div>""")
demo.launch()
|