Pamudu13 commited on
Commit
c06a403
·
verified ·
1 Parent(s): 35426c6

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +94 -130
app.py CHANGED
@@ -1,142 +1,106 @@
1
- import gradio as gr
2
- import numpy as np
 
 
 
 
 
3
  import random
4
- #import spaces #[uncomment to use ZeroGPU]
5
- from diffusers import DiffusionPipeline
6
- import torch
7
 
8
- device = "cuda" if torch.cuda.is_available() else "cpu"
9
- model_repo_id = "stabilityai/sdxl-turbo" #Replace to the model you would like to use
10
 
11
- if torch.cuda.is_available():
12
- torch_dtype = torch.float16
13
- else:
14
- torch_dtype = torch.float32
 
 
15
 
16
- pipe = DiffusionPipeline.from_pretrained(model_repo_id, torch_dtype=torch_dtype)
17
- pipe = pipe.to(device)
18
 
19
- MAX_SEED = np.iinfo(np.int32).max
20
- MAX_IMAGE_SIZE = 1024
 
 
 
 
 
 
21
 
22
- #@spaces.GPU #[uncomment to use ZeroGPU]
23
- def infer(prompt, negative_prompt, seed, randomize_seed, width, height, guidance_scale, num_inference_steps, progress=gr.Progress(track_tqdm=True)):
 
 
 
 
 
 
 
24
 
25
- if randomize_seed:
26
- seed = random.randint(0, MAX_SEED)
27
-
28
- generator = torch.Generator().manual_seed(seed)
29
-
30
- image = pipe(
31
- prompt = prompt,
32
- negative_prompt = negative_prompt,
33
- guidance_scale = guidance_scale,
34
- num_inference_steps = num_inference_steps,
35
- width = width,
36
- height = height,
37
- generator = generator
38
- ).images[0]
39
-
40
- return image, seed
41
 
42
- examples = [
43
- "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k",
44
- "An astronaut riding a green horse",
45
- "A delicious ceviche cheesecake slice",
46
- ]
 
 
 
 
 
 
 
47
 
48
- css="""
49
- #col-container {
50
- margin: 0 auto;
51
- max-width: 640px;
52
- }
53
- """
 
 
 
54
 
55
- with gr.Blocks(css=css) as demo:
56
-
57
- with gr.Column(elem_id="col-container"):
58
- gr.Markdown(f"""
59
- # Text-to-Image Gradio Template
60
- """)
61
-
62
- with gr.Row():
63
-
64
- prompt = gr.Text(
65
- label="Prompt",
66
- show_label=False,
67
- max_lines=1,
68
- placeholder="Enter your prompt",
69
- container=False,
70
- )
71
-
72
- run_button = gr.Button("Run", scale=0)
73
-
74
- result = gr.Image(label="Result", show_label=False)
75
 
76
- with gr.Accordion("Advanced Settings", open=False):
77
-
78
- negative_prompt = gr.Text(
79
- label="Negative prompt",
80
- max_lines=1,
81
- placeholder="Enter a negative prompt",
82
- visible=False,
83
- )
84
-
85
- seed = gr.Slider(
86
- label="Seed",
87
- minimum=0,
88
- maximum=MAX_SEED,
89
- step=1,
90
- value=0,
91
- )
92
-
93
- randomize_seed = gr.Checkbox(label="Randomize seed", value=True)
94
-
95
- with gr.Row():
96
-
97
- width = gr.Slider(
98
- label="Width",
99
- minimum=256,
100
- maximum=MAX_IMAGE_SIZE,
101
- step=32,
102
- value=1024, #Replace with defaults that work for your model
103
- )
104
-
105
- height = gr.Slider(
106
- label="Height",
107
- minimum=256,
108
- maximum=MAX_IMAGE_SIZE,
109
- step=32,
110
- value=1024, #Replace with defaults that work for your model
111
- )
112
-
113
- with gr.Row():
114
-
115
- guidance_scale = gr.Slider(
116
- label="Guidance scale",
117
- minimum=0.0,
118
- maximum=10.0,
119
- step=0.1,
120
- value=0.0, #Replace with defaults that work for your model
121
- )
122
-
123
- num_inference_steps = gr.Slider(
124
- label="Number of inference steps",
125
- minimum=1,
126
- maximum=50,
127
- step=1,
128
- value=2, #Replace with defaults that work for your model
129
- )
130
-
131
- gr.Examples(
132
- examples = examples,
133
- inputs = [prompt]
134
- )
135
- gr.on(
136
- triggers=[run_button.click, prompt.submit],
137
- fn = infer,
138
- inputs = [prompt, negative_prompt, seed, randomize_seed, width, height, guidance_scale, num_inference_steps],
139
- outputs = [result, seed]
140
- )
141
 
142
- demo.queue().launch()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from flask import Flask, request, jsonify
2
+ import aiohttp
3
+ import asyncio
4
+ import io
5
+ import cloudinary
6
+ import cloudinary.uploader
7
+ import cloudinary.api
8
  import random
