webscout 8.2.8__py3-none-any.whl → 8.2.9__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. webscout/AIauto.py +32 -14
  2. webscout/AIbase.py +96 -37
  3. webscout/AIutel.py +491 -87
  4. webscout/Bard.py +441 -323
  5. webscout/Extra/GitToolkit/__init__.py +10 -10
  6. webscout/Extra/YTToolkit/ytapi/video.py +232 -232
  7. webscout/Litlogger/README.md +10 -0
  8. webscout/Litlogger/__init__.py +7 -59
  9. webscout/Litlogger/formats.py +4 -0
  10. webscout/Litlogger/handlers.py +103 -0
  11. webscout/Litlogger/levels.py +13 -0
  12. webscout/Litlogger/logger.py +92 -0
  13. webscout/Provider/AISEARCH/Perplexity.py +332 -358
  14. webscout/Provider/AISEARCH/felo_search.py +9 -35
  15. webscout/Provider/AISEARCH/genspark_search.py +30 -56
  16. webscout/Provider/AISEARCH/hika_search.py +4 -16
  17. webscout/Provider/AISEARCH/iask_search.py +410 -436
  18. webscout/Provider/AISEARCH/monica_search.py +4 -30
  19. webscout/Provider/AISEARCH/scira_search.py +6 -32
  20. webscout/Provider/AISEARCH/webpilotai_search.py +38 -64
  21. webscout/Provider/Blackboxai.py +153 -35
  22. webscout/Provider/Deepinfra.py +339 -339
  23. webscout/Provider/ExaChat.py +358 -358
  24. webscout/Provider/Gemini.py +169 -169
  25. webscout/Provider/GithubChat.py +1 -2
  26. webscout/Provider/Glider.py +3 -3
  27. webscout/Provider/HeckAI.py +171 -81
  28. webscout/Provider/OPENAI/BLACKBOXAI.py +766 -735
  29. webscout/Provider/OPENAI/Cloudflare.py +7 -7
  30. webscout/Provider/OPENAI/FreeGemini.py +6 -5
  31. webscout/Provider/OPENAI/NEMOTRON.py +8 -20
  32. webscout/Provider/OPENAI/Qwen3.py +283 -0
  33. webscout/Provider/OPENAI/README.md +952 -1253
  34. webscout/Provider/OPENAI/TwoAI.py +357 -0
  35. webscout/Provider/OPENAI/__init__.py +5 -1
  36. webscout/Provider/OPENAI/ai4chat.py +40 -40
  37. webscout/Provider/OPENAI/api.py +808 -649
  38. webscout/Provider/OPENAI/c4ai.py +3 -3
  39. webscout/Provider/OPENAI/chatgpt.py +555 -555
  40. webscout/Provider/OPENAI/chatgptclone.py +493 -487
  41. webscout/Provider/OPENAI/chatsandbox.py +4 -3
  42. webscout/Provider/OPENAI/copilot.py +242 -0
  43. webscout/Provider/OPENAI/deepinfra.py +5 -2
  44. webscout/Provider/OPENAI/e2b.py +63 -5
  45. webscout/Provider/OPENAI/exaai.py +416 -410
  46. webscout/Provider/OPENAI/exachat.py +444 -443
  47. webscout/Provider/OPENAI/freeaichat.py +2 -2
  48. webscout/Provider/OPENAI/glider.py +5 -2
  49. webscout/Provider/OPENAI/groq.py +5 -2
  50. webscout/Provider/OPENAI/heckai.py +308 -307
  51. webscout/Provider/OPENAI/mcpcore.py +8 -2
  52. webscout/Provider/OPENAI/multichat.py +4 -4
  53. webscout/Provider/OPENAI/netwrck.py +6 -5
  54. webscout/Provider/OPENAI/oivscode.py +287 -0
  55. webscout/Provider/OPENAI/opkfc.py +496 -496
  56. webscout/Provider/OPENAI/pydantic_imports.py +172 -0
  57. webscout/Provider/OPENAI/scirachat.py +15 -9
  58. webscout/Provider/OPENAI/sonus.py +304 -303
  59. webscout/Provider/OPENAI/standardinput.py +433 -433
  60. webscout/Provider/OPENAI/textpollinations.py +4 -4
  61. webscout/Provider/OPENAI/toolbaz.py +413 -413
  62. webscout/Provider/OPENAI/typefully.py +3 -3
  63. webscout/Provider/OPENAI/typegpt.py +11 -5
  64. webscout/Provider/OPENAI/uncovrAI.py +463 -462
  65. webscout/Provider/OPENAI/utils.py +90 -79
  66. webscout/Provider/OPENAI/venice.py +431 -425
  67. webscout/Provider/OPENAI/wisecat.py +387 -381
  68. webscout/Provider/OPENAI/writecream.py +3 -3
  69. webscout/Provider/OPENAI/x0gpt.py +365 -378
  70. webscout/Provider/OPENAI/yep.py +39 -13
  71. webscout/Provider/TTI/README.md +55 -101
  72. webscout/Provider/TTI/__init__.py +4 -9
  73. webscout/Provider/TTI/aiarta.py +365 -0
  74. webscout/Provider/TTI/artbit.py +0 -0
  75. webscout/Provider/TTI/base.py +64 -0
  76. webscout/Provider/TTI/fastflux.py +200 -0
  77. webscout/Provider/TTI/magicstudio.py +201 -0
  78. webscout/Provider/TTI/piclumen.py +203 -0
  79. webscout/Provider/TTI/pixelmuse.py +225 -0
  80. webscout/Provider/TTI/pollinations.py +221 -0
  81. webscout/Provider/TTI/utils.py +11 -0
  82. webscout/Provider/TTS/__init__.py +2 -1
  83. webscout/Provider/TTS/base.py +159 -159
  84. webscout/Provider/TTS/openai_fm.py +129 -0
  85. webscout/Provider/TextPollinationsAI.py +308 -308
  86. webscout/Provider/TwoAI.py +239 -44
  87. webscout/Provider/UNFINISHED/Youchat.py +330 -330
  88. webscout/Provider/UNFINISHED/puterjs.py +635 -0
  89. webscout/Provider/UNFINISHED/test_lmarena.py +119 -119
  90. webscout/Provider/Writecream.py +246 -246
  91. webscout/Provider/__init__.py +2 -0
  92. webscout/Provider/ai4chat.py +33 -8
  93. webscout/Provider/koala.py +169 -169
  94. webscout/Provider/oivscode.py +309 -0
  95. webscout/Provider/samurai.py +3 -2
  96. webscout/Provider/typegpt.py +3 -3
  97. webscout/Provider/uncovr.py +368 -368
  98. webscout/client.py +70 -0
  99. webscout/litprinter/__init__.py +58 -58
  100. webscout/optimizers.py +419 -419
  101. webscout/scout/README.md +3 -1
  102. webscout/scout/core/crawler.py +134 -64
  103. webscout/scout/core/scout.py +148 -109
  104. webscout/scout/element.py +106 -88
  105. webscout/swiftcli/Readme.md +323 -323
  106. webscout/swiftcli/plugins/manager.py +9 -2
  107. webscout/version.py +1 -1
  108. webscout/zeroart/__init__.py +134 -134
  109. webscout/zeroart/effects.py +100 -100
  110. webscout/zeroart/fonts.py +1238 -1238
  111. {webscout-8.2.8.dist-info → webscout-8.2.9.dist-info}/METADATA +159 -35
  112. {webscout-8.2.8.dist-info → webscout-8.2.9.dist-info}/RECORD +116 -161
  113. {webscout-8.2.8.dist-info → webscout-8.2.9.dist-info}/WHEEL +1 -1
  114. {webscout-8.2.8.dist-info → webscout-8.2.9.dist-info}/entry_points.txt +1 -0
  115. webscout/Litlogger/Readme.md +0 -175
  116. webscout/Litlogger/core/__init__.py +0 -6
  117. webscout/Litlogger/core/level.py +0 -23
  118. webscout/Litlogger/core/logger.py +0 -165
  119. webscout/Litlogger/handlers/__init__.py +0 -12
  120. webscout/Litlogger/handlers/console.py +0 -33
  121. webscout/Litlogger/handlers/file.py +0 -143
  122. webscout/Litlogger/handlers/network.py +0 -173
  123. webscout/Litlogger/styles/__init__.py +0 -7
  124. webscout/Litlogger/styles/colors.py +0 -249
  125. webscout/Litlogger/styles/formats.py +0 -458
  126. webscout/Litlogger/styles/text.py +0 -87
  127. webscout/Litlogger/utils/__init__.py +0 -6
  128. webscout/Litlogger/utils/detectors.py +0 -153
  129. webscout/Litlogger/utils/formatters.py +0 -200
  130. webscout/Provider/TTI/AiForce/README.md +0 -159
  131. webscout/Provider/TTI/AiForce/__init__.py +0 -22
  132. webscout/Provider/TTI/AiForce/async_aiforce.py +0 -224
  133. webscout/Provider/TTI/AiForce/sync_aiforce.py +0 -245
  134. webscout/Provider/TTI/FreeAIPlayground/README.md +0 -99
  135. webscout/Provider/TTI/FreeAIPlayground/__init__.py +0 -9
  136. webscout/Provider/TTI/FreeAIPlayground/async_freeaiplayground.py +0 -181
  137. webscout/Provider/TTI/FreeAIPlayground/sync_freeaiplayground.py +0 -180
  138. webscout/Provider/TTI/ImgSys/README.md +0 -174
  139. webscout/Provider/TTI/ImgSys/__init__.py +0 -23
  140. webscout/Provider/TTI/ImgSys/async_imgsys.py +0 -202
  141. webscout/Provider/TTI/ImgSys/sync_imgsys.py +0 -195
  142. webscout/Provider/TTI/MagicStudio/README.md +0 -101
  143. webscout/Provider/TTI/MagicStudio/__init__.py +0 -2
  144. webscout/Provider/TTI/MagicStudio/async_magicstudio.py +0 -111
  145. webscout/Provider/TTI/MagicStudio/sync_magicstudio.py +0 -109
  146. webscout/Provider/TTI/Nexra/README.md +0 -155
  147. webscout/Provider/TTI/Nexra/__init__.py +0 -22
  148. webscout/Provider/TTI/Nexra/async_nexra.py +0 -286
  149. webscout/Provider/TTI/Nexra/sync_nexra.py +0 -258
  150. webscout/Provider/TTI/PollinationsAI/README.md +0 -146
  151. webscout/Provider/TTI/PollinationsAI/__init__.py +0 -23
  152. webscout/Provider/TTI/PollinationsAI/async_pollinations.py +0 -311
  153. webscout/Provider/TTI/PollinationsAI/sync_pollinations.py +0 -265
  154. webscout/Provider/TTI/aiarta/README.md +0 -134
  155. webscout/Provider/TTI/aiarta/__init__.py +0 -2
  156. webscout/Provider/TTI/aiarta/async_aiarta.py +0 -482
  157. webscout/Provider/TTI/aiarta/sync_aiarta.py +0 -440
  158. webscout/Provider/TTI/artbit/README.md +0 -100
  159. webscout/Provider/TTI/artbit/__init__.py +0 -22
  160. webscout/Provider/TTI/artbit/async_artbit.py +0 -155
  161. webscout/Provider/TTI/artbit/sync_artbit.py +0 -148
  162. webscout/Provider/TTI/fastflux/README.md +0 -129
  163. webscout/Provider/TTI/fastflux/__init__.py +0 -22
  164. webscout/Provider/TTI/fastflux/async_fastflux.py +0 -261
  165. webscout/Provider/TTI/fastflux/sync_fastflux.py +0 -252
  166. webscout/Provider/TTI/huggingface/README.md +0 -114
  167. webscout/Provider/TTI/huggingface/__init__.py +0 -22
  168. webscout/Provider/TTI/huggingface/async_huggingface.py +0 -199
  169. webscout/Provider/TTI/huggingface/sync_huggingface.py +0 -195
  170. webscout/Provider/TTI/piclumen/README.md +0 -161
  171. webscout/Provider/TTI/piclumen/__init__.py +0 -23
  172. webscout/Provider/TTI/piclumen/async_piclumen.py +0 -268
  173. webscout/Provider/TTI/piclumen/sync_piclumen.py +0 -233
  174. webscout/Provider/TTI/pixelmuse/README.md +0 -79
  175. webscout/Provider/TTI/pixelmuse/__init__.py +0 -4
  176. webscout/Provider/TTI/pixelmuse/async_pixelmuse.py +0 -249
  177. webscout/Provider/TTI/pixelmuse/sync_pixelmuse.py +0 -182
  178. webscout/Provider/TTI/talkai/README.md +0 -139
  179. webscout/Provider/TTI/talkai/__init__.py +0 -4
  180. webscout/Provider/TTI/talkai/async_talkai.py +0 -229
  181. webscout/Provider/TTI/talkai/sync_talkai.py +0 -207
  182. webscout/Provider/UNFINISHED/oivscode.py +0 -351
  183. {webscout-8.2.8.dist-info → webscout-8.2.9.dist-info}/licenses/LICENSE.md +0 -0
  184. {webscout-8.2.8.dist-info → webscout-8.2.9.dist-info}/top_level.txt +0 -0
