webscout 8.2.7__py3-none-any.whl → 8.2.8__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.

Potentially problematic release.


This version of webscout might be problematic. Click here for more details.

Files changed (323) hide show
  1. webscout/AIauto.py +1 -1
  2. webscout/AIutel.py +298 -249
  3. webscout/Extra/Act.md +309 -0
  4. webscout/Extra/GitToolkit/__init__.py +10 -0
  5. webscout/Extra/GitToolkit/gitapi/README.md +110 -0
  6. webscout/Extra/GitToolkit/gitapi/__init__.py +12 -0
  7. webscout/Extra/GitToolkit/gitapi/repository.py +195 -0
  8. webscout/Extra/GitToolkit/gitapi/user.py +96 -0
  9. webscout/Extra/GitToolkit/gitapi/utils.py +62 -0
  10. webscout/Extra/YTToolkit/README.md +375 -0
  11. webscout/Extra/YTToolkit/YTdownloader.py +957 -0
  12. webscout/Extra/YTToolkit/__init__.py +3 -0
  13. webscout/Extra/YTToolkit/transcriber.py +476 -0
  14. webscout/Extra/YTToolkit/ytapi/README.md +44 -0
  15. webscout/Extra/YTToolkit/ytapi/__init__.py +6 -0
  16. webscout/Extra/YTToolkit/ytapi/channel.py +307 -0
  17. webscout/Extra/YTToolkit/ytapi/errors.py +13 -0
  18. webscout/Extra/YTToolkit/ytapi/extras.py +118 -0
  19. webscout/Extra/YTToolkit/ytapi/https.py +88 -0
  20. webscout/Extra/YTToolkit/ytapi/patterns.py +61 -0
  21. webscout/Extra/YTToolkit/ytapi/playlist.py +59 -0
  22. webscout/Extra/YTToolkit/ytapi/pool.py +8 -0
  23. webscout/Extra/YTToolkit/ytapi/query.py +40 -0
  24. webscout/Extra/YTToolkit/ytapi/stream.py +63 -0
  25. webscout/Extra/YTToolkit/ytapi/utils.py +62 -0
  26. webscout/Extra/YTToolkit/ytapi/video.py +232 -0
  27. webscout/Extra/__init__.py +7 -0
  28. webscout/Extra/autocoder/__init__.py +9 -0
  29. webscout/Extra/autocoder/autocoder.py +1105 -0
  30. webscout/Extra/autocoder/autocoder_utiles.py +332 -0
  31. webscout/Extra/gguf.md +430 -0
  32. webscout/Extra/gguf.py +684 -0
  33. webscout/Extra/tempmail/README.md +488 -0
  34. webscout/Extra/tempmail/__init__.py +28 -0
  35. webscout/Extra/tempmail/async_utils.py +141 -0
  36. webscout/Extra/tempmail/base.py +161 -0
  37. webscout/Extra/tempmail/cli.py +187 -0
  38. webscout/Extra/tempmail/emailnator.py +84 -0
  39. webscout/Extra/tempmail/mail_tm.py +361 -0
  40. webscout/Extra/tempmail/temp_mail_io.py +292 -0
  41. webscout/Extra/weather.md +281 -0
  42. webscout/Extra/weather.py +194 -0
  43. webscout/Extra/weather_ascii.py +76 -0
  44. webscout/Litlogger/Readme.md +175 -0
  45. webscout/Litlogger/__init__.py +67 -0
  46. webscout/Litlogger/core/__init__.py +6 -0
  47. webscout/Litlogger/core/level.py +23 -0
  48. webscout/Litlogger/core/logger.py +165 -0
  49. webscout/Litlogger/handlers/__init__.py +12 -0
  50. webscout/Litlogger/handlers/console.py +33 -0
  51. webscout/Litlogger/handlers/file.py +143 -0
  52. webscout/Litlogger/handlers/network.py +173 -0
  53. webscout/Litlogger/styles/__init__.py +7 -0
  54. webscout/Litlogger/styles/colors.py +249 -0
  55. webscout/Litlogger/styles/formats.py +458 -0
  56. webscout/Litlogger/styles/text.py +87 -0
  57. webscout/Litlogger/utils/__init__.py +6 -0
  58. webscout/Litlogger/utils/detectors.py +153 -0
  59. webscout/Litlogger/utils/formatters.py +200 -0
  60. webscout/Provider/AI21.py +177 -0
  61. webscout/Provider/AISEARCH/DeepFind.py +254 -0
  62. webscout/Provider/AISEARCH/Perplexity.py +359 -0
  63. webscout/Provider/AISEARCH/README.md +279 -0
  64. webscout/Provider/AISEARCH/__init__.py +9 -0
  65. webscout/Provider/AISEARCH/felo_search.py +228 -0
  66. webscout/Provider/AISEARCH/genspark_search.py +350 -0
  67. webscout/Provider/AISEARCH/hika_search.py +198 -0
  68. webscout/Provider/AISEARCH/iask_search.py +436 -0
  69. webscout/Provider/AISEARCH/monica_search.py +246 -0
  70. webscout/Provider/AISEARCH/scira_search.py +324 -0
  71. webscout/Provider/AISEARCH/webpilotai_search.py +281 -0
  72. webscout/Provider/Aitopia.py +316 -0
  73. webscout/Provider/AllenAI.py +440 -0
  74. webscout/Provider/Andi.py +228 -0
  75. webscout/Provider/Blackboxai.py +673 -0
  76. webscout/Provider/ChatGPTClone.py +237 -0
  77. webscout/Provider/ChatGPTGratis.py +194 -0
  78. webscout/Provider/ChatSandbox.py +342 -0
  79. webscout/Provider/Cloudflare.py +324 -0
  80. webscout/Provider/Cohere.py +208 -0
  81. webscout/Provider/Deepinfra.py +340 -0
  82. webscout/Provider/ExaAI.py +261 -0
  83. webscout/Provider/ExaChat.py +358 -0
  84. webscout/Provider/Flowith.py +217 -0
  85. webscout/Provider/FreeGemini.py +250 -0
  86. webscout/Provider/Gemini.py +169 -0
  87. webscout/Provider/GithubChat.py +370 -0
  88. webscout/Provider/GizAI.py +295 -0
  89. webscout/Provider/Glider.py +225 -0
  90. webscout/Provider/Groq.py +801 -0
  91. webscout/Provider/HF_space/__init__.py +0 -0
  92. webscout/Provider/HF_space/qwen_qwen2.py +206 -0
  93. webscout/Provider/HeckAI.py +285 -0
  94. webscout/Provider/HuggingFaceChat.py +469 -0
  95. webscout/Provider/Hunyuan.py +283 -0
  96. webscout/Provider/Jadve.py +291 -0
  97. webscout/Provider/Koboldai.py +384 -0
  98. webscout/Provider/LambdaChat.py +411 -0
  99. webscout/Provider/Llama3.py +259 -0
  100. webscout/Provider/MCPCore.py +315 -0
  101. webscout/Provider/Marcus.py +198 -0
  102. webscout/Provider/Nemotron.py +218 -0
  103. webscout/Provider/Netwrck.py +270 -0
  104. webscout/Provider/OLLAMA.py +396 -0
  105. webscout/Provider/OPENAI/BLACKBOXAI.py +735 -0
  106. webscout/Provider/OPENAI/Cloudflare.py +378 -0
  107. webscout/Provider/OPENAI/FreeGemini.py +282 -0
  108. webscout/Provider/OPENAI/NEMOTRON.py +244 -0
  109. webscout/Provider/OPENAI/README.md +1253 -0
  110. webscout/Provider/OPENAI/__init__.py +36 -0
  111. webscout/Provider/OPENAI/ai4chat.py +293 -0
  112. webscout/Provider/OPENAI/api.py +810 -0
  113. webscout/Provider/OPENAI/base.py +249 -0
  114. webscout/Provider/OPENAI/c4ai.py +373 -0
  115. webscout/Provider/OPENAI/chatgpt.py +556 -0
  116. webscout/Provider/OPENAI/chatgptclone.py +488 -0
  117. webscout/Provider/OPENAI/chatsandbox.py +172 -0
  118. webscout/Provider/OPENAI/deepinfra.py +319 -0
  119. webscout/Provider/OPENAI/e2b.py +1356 -0
  120. webscout/Provider/OPENAI/exaai.py +411 -0
  121. webscout/Provider/OPENAI/exachat.py +443 -0
  122. webscout/Provider/OPENAI/flowith.py +162 -0
  123. webscout/Provider/OPENAI/freeaichat.py +359 -0
  124. webscout/Provider/OPENAI/glider.py +323 -0
  125. webscout/Provider/OPENAI/groq.py +361 -0
  126. webscout/Provider/OPENAI/heckai.py +307 -0
  127. webscout/Provider/OPENAI/llmchatco.py +335 -0
  128. webscout/Provider/OPENAI/mcpcore.py +383 -0
  129. webscout/Provider/OPENAI/multichat.py +376 -0
  130. webscout/Provider/OPENAI/netwrck.py +356 -0
  131. webscout/Provider/OPENAI/opkfc.py +496 -0
  132. webscout/Provider/OPENAI/scirachat.py +471 -0
  133. webscout/Provider/OPENAI/sonus.py +303 -0
  134. webscout/Provider/OPENAI/standardinput.py +433 -0
  135. webscout/Provider/OPENAI/textpollinations.py +339 -0
  136. webscout/Provider/OPENAI/toolbaz.py +413 -0
  137. webscout/Provider/OPENAI/typefully.py +355 -0
  138. webscout/Provider/OPENAI/typegpt.py +358 -0
  139. webscout/Provider/OPENAI/uncovrAI.py +462 -0
  140. webscout/Provider/OPENAI/utils.py +307 -0
  141. webscout/Provider/OPENAI/venice.py +425 -0
  142. webscout/Provider/OPENAI/wisecat.py +381 -0
  143. webscout/Provider/OPENAI/writecream.py +163 -0
  144. webscout/Provider/OPENAI/x0gpt.py +378 -0
  145. webscout/Provider/OPENAI/yep.py +356 -0
  146. webscout/Provider/OpenGPT.py +209 -0
  147. webscout/Provider/Openai.py +496 -0
  148. webscout/Provider/PI.py +429 -0
  149. webscout/Provider/Perplexitylabs.py +415 -0
  150. webscout/Provider/QwenLM.py +254 -0
  151. webscout/Provider/Reka.py +214 -0
  152. webscout/Provider/StandardInput.py +290 -0
  153. webscout/Provider/TTI/AiForce/README.md +159 -0
  154. webscout/Provider/TTI/AiForce/__init__.py +22 -0
  155. webscout/Provider/TTI/AiForce/async_aiforce.py +224 -0
  156. webscout/Provider/TTI/AiForce/sync_aiforce.py +245 -0
  157. webscout/Provider/TTI/FreeAIPlayground/README.md +99 -0
  158. webscout/Provider/TTI/FreeAIPlayground/__init__.py +9 -0
  159. webscout/Provider/TTI/FreeAIPlayground/async_freeaiplayground.py +181 -0
  160. webscout/Provider/TTI/FreeAIPlayground/sync_freeaiplayground.py +180 -0
  161. webscout/Provider/TTI/ImgSys/README.md +174 -0
  162. webscout/Provider/TTI/ImgSys/__init__.py +23 -0
  163. webscout/Provider/TTI/ImgSys/async_imgsys.py +202 -0
  164. webscout/Provider/TTI/ImgSys/sync_imgsys.py +195 -0
  165. webscout/Provider/TTI/MagicStudio/README.md +101 -0
  166. webscout/Provider/TTI/MagicStudio/__init__.py +2 -0
  167. webscout/Provider/TTI/MagicStudio/async_magicstudio.py +111 -0
  168. webscout/Provider/TTI/MagicStudio/sync_magicstudio.py +109 -0
  169. webscout/Provider/TTI/Nexra/README.md +155 -0
  170. webscout/Provider/TTI/Nexra/__init__.py +22 -0
  171. webscout/Provider/TTI/Nexra/async_nexra.py +286 -0
  172. webscout/Provider/TTI/Nexra/sync_nexra.py +258 -0
  173. webscout/Provider/TTI/PollinationsAI/README.md +146 -0
  174. webscout/Provider/TTI/PollinationsAI/__init__.py +23 -0
  175. webscout/Provider/TTI/PollinationsAI/async_pollinations.py +311 -0
  176. webscout/Provider/TTI/PollinationsAI/sync_pollinations.py +265 -0
  177. webscout/Provider/TTI/README.md +128 -0
  178. webscout/Provider/TTI/__init__.py +12 -0
  179. webscout/Provider/TTI/aiarta/README.md +134 -0
  180. webscout/Provider/TTI/aiarta/__init__.py +2 -0
  181. webscout/Provider/TTI/aiarta/async_aiarta.py +482 -0
  182. webscout/Provider/TTI/aiarta/sync_aiarta.py +440 -0
  183. webscout/Provider/TTI/artbit/README.md +100 -0
  184. webscout/Provider/TTI/artbit/__init__.py +22 -0
  185. webscout/Provider/TTI/artbit/async_artbit.py +155 -0
  186. webscout/Provider/TTI/artbit/sync_artbit.py +148 -0
  187. webscout/Provider/TTI/fastflux/README.md +129 -0
  188. webscout/Provider/TTI/fastflux/__init__.py +22 -0
  189. webscout/Provider/TTI/fastflux/async_fastflux.py +261 -0
  190. webscout/Provider/TTI/fastflux/sync_fastflux.py +252 -0
  191. webscout/Provider/TTI/huggingface/README.md +114 -0
  192. webscout/Provider/TTI/huggingface/__init__.py +22 -0
  193. webscout/Provider/TTI/huggingface/async_huggingface.py +199 -0
  194. webscout/Provider/TTI/huggingface/sync_huggingface.py +195 -0
  195. webscout/Provider/TTI/piclumen/README.md +161 -0
  196. webscout/Provider/TTI/piclumen/__init__.py +23 -0
  197. webscout/Provider/TTI/piclumen/async_piclumen.py +268 -0
  198. webscout/Provider/TTI/piclumen/sync_piclumen.py +233 -0
  199. webscout/Provider/TTI/pixelmuse/README.md +79 -0
  200. webscout/Provider/TTI/pixelmuse/__init__.py +4 -0
  201. webscout/Provider/TTI/pixelmuse/async_pixelmuse.py +249 -0
  202. webscout/Provider/TTI/pixelmuse/sync_pixelmuse.py +182 -0
  203. webscout/Provider/TTI/talkai/README.md +139 -0
  204. webscout/Provider/TTI/talkai/__init__.py +4 -0
  205. webscout/Provider/TTI/talkai/async_talkai.py +229 -0
  206. webscout/Provider/TTI/talkai/sync_talkai.py +207 -0
  207. webscout/Provider/TTS/README.md +192 -0
  208. webscout/Provider/TTS/__init__.py +9 -0
  209. webscout/Provider/TTS/base.py +159 -0
  210. webscout/Provider/TTS/deepgram.py +156 -0
  211. webscout/Provider/TTS/elevenlabs.py +111 -0
  212. webscout/Provider/TTS/gesserit.py +128 -0
  213. webscout/Provider/TTS/murfai.py +113 -0
  214. webscout/Provider/TTS/parler.py +111 -0
  215. webscout/Provider/TTS/speechma.py +580 -0
  216. webscout/Provider/TTS/sthir.py +94 -0
  217. webscout/Provider/TTS/streamElements.py +333 -0
  218. webscout/Provider/TTS/utils.py +280 -0
  219. webscout/Provider/TeachAnything.py +229 -0
  220. webscout/Provider/TextPollinationsAI.py +308 -0
  221. webscout/Provider/TwoAI.py +280 -0
  222. webscout/Provider/TypliAI.py +305 -0
  223. webscout/Provider/UNFINISHED/ChatHub.py +209 -0
  224. webscout/Provider/UNFINISHED/Youchat.py +330 -0
  225. webscout/Provider/UNFINISHED/liner_api_request.py +263 -0
  226. webscout/Provider/UNFINISHED/oivscode.py +351 -0
  227. webscout/Provider/UNFINISHED/test_lmarena.py +119 -0
  228. webscout/Provider/Venice.py +258 -0
  229. webscout/Provider/VercelAI.py +253 -0
  230. webscout/Provider/WiseCat.py +233 -0
  231. webscout/Provider/WrDoChat.py +370 -0
  232. webscout/Provider/Writecream.py +246 -0
  233. webscout/Provider/WritingMate.py +269 -0
  234. webscout/Provider/__init__.py +172 -0
  235. webscout/Provider/ai4chat.py +149 -0
  236. webscout/Provider/akashgpt.py +335 -0
  237. webscout/Provider/asksteve.py +220 -0
  238. webscout/Provider/cerebras.py +290 -0
  239. webscout/Provider/chatglm.py +215 -0
  240. webscout/Provider/cleeai.py +213 -0
  241. webscout/Provider/copilot.py +425 -0
  242. webscout/Provider/elmo.py +283 -0
  243. webscout/Provider/freeaichat.py +285 -0
  244. webscout/Provider/geminiapi.py +208 -0
  245. webscout/Provider/granite.py +235 -0
  246. webscout/Provider/hermes.py +266 -0
  247. webscout/Provider/julius.py +223 -0
  248. webscout/Provider/koala.py +170 -0
  249. webscout/Provider/learnfastai.py +325 -0
  250. webscout/Provider/llama3mitril.py +215 -0
  251. webscout/Provider/llmchat.py +258 -0
  252. webscout/Provider/llmchatco.py +306 -0
  253. webscout/Provider/lmarena.py +198 -0
  254. webscout/Provider/meta.py +801 -0
  255. webscout/Provider/multichat.py +364 -0
  256. webscout/Provider/samurai.py +223 -0
  257. webscout/Provider/scira_chat.py +299 -0
  258. webscout/Provider/scnet.py +243 -0
  259. webscout/Provider/searchchat.py +292 -0
  260. webscout/Provider/sonus.py +258 -0
  261. webscout/Provider/talkai.py +194 -0
  262. webscout/Provider/toolbaz.py +353 -0
  263. webscout/Provider/turboseek.py +266 -0
  264. webscout/Provider/typefully.py +202 -0
  265. webscout/Provider/typegpt.py +289 -0
  266. webscout/Provider/uncovr.py +368 -0
  267. webscout/Provider/x0gpt.py +299 -0
  268. webscout/Provider/yep.py +389 -0
  269. webscout/__init__.py +4 -2
  270. webscout/cli.py +3 -28
  271. webscout/conversation.py +35 -35
  272. webscout/litagent/Readme.md +276 -0
  273. webscout/litagent/__init__.py +29 -0
  274. webscout/litagent/agent.py +455 -0
  275. webscout/litagent/constants.py +60 -0
  276. webscout/litprinter/__init__.py +59 -0
  277. webscout/scout/README.md +402 -0
  278. webscout/scout/__init__.py +8 -0
  279. webscout/scout/core/__init__.py +7 -0
  280. webscout/scout/core/crawler.py +140 -0
  281. webscout/scout/core/scout.py +568 -0
  282. webscout/scout/core/search_result.py +96 -0
  283. webscout/scout/core/text_analyzer.py +63 -0
  284. webscout/scout/core/text_utils.py +277 -0
  285. webscout/scout/core/web_analyzer.py +52 -0
  286. webscout/scout/element.py +460 -0
  287. webscout/scout/parsers/__init__.py +69 -0
  288. webscout/scout/parsers/html5lib_parser.py +172 -0
  289. webscout/scout/parsers/html_parser.py +236 -0
  290. webscout/scout/parsers/lxml_parser.py +178 -0
  291. webscout/scout/utils.py +37 -0
  292. webscout/swiftcli/Readme.md +323 -0
  293. webscout/swiftcli/__init__.py +95 -0
  294. webscout/swiftcli/core/__init__.py +7 -0
  295. webscout/swiftcli/core/cli.py +297 -0
  296. webscout/swiftcli/core/context.py +104 -0
  297. webscout/swiftcli/core/group.py +241 -0
  298. webscout/swiftcli/decorators/__init__.py +28 -0
  299. webscout/swiftcli/decorators/command.py +221 -0
  300. webscout/swiftcli/decorators/options.py +220 -0
  301. webscout/swiftcli/decorators/output.py +252 -0
  302. webscout/swiftcli/exceptions.py +21 -0
  303. webscout/swiftcli/plugins/__init__.py +9 -0
  304. webscout/swiftcli/plugins/base.py +135 -0
  305. webscout/swiftcli/plugins/manager.py +262 -0
  306. webscout/swiftcli/utils/__init__.py +59 -0
  307. webscout/swiftcli/utils/formatting.py +252 -0
  308. webscout/swiftcli/utils/parsing.py +267 -0
  309. webscout/version.py +1 -1
  310. webscout/webscout_search.py +2 -182
  311. webscout/webscout_search_async.py +1 -179
  312. webscout/zeroart/README.md +89 -0
  313. webscout/zeroart/__init__.py +135 -0
  314. webscout/zeroart/base.py +66 -0
  315. webscout/zeroart/effects.py +101 -0
  316. webscout/zeroart/fonts.py +1239 -0
  317. {webscout-8.2.7.dist-info → webscout-8.2.8.dist-info}/METADATA +115 -60
  318. webscout-8.2.8.dist-info/RECORD +334 -0
  319. {webscout-8.2.7.dist-info → webscout-8.2.8.dist-info}/WHEEL +1 -1
  320. webscout-8.2.7.dist-info/RECORD +0 -26
  321. {webscout-8.2.7.dist-info → webscout-8.2.8.dist-info}/entry_points.txt +0 -0
  322. {webscout-8.2.7.dist-info → webscout-8.2.8.dist-info}/licenses/LICENSE.md +0 -0
  323. {webscout-8.2.7.dist-info → webscout-8.2.8.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,181 @@
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())
@@ -0,0 +1,180 @@
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
+
@@ -0,0 +1,174 @@
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.
@@ -0,0 +1,23 @@
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"]