Spaces:
Running
on
Zero
Running
on
Zero
| import runpod | |
| import auth | |
| import app_imagegen | |
| import json | |
| import uuid | |
| import boto3 # Ensure you have boto3 installed for Cloudflare R2 interaction | |
| from botocore.exceptions import NoCredentialsError | |
| from botocore.client import Config | |
| import os # Import os to access environment variables | |
| from datetime import datetime | |
| import re | |
| config = json.load(open("config.json")) | |
| model_manager = app_imagegen.ModelManager(config, max_loaded_models=2, lazy_load=True) | |
| def handler(job): | |
| job_input = job["input"] | |
| result = app_imagegen.image_gen_api_entry( | |
| job_input["prompt"], | |
| job_input.get("negative_prompt",""), | |
| job_input.get("styles",{}), | |
| job_input.get("options",{}), | |
| job_input.get("token",""), | |
| model_manager | |
| ) | |
| user_id = job_input.get("user_id","") | |
| domain = job_input.get("domain","") | |
| # Save result as WebP using a GUID as filename | |
| filename = f"{uuid.uuid4()}.webp" | |
| with open(filename, "wb") as f: | |
| f.write(result) # Assuming result is in bytes | |
| # Upload to Cloudflare R2 | |
| r2_client = boto3.client('s3', | |
| endpoint_url=f"https://{config['r2']['account_id']}.r2.cloudflarestorage.com", | |
| aws_access_key_id=os.getenv('AWS_ACCESS_KEY_ID'), # Read from environment variable | |
| aws_secret_access_key=os.getenv('AWS_SECRET_ACCESS_KEY'), # Read from environment variable | |
| config=Config(signature_version='s3v4'), | |
| region_name='auto' | |
| ) | |
| # Prepare metadata | |
| publish_time = datetime.now().isoformat() | |
| sanitized_prompt = re.sub(r'[^\x20-\x7E]', ' ', job_input["prompt"]) # Replace non-ASCII characters with space | |
| sanitized_prompt = sanitized_prompt[:512] # Limit length to 256 characters | |
| metadata = { | |
| 'domain': domain, | |
| 'model': job_input.get("styles",{}).get("vibe","") , | |
| 'prompt': ''.join([i if ord(i) < 128 else ' ' for i in sanitized_prompt]), | |
| 'author': user_id, | |
| 'publish_time': str(publish_time) | |
| } | |
| new_url_path = "" | |
| try: | |
| r2_key = f"paid/{user_id}/{filename}" | |
| r2_client.put_object( | |
| Bucket=config['r2']['bucket_name'], | |
| Key=r2_key, | |
| Body=open(filename, 'rb'), | |
| ContentType='image/webp', # Adjust this if the image type might vary | |
| Metadata=metadata | |
| ) | |
| new_url_path = f"/{r2_key}" | |
| except NoCredentialsError: | |
| print("Credentials not available") | |
| return {"image_url":new_url_path} | |
| runpod.serverless.start({"handler": handler}) |