Spaces:
Sleeping
Sleeping
| 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}") |