import os import time import uuid import gradio as gr from gradio_client import Client hf_token = os.environ.get('HF_TOKEN') sdxl_client = Client("https://fffiloni-sdxl-dpo.hf.space/") faceswap_client = Client("https://fffiloni-deepfakeai.hf.space/", hf_token=hf_token) def get_sdxl(prompt_in): sdxl_result = sdxl_client.predict( prompt_in, api_name="/infer" ) return sdxl_result def infer(portrait_in, prompt_in): # Generate Image from SDXL gr.Info("Generating SDXL image first ...") # Keep trying the operation until it succeeds without raising an exception while True: try: sdxl_result = get_sdxl(prompt_in) break # Exit the while loop if the operation succeeded except Exception as e: print(f"Operation failed with error: {e}") time.sleep(3) # Wait for 5 seconds before attempting again unique_id = str(uuid.uuid4()) # Face Swap gr.Info("Face swap your face on result ...") faceswap_result = faceswap_client.predict( portrait_in, # str (filepath or URL to image) in 'SOURCE IMAGE' Image component sdxl_result, # str (filepath or URL to image) in 'TARGET IMAGE' Image component unique_id, # str in 'parameter_12' Textbox component ["face_swapper", "face_enhancer"], # List[str] in 'FRAME PROCESSORS' Checkboxgroup component "left-right", # str (Option from: ['left-right', 'right-left', 'top-bottom', 'bottom-top', 'small-large', 'large-small']) in 'FACE ANALYSER DIRECTION' Dropdown component "none", # str (Option from: ['none', 'reference', 'many']) in 'FACE RECOGNITION' Dropdown component "none", # str (Option from: ['none', 'male', 'female']) in 'FACE ANALYSER GENDER' Dropdown component fn_index=1 ) return faceswap_result css = """ #col-container{ margin: 0 auto; max-width: 840px; } """ with gr.Blocks(css=css) as demo: with gr.Column(elem_id="col-container"): gr.HTML("""

Portrait Maker

""") with gr.Row(): with gr.Group(): with gr.Column(): portrait_in = gr.Image(label="Your face portrait", type="filepath") prompt_in = gr.Textbox(label="Prompt to desired portrait using your own face") submit_btn = gr.Button("Submit") with gr.Column(): result = gr.Image(label="Result") submit_btn.click( fn = infer, inputs = [ portrait_in, prompt_in ], outputs = [ result ] ) demo.queue().launch()