mdztxi2 / myapp.py
Geek7's picture
Update myapp.py
26c97ce verified
raw
history blame
2.58 kB
from flask import Flask, request, jsonify, send_file, render_template
from flask_cors import CORS
import os
from huggingface_hub import InferenceClient
from io import BytesIO
from PIL import Image
# Initialize the Flask app
myapp = Flask(__name__)
CORS(myapp) # Enable CORS for all routes
# Initialize the InferenceClient with your Hugging Face token
HF_TOKEN = os.environ.get("HF_TOKEN") # Ensure to set your Hugging Face token in the environment
client = InferenceClient(token=HF_TOKEN)
# Function to generate an image from a text prompt
def generate_image(prompt, seed=1, model="prompthero/openjourney-v4"):
try:
# Generate the image using Hugging Face's inference API
result_image = client.text_to_image(prompt=prompt, seed=seed, model=model)
return result_image
except Exception as e:
print(f"Error generating image: {str(e)}")
return None
# Flask route for the API endpoint to generate an image based on a text prompt
@myapp.route('/generate_image', methods=['POST'])
def generate_api():
data = request.get_json()
# Extract required fields from the request
prompt = data.get('prompt', '')
seed = data.get('seed', 1)
model_name = data.get('model', 'prompthero/openjourney-v4') # Default model
if not prompt:
return jsonify({"error": "Prompt is required"}), 400
try:
# Call the generate_image function with the custom model name
image = generate_image(prompt, seed, model_name)
if image:
# Save the image to a BytesIO object
img_byte_arr = BytesIO()
image.save(img_byte_arr, format='PNG') # Convert the image to PNG
img_byte_arr.seek(0) # Move to the start of the byte stream
# Send the generated image as an attachment
return send_file(
img_byte_arr,
mimetype='image/png',
as_attachment=True, # Send the file as an attachment
download_name='generated_image.png' # The file name for download
)
else:
return jsonify({"error": "Failed to generate image"}), 500
except Exception as e:
print(f"Error in generate_api: {str(e)}") # Log the error
return jsonify({"error": str(e)}), 500
# Flask route for the UI
@myapp.route('/')
def index():
return render_template('index.html') # Serve the HTML page
# Add this block to make sure your app runs when called
if __name__ == "__main__":
myapp.run(host='0.0.0.0', port=7860) # Run directly if needed for testing