File size: 2,617 Bytes
18a5673
 
 
65fe587
7044dfd
18a5673
 
 
 
 
 
7044dfd
 
ecd93f7
7044dfd
ecd93f7
18a5673
ecd93f7
 
 
18a5673
 
 
 
 
 
ae12cbe
18a5673
65fe587
 
ae12cbe
65fe587
 
 
 
 
ae12cbe
65fe587
 
 
ae12cbe
65fe587
 
 
ae12cbe
 
65fe587
 
 
 
 
 
 
 
 
 
 
 
18a5673
65fe587
18a5673
 
 
65fe587
18a5673
65fe587
 
 
 
 
 
ae12cbe
65fe587
ae12cbe
65fe587
18a5673
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import gradio as gr
import requests
import json
import time
from better_profanity import profanity  

url = "https://nexra.aryahcr.cc/api/image/complements"
headers = {
    "Content-Type": "application/json"
}

profanity.load_censor_words()

def is_nsfw(text):
    return profanity.contains_profanity(text)

def generate_image(prompt, model):
    if is_nsfw(prompt):
        return "Error: Prompt contains inappropriate content."

    data = {
        "prompt": prompt,
        "model": model,
    }
    try:
        response = requests.post(url, headers=headers, data=json.dumps(data))
        
        if response.status_code == 200:
            response_data = response.json()
            image_id = response_data.get("id")
            
            if not image_id:
                return "Error: No image ID returned in the response."

            while True:
                status_response = requests.get(f"{url}/{image_id}")
                
                if status_response.status_code == 200:
                    status_data = status_response.json()
                    status = status_data.get("status")
                    
                    if status == "completed":
                        images = status_data.get("images")
                        if images and isinstance(images, list):
                            image_url = images[0]
                            return image_url
                        else:
                            return "Error: No images found in the response."
                    elif status == "error":
                        return "Error: Image generation failed."
                    elif status == "not_found":
                        return "Error: Image ID not found."
                    elif status == "pending":
                        time.sleep(1)
                    else:
                        return f"Error: Unexpected status '{status}'."
                else:
                    return f"Error: Status check failed with code {status_response.status_code}."
        else:
            return f"Error: Initial request failed with code {response.status_code}."
    except json.JSONDecodeError:
        return "Error: Invalid JSON response."
    except Exception as e:
        return f"Exception occurred: {str(e)}"

iface = gr.Interface(
    fn=generate_image,
    inputs=[
        gr.Textbox(label="Enter prompt"),
        gr.Radio(["dalle2"], label="Select Model")
    ],
    outputs=gr.Image(type="filepath"),
    title="DALLE2 Generation",
    description="DALLE-2 Generation from Nextra API, NOTE: DALL-E 3 is not supported yet."
)
iface.launch()