bulk-nsfw-roop / app.py
chukwurah
html begone
b47708a
import numpy as np
import gradio as gr
import roop.globals
from roop.core import (
start,
decode_execution_providers,
suggest_max_memory,
suggest_execution_threads,
)
from roop.processors.frame.core import get_frame_processors_modules
from roop.utilities import normalize_output_path
import os
from PIL import Image
import uuid
# Global variable to store history
history = []
def swap_face(source_file, target_files, doFaceEnhancer):
global history
output_paths = []
source_path = f"input_{uuid.uuid4()}.jpg"
source_image = Image.fromarray(source_file)
source_image.save(source_path)
for target_file in target_files:
target_path = target_file.name
print(f"Processing image: {target_path}")
print("source_path: ", source_path)
print("target_path: ", target_path)
roop.globals.source_path = source_path
roop.globals.target_path = target_path
output_path = f"output_{uuid.uuid4()}.jpg"
roop.globals.output_path = normalize_output_path(
roop.globals.source_path, roop.globals.target_path, output_path
)
if doFaceEnhancer:
roop.globals.frame_processors = ["face_swapper", "face_enhancer"]
else:
roop.globals.frame_processors = ["face_swapper"]
roop.globals.headless = True
roop.globals.keep_fps = True
roop.globals.keep_audio = True
roop.globals.keep_frames = False
roop.globals.many_faces = False
roop.globals.video_encoder = "libx264"
roop.globals.video_quality = 18
roop.globals.max_memory = suggest_max_memory()
roop.globals.execution_providers = decode_execution_providers(["cuda"])
roop.globals.execution_threads = suggest_execution_threads()
print(
"start process",
roop.globals.source_path,
roop.globals.target_path,
roop.globals.output_path,
)
for frame_processor in get_frame_processors_modules(
roop.globals.frame_processors
):
if not frame_processor.pre_check():
return
start()
output_paths.append(output_path)
# Add to history
history.extend(output_paths)
return output_paths, gr.update(value=history)
def get_history():
return history
with gr.Blocks() as app:
with gr.Tab("Face Swap"):
with gr.Row():
source_input = gr.Image(label="Source Image")
target_input = gr.File(label="Target Image(s)", file_count="multiple")
enhance_checkbox = gr.Checkbox(label="Use Face Enhancer", info="Apply face enhancement")
swap_button = gr.Button("Swap Faces")
output_gallery = gr.Gallery(label="Output Images")
with gr.Tab("History"):
history_gallery = gr.Gallery(label="Previous Outputs")
refresh_button = gr.Button("Refresh History")
swap_button.click(
fn=swap_face,
inputs=[source_input, target_input, enhance_checkbox],
outputs=[output_gallery, history_gallery]
)
refresh_button.click(
fn=get_history,
inputs=[],
outputs=[history_gallery]
)
app.launch()