TheNetherWatcher's picture
Upload folder using huggingface_hub
5e046ce verified
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()