text-to-video/arielreplicate-stable_diffusion_infinite_zoom
0
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 