Spaces:
Running
Running
import gradio as gr | |
import cv2 | |
import numpy as np | |
from diffusers import AutoPipelineForImage2Image | |
from diffusers.utils import load_image | |
from PIL import Image # Add this import | |
# Load the anime-style diffusion model | |
pipe = AutoPipelineForImage2Image.from_pretrained( | |
"nitrosocke/Arcane-Diffusion", | |
safety_checker=None, | |
) | |
# Running on CPU by default (no .to("cuda")) | |
# Function to process a single frame | |
def process_frame(frame, prompt): | |
frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) # Convert BGR to RGB | |
pil_image = Image.fromarray(frame_rgb) # Convert NumPy array to PIL image | |
image = load_image(pil_image) # Pass PIL image to load_image | |
result = pipe(prompt=prompt, image=image, strength=0.75).images[0] | |
return np.array(result) | |
# Function to convert the entire video | |
def video_to_anime(video_path, prompt="Arcane style"): | |
cap = cv2.VideoCapture(video_path) | |
fps = cap.get(cv2.CAP_PROP_FPS) | |
frames = [] | |
while cap.isOpened(): | |
ret, frame = cap.read() | |
if not ret: | |
break | |
frames.append(frame) | |
cap.release() | |
# Process each frame | |
processed_frames = [process_frame(frame, prompt) for frame in frames] | |
# Write the output video | |
height, width, _ = processed_frames[0].shape | |
fourcc = cv2.VideoWriter_fourcc(*'mp4v') | |
output_path = "output.mp4" | |
out = cv2.VideoWriter(output_path, fourcc, fps, (width, height)) | |
for frame in processed_frames: | |
frame_bgr = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR) | |
out.write(frame_bgr) | |
out.release() | |
return output_path | |
# Create the Gradio interface | |
iface = gr.Interface( | |
fn=video_to_anime, | |
inputs=[ | |
gr.Video(label="Input Video"), | |
gr.Textbox(label="Style Prompt", value="Arcane style") | |
], | |
outputs=gr.Video(label="Output Video"), | |
title="Video to Anime Converter", | |
description="Upload a video and convert it to anime style!" | |
) | |
# Launch the interface with a public link | |
iface.launch(share=True) # Added share=True as per the suggestion |