Pamudu13's picture
Update app.py
d44ec1e verified
raw
history blame
6.67 kB
from flask import Flask, request, jsonify
import aiohttp
import asyncio
import io
import cloudinary
import cloudinary.uploader
import cloudinary.api
import random
import os
app = Flask(__name__)
# Configure Cloudinary
cloudinary.config(
cloud_name='dpnixluze',
api_key='417356221754679',
api_secret='MjsdHI-8vvYg-yF8p5__aK_8OYs'
)
API_URL = "https://api-inference.huggingface.co/models/stabilityai/stable-diffusion-xl-base-1.0"
HEADERS = {"Authorization": f"Bearer {os.getenv('HUGGING_FACE_API_KEY')}"}
async def query(session, payload):
try:
async with session.post(API_URL, headers=HEADERS, json=payload) as response:
response.raise_for_status()
return await response.read()
except aiohttp.ClientError as e:
print(f"Error during API request: {e}")
return None
async def retry_query(payload, retries=5, delay=30):
async with aiohttp.ClientSession() as session:
for i in range(retries):
image_bytes = await query(session, payload)
if image_bytes:
return image_bytes
print(f"Retrying ({i + 1}/{retries})...")
await asyncio.sleep(delay)
return None
@app.route('/', methods=['POST'])
async def generate_image():
try:
data = request.json # This is synchronous
positive_prompt = data.get('positive_prompt', 'emma stone')
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')
style = data.get('style','');
if style == "cinematic":
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"
elif style == "realistic":
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"
elif style == "sci-fi":
style = "sci-fi style, futuristic technology, cyberpunk cityscape, neon lights, advanced robotics, alien landscapes, holographic interfaces, space exploration, dystopian themes, high-tech machinery"
elif style == "disney":
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"
elif style == "ghibli":
style = "ghibli studio art style, hand-drawn, whimsical, lush environments, soft color palette, dreamlike atmosphere, fantasy elements, vibrant yet gentle, emotional storytelling, childlike wonder, iconic character designs"
elif style == "dragon_ball_z":
style = "dragon ball z style, exaggerated muscles, sharp angular lines, intense action scenes, glowing energy auras, dynamic fight sequences, spiky hair, vibrant colors, iconic character designs, powerful transformations"
elif style == "naruto":
style = "naruto style, shinobi characters, village environments, hand signs for jutsu, ninja weapons, action-packed sequences, anime-style shading, emotional backstories, vibrant orange hues, iconic character designs, headbands"
elif style == "bleach":
style = "bleach style, samurai-inspired outfits, katana weapons, spiritual battles, dark and mysterious tones, hollow masks, high-speed action, supernatural powers, sleek and sharp character designs, dynamic fight scenes"
elif style == "one_piece":
style = "one piece style, pirate adventure, exaggerated expressions, unique character designs, bright and colorful, dynamic and fluid action scenes, iconic pirate flags, adventure and treasure hunt themes, larger-than-life abilities"
elif style == "anime":
style = "anime style, vibrant colors, exaggerated facial expressions, dynamic action scenes, unique character designs, emotional storytelling, fantasy elements, diverse genres from romance to action"
else:
style = "fantasy style, magical landscapes, mythical creatures, enchanted forests, fairy tale elements, mystical realms, legendary beings, glowing effects, ethereal atmosphere, magical artifacts, ancient ruins"
seed = random.randint(0, 10000)
payload = {
"inputs": f"{positive_prompt}, {style}",
"negative_prompt": negative_prompt,
"options": {
"resolution": "4096×2160",
"quality": "high",
"seed": seed
}
}
image_urls = []
for image_count in range(1): # Generate 3 images
# Retry mechanism with error handling
for attempt in range(3): # Try up to 3 times per image
image_bytes = await retry_query(payload)
if image_bytes:
try:
# Upload image to Cloudinary
upload_response = cloudinary.uploader.upload(io.BytesIO(image_bytes), resource_type="image")
cloudinary_url = upload_response.get('secure_url')
if cloudinary_url:
image_urls.append(cloudinary_url)
break # Break out of retry loop for this image
else:
raise Exception('Failed to upload image to Cloudinary.')
except Exception as upload_exception:
print(f"Upload attempt {attempt + 1} failed: {upload_exception}")
else:
print(f"Image generation attempt {attempt + 1} failed")
if image_urls:
return jsonify({'image_urls': image_urls})
else:
return jsonify({'error': 'Failed to generate and upload images after multiple attempts.'}), 500
except Exception as e:
print(f"Exception occurred: {e}")
return jsonify({'error': 'An unexpected error occurred.'}), 500
if __name__ == '__main__':
app.run(debug=True)
# app.run(host="0.0.0.0", port= 7860, debug= True) I want do generate 3 images at once not same imager three times