CoolFace
Apppublic

text-to-video/arielreplicate-stable_diffusion_infinite_zoom

sourceHugging Faceupdated 3y agoView on Hugging Face
0likes
app.py220 linesDownload Raw Back to root
1import gradio as gr2from requests.exceptions import ConnectTimeout3import time4import requests5import base646 7global headers8global cancel_url9global path10global output_image11global property_name_array12property_name_array =[]13output_image = ''14path = ''15cancel_url =''16headers = {   17        'Content-Type': 'application/json',18        'Authorization': 'Token r8_ZGZlzThfRkPZVDMygVclY1XZ9AuxmIQ2qwwPP',19        "Access-Control-Allow-Headers": "Content-Type",20        "Access-Control-Allow-Origin": '**',21        "Access-Control-Allow-Methods": "OPTIONS,POST,GET,PATCH"}22 23with gr.Blocks() as demo:24    owner = "arielreplicate"25    name = "stable_diffusion_infinite_zoom"26    max_retries = 327    retry_delay = 228    for retry in range(max_retries):29       try:30          url = f'https://api.replicate.com/v1/models/{owner}/{name}'31          response = requests.get(url,  headers=headers, timeout=10)32        # Process the response33          break  # Break out of the loop if the request is successful34       except ConnectTimeout:35        if retry < max_retries - 1:36            print(f"Connection timed out. Retrying in {retry_delay} seconds...")37            time.sleep(retry_delay)38        else:39            print("Max retries exceeded. Unable to establish connection.")40 41    data = response.json()42    description =data.get("description", '')43    title = data.get("default_example",'').get("model",'')44    version = data.get("default_example",'').get("version",'')45 46    gr.Markdown(47    f"""48    # {title}49     {description}50    """)51 52    with gr.Row():53        with gr.Column():54            inputs =[]55            schema = data.get("latest_version", {}).get("openapi_schema", {}).get("components", {}).get("schemas", {})56            ordered_properties = sorted(schema.get("Input", {}).get("properties", {}).items(), key=lambda x: x[1].get("x-order", 0))57            required = schema.get("Input", '').get('required', [])58            print(required,"required")59            for property_name, property_info in ordered_properties :60                property_name_array.append(property_name)61                if required:62                    for item in required:63                        if item ==  property_name:64                            label = "*"+ property_info.get('title', '')65                            description = property_info.get('description','')66                            break67                        else:68                            label = property_info.get('title', '')69                            description = property_info.get('description','')70                else:71                     label = property_info.get('title', '')72                     description = property_info.get('description','')73 74                if "x-order" in property_info:75                    order = int(property_info.get('x-order',''))76                    if property_info.get("type", {}) == "integer":77                        value= data.get('default_example', '').get('input','').get(property_name,0)78                        if "minimum" and "maximum" in property_info:79                            if value == 0:80                              inputs.insert(order, gr.Slider(label=label, info= description, value=property_info.get('default', value), minimum=property_info.get('minimum', ''), maximum=property_info.get('maximum', ''), step=1))81                            else:82                              inputs.insert(order, gr.Slider(label=label, info= description, value=value, minimum=property_info.get('minimum', ''), maximum=property_info.get('maximum', ''), step=1)) 83                        else:84                            if value == 0:85                               inputs.insert(order, gr.Number(label=label, info= description, value=property_info.get('default', value)))86                            else:87                               inputs.insert(order, gr.Number(label=label, info= description, value=value))88                            89                    elif property_info.get("type", {}) == "string":90                        value= data.get('default_example', '').get('input','').get(property_name,'')91                        if  property_info.get('format','') == 'uri':92                          93                                if value :94                                        inputs.insert(order, gr.Video(label=label, value=value))95                                else :96                                        inputs.insert(order, gr.Video(label=label))97                          98                        else:99                            if value == '':100                               inputs.insert(order, gr.Textbox(label=label,info= description, value=property_info.get('default', value)))101                            else:102                               inputs.insert(order, gr.Textbox(label=label,info= description, value=value))103 104                    elif property_info.get("type", {}) == "number":105                        value= data.get('default_example', '').get('input','').get(property_name, 0)106                        if "minimum" and "maximum" in property_info:107                            if value == 0:108                                inputs.insert(order, gr.Slider(label=label,info= description, value=property_info.get('default', value), minimum=property_info.get('minimum', ''), maximum=property_info.get('maximum', '')))109                            else:110                                inputs.insert(order, gr.Slider(label=label,info= description, value=value, minimum=property_info.get('minimum', ''), maximum=property_info.get('maximum', '')))111                        else:112                            if value == 0:113                              inputs.insert(order, gr.Number(label=label,info= description, value=property_info.get('default', value)))114                            else:115                              inputs.insert(order, gr.Number(label=label,info= description, value=value)) 116                    elif property_info.get("type", {}) == "boolean":117                        value= data.get('default_example', '').get('input','').get(property_name,'')118                        if value == '':119                           inputs.insert(order, gr.Checkbox(label=label,info= description, value=property_info.get('default', value)))120                        else:121                            inputs.insert(order, gr.Checkbox(label=label,info= description, value=value))122                    else:123                        value= data.get('default_example', '').get('input','').get(property_name,'')124                        options=schema.get(property_name,'').get('enum',[])125                        if value == '':126                          inputs.insert(order, gr.Dropdown(label=property_name,info= description,choices=options, value=property_info.get("default", value)))127                        else: 128                          inputs.insert(order, gr.Dropdown(label=property_name,info= description,choices=options, value=value))  129             130            with gr.Row():131                cancel_btn = gr.Button("Cancel")132                run_btn = gr.Button("Run")133                 134        with gr.Column():135            136            outputs = []137 138            output_result = data.get("default_example", '').get("output")139            output_type= schema.get("Output", '').get("type", '')140            if output_type == 'array':141                    output_image =  output_result142            else:143                output_image = output_result.get("mp4",'')144            print(output_image,'112121')145            outputs.append(gr.Video(value=output_image))146          147            148           149    150    def run_process(input1, input2, input3):151       global cancel_url152       global property_name_array153       print(len(property_name_array))154       cancel_url=''155       url = 'https://replicate.com/api/predictions'156       157       body = {158                "version": version,159                "input": {160                    property_name_array[0]:  input1,161                    property_name_array[1]:  input2,162                    property_name_array[2]:  input3,163                }164                }165    166       response = requests.post(url, json=body)167       print(response.status_code)168       if response.status_code == 201:169            response_data = response.json()170            get_url = response_data.get('urls','').get('get','')171            identifier = 'https://replicate.com/api/predictions/'+get_url.split("/")[-1]172            173            print(identifier,'')174            time.sleep(3)175            output =verify_image(identifier) 176            print(output,'333')177            if output:178                     return  gr.Video(value=output.get("mp4", ''))179                180       return gr.Video()181    182    def cancel_process(input1, input2, input3):183        global cancel_url184        cancel_url = '123'185        global output_image186        return gr.Video(value=output_image)187 188    def verify_image(get_url):189        res = requests.get(get_url)190        if res.status_code == 200:191            res_data = res.json()192            if res_data.get('error',''):193                return194            else:195               if cancel_url:196                   return197               else:198                    output =  res_data.get('output', [])199                    print(output,'111')200                    if output:201                        print(output,'222')202                        return output203                        204                    else:205                        time.sleep(1)206                        val = verify_image(get_url)207                        return val208        else: 209            return  []  210    211    run_btn.click(run_process, inputs=inputs, outputs=outputs, api_name="run")212    cancel_btn.click(cancel_process, inputs=inputs, outputs=outputs, api_name="cancel")213 214demo.launch()215 216 217         218 219 220