Spaces:
Restarting
Restarting
import json | |
import os | |
import asyncio | |
import gradio as gr | |
async def stylize(video): | |
command = f"animatediff stylize create-config {video}" | |
process = await asyncio.create_subprocess_shell( | |
command, | |
stdout=asyncio.subprocess.PIPE, | |
stderr=asyncio.subprocess.PIPE | |
) | |
stdout, stderr = await process.communicate() | |
if process.returncode == 0: | |
return stdout.decode() | |
else: | |
print(f"Error: {stderr.decode()}") | |
async def start_video_edit(prompt_file): | |
command = f"animatediff stylize generate {prompt_file}" | |
process = await asyncio.create_subprocess_shell( | |
command, | |
stdout=asyncio.subprocess.PIPE, | |
stderr=asyncio.subprocess.PIPE | |
) | |
stdout, stderr = await process.communicate() | |
if process.returncode == 0: | |
return stdout.decode() | |
else: | |
print(f"Error: {stderr.decode()}") | |
def edit_video(video, pos_prompt): | |
x = asyncio.run(stylize(video)) | |
x = x.split("stylize.py") | |
config = x[18].split("config =")[-1].strip() | |
d = x[19].split("stylize_dir = ")[-1].strip() | |
with open(config, 'r+') as f: | |
data = json.load(f) | |
data['head_prompt'] = pos_prompt | |
data["path"] = "models/huggingface/xxmix9realistic_v40.safetensors" | |
os.remove(config) | |
with open(config, 'w') as f: | |
json.dump(data, f, indent=4) | |
out = asyncio.run(start_video_edit(d)) | |
out = out.split("Stylized results are output to ")[-1] | |
out = out.split("stylize.py")[0].strip() | |
cwd = os.getcwd() | |
video_dir = cwd + "/" + out | |
video_extensions = {'.mp4', '.avi', '.mkv', '.mov', '.flv', '.wmv'} | |
video_path = None | |
for dirpath, dirnames, filenames in os.walk(video_dir): | |
for filename in filenames: | |
if os.path.splitext(filename)[1].lower() in video_extensions: | |
video_path = os.path.join(dirpath, filename) | |
break | |
if video_path: | |
break | |
return video_path | |
print("ready") | |
with gr.Blocks() as interface: | |
gr.Markdown("## Video Processor with Text Prompts") | |
with gr.Row(): | |
with gr.Column(): | |
positive_prompt = gr.Textbox(label="Positive Prompt") | |
video_input = gr.Video(label="Input Video") | |
with gr.Column(): | |
video_output = gr.Video(label="Processed Video") | |
process_button = gr.Button("Process Video") | |
process_button.click(fn=edit_video, | |
inputs=[video_input, positive_prompt], | |
outputs=video_output | |
) | |
interface.launch() | |