9
+ import os
 
 
10
 
11
+ app = Flask(__name__)
 
12
 
13
+ # Configure Cloudinary
14
+ cloudinary.config(
15
+ cloud_name='dpnixluze',
16
+ api_key='417356221754679',
17
+ api_secret='MjsdHI-8vvYg-yF8p5__aK_8OYs'
18
+ )
19
 
20
+ API_URL = "https://api-inference.huggingface.co/models/stabilityai/stable-diffusion-xl-base-1.0"
21
+ HEADERS = {"Authorization": "Bearer "}
22
 
23
+ async def query(session, payload):
24
+ try:
25
+ async with session.post(API_URL, headers=HEADERS, json=payload) as response:
26
+ response.raise_for_status()
27
+ return await response.read()
28
+ except aiohttp.ClientError as e:
29
+ print(f"Error during API request: {e}")
30
+ return None
31
 
32
+ async def retry_query(payload, retries=5, delay=30):
33
+ async with aiohttp.ClientSession() as session:
34
+ for i in range(retries):
35
+ image_bytes = await query(session, payload)
36
+ if image_bytes:
37
+ return image_bytes
38
+ print(f"Retrying ({i + 1}/{retries})...")
39
+ await asyncio.sleep(delay)
40
+ return None
41
 
42
+ @app.route('/generate-image', methods=['POST'])
43
+ async def generate_image():
44
+ try:
45
+ data = request.json # This is synchronous
46
+ positive_prompt = data.get('positive_prompt', 'emma stone')
47
+ negative_prompt = data.get('negative_prompt', '[deformed | disfigured] , poorly drawn, [bad : wrong] anatomy, [extra | missing | floating | disconnected] limb, (mutated hands and fingers) , blurry,clothes, bad lighting, low-quality, deformed, text, poorly drawn, holding camera, bad art, bad angle, boring, low-resolution, worst quality, bad composition, disfigured')
48
+ style = data.get('style','');
49
+
 
 
 
 
 
 
 
 
50
 
51
+ if style == "cinematic":
52
+ style = "cinematic shot, dynamic lighting, 75mm, Technicolor, Panavision, cinemascope, sharp focus, fine details, 8k, HDR, realism, realistic, key visual, film still, superb cinematic color grading, depth of field"
53
+ elif style == "realistic":
54
+ style = "realistic style, natural lighting, true-to-life details, high resolution, sharp focus, fine textures, authentic colors, accurate proportions, high dynamic range, clear and photorealistic"
55
+ elif style == "sci-fi":
56
+ style = "sci-fi style, futuristic technology, cyberpunk cityscape, neon lights, advanced robotics, alien landscapes, holographic interfaces, space exploration, dystopian themes, high-tech machinery"
57
+ elif style == "disney":
58
+ style = "3d, Disney character style, animated, cartoonish, whimsical, colorful, playful, charming, magical, fantastical, cute, endearing, family-friendly, storybook quality, iconic, expressive, vibrant colors, smooth lines, simple shapes, happy and adventurous"
59
+ else:
60
+ style = "fantasy style, magical landscapes, mythical creatures, enchanted forests, fairy tale elements, mystical realms, legendary beings, glowing effects, ethereal atmosphere, magical artifacts, ancient ruins"
61
+
62
+ seed = random.randint(0, 10000)
63
 
64
+ payload = {
65
+ "inputs": f"{positive_prompt}, {style}",
66
+ "negative_prompt": negative_prompt,
67
+ "options": {
68
+ "resolution": "4096×2160",
69
+ "quality": "high",
70
+ "seed": seed
71
+ }
72
+ }
73
 
74
+ image_urls = []
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75
 
76
+ for image_count in range(1): # Generate 3 images
77
+ # Retry mechanism with error handling
78
+ for attempt in range(3): # Try up to 3 times per image
79
+ image_bytes = await retry_query(payload)
80
+ if image_bytes:
81
+ try:
82
+ # Upload image to Cloudinary
83
+ upload_response = cloudinary.uploader.upload(io.BytesIO(image_bytes), resource_type="image")
84
+ cloudinary_url = upload_response.get('secure_url')
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
85
 
86
+ if cloudinary_url:
87
+ image_urls.append(cloudinary_url)
88
+ break # Break out of retry loop for this image
89
+ else:
90
+ raise Exception('Failed to upload image to Cloudinary.')
91
+ except Exception as upload_exception:
92
+ print(f"Upload attempt {attempt + 1} failed: {upload_exception}")
93
+ else:
94
+ print(f"Image generation attempt {attempt + 1} failed")
95
+
96
+ if image_urls:
97
+ return jsonify({'image_urls': image_urls})
98
+ else:
99
+ return jsonify({'error': 'Failed to generate and upload images after multiple attempts.'}), 500
100
+
101
+ except Exception as e:
102
+ print(f"Exception occurred: {e}")
103
+ return jsonify({'error': 'An unexpected error occurred.'}), 500
104
+
105
+ if __name__ == '__main__':
106
+ app.run(debug=True)