Pamudu13 commited on
Commit
e095c23
·
verified ·
1 Parent(s): f360f9e

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +107 -0
app.py ADDED
@@ -0,0 +1,107 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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": f"Bearer {os.getenv('HUGGING_FACE_API_KEY')}"}
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)
107
+ app.run(host="0.0.0.0", port= 7860, debug= True)