import gradio as gr import subprocess as sp import os import uuid import time import shutil os.makedirs("./output", exist_ok=True) def run(*args): source, target, unique_id, *rest_args = args if not source or not os.path.exists(source): return "Source file does not exist" if not target or not os.path.exists(target): return "Target file does not exist" remove_old_directories("./output", num_minutes=60) filename = os.path.basename(target) output_dir = f"./output/{unique_id}" os.makedirs(output_dir, exist_ok=True) output = f"{output_dir}/{filename}" frame_processor = rest_args[0] selected_frame_processors = " ".join(frame_processor) face_analyser_direction = rest_args[1] face_recognition = rest_args[2] face_analyser_gender = rest_args[3] cmd = ( f'python run.py ' f'--execution-providers cpu ' f'-s "{source}" ' f'-t "{target}" ' f'-o "{output}" ' f'--frame-processors {selected_frame_processors} ' f'--face-analyser-direction {face_analyser_direction} ' ) if face_recognition != "none": cmd += f"--face-recognition {face_recognition} " if face_analyser_gender != "none": cmd += f"--face-analyser-gender {face_analyser_gender} " if len(rest_args) > 4: skip_audio = rest_args[4] keep_fps = rest_args[5] keep_temp = rest_args[6] if skip_audio: cmd += "--skip-audio " if keep_fps: cmd += "--keep-fps " if keep_temp: cmd += "--keep-temp " try: print("Started...", cmd) result = sp.run( cmd, shell=True, capture_output=True, text=True ) print(result.stdout) if result.stderr: print(result.stderr) return output except Exception as e: return f"An error occurred: {str(e)}" def clear_output(unique_id): try: output_path = f"./output/{unique_id}" if os.path.exists(output_path): shutil.rmtree(output_path) print(f"Deleted {output_path}") return "Output deleted" return "Output directory does not exist" except Exception as e: return f"An error occurred: {str(e)}" def remove_old_directories(directory, num_minutes=60): now = time.time() for r, d, f in os.walk(directory): for dir_name in d: dir_path = os.path.join(r, dir_name) timestamp = os.path.getmtime(dir_path) age_minutes = (now - timestamp) / 60 if age_minutes >= num_minutes: try: print("Removing", dir_path) shutil.rmtree(dir_path) print("Directory removed:", dir_path) except Exception as e: print(e) def get_theme(): return gr.themes.Soft( primary_hue=gr.themes.colors.red, secondary_hue=gr.themes.colors.gray, font=gr.themes.GoogleFont("Inter") ) with gr.Blocks( theme=get_theme(), title="DeepFakeAI 1.0.0" ) as ui: gr.HTML( '

DeepFakeAI 1.0.1

' ) frame_processor_checkbox = gr.CheckboxGroup( choices=[ "face_swapper", "face_enhancer", "frame_enhancer" ], label="FRAME PROCESSORS", value=["face_swapper"] ) face_analyser_direction_dropdown = gr.Dropdown( label="FACE ANALYSER DIRECTION", choices=[ "left-right", "right-left", "top-bottom", "bottom-top", "small-large", "large-small" ], value="left-right" ) face_analyser_age_dropdown = gr.Dropdown( label="FACE RECOGNITION", choices=["none", "reference", "many"], value="reference" ) face_analyser_gender_dropdown = gr.Dropdown( label="FACE ANALYSER GENDER", choices=["none", "male", "female"], value="none" ) unique_id = gr.Textbox( value=str(uuid.uuid4()), visible=False ) with gr.Tab("Image"): source_image = gr.Image( type="filepath", label="SOURCE IMAGE" ) target_image = gr.Image( type="filepath", label="TARGET IMAGE" ) image_button = gr.Button("START") image_output = gr.Image( label="OUTPUT" ) clear_button = gr.Button("CLEAR") image_button.click( fn=run, inputs=[ source_image, target_image, unique_id, frame_processor_checkbox, face_analyser_direction_dropdown, face_analyser_age_dropdown, face_analyser_gender_dropdown ], outputs=image_output ) clear_button.click( fn=clear_output, inputs=unique_id ) with gr.Tab("Video"): source_image_video = gr.Image( type="filepath", label="SOURCE IMAGE" ) target_video = gr.Video( label="TARGET VIDEO" ) with gr.Group(): skip_audio = gr.Checkbox( label="SKIP AUDIO" ) keep_fps = gr.Checkbox( label="KEEP FPS" ) keep_temp = gr.Checkbox( label="KEEP TEMP" ) video_button = gr.Button("START") video_output = gr.Video( label="OUTPUT" ) clear_video_button = gr.Button("CLEAR") video_button.click( fn=run, inputs=[ source_image_video, target_video, unique_id, frame_processor_checkbox, face_analyser_direction_dropdown, face_analyser_age_dropdown, face_analyser_gender_dropdown, skip_audio, keep_fps, keep_temp ], outputs=video_output ) clear_video_button.click( fn=clear_output, inputs=unique_id ) ui.queue() ui.launch( server_name="0.0.0.0", server_port=7860, debug=True )