File size: 10,389 Bytes
d65b1bc 4019cb3 d65b1bc df79572 4939131 df79572 9a21a31 4939131 9a21a31 4939131 9a21a31 4019cb3 345a783 4939131 c039b2d 480e6d0 9d936f6 6d59db4 4939131 480e6d0 6d59db4 4939131 480e6d0 4939131 480e6d0 4939131 4019cb3 375ad6a 6d59db4 9a21a31 d65b1bc 8f4771f 7abb821 89a5dbb 7abb821 d65b1bc 4019cb3 0f248e4 89a5dbb 0f248e4 d65b1bc f5322dd d65b1bc 8544cb2 9a21a31 8544cb2 d65b1bc 8544cb2 |
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 |
import aiohttp, asyncio, pprint
from collections import deque
import json
class AsyncImageGenerator:
def __init__(self, session):
self.session = session
self.base = "https://auto-svg.vercel.app/"
async def generate_image(self, payload, max_retries=50):
retries = 0
while retries < max_retries:
try:
url = f"{self.base}/predictions"
data = {
# "input": {
# "prompt": payload
# + """
# """,
# # "aspect_ratio": "2:3",
# "negative_prompt": "text, watermark, blurry, haze, low contrast, low quality, underexposed, ugly, deformed, boring, bad quality, cartoon, ((disfigured)), ((bad art)), ((deformed)), ((poorly drawn)), ((extra limbs)), ((close up)), ((b&w)), weird colors, blurry, ugly, tiling, poorly drawn hands, poorly drawn feet, poorly drawn face, out of frame, extra limbs, disfigured, body out of frame, blurry, bad anatomy, blurred, watermark, grainy, signature, cut off, draft, low detail, low quality, double face, 2 faces, cropped, ugly, low-res, tiling, grainy, cropped, ostentatious, ugly, oversaturated, grain, low resolution, disfigured, blurry, bad anatomy, disfigured, poorly drawn face, mutant, mutated, extra limb, ugly, poorly drawn hands, missing limbs, blurred, floating limbs, disjointed limbs, deformed hands, blurred, out of focus, long neck, long body, ugly, disgusting, childish, cut off cropped, distorted, imperfect, surreal, bad hands, text, error, extra digit, fewer digits, cropped , worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry, artist name, Lots of hands, extra limbs, extra fingers, conjoined fingers, deformed fingers, old, ugly eyes, imperfect eyes, skewed eyes , unnatural face, stiff face, stiff body, unbalanced body, unnatural body, lacking body, details are not clear, cluttered, details are sticky, details are low, distorted details, ugly hands, imperfect hands, (mutated hands and fingers:1.5), (long body :1.3), (mutation, poorly drawn :1.2) bad hands, fused ha nd, missing hand, disappearing arms, hands, disappearing thigh, disappearing calf, disappearing legs, ui, missing fingers",
# "steps": 28,
# },
# "input": {
# "width": 1024,
# "height": 1536,
# "prompt": payload,
# "scheduler": "DPMSolver++",
# "num_outputs": 1,
# "guidance_scale": 3,
# "negative_prompt": "doll opened mouth toy, text, sculpture pixar, cartoon, anime, low quality, plastic, 2 heads, 2 faces, poorly drawn, ugly, poorly drawn face, extra arms, extra legs, ugly, bad anatomy, bad fingers, ugly, deformed, noisy, blurry, distorted, grainy, nudity, nude",
# # "negative_prompt": "text, watermark, blurry, haze, low contrast, low quality, underexposed, ugly, deformed, boring, bad quality, cartoon, ((disfigured)), ((bad art)), ((deformed)), ((poorly drawn)), ((extra limbs)), ((close up)), ((b&w)), weird colors, blurry, ugly, tiling, poorly drawn hands, poorly drawn feet, poorly drawn face, out of frame, extra limbs, disfigured, body out of frame, blurry, bad anatomy, blurred, watermark, grainy, signature, cut off, draft, low detail, low quality, double face, 2 faces, cropped, ugly, low-res, tiling, grainy, cropped, ostentatious, ugly, oversaturated, grain, low resolution, disfigured, blurry, bad anatomy, disfigured, poorly drawn face, mutant, mutated, extra limb, ugly, poorly drawn hands, missing limbs, blurred, floating limbs, disjointed limbs, deformed hands, blurred, out of focus, long neck, long body, ugly, disgusting, childish, cut off cropped, distorted, imperfect, surreal, bad hands, text, error, extra digit, fewer digits, cropped , worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry, artist name, Lots of hands, extra limbs, extra fingers, conjoined fingers, deformed fingers, old, ugly eyes, imperfect eyes, skewed eyes , unnatural face, stiff face, stiff body, unbalanced body, unnatural body, lacking body, details are not clear, cluttered, details are sticky, details are low, distorted details, ugly hands, imperfect hands, (mutated hands and fingers:1.5), (long body :1.3), (mutation, poorly drawn :1.2) bad hands, fused ha nd, missing hand, disappearing arms, hands, disappearing thigh, disappearing calf, disappearing legs, ui, missing fingers",
# "num_inference_steps": 25,
# },
# "input": {"workflow_json": payload},
# "input": {
# "prompt": payload,
# "aspect_ratio": "9:16",
# "output_quality": 79,
# "negative_prompt": "doll opened mouth toy, text, sculpture pixar, cartoon, anime, low quality, plastic, 2 heads, 2 faces, poorly drawn, ugly, poorly drawn face, extra arms, extra legs, ugly, bad anatomy, bad fingers, ugly, deformed, noisy, blurry, distorted, grainy, nudity, nude",
# },
"input": {
"cfg": 2.5,
# "seed": 42,
# "image": "https://image.lexica.art/full_webp/e41b87fb-4cc3-43cd-a6e6-f3dbb08c2399",
# "steps": 28,
# "width": 1024,
# "height": 1536,
# "aspect_ratio": "16:9",
"prompt": payload,
# "sampler": "dpmpp_2m_sde_gpu",
# "scheduler": "karras",
# "output_format": "png",
# "output_quality": 95,
# "negative_prompt": "clouds, people, buildings",
# "number_of_images": 1,
# "ip_adapter_weight": 1,
# "ip_adapter_weight_type": "style transfer precise",
},
# "path": "models/fofr/kolors-with-ipadapter/versions/5a1a92b2c0f81813225d48ed8e411813da41aa84e7582fb705d1af46eea36eed",
# "path": "models/playgroundai/playground-v2.5-1024px-aesthetic/versions/a45f82a1382bed5c7aeb861dac7c7d191b0fdf74d8d57c4a0e6ed7d4d0bf7d24",
# "path": "models/fofr/any-comfyui-workflow/versions/cd385285ba75685a040afbded7b79814a971f3febf46c5eab7c716e200c784e1",
# "path": "models/fofr/sd3-explorer/versions/a9f4aebd943ad7db13de8e34debea359d5578d08f128e968f9a36c3e9b0148d4",
"path": "models/bingbangboom-lab/flux-new-whimscape/versions/2e8de10f217bc56da163a0204cf09f89995eaf643459014803fae79753183682",
# "path": "models/black-forest-labs/flux-schnell",
# "path": "models/lucataco/proteus-v0.4/versions/34a427535a3c45552b94369280b823fcd0e5c9710e97af020bf445c033d4569e",
# "path": "models/lucataco/juggernaut-xl-v9/versions/bea09cf018e513cef0841719559ea86d2299e05448633ac8fe270b5d5cd6777e",
}
async with self.session.post(url, json=data) as response:
response.raise_for_status()
return await response.json()
except aiohttp.ClientResponseError as e:
if e.status == 500:
retries += 1
print(f"Retry {retries} after 500 error")
await asyncio.sleep(1) # Add a delay before retrying
else:
raise e
# If max retries reached, raise an exception
raise Exception("Max retries reached")
async def fetch_image_status(self, image_id):
url = f"https://replicate.com/api/predictions/{image_id}"
async with self.session.get(url) as response:
status = {}
try:
response.raise_for_status()
temp = await response.json()
status = temp
except Exception as e:
print(f"Image Request failed {e}")
status["status"] = "404"
while status["status"] != "succeeded":
print(status["status"])
try:
status = await self._fetch_image_status(image_id)
except Exception as e:
print(f"Image Request failed {e}")
pass
await asyncio.sleep(3)
return status
async def _fetch_image_status(self, image_id):
url = f"https://replicate.com/api/predictions/{image_id}"
async with self.session.get(url) as response:
response.raise_for_status()
temp = await response.json()
status = temp
return status
async def process_images(payloads):
async with aiohttp.ClientSession() as session:
image_generator = AsyncImageGenerator(session)
tasks = deque()
results = []
async def process_task():
while tasks:
payload = tasks.popleft()
result = await image_generator.generate_image(payload)
status = await image_generator.fetch_image_status(result["id"])
print(status["output"])
if type(status["output"]) == list:
results.extend(status["output"])
results.append(status["output"])
for payload in payloads:
tasks.append(payload)
if len(tasks) >= 2:
await asyncio.gather(*[process_task() for _ in range(2)])
# Process remaining tasks
await asyncio.gather(*[process_task() for _ in range(len(tasks))])
return results
# # # Example payloads
# payloads = [
# """
# comicbook illustration artistic, beautiful Awsome cat
# """
# ]
# # # Run the asyncio event loop
# async def main():
# results = await process_images(payloads)
# pprint.pprint(results)
# asyncio.run(main())
|