matinsn2000's picture
Utilized two models and faliover for retreieving image meta data
4d4fccb
raw
history blame
2.6 kB
import os
from datetime import datetime
from pathlib import Path
from huggingface_hub import InferenceClient
from dotenv import load_dotenv
load_dotenv()
class TextToImageGenerator:
"""Class for generating images from text prompts using HuggingFace models"""
def __init__(self, model_id: str = "black-forest-labs/FLUX.1-dev", provider: str = "nebius"):
"""
Initialize the text-to-image generator.
Args:
model_id: HuggingFace model ID (default: FLUX.1-dev for high quality)
provider: API provider (default: nebius)
"""
api_key = os.getenv("HF_TOKEN_1")
if not api_key:
raise ValueError("HF_TOKEN_1 not found in environment variables")
self.client = InferenceClient(
provider=provider,
api_key=api_key,
)
self.model_id = model_id
self.uploads_dir = Path(__file__).parent.parent.parent / "uploads"
self.uploads_dir.mkdir(exist_ok=True)
self.app_domain = os.getenv("APP_DOMAIN", "http://127.0.0.1:8000/")
def generate(self, prompt: str) -> str:
"""
Generate an image from a text prompt and save it to the uploads folder.
Args:
prompt: Text description of the image to generate
Returns:
URL of the generated image in format: {APP_DOMAIN}uploads/{filename}
"""
if not prompt or not prompt.strip():
raise ValueError("Prompt cannot be empty")
try:
# Generate image using HuggingFace inference
image = self.client.text_to_image(
prompt,
model=self.model_id,
)
# Create filename with timestamp
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S_%f")[:-3]
filename = f"generated_{timestamp}.png"
filepath = self.uploads_dir / filename
# Save image
image.save(filepath)
# Return URL in the required format
image_url = f"{self.app_domain}uploads/{filename}"
return image_url
except Exception as e:
raise RuntimeError(f"Failed to generate image: {str(e)}") from e
# Test with sample prompt
if __name__ == "__main__":
generator = TextToImageGenerator()
# Test with a sample prompt
prompt = "A beautiful sunset over mountains with birds flying"
url = generator.generate(prompt)
print(f"Generated image URL: {url}")