Spaces:
Sleeping
Sleeping
import time | |
import utilities as u | |
import card_generator as card | |
from PIL import Image | |
import fal_client | |
from pathlib import Path | |
import tempfile | |
import os | |
import base64 | |
import io | |
import logging | |
import requests | |
import json | |
# Set up logging | |
logging.basicConfig(level=logging.INFO) | |
logger = logging.getLogger(__name__) | |
start_time = time.time() | |
temp_image_path = "./image_temp/" | |
def preview_and_generate_image(num_images, sd_prompt, user_input_template): | |
print(f"num_images: {num_images}") | |
print(f"sd_prompt: {sd_prompt}") | |
print(f"user_input_template: {user_input_template}") | |
num_images = int(4) | |
sd_prompt = f"magnum opus, blank card, no text, blank textbox at top for title, mid for details and bottom for description, detailed high quality animal properties borders, {sd_prompt}" | |
try: | |
# Save the image to a temporary file | |
with tempfile.NamedTemporaryFile(delete=False, suffix=".png") as temp_file: | |
user_input_template[0].save(temp_file.name, format="PNG") | |
temp_path = temp_file.name | |
logger.info(f"Image saved to temporary file: {temp_path}") | |
# Upload the file using fal_client | |
url = fal_client.upload_file(temp_path) | |
logger.info(f"Image uploaded. URL: {url}") | |
# Remove the temporary file | |
os.unlink(temp_path) | |
request_handle = fal_client.submit( | |
"fal-ai/flux-lora/image-to-image", | |
arguments={ | |
"num_inference_steps": 35, | |
"prompt": sd_prompt, | |
"num_images": num_images, | |
"image_url": url, | |
"strength": 0.85 | |
} | |
) | |
logger.info(f"Type of request_handle: {type(request_handle)}") | |
logger.info(f"Content of request_handle: {request_handle}") | |
# Get the result from the SyncRequestHandle | |
result = request_handle.get() | |
logger.info(f"Type of result: {type(result)}") | |
logger.info(f"Content of result: {json.dumps(result, indent=2)}") | |
# Extract the image URLs from the result | |
image_urls = [img['url'] for img in result.get('images', [])] | |
logger.info(f"Extracted image URLs: {image_urls}") | |
if not image_urls: | |
logger.warning("No images were generated.") | |
return [] | |
# Download and process the images | |
images = [] | |
for i, url in enumerate(image_urls): | |
try: | |
response = requests.get(url) | |
response.raise_for_status() # Raises an HTTPError for bad responses | |
img = Image.open(io.BytesIO(response.content)) | |
images.append((img, f"Generated Image {i+1}")) # Add a tuple with image and caption | |
logger.info(f"Successfully downloaded and processed image {i+1}") | |
except Exception as e: | |
logger.error(f"Error processing image {i+1} from URL {url}: {str(e)}") | |
if not images: | |
logger.warning("No images could be downloaded and processed.") | |
return [] | |
logger.info(f"Returning {len(images)} processed images") | |
return images | |
except Exception as e: | |
logger.error(f"Error during API call or processing: {str(e)}") | |
logger.exception("Full traceback:") | |
return [] | |