@@ -1,181 +0,0 @@
1
- import aiohttp
2
- import asyncio
3
- import os
4
- from typing import List, Union, AsyncGenerator
5
- from string import punctuation
6
- from random import choice
7
- import aiofiles
8
-
9
- from webscout.AIbase import AsyncImageProvider
10
- from webscout.litagent import LitAgent
11
-
12
- class AsyncFreeAIImager(AsyncImageProvider):
13
- """
14
- Async FreeAI Image Provider - Your go-to for fire AI art! 🎨
15
- """
16
-
17
- AVAILABLE_MODELS = [
18
- "dall-e-3",
19
- "Flux Pro Ultra",
20
- "Flux Pro",
21
- "Flux Pro Ultra Raw",
22
- "Flux Schnell",
23
- "Flux Realism",
24
- "grok-2-aurora",
25
- "Flux Dev",
26
-
27
- ]
28
-
29
- def __init__(
30
- self,
31
- model: str = "dall-e-3",
32
- timeout: int = 60,
33
- proxies: dict = {}
34
- ):
35
- """Initialize your async FreeAIPlayground provider with custom settings! ⚙️
36
-
37
- Args:
38
- model (str): Which model to use (default: dall-e-3)
39
- timeout (int): Request timeout in seconds (default: 60)
40
- proxies (dict): Proxy settings for requests (default: {})
41
- """
42
- self.image_gen_endpoint: str = "https://api.freeaichatplayground.com/v1/images/generations"
43
- self.headers = {
44
- "Accept": "application/json",
45
- "Accept-Language": "en-US,en;q=0.9",
46
- "Content-Type": "application/json",
47
- "User-Agent": LitAgent().random(),
48
- "Origin": "https://freeaichatplayground.com",
49
- "Referer": "https://freeaichatplayground.com/",
50
- }
51
- self.timeout = aiohttp.ClientTimeout(total=timeout)
52
- self.model = model
53
- self.proxies = proxies
54
- self.prompt: str = "AI-generated image - webscout"
55
- self.image_extension: str = "png"
56
-
57
- async def generate(
58
- self, prompt: str, amount: int = 1, additives: bool = True,
59
- size: str = "1024x1024", quality: str = "standard",
60
- style: str = "vivid", max_retries: int = 3, retry_delay: int = 5
61
- ) -> List[bytes]:
62
- """Generate some fire images from your prompt! 🎨
63
-
64
- Args:
65
- prompt (str): Your creative prompt
66
- amount (int): How many images to generate
67
- additives (bool): Add random characters to make prompts unique
68
- size (str): Image size (1024x1024, 1024x1792, 1792x1024)
69
- quality (str): Image quality (standard, hd)
70
- style (str): Image style (vivid, natural)
71
- max_retries (int): Max retry attempts if generation fails
72
- retry_delay (int): Delay between retries in seconds
73
-
74
- Returns:
75
- List[bytes]: Your generated images as bytes
76
- """
77
- assert bool(prompt), "Prompt cannot be null"
78
- assert isinstance(amount, int), f"Amount should be an integer only not {type(amount)}"
79
- assert amount > 0, "Amount should be greater than 0"
80
-
81
- ads = lambda: (
82
- ""
83
- if not additives
84
- else choice(punctuation)
85
- + choice(punctuation)
86
- + choice(punctuation)
87
- )
88
-
89
- self.prompt = prompt
90
- response = []
91
-
92
- async with aiohttp.ClientSession(headers=self.headers, timeout=self.timeout) as session:
93
- for i in range(amount):
94
- payload = {
95
- "model": self.model,
96
- "prompt": prompt + ads(),
97
- "n": 1,
98
- "size": size,
99
- "quality": quality,
100
- "style": style
101
- }
102
-
103
- for attempt in range(max_retries):
104
- try:
105
- async with session.post(self.image_gen_endpoint, json=payload) as resp:
106
- resp.raise_for_status()
107
- data = await resp.json()
108
- if 'data' in data and len(data['data']) > 0:
109
- image_url = data['data'][0]['url']
110
-
111
- async with session.get(image_url) as img_resp:
112
- img_resp.raise_for_status()
113
- image_bytes = await img_resp.read()
114
- response.append(image_bytes)
115
- break
116
- else:
117
- print(f"Warning: No image data in response: {data}")
118
- if attempt == max_retries - 1:
119
- raise Exception("No image data received after all retries")
120
- except Exception as e:
121
- print(f"Error generating image (attempt {attempt + 1}/{max_retries}): {str(e)}")
122
- if attempt == max_retries - 1:
123
- raise
124
- await asyncio.sleep(retry_delay)
125
-
126
- return response
127
-
128
- async def save(
129
- self,
130
- response: Union[List[bytes], AsyncGenerator[bytes, None]],
131
- name: str = None,
132
- dir: str = os.getcwd(),
133
- filenames_prefix: str = "",
134
- ) -> List[str]:
135
- """Save your fire images! 💾
136
-
137
- Args:
138
- response (Union[List[bytes], AsyncGenerator[bytes, None]]): Image data
139
- name (str, optional): Base name for saved files
140
- dir (str, optional): Where to save the images
141
- filenames_prefix (str, optional): Prefix for filenames
142
-
143
- Returns:
144
- List[str]: List of saved filenames
145
- """
146
- if not os.path.exists(dir):
147
- os.makedirs(dir)
148
-
149
- name = self.prompt if name is None else name
150
- saved_paths = []
151
-
152
- async def save_single_image(image_bytes: bytes, index: int) -> str:
153
- filename = f"{filenames_prefix}{name}_{index}.{self.image_extension}"
154
- filepath = os.path.join(dir, filename)
155
-
156
- async with aiofiles.open(filepath, "wb") as f:
157
- await f.write(image_bytes)
158
- return filename
159
-
160
- if isinstance(response, list):
161
- image_list = response
162
- else:
163
- image_list = [chunk async for chunk in response]
164
-
165
- tasks = [save_single_image(img, i) for i, img in enumerate(image_list)]
166
- saved_paths = await asyncio.gather(*tasks)
167
-
168
- return saved_paths
169
-
170
-
171
- if __name__ == "__main__":
172
- async def main():
173
- bot = AsyncFreeAIImager()
174
- try:
175
- resp = await bot.generate("A shiny red sports car speeding down a scenic mountain road", 1)
176
- paths = await bot.save(resp)
177
- print(paths)
178
- except Exception:
179
- pass
180
-
181
- asyncio.run(main())
@@ -1,180 +0,0 @@
1
- import requests
2
- import os
3
- from typing import Union, List
4
- from string import punctuation
5
- from random import choice
6
- from random import randint
7
- import base64
8
-
9
- from webscout.AIbase import ImageProvider
10
- from webscout.litagent import LitAgent # Import our fire user agent generator 🔥
11
-
12
- class FreeAIImager(ImageProvider):
13
- """
14
- FreeAI Image Provider - Your go-to for fire AI art! 🎨
15
- """
16
-
17
- AVAILABLE_MODELS = [
18
- "dall-e-3",
19
- "Flux Pro Ultra",
20
- "Flux Pro",
21
- "Flux Pro Ultra Raw",
22
- "Flux Schnell",
23
- "Flux Realism",
24
- "grok-2-aurora",
25
- "Flux Dev",
26
- ]
27
-
28
- def __init__(
29
- self,
30
- model: str = "dall-e-3", # Updated default model
31
- timeout: int = 60,
32
- proxies: dict = {},
33
- ):
34
- """Initialize your FreeAIPlayground provider with custom settings! ⚙️
35
-
36
- Args:
37
- model (str): Which model to use (default: dall-e-3)
38
- timeout (int): Request timeout in seconds (default: 60)
39
- proxies (dict): Proxy settings for requests (default: {})
40
- logging (bool): Enable fire logging (default: True)
41
- """
42
- self.image_gen_endpoint: str = "https://api.freeaichatplayground.com/v1/images/generations"
43
- self.headers = {
44
- "Accept": "application/json",
45
- "Accept-Language": "en-US,en;q=0.9",
46
- "Content-Type": "application/json",
47
- "User-Agent": LitAgent().random(),
48
- "Origin": "https://freeaichatplayground.com",
49
- "Referer": "https://freeaichatplayground.com/",
50
- }
51
- self.session = requests.Session()
52
- self.session.headers.update(self.headers)
53
- self.session.proxies.update(proxies)
54
- self.timeout = timeout
55
- self.model = model
56
- self.prompt: str = "AI-generated image - webscout"
57
- self.image_extension: str = "png"
58
-
59
- def generate(
60
- self, prompt: str, amount: int = 1, additives: bool = True,
61
- size: str = "1024x1024", quality: str = "standard",
62
- style: str = "vivid", max_retries: int = 3, retry_delay: int = 5
63
- ) -> List[bytes]:
64
- """Generate some fire images from your prompt! 🎨
65
-
66
- Args:
67
- prompt (str): Your creative prompt
68
- amount (int): How many images to generate
69
- additives (bool): Add random characters to make prompts unique
70
- size (str): Image size (1024x1024, 1024x1792, 1792x1024)
71
- quality (str): Image quality (standard, hd)
72
- style (str): Image style (vivid, natural)
73
- max_retries (int): Max retry attempts if generation fails
74
- retry_delay (int): Delay between retries in seconds
75
-
76
- Returns:
77
- List[bytes]: Your generated images as bytes
78
- """
79
- assert bool(prompt), "Prompt cannot be null"
80
- assert isinstance(amount, int), f"Amount should be an integer only not {type(amount)}"
81
- assert amount > 0, "Amount should be greater than 0"
82
-
83
- ads = lambda: (
84
- ""
85
- if not additives
86
- else choice(punctuation)
87
- + choice(punctuation)
88
- + choice(punctuation)
89
- )
90
-
91
- self.prompt = prompt
92
- response = []
93
- for _ in range(amount):
94
- payload = {
95
- "model": self.model,
96
- "prompt": prompt + ads(),
97
- "n": 1,
98
- "size": size,
99
- "quality": quality,
100
- "style": style
101
- }
102
-
103
- for attempt in range(max_retries):
104
- try:
105
- resp = self.session.post(
106
- url=self.image_gen_endpoint,
107
- json=payload,
108
- timeout=self.timeout
109
- )
110
- resp.raise_for_status()
111
- response_data = resp.json()
112
- if 'data' in response_data and len(response_data['data']) > 0:
113
- image_url = response_data['data'][0]['url']
114
- # Get the image data from the URL
115
- img_resp = self.session.get(image_url, timeout=self.timeout)
116
- img_resp.raise_for_status()
117
- response.append(img_resp.content)
118
- break
119
- else:
120
- print(f"Warning: No image data in response: {response_data}")
121
- if attempt == max_retries - 1:
122
- raise Exception("No image data received after all retries")
123
- except Exception as e:
124
- print(f"Error generating image (attempt {attempt + 1}/{max_retries}): {str(e)}")
125
- if attempt == max_retries - 1:
126
- raise
127
- import time
128
- time.sleep(retry_delay)
129
- return response
130
-
131
- def save(
132
- self,
133
- response: List[bytes],
134
- name: str = None,
135
- dir: str = os.getcwd(),
136
- filenames_prefix: str = "",
137
- ) -> List[str]:
138
- """Save your fire images! 💾
139
-
140
- Args:
141
- response (List[bytes]): List of image data
142
- name (str, optional): Base name for saved files
143
- dir (str, optional): Where to save the images
144
- filenames_prefix (str, optional): Prefix for filenames
145
-
146
- Returns:
147
- List[str]: List of saved filenames
148
- """
149
- assert isinstance(response, list), f"Response should be of {list} not {type(response)}"
150
- name = self.prompt if name is None else name
151
-
152
- if not os.path.exists(dir):
153
- os.makedirs(dir)
154
-
155
- filenames = []
156
- count = 0
157
- for image in response:
158
- def complete_path():
159
- count_value = "" if count == 0 else f"_{count}"
160
- return os.path.join(dir, name + count_value + "." + self.image_extension)
161
-
162
- while os.path.isfile(complete_path()):
163
- count += 1
164
-
165
- absolute_path_to_file = complete_path()
166
- filenames.append(filenames_prefix + os.path.split(absolute_path_to_file)[1])
167
-
168
- with open(absolute_path_to_file, "wb") as fh:
169
- fh.write(image)
170
- return filenames
171
-
172
-
173
- if __name__ == "__main__":
174
- bot = FreeAIImager()
175
- try:
176
- resp = bot.generate("A shiny red sports car speeding down a scenic mountain road", 1)
177
- print(bot.save(resp))
178
- except Exception:
179
- pass
180
-
@@ -1,174 +0,0 @@
1
- # ImgSys Provider 🎨
2
-
3
- A powerful text-to-image generation provider that uses multiple AI models to create unique images from your prompts!
4
-
5
- ## Features ✨
6
-
7
- - Generate 2 unique images from random providers for each prompt
8
- - Support for both synchronous and asynchronous operations
9
- - Built-in retry logic with configurable attempts and delays
10
- - Comprehensive error handling and input validation
11
- - Easy image saving with custom names and directories
12
- - Random user agent rotation for requests
13
- - Proxy support for enhanced privacy
14
- - Detailed documentation and examples
15
-
16
- ## Installation 🚀
17
-
18
- The ImgSys provider is part of the Webscout package. You can install it using pip:
19
-
20
- ```bash
21
- pip install webscout
22
- ```
23
-
24
- ## Usage Examples 📝
25
-
26
- ### Synchronous Usage
27
-
28
- ```python
29
- from webscout import ImgSys
30
-
31
- # Initialize the provider
32
- provider = ImgSys()
33
-
34
- # Generate images
35
- images = provider.generate("A cool cyberpunk city at night")
36
-
37
- # Save the images
38
- provider.save(images, dir="my_images")
39
- ```
40
-
41
- ### Asynchronous Usage
42
-
43
- ```python
44
- import asyncio
45
- from webscout import AsyncImgSys
46
-
47
- async def main():
48
- # Initialize the provider
49
- provider = AsyncImgSys()
50
-
51
- # Generate images
52
- images = await provider.generate("A cool cyberpunk city at night")
53
-
54
- # Save the images
55
- await provider.save(images, dir="my_images")
56
-
57
- # Run the async function
58
- asyncio.run(main())
59
- ```
60
-
61
- ### Advanced Usage
62
-
63
- ```python
64
- from webscout import ImgSys
65
-
66
- # Initialize with custom settings
67
- provider = ImgSys(
68
- timeout=30, # Custom timeout in seconds
69
- proxies={ # Optional proxy configuration
70
- "http": "http://proxy:8080",
71
- "https": "https://proxy:8080"
72
- }
73
- )
74
-
75
- # Generate images with custom retry settings
76
- images = provider.generate(
77
- prompt="A majestic dragon in a fantasy landscape",
78
- max_retries=5, # More retry attempts
79
- retry_delay=10 # Longer delay between retries
80
- )
81
-
82
- # Save with custom naming
83
- provider.save(
84
- images,
85
- name="dragon_art",
86
- dir="fantasy_images",
87
- filenames_prefix="fantasy_"
88
- )
89
- ```
90
-
91
- ## API Reference 📚
92
-
93
- ### ImgSys Class
94
-
95
- #### Constructor
96
-
97
- ```python
98
- def __init__(
99
- self,
100
- timeout: int = 60,
101
- proxies: Optional[dict] = None
102
- )
103
- ```
104
-
105
- Parameters:
106
- - `timeout` (int): HTTP request timeout in seconds (default: 60)
107
- - `proxies` (dict, optional): Proxy configuration for requests
108
-
109
- #### Methods
110
-
111
- ##### generate()
112
-
113
- ```python
114
- def generate(
115
- self,
116
- prompt: str,
117
- max_retries: int = 3,
118
- retry_delay: int = 5
119
- ) -> List[bytes]
120
- ```
121
-
122
- Generate images from a text prompt.
123
-
124
- Parameters:
125
- - `prompt` (str): Your image description
126
- - `max_retries` (int): Max retry attempts if something fails (default: 3)
127
- - `retry_delay` (int): Seconds to wait between retries (default: 5)
128
-
129
- Returns:
130
- - `List[bytes]`: Generated images as bytes
131
-
132
- ##### save()
133
-
134
- ```python
135
- def save(
136
- self,
137
- response: List[bytes],
138
- name: Optional[str] = None,
139
- dir: Optional[Union[str, Path]] = None,
140
- filenames_prefix: str = ""
141
- ) -> List[str]
142
- ```
143
-
144
- Save generated images to disk.
145
-
146
- Parameters:
147
- - `response` (List[bytes]): Generated images
148
- - `name` (str, optional): Custom name for images
149
- - `dir` (Union[str, Path], optional): Save directory (default: current directory)
150
- - `filenames_prefix` (str): Prefix for image filenames
151
-
152
- Returns:
153
- - `List[str]`: Paths to saved images
154
-
155
- ### AsyncImgSys Class
156
-
157
- The `AsyncImgSys` class provides the same functionality as `ImgSys` but with async/await support. All methods are prefixed with `async` and should be called with `await`.
158
-
159
- ## Error Handling 🛡️
160
-
161
- The provider includes comprehensive error handling:
162
-
163
- - Input validation for empty prompts
164
- - Retry logic for failed API calls
165
- - Proper exception handling for network issues
166
- - Graceful handling of API response errors
167
-
168
- ## Contributing 🤝
169
-
170
- Contributions are welcome! Please feel free to submit a Pull Request.
171
-
172
- ## License 📄
173
-
174
- This provider is part of the Webscout package and is licensed under the same terms.
@@ -1,23 +0,0 @@
1
- """ImgSys Provider Package - Generate images from multiple providers! 🎨
2
-
3
- Examples:
4
- >>> # Synchronous usage
5
- >>> from webscout import ImgSys
6
- >>> provider = ImgSys()
7
- >>> images = provider.generate("A cool cyberpunk city")
8
- >>> provider.save(images, dir="my_images")
9
- >>>
10
- >>> # Asynchronous usage
11
- >>> import asyncio
12
- >>> from webscout import AsyncImgSys
13
- >>> async def main():
14
- ... provider = AsyncImgSys()
15
- ... images = await provider.generate("A cool cyberpunk city")
16
- ... await provider.save(images, dir="my_images")
17
- >>> asyncio.run(main())
18
- """
19
-
20
- from .sync_imgsys import ImgSys
21
- from .async_imgsys import AsyncImgSys
22
-
23
- __all__ = ["ImgSys", "AsyncImgSys"]