Spaces:
No application file
No application file
File size: 11,131 Bytes
3669f09 758273a 339c417 758273a 339c417 3669f09 758273a 3669f09 339c417 758273a 3669f09 758273a 3669f09 758273a 3669f09 758273a 339c417 758273a 339c417 758273a 339c417 758273a 339c417 3669f09 339c417 758273a 339c417 3669f09 339c417 3669f09 339c417 3669f09 758273a 3669f09 339c417 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 |
import os
import re
from google import genai
from huggingface_hub import InferenceClient
from dotenv import load_dotenv, find_dotenv
from pydantic import BaseModel, Field, ConfigDict
from langchain_core.output_parsers import JsonOutputParser
import json
import time
import fal_client
from PIL import Image
from io import BytesIO
from IPython.display import display
import asyncio
_: bool = load_dotenv(find_dotenv())
client = genai.Client(
# vertexai=True, project='1089055075981', location='us-central1'
)
aspect_ratios = {
"1:1": (1200, 1200), # Standard LinkedIn square post
"16:9": (1200, 627), # LinkedIn horizontal post
}
hf_client = InferenceClient(
provider="replicate",
api_key=os.environ["HF_TOKEN"],
)
post_schema_old = """{
"meta": {
"platform": "LinkedIn | Instagram | Twitter | TikTok",
"aspectRatio": "1:1 | 16:9 | 9:16 | 4:5",
"style": "Modern | Minimal | Bold | Corporate | Playful"
},
"brand": {
"company": "Company Name",
"logo": "Include | Exclude",
"colors": ["#HEX1", "#HEX2", "#HEX3"]
},
"content": {
"headline": "Main text (max 8 words)",
"subtext": "Optional supporting line (max 15 words)",
"tone": "Professional | Inspirational | Energetic | Friendly"
},
"visuals": {
"primarySubject": "Headline with abstract icons | Infographic shapes | Product mockup",
"elements": ["Icons", "Illustrations", "Charts", "Abstract shapes"],
"composition": "Centered | Rule of Thirds | Balanced layout"
},
"design": {
"typography": "Bold, clean, sans-serif | Minimal serif",
"contrast": "High | Medium",
"background": "Solid color | Gradient | Abstract"
},
"finishing": {
"quality": "Ultra-sharp, high-resolution",
"effects": "Subtle shadows | Soft gradients | None"
}
}
"""
normal_schema = """
{{
"meta": {{
"styleName": "...", // A unique, descriptive name for this specific image style or preset (e.g., "Ethereal Forest Magic", "Cyberpunk Noir Alley").
"aspectRatio": "...", // The proportional relationship between the width and height of the image (e.g., "16:9", "1:1", "4:5", "21:9").
"promptPrefix": "..." // Optional text to prepend to a generated prompt, like a file name, a version number, or a specific trigger word.
}},
"camera": {{
"model": "...", // Describes the camera, lens, or artistic medium used (e.g., "DSLR", "iPhone 15 Pro", "8x10 view camera", "Watercolor on cold-press paper", "3D render in Blender").
"focalLength": "...", // The lens's focal length, which affects the field of view and perspective distortion (e.g., "16mm wide-angle", "85mm portrait", "200mm telephoto", "Isometric perspective").
"angle": "...", // The camera's angle relative to the main subject or scene (e.g., "eye-level", "high-angle", "dutch angle", "drone shot", "worm's-eye view").
"type": "..." // The genre or type of photography or art style (e.g., "macro photography", "landscape", "fantasy illustration", "architectural rendering", "abstract art").
}},
"subject": {{
"primary": "...", // The main focal point or subject of the image (e.g., "a majestic mountain range", "a lone wolf", "an ancient wizard", "a futuristic cityscape", "an abstract shape").
"emotion": "...", // The dominant emotion or mood conveyed by the subject or the overall scene (e.g., "serene and peaceful", "joyful", "melancholy", "menacing", "awe-inspiring").
"pose": "...", // The posture, action, or arrangement of the subject(s) (e.g., "running towards the camera", "sitting in quiet contemplation", "a winding river", "a chaotic explosion").
"gaze": "..." // The direction of the subject's gaze or the directional focus of the composition (e.g., "looking off-camera", "breaking the fourth wall", "facing away from the viewer", "pointing towards the horizon").
}},
"character": {{
"appearance": "...", // Detailed physical description of a character or key object (e.g., "weathered face with a long white beard", "sleek, chrome-plated robot", "moss-covered ancient tree").
"wardrobe": "...", // Clothing, armor, or any form of covering on the subject (e.g., "ornate golden armor", "tattered rags", "a vibrant kimono", "a car's glossy paint job").
"accessories": "..." // Additional items worn by or associated with the subject (e.g., "a magical amulet", "cybernetic implants", "a pair of glasses", "a sword and shield").
}},
"composition": {{
"theory": "...", // The compositional rules or theories applied (e.g., "rule of thirds", "golden ratio", "leading lines", "symmetrical balance", "negative space").
"visualHierarchy": "..." // Describes the order in which the viewer's eye is drawn to different elements in the scene, from most to least prominent.
}},
"setting": {{
"environment": "...", // The general environment or location of the scene (e.g., "a mystical forest", "a bustling cyberpunk city", "a tranquil beach at sunset", "a minimalist white room", "the surface of Mars").
"architecture": "...", // Describes any buildings, ruins, or significant natural structures (e.g., "gothic cathedrals", "brutalist architecture", "alien monoliths", "towering rock formations").
"furniture": "..." // Key objects, props, or furniture within the setting that add context or detail (e.g., "a single throne", "scattered futuristic debris", "a rustic wooden fence").
}},
"lighting": {{
"source": "...", // The primary source of light in the scene (e.g., "dramatic moonlight", "soft window light", "flickering candlelight", "neon signs", "magical glow").
"direction": "...", // The direction from which the light originates (e.g., "backlighting", "rim lighting", "top-down light", "light from below").
"quality": "..." // The quality and characteristics of the light and shadows (e.g., "soft and diffused", "hard and high-contrast", "dappled", "volumetric light rays", "caustic reflections").
}},
"style": {{
"artDirection": "...", // The overarching artistic style, movement, or influence (e.g., "impressionism", "art deco", "cyberpunk", "vaporwave", "ghibli-inspired", "cinematic").
"mood": "..." // The overall mood, feeling, or atmosphere of the image (e.g., "ethereal and dreamy", "dystopian and gritty", "whimsical and cheerful", "epic and dramatic").
}},
"rendering": {{
"engine": "...", // The rendering engine, technique, or medium used to create the final image (e.g., "Octane Render", "oil painting", "cross-hatching", "pixel art", "Unreal Engine 5").
"fidelitySpec": "...", // Specific details about the image's texture and fidelity (e.g., "heavy film grain", "sharp digital focus", "visible brushstrokes", "chromatic aberration", "lens flare").
"postProcessing": "..." // Any post-processing or finishing effects applied (e.g., "color grading with a teal and orange look", "vignette", "bloom and glare", "a vintage photo filter").
}},
"colorPalette": {{
"primaryColors": [ // The most dominant colors that define the overall color scheme of the image.
{{ "name": "...", "hex": "...", "percentage": "..." }},
{{ "name": "...", "hex": "...", "percentage": "..." }}
],
"accentColors": [ // Complementary or contrasting colors used for emphasis, detail, or highlights.
{{ "name": "...", "hex": "...", "percentage": "..." }},
{{ "name": "...", "hex": "...", "percentage": "..." }}
]
}}
}}
"""
# async def generate(
# design_brief: str,
# output_dir: str = "images",
# aspectRatio: str = "1:1",
# num_images: int = 1,
# ):
# """Orchestrates the process of generating JSON and then generating images."""
# os.makedirs(output_dir, exist_ok=True)
# designSpec = generate_designSpec_from_brief(design_brief,f"aspect_ratio:{aspectRatio}")
# await generate_images(
# file_name='image-'+time.strftime("%Y%m%d-%H%M%S"),
# idea=design_brief,
# prompt=,
# aspectRatio="1:1",
# output_dir=output_dir,
# num_images=num_images,
# )
if __name__ == "__main__":
ideas = [
# "A energy drink with water drops on it, ultra realistic, for a commercial.",
# "Graffiti with the text 'JSON Schema' on a brick wall.",
# "A LEGO knight fighting a huge, fire-breathing dragon on a castle wall.",
# "A stylish woman sipping coffee at a Parisian cafe, with the Eiffel Tower in the background. Shot in golden hour.",
# "An emotional, close-up portrait of an old fisherman.",
# "A vast, alien landscape on a distant planet with two suns, strange, towering rock formations, and bioluminescent plants. Epic sci-fi concept art.",
# "A whimsical illustration of a friendly fox reading a book in a cozy, cluttered library. The text 'The Midnight Reader' should be subtly integrated on a book spine.",
# "A magical man with sparkling pink hair and large from an anime.",
# "A cartoon robot waving happily, with a simple, bold outline and bright, flat colors. ",
# "A full-body character sheet of a realistic pirate captain, showing front, back, and side views.",
]
asyncio.run(generate(idea="""
Create a media for posting on linkedin plateform, make it modren and professional.
companydetails:
Design Atom is a subscription-based design service tailored for AI and tech startups, offering comprehensive product design, branding, and web development solutions. With a fixed monthly rate, dedicated designers, and fast 4-hour average turnaround times, they have completed over 200 projects, helped clients raise $45M+, and reached 100M+ users with their designs. Trusted by 45+ global companies, including Y Combinator-backed startups, Design Atom delivers startup-proven results, streamlining UX, boosting retention, and enhancing conversions. Their free design trial eliminates bottlenecks, supporting startups in building investor-ready, user-friendly products.
""",aspectRatio="1:1"))
# response = client.models.generate_images(
# model="imagen-4.0-generate-preview-06-06",
# prompt=prompt,
# config=genai.types.GenerateImagesConfig(
# number_of_images=num_images,
# aspect_ratio=aspectRatio,
# ),
# )
# width, height = aspect_ratios[aspectRatio]
# print(width, height)
# response = hf_client.text_to_image(
# prompt=prompt,
# negative_prompt="social media logos, LinkedIn icon, Instagram logo, Twitter logo, browser bars, fake UI, buttons, links, gibberish text, distorted fonts",
# model="Qwen/Qwen-Image",
# width=width,
# height=height,
# guidance_scale=10.0,
# )
# print(response)
# response = client.models.generate_content(
# model="gemini-2.5-flash-image-preview",
# contents=prompt,
# ) |