txt2txt / app.py
lelafav502's picture
Update app.py
33b6596 verified
import gradio as gr
import requests
import os
# Function for Text-to-Image (Send POST request with prompt, ratio, style, etc.)
def send_text2image_request(prompt, ratio, style, uuid_value, token):
# Access the URL from Secrets (Private)
url = os.getenv('API_URL') # Secret variable for the URL
if not url:
return "Error: API URL not set in environment secrets."
# Define the headers with the required values
headers = {
"Uid": uuid_value, # Using the provided UUID
"Versioncode": "16701",
"Accept-Version": "v1",
"Token": token, # Replace with the actual token
"Content-Type": "application/x-www-form-urlencoded"
}
# Define the values to be sent in the POST request
data = {
"is_translate": "1",
"is_first": "true",
"prompt": prompt,
"ratio": ratio,
"style_id": style
}
# Sending POST request
response = requests.post(url, headers=headers, data=data)
# Return the response text or any relevant information
if response.status_code == 200:
return response.text
else:
return f"Error: {response.status_code} - {response.text}"
# Function for Image-to-Image (Send POST request with an image and other parameters)
def send_image2image_request(image, ratio, style, uuid_value, token):
# Access the URL from Secrets (Private)
url = os.getenv('API_URL_IMAGE') # Secret variable for the URL
if not url:
return "Error: API URL not set in environment secrets."
# Define the headers with the required values
headers = {
"Uid": uuid_value, # Using the provided UUID
"Versioncode": "16701",
"Accept-Version": "v1",
"Token": token, # Replace with the actual token
"Content-Type": "application/x-www-form-urlencoded"
}
# Define the values to be sent in the POST request
data = {
"is_translate": "1",
"is_first": "true",
"ratio": ratio,
"denoising_strength": "50",
"image_name": image,
"is_img2img": "1"
}
if style and style != "0":
data["style_id"] = style
response = requests.post(url, headers=headers, data=data)
# Return the response text or any relevant information
if response.status_code == 200:
return response.text
else:
return f"Error: {response.status_code} - {response.text}"
# Function for Image-to-Image (Send POST request with an image and other parameters)
def send_inpaint2image_request(image, mask, prompt, ratio, uuid_value, token, style):
# Access the URL from Secrets (Private)
url = os.getenv('API_URL_IMAGE') # Secret variable for the URL
if not url:
return "Error: API URL not set in environment secrets."
# Define the headers with the required values
headers = {
"Uid": uuid_value, # Using the provided UUID
"Versioncode": "16701",
"Accept-Version": "v1",
"Token": token, # Replace with the actual token
"Content-Type": "application/x-www-form-urlencoded"
}
# Define the values to be sent in the POST request
data = {
"is_translate": "1",
"is_first": "true",
"image_name": image,
"mask_name":mask,
"prompt": prompt,
"ratio": ratio,
"is_img2img": "1"
}
if style and style != "0":
data["style_id"] = style
response = requests.post(url, headers=headers, data=data)
# Return the response text or any relevant information
if response.status_code == 200:
return response.text
else:
return f"Error: {response.status_code} - {response.text}"
# Function to get the Upload URL from Firebase
def get_upload_url(uuid_value):
# The URL to send the request to
firebase_url = 'https://firebasestorage.googleapis.com/v0/b/hardstone_img_us/o?name=umagic_crop%2Fupload%2F2024-11-17%2F{}.jpg&uploadType=resumable'.format(uuid_value)
# Define the headers with the required values
headers = {
"Content-Type": "application/x-www-form-urlencoded", # Required content type
"X-Firebase-Storage-Version": "Android/24.43.37 (100400-693941914)",
"X-Firebase-Gmpid": "1:873188155690:android:1fd5d2e7b355e982807e53",
"X-Goog-Upload-Command": "start",
"X-Goog-Upload-Protocol": "resumable",
"X-Goog-Upload-Header-Content-Type": "application/x-www-form-urlencoded",
"User-Agent": "Dalvik/2.1.0 (Linux; U; Android 10; Android SDK built for arm64 Build/QSR1.210802.001)",
"Connection": "Keep-Alive",
"Accept-Encoding": "gzip, deflate, br"
}
# Sending POST request to Firebase Storage
response = requests.post(firebase_url, headers=headers)
# Check if the request was successful
if response.status_code == 200:
# Return the response body as JSON and the response headers
return dict(response.headers)
else:
# Return an error with the status code and the error message
return dict(response.headers)
# Function to PUT image to a specified URL
def put_image_to_url(image, url):
# Read the image file to send as data
with open(image.name, 'rb') as f:
image_data = f.read()
# Define the headers with the required values for PUT request
headers = {
"X-Firebase-Storage-Version": "Android/24.43.37 (100400-693941914)",
"X-Firebase-Gmpid": "1:873188155690:android:1fd5d2e7b355e982807e53",
"X-Goog-Upload-Command": "upload, finalize",
"X-Goog-Upload-Protocol": "resumable",
"X-Goog-Upload-Offset": "0",
"Content-Type": "application/x-www-form-urlencoded",
"User-Agent": "Dalvik/2.1.0 (Linux; U; Android 10; Android SDK built for arm64 Build/QSR1.210802.001)",
"Connection": "Keep-Alive",
"Accept-Encoding": "gzip, deflate, br",
"Content-Length": str(len(image_data)) # Set the content length to the size of the image
}
# Sending PUT request with image data
response = requests.put(url, headers=headers, data=image_data)
# Check if the PUT request was successful
if response.status_code == 200:
return response.text
else:
return f"Error: {response.status_code} - {response.text}"
# Gradio interface with tabs for Text-to-Image, Image-to-Image, Get Upload URL, and Image Put
def create_interface():
with gr.Blocks() as demo:
with gr.Tab("Text to Image"):
# Inputs for Text-to-Image
text_prompt = gr.Textbox(label="Prompt")
text_ratio = gr.Textbox(label="Ratio")
text_style = gr.Textbox(label="Style ID")
text_uuid = gr.Textbox(label="UUID ID") # Default UUID
text_token = gr.Textbox(label="Token ID") # Password type for token
text_output = gr.Textbox() # Output for text-to-image response
# Bind the text-to-image function to the interface
text_submit_button = gr.Button("Generate Image")
text_submit_button.click(send_text2image_request, inputs=[text_prompt, text_ratio, text_style, text_uuid, text_token], outputs=text_output)
with gr.Tab("Image to Image"):
# Inputs for Image-to-Image
img_url = gr.Textbox(label="URL")
img_ratio = gr.Textbox(label="Ratio")
img_style = gr.Textbox(label="Style ID")
img_uuid = gr.Textbox(label="UUID ID") # Default UUID
img_token = gr.Textbox(label="Token ID") # Password type for token
img_output = gr.Textbox() # Output for image-to-image response
# Bind the image-to-image function to the interface
img_submit_button = gr.Button("Generate Image")
img_submit_button.click(send_image2image_request, inputs=[img_url, img_ratio, img_style, img_uuid, img_token], outputs=img_output)
with gr.Tab("Inpaint Image"):
# Inputs for Inpaint-to-Image
in_url = gr.Textbox(label="URL")
in_mask = gr.Textbox(label="Mask URL")
in_prompt = gr.Textbox(label="Prompt")
in_ratio = gr.Textbox(label="Ratio")
in_uuid = gr.Textbox(label="UUID ID") # Default UUID
in_token = gr.Textbox(label="Token ID")
in_style = gr.Textbox(label="Style ID") # Password type for token
in_output = gr.Textbox() # Output for image-to-image response
# Bind the image-to-image function to the interface
in_submit_button = gr.Button("Generate Image")
in_submit_button.click(send_inpaint2image_request, inputs=[in_url, in_mask, in_prompt, in_ratio, in_uuid, in_token, in_style], outputs=in_output)
with gr.Tab("Get Upload URL"):
# Inputs for Get Upload URL
uuid_input = gr.Textbox(label="UUID ID") # UUID for getting upload URL
upload_url_output = gr.Textbox() # Output for the upload URL response
# Bind the get_upload_url function to the interface
upload_submit_button = gr.Button("Get Upload URL")
upload_submit_button.click(get_upload_url, inputs=[uuid_input], outputs=upload_url_output)
with gr.Tab("Image Put"):
# Inputs for Image Put
image_input = gr.File(label="Upload Image") # Input for image file
url_input = gr.Textbox(label="Upload URL") # Input for the URL where to PUT the image
put_image_output = gr.Textbox() # Output for the PUT request response
# Bind the put_image_to_url function to the interface
put_submit_button = gr.Button("Upload Image")
put_submit_button.click(put_image_to_url, inputs=[image_input, url_input], outputs=put_image_output)
return demo
# Launch the Gradio interface
interface = create_interface()
interface.launch()