File size: 2,594 Bytes
18a5673
 
 
65fe587
ecd93f7
18a5673
 
 
 
 
 
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
import gradio as gr
import requests
import json
import time
from profanity_check import predict  # For NSFW detection

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

def is_nsfw(text):
    return predict([text])[0] == 1  

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()