Spaces:
Running
Running
File size: 9,078 Bytes
3c517aa fc1cea9 3c517aa 10266ab 704d4a1 82d7e57 3c517aa 704d4a1 dcc4dc2 3c517aa eb6ef16 95ef056 2bf2b98 704d4a1 3c517aa 704d4a1 3c517aa eb6ef16 3c517aa df4da64 fc1cea9 227f9f9 704d4a1 eb6ef16 227f9f9 |
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 |
import base64
import io
import os
import re
import requests
from urllib.parse import quote
from PIL import Image
from g4f.client import Client
from g4f.Provider import RetryProvider, PollinationsAI, Airforce, ReplicateHome, BlackboxCreateAgent
from g4f.Provider.hf_space.BlackForestLabsFlux1Schnell import BlackForestLabsFlux1Schnell
from g4f.Provider.hf_space.VoodoohopFlux1Schnell import VoodoohopFlux1Schnell
def extract_summary(text):
text = text.replace("#", "").strip().lower()
match = re.search(r"summary(.*?)highlights", text, re.DOTALL)
if match:
return match.group(1).strip()
return text
def fix_base64_padding(data):
missing_padding = len(data) % 4
if missing_padding:
data += "=" * (4 - missing_padding)
return data
def generate_image(title, category, summary):
print("Generating image...")
import time
start = time.time()
try:
try:
try:
negative="low quality, blurry, pixelated, bad anatomy, bad hands, three hands, three legs, bad arms, missing legs, missing arms, poorly drawn face, poorly rendered hands, bad face, fused face, cloned face, worst face, three crus, extra crus, fused crus, worst feet, three feet, fused feet, fused thigh, three thigh, extra thigh, worst thigh, missing fingers, extra fingers, ugly fingers, long fingers, bad composition, horn, extra eyes, huge eyes, 2girl, amputation, disconnected limbs, cartoon, cg, 3d, unreal, animate, cgi, render, artwork, illustration, 3d render, cinema 4d, artstation, octane render, mutated body parts, painting, oil painting, 2d, sketch, bad photography, bad photo, deviant art, aberrations, abstract, anime, black and white, collapsed, conjoined, creative, drawing, extra windows, harsh lighting, jpeg artifacts, low saturation, monochrome, multiple levels, overexposed, oversaturated, photoshop, rotten, surreal, twisted, UI, underexposed, unnatural, unreal engine, unrealistic, video game, deformed body features, NSFW, NUDE, vulgar, negative, unsuitable, inappropriate, offensive, revealing, sexual, explicit",
prompt = f"Generate accurate image representing the {category} concept: ```{title.strip()}: {summary.strip()}```"
client = Client()
img_data = client.images.generate(
provider=RetryProvider(
providers=[ReplicateHome, Airforce],
shuffle=True,
single_provider_retry=True,
max_retries=3,
),
model="sdxl",
prompt=prompt,
negative_prompt=negative,
response_format="b64_json",
width=1024,
height=576,
).data[0].b64_json
print(f"Image generated in {time.time() - start:.2f} seconds")
if img_data:
return f"data:image/png;base64,{img_data}"
return None
except Exception as e:
print(f"Error generating image: {e}")
negative="low quality, blurry, pixelated, bad anatomy, bad hands, three hands, three legs, bad arms, missing legs, missing arms, poorly drawn face, poorly rendered hands, bad face, fused face, cloned face, worst face, three crus, extra crus, fused crus, worst feet, three feet, fused feet, fused thigh, three thigh, extra thigh, worst thigh, missing fingers, extra fingers, ugly fingers, long fingers, bad composition, horn, extra eyes, huge eyes, 2girl, amputation, disconnected limbs, cartoon, cg, 3d, unreal, animate, cgi, render, artwork, illustration, 3d render, cinema 4d, artstation, octane render, mutated body parts, painting, oil painting, 2d, sketch, bad photography, bad photo, deviant art, aberrations, abstract, anime, black and white, collapsed, conjoined, creative, drawing, extra windows, harsh lighting, jpeg artifacts, low saturation, monochrome, multiple levels, overexposed, oversaturated, photoshop, rotten, surreal, twisted, UI, underexposed, unnatural, unreal engine, unrealistic, video game, deformed body features, NSFW, NUDE, vulgar, negative, unsuitable, inappropriate, offensive, revealing, sexual, explicit",
prompt = f"Generate accurate image representing the {category} concept: ```{title.strip()}: {summary.strip()}```"
client = Client()
img_data = client.images.generate(
provider=RetryProvider(
providers=[Airforce, PollinationsAI, BlackboxCreateAgent],
shuffle=True,
single_provider_retry=True,
max_retries=3,
),
model="flux",
prompt=prompt,
negative_prompt=negative,
response_format="b64_json",
width=1024,
height=576,
).data[0].b64_json
print(f"Image generated in {time.time() - start:.2f} seconds")
if img_data:
return f"data:image/png;base64,{img_data}"
return None
except Exception as e:
print(f"Error generating image: {e}")
negative="low quality, blurry, pixelated, bad anatomy, bad hands, three hands, three legs, bad arms, missing legs, missing arms, poorly drawn face, poorly rendered hands, bad face, fused face, cloned face, worst face, three crus, extra crus, fused crus, worst feet, three feet, fused feet, fused thigh, three thigh, extra thigh, worst thigh, missing fingers, extra fingers, ugly fingers, long fingers, bad composition, horn, extra eyes, huge eyes, 2girl, amputation, disconnected limbs, cartoon, cg, 3d, unreal, animate, cgi, render, artwork, illustration, 3d render, cinema 4d, artstation, octane render, mutated body parts, painting, oil painting, 2d, sketch, bad photography, bad photo, deviant art, aberrations, abstract, anime, black and white, collapsed, conjoined, creative, drawing, extra windows, harsh lighting, jpeg artifacts, low saturation, monochrome, multiple levels, overexposed, oversaturated, photoshop, rotten, surreal, twisted, UI, underexposed, unnatural, unreal engine, unrealistic, video game, deformed body features, NSFW, NUDE, vulgar, negative, unsuitable, inappropriate, offensive, revealing, sexual, explicit",
prompt = f"Generate accurate image representing the {category} concept: ```{title.strip()}: {summary.strip()}```"
client = Client()
img_data = client.images.generate(
provider=RetryProvider(
providers=[BlackForestLabsFlux1Schnell, VoodoohopFlux1Schnell],
shuffle=True,
single_provider_retry=True,
max_retries=3,
),
model="flux-schnell",
prompt=prompt,
negative_prompt=negative,
response_format="b64_json",
width=1024,
height=576,
).data[0].b64_json
print(f"Image generated in {time.time() - start:.2f} seconds")
if img_data:
return f"data:image/png;base64,{img_data}"
return None
except Exception as e:
print(f"Error generating image: {e}")
return None
def verify_image(image_data):
try:
image_stream = io.BytesIO(image_data)
img = Image.open(image_stream)
img.verify()
return True
except Exception as e:
print(f"Error verifying image: {e}")
return False
def fetch_image(title, category, summary):
title = r"{}".format(title)
category = r"{}".format(category)
summary = extract_summary(summary)
image_url = "https://i.ibb.co/TBJqggw/Image-Not-Found.jpg"
try:
data_uri = generate_image(title, category, summary)
if data_uri:
base64_image = fix_base64_padding(data_uri.split(",")[1])
if base64_image:
if verify_image(base64.b64decode(base64_image, validate=True)):
image_url = f"data:image/png;base64,{base64_image}"
else:
image_url = "https://i.ibb.co/TBJqggw/Image-Not-Found.jpg"
except Exception as e:
print(f"Error fetching image: {e}")
image_url = "https://i.ibb.co/TBJqggw/Image-Not-Found.jpg"
finally:
if os.path.exists("image.png"):
os.remove("image.png")
return image_url
if __name__ == "__main__":
title = "Exposition: Enumerative Geometry and Tree-Level Gromov-Witten Invariants"
category = "Mathematics"
summary = "The text discusses the Kontsevich-Manin formula for enumerating degree d rational curves via Gromov-Witten invariants. It details the calculation of these invariants using moduli spaces of stable maps and explores their implications in enumerative geometry."
image_url = fetch_image(title, category, summary)
print(image_url) |