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.
- webscout/AIauto.py +1 -1
- webscout/AIutel.py +298 -249
- webscout/Extra/Act.md +309 -0
- webscout/Extra/GitToolkit/__init__.py +10 -0
- webscout/Extra/GitToolkit/gitapi/README.md +110 -0
- webscout/Extra/GitToolkit/gitapi/__init__.py +12 -0
- webscout/Extra/GitToolkit/gitapi/repository.py +195 -0
- webscout/Extra/GitToolkit/gitapi/user.py +96 -0
- webscout/Extra/GitToolkit/gitapi/utils.py +62 -0
- webscout/Extra/YTToolkit/README.md +375 -0
- webscout/Extra/YTToolkit/YTdownloader.py +957 -0
- webscout/Extra/YTToolkit/__init__.py +3 -0
- webscout/Extra/YTToolkit/transcriber.py +476 -0
- webscout/Extra/YTToolkit/ytapi/README.md +44 -0
- webscout/Extra/YTToolkit/ytapi/__init__.py +6 -0
- webscout/Extra/YTToolkit/ytapi/channel.py +307 -0
- webscout/Extra/YTToolkit/ytapi/errors.py +13 -0
- webscout/Extra/YTToolkit/ytapi/extras.py +118 -0
- webscout/Extra/YTToolkit/ytapi/https.py +88 -0
- webscout/Extra/YTToolkit/ytapi/patterns.py +61 -0
- webscout/Extra/YTToolkit/ytapi/playlist.py +59 -0
- webscout/Extra/YTToolkit/ytapi/pool.py +8 -0
- webscout/Extra/YTToolkit/ytapi/query.py +40 -0
- webscout/Extra/YTToolkit/ytapi/stream.py +63 -0
- webscout/Extra/YTToolkit/ytapi/utils.py +62 -0
- webscout/Extra/YTToolkit/ytapi/video.py +232 -0
- webscout/Extra/__init__.py +7 -0
- webscout/Extra/autocoder/__init__.py +9 -0
- webscout/Extra/autocoder/autocoder.py +1105 -0
- webscout/Extra/autocoder/autocoder_utiles.py +332 -0
- webscout/Extra/gguf.md +430 -0
- webscout/Extra/gguf.py +684 -0
- webscout/Extra/tempmail/README.md +488 -0
- webscout/Extra/tempmail/__init__.py +28 -0
- webscout/Extra/tempmail/async_utils.py +141 -0
- webscout/Extra/tempmail/base.py +161 -0
- webscout/Extra/tempmail/cli.py +187 -0
- webscout/Extra/tempmail/emailnator.py +84 -0
- webscout/Extra/tempmail/mail_tm.py +361 -0
- webscout/Extra/tempmail/temp_mail_io.py +292 -0
- webscout/Extra/weather.md +281 -0
- webscout/Extra/weather.py +194 -0
- webscout/Extra/weather_ascii.py +76 -0
- webscout/Litlogger/Readme.md +175 -0
- webscout/Litlogger/__init__.py +67 -0
- webscout/Litlogger/core/__init__.py +6 -0
- webscout/Litlogger/core/level.py +23 -0
- webscout/Litlogger/core/logger.py +165 -0
- webscout/Litlogger/handlers/__init__.py +12 -0
- webscout/Litlogger/handlers/console.py +33 -0
- webscout/Litlogger/handlers/file.py +143 -0
- webscout/Litlogger/handlers/network.py +173 -0
- webscout/Litlogger/styles/__init__.py +7 -0
- webscout/Litlogger/styles/colors.py +249 -0
- webscout/Litlogger/styles/formats.py +458 -0
- webscout/Litlogger/styles/text.py +87 -0
- webscout/Litlogger/utils/__init__.py +6 -0
- webscout/Litlogger/utils/detectors.py +153 -0
- webscout/Litlogger/utils/formatters.py +200 -0
- webscout/Provider/AI21.py +177 -0
- webscout/Provider/AISEARCH/DeepFind.py +254 -0
- webscout/Provider/AISEARCH/Perplexity.py +359 -0
- webscout/Provider/AISEARCH/README.md +279 -0
- webscout/Provider/AISEARCH/__init__.py +9 -0
- webscout/Provider/AISEARCH/felo_search.py +228 -0
- webscout/Provider/AISEARCH/genspark_search.py +350 -0
- webscout/Provider/AISEARCH/hika_search.py +198 -0
- webscout/Provider/AISEARCH/iask_search.py +436 -0
- webscout/Provider/AISEARCH/monica_search.py +246 -0
- webscout/Provider/AISEARCH/scira_search.py +324 -0
- webscout/Provider/AISEARCH/webpilotai_search.py +281 -0
- webscout/Provider/Aitopia.py +316 -0
- webscout/Provider/AllenAI.py +440 -0
- webscout/Provider/Andi.py +228 -0
- webscout/Provider/Blackboxai.py +673 -0
- webscout/Provider/ChatGPTClone.py +237 -0
- webscout/Provider/ChatGPTGratis.py +194 -0
- webscout/Provider/ChatSandbox.py +342 -0
- webscout/Provider/Cloudflare.py +324 -0
- webscout/Provider/Cohere.py +208 -0
- webscout/Provider/Deepinfra.py +340 -0
- webscout/Provider/ExaAI.py +261 -0
- webscout/Provider/ExaChat.py +358 -0
- webscout/Provider/Flowith.py +217 -0
- webscout/Provider/FreeGemini.py +250 -0
- webscout/Provider/Gemini.py +169 -0
- webscout/Provider/GithubChat.py +370 -0
- webscout/Provider/GizAI.py +295 -0
- webscout/Provider/Glider.py +225 -0
- webscout/Provider/Groq.py +801 -0
- webscout/Provider/HF_space/__init__.py +0 -0
- webscout/Provider/HF_space/qwen_qwen2.py +206 -0
- webscout/Provider/HeckAI.py +285 -0
- webscout/Provider/HuggingFaceChat.py +469 -0
- webscout/Provider/Hunyuan.py +283 -0
- webscout/Provider/Jadve.py +291 -0
- webscout/Provider/Koboldai.py +384 -0
- webscout/Provider/LambdaChat.py +411 -0
- webscout/Provider/Llama3.py +259 -0
- webscout/Provider/MCPCore.py +315 -0
- webscout/Provider/Marcus.py +198 -0
- webscout/Provider/Nemotron.py +218 -0
- webscout/Provider/Netwrck.py +270 -0
- webscout/Provider/OLLAMA.py +396 -0
- webscout/Provider/OPENAI/BLACKBOXAI.py +735 -0
- webscout/Provider/OPENAI/Cloudflare.py +378 -0
- webscout/Provider/OPENAI/FreeGemini.py +282 -0
- webscout/Provider/OPENAI/NEMOTRON.py +244 -0
- webscout/Provider/OPENAI/README.md +1253 -0
- webscout/Provider/OPENAI/__init__.py +36 -0
- webscout/Provider/OPENAI/ai4chat.py +293 -0
- webscout/Provider/OPENAI/api.py +810 -0
- webscout/Provider/OPENAI/base.py +249 -0
- webscout/Provider/OPENAI/c4ai.py +373 -0
- webscout/Provider/OPENAI/chatgpt.py +556 -0
- webscout/Provider/OPENAI/chatgptclone.py +488 -0
- webscout/Provider/OPENAI/chatsandbox.py +172 -0
- webscout/Provider/OPENAI/deepinfra.py +319 -0
- webscout/Provider/OPENAI/e2b.py +1356 -0
- webscout/Provider/OPENAI/exaai.py +411 -0
- webscout/Provider/OPENAI/exachat.py +443 -0
- webscout/Provider/OPENAI/flowith.py +162 -0
- webscout/Provider/OPENAI/freeaichat.py +359 -0
- webscout/Provider/OPENAI/glider.py +323 -0
- webscout/Provider/OPENAI/groq.py +361 -0
- webscout/Provider/OPENAI/heckai.py +307 -0
- webscout/Provider/OPENAI/llmchatco.py +335 -0
- webscout/Provider/OPENAI/mcpcore.py +383 -0
- webscout/Provider/OPENAI/multichat.py +376 -0
- webscout/Provider/OPENAI/netwrck.py +356 -0
- webscout/Provider/OPENAI/opkfc.py +496 -0
- webscout/Provider/OPENAI/scirachat.py +471 -0
- webscout/Provider/OPENAI/sonus.py +303 -0
- webscout/Provider/OPENAI/standardinput.py +433 -0
- webscout/Provider/OPENAI/textpollinations.py +339 -0
- webscout/Provider/OPENAI/toolbaz.py +413 -0
- webscout/Provider/OPENAI/typefully.py +355 -0
- webscout/Provider/OPENAI/typegpt.py +358 -0
- webscout/Provider/OPENAI/uncovrAI.py +462 -0
- webscout/Provider/OPENAI/utils.py +307 -0
- webscout/Provider/OPENAI/venice.py +425 -0
- webscout/Provider/OPENAI/wisecat.py +381 -0
- webscout/Provider/OPENAI/writecream.py +163 -0
- webscout/Provider/OPENAI/x0gpt.py +378 -0
- webscout/Provider/OPENAI/yep.py +356 -0
- webscout/Provider/OpenGPT.py +209 -0
- webscout/Provider/Openai.py +496 -0
- webscout/Provider/PI.py +429 -0
- webscout/Provider/Perplexitylabs.py +415 -0
- webscout/Provider/QwenLM.py +254 -0
- webscout/Provider/Reka.py +214 -0
- webscout/Provider/StandardInput.py +290 -0
- webscout/Provider/TTI/AiForce/README.md +159 -0
- webscout/Provider/TTI/AiForce/__init__.py +22 -0
- webscout/Provider/TTI/AiForce/async_aiforce.py +224 -0
- webscout/Provider/TTI/AiForce/sync_aiforce.py +245 -0
- webscout/Provider/TTI/FreeAIPlayground/README.md +99 -0
- webscout/Provider/TTI/FreeAIPlayground/__init__.py +9 -0
- webscout/Provider/TTI/FreeAIPlayground/async_freeaiplayground.py +181 -0
- webscout/Provider/TTI/FreeAIPlayground/sync_freeaiplayground.py +180 -0
- webscout/Provider/TTI/ImgSys/README.md +174 -0
- webscout/Provider/TTI/ImgSys/__init__.py +23 -0
- webscout/Provider/TTI/ImgSys/async_imgsys.py +202 -0
- webscout/Provider/TTI/ImgSys/sync_imgsys.py +195 -0
- webscout/Provider/TTI/MagicStudio/README.md +101 -0
- webscout/Provider/TTI/MagicStudio/__init__.py +2 -0
- webscout/Provider/TTI/MagicStudio/async_magicstudio.py +111 -0
- webscout/Provider/TTI/MagicStudio/sync_magicstudio.py +109 -0
- webscout/Provider/TTI/Nexra/README.md +155 -0
- webscout/Provider/TTI/Nexra/__init__.py +22 -0
- webscout/Provider/TTI/Nexra/async_nexra.py +286 -0
- webscout/Provider/TTI/Nexra/sync_nexra.py +258 -0
- webscout/Provider/TTI/PollinationsAI/README.md +146 -0
- webscout/Provider/TTI/PollinationsAI/__init__.py +23 -0
- webscout/Provider/TTI/PollinationsAI/async_pollinations.py +311 -0
- webscout/Provider/TTI/PollinationsAI/sync_pollinations.py +265 -0
- webscout/Provider/TTI/README.md +128 -0
- webscout/Provider/TTI/__init__.py +12 -0
- webscout/Provider/TTI/aiarta/README.md +134 -0
- webscout/Provider/TTI/aiarta/__init__.py +2 -0
- webscout/Provider/TTI/aiarta/async_aiarta.py +482 -0
- webscout/Provider/TTI/aiarta/sync_aiarta.py +440 -0
- webscout/Provider/TTI/artbit/README.md +100 -0
- webscout/Provider/TTI/artbit/__init__.py +22 -0
- webscout/Provider/TTI/artbit/async_artbit.py +155 -0
- webscout/Provider/TTI/artbit/sync_artbit.py +148 -0
- webscout/Provider/TTI/fastflux/README.md +129 -0
- webscout/Provider/TTI/fastflux/__init__.py +22 -0
- webscout/Provider/TTI/fastflux/async_fastflux.py +261 -0
- webscout/Provider/TTI/fastflux/sync_fastflux.py +252 -0
- webscout/Provider/TTI/huggingface/README.md +114 -0
- webscout/Provider/TTI/huggingface/__init__.py +22 -0
- webscout/Provider/TTI/huggingface/async_huggingface.py +199 -0
- webscout/Provider/TTI/huggingface/sync_huggingface.py +195 -0
- webscout/Provider/TTI/piclumen/README.md +161 -0
- webscout/Provider/TTI/piclumen/__init__.py +23 -0
- webscout/Provider/TTI/piclumen/async_piclumen.py +268 -0
- webscout/Provider/TTI/piclumen/sync_piclumen.py +233 -0
- webscout/Provider/TTI/pixelmuse/README.md +79 -0
- webscout/Provider/TTI/pixelmuse/__init__.py +4 -0
- webscout/Provider/TTI/pixelmuse/async_pixelmuse.py +249 -0
- webscout/Provider/TTI/pixelmuse/sync_pixelmuse.py +182 -0
- webscout/Provider/TTI/talkai/README.md +139 -0
- webscout/Provider/TTI/talkai/__init__.py +4 -0
- webscout/Provider/TTI/talkai/async_talkai.py +229 -0
- webscout/Provider/TTI/talkai/sync_talkai.py +207 -0
- webscout/Provider/TTS/README.md +192 -0
- webscout/Provider/TTS/__init__.py +9 -0
- webscout/Provider/TTS/base.py +159 -0
- webscout/Provider/TTS/deepgram.py +156 -0
- webscout/Provider/TTS/elevenlabs.py +111 -0
- webscout/Provider/TTS/gesserit.py +128 -0
- webscout/Provider/TTS/murfai.py +113 -0
- webscout/Provider/TTS/parler.py +111 -0
- webscout/Provider/TTS/speechma.py +580 -0
- webscout/Provider/TTS/sthir.py +94 -0
- webscout/Provider/TTS/streamElements.py +333 -0
- webscout/Provider/TTS/utils.py +280 -0
- webscout/Provider/TeachAnything.py +229 -0
- webscout/Provider/TextPollinationsAI.py +308 -0
- webscout/Provider/TwoAI.py +280 -0
- webscout/Provider/TypliAI.py +305 -0
- webscout/Provider/UNFINISHED/ChatHub.py +209 -0
- webscout/Provider/UNFINISHED/Youchat.py +330 -0
- webscout/Provider/UNFINISHED/liner_api_request.py +263 -0
- webscout/Provider/UNFINISHED/oivscode.py +351 -0
- webscout/Provider/UNFINISHED/test_lmarena.py +119 -0
- webscout/Provider/Venice.py +258 -0
- webscout/Provider/VercelAI.py +253 -0
- webscout/Provider/WiseCat.py +233 -0
- webscout/Provider/WrDoChat.py +370 -0
- webscout/Provider/Writecream.py +246 -0
- webscout/Provider/WritingMate.py +269 -0
- webscout/Provider/__init__.py +172 -0
- webscout/Provider/ai4chat.py +149 -0
- webscout/Provider/akashgpt.py +335 -0
- webscout/Provider/asksteve.py +220 -0
- webscout/Provider/cerebras.py +290 -0
- webscout/Provider/chatglm.py +215 -0
- webscout/Provider/cleeai.py +213 -0
- webscout/Provider/copilot.py +425 -0
- webscout/Provider/elmo.py +283 -0
- webscout/Provider/freeaichat.py +285 -0
- webscout/Provider/geminiapi.py +208 -0
- webscout/Provider/granite.py +235 -0
- webscout/Provider/hermes.py +266 -0
- webscout/Provider/julius.py +223 -0
- webscout/Provider/koala.py +170 -0
- webscout/Provider/learnfastai.py +325 -0
- webscout/Provider/llama3mitril.py +215 -0
- webscout/Provider/llmchat.py +258 -0
- webscout/Provider/llmchatco.py +306 -0
- webscout/Provider/lmarena.py +198 -0
- webscout/Provider/meta.py +801 -0
- webscout/Provider/multichat.py +364 -0
- webscout/Provider/samurai.py +223 -0
- webscout/Provider/scira_chat.py +299 -0
- webscout/Provider/scnet.py +243 -0
- webscout/Provider/searchchat.py +292 -0
- webscout/Provider/sonus.py +258 -0
- webscout/Provider/talkai.py +194 -0
- webscout/Provider/toolbaz.py +353 -0
- webscout/Provider/turboseek.py +266 -0
- webscout/Provider/typefully.py +202 -0
- webscout/Provider/typegpt.py +289 -0
- webscout/Provider/uncovr.py +368 -0
- webscout/Provider/x0gpt.py +299 -0
- webscout/Provider/yep.py +389 -0
- webscout/__init__.py +4 -2
- webscout/cli.py +3 -28
- webscout/conversation.py +35 -35
- webscout/litagent/Readme.md +276 -0
- webscout/litagent/__init__.py +29 -0
- webscout/litagent/agent.py +455 -0
- webscout/litagent/constants.py +60 -0
- webscout/litprinter/__init__.py +59 -0
- webscout/scout/README.md +402 -0
- webscout/scout/__init__.py +8 -0
- webscout/scout/core/__init__.py +7 -0
- webscout/scout/core/crawler.py +140 -0
- webscout/scout/core/scout.py +568 -0
- webscout/scout/core/search_result.py +96 -0
- webscout/scout/core/text_analyzer.py +63 -0
- webscout/scout/core/text_utils.py +277 -0
- webscout/scout/core/web_analyzer.py +52 -0
- webscout/scout/element.py +460 -0
- webscout/scout/parsers/__init__.py +69 -0
- webscout/scout/parsers/html5lib_parser.py +172 -0
- webscout/scout/parsers/html_parser.py +236 -0
- webscout/scout/parsers/lxml_parser.py +178 -0
- webscout/scout/utils.py +37 -0
- webscout/swiftcli/Readme.md +323 -0
- webscout/swiftcli/__init__.py +95 -0
- webscout/swiftcli/core/__init__.py +7 -0
- webscout/swiftcli/core/cli.py +297 -0
- webscout/swiftcli/core/context.py +104 -0
- webscout/swiftcli/core/group.py +241 -0
- webscout/swiftcli/decorators/__init__.py +28 -0
- webscout/swiftcli/decorators/command.py +221 -0
- webscout/swiftcli/decorators/options.py +220 -0
- webscout/swiftcli/decorators/output.py +252 -0
- webscout/swiftcli/exceptions.py +21 -0
- webscout/swiftcli/plugins/__init__.py +9 -0
- webscout/swiftcli/plugins/base.py +135 -0
- webscout/swiftcli/plugins/manager.py +262 -0
- webscout/swiftcli/utils/__init__.py +59 -0
- webscout/swiftcli/utils/formatting.py +252 -0
- webscout/swiftcli/utils/parsing.py +267 -0
- webscout/version.py +1 -1
- webscout/webscout_search.py +2 -182
- webscout/webscout_search_async.py +1 -179
- webscout/zeroart/README.md +89 -0
- webscout/zeroart/__init__.py +135 -0
- webscout/zeroart/base.py +66 -0
- webscout/zeroart/effects.py +101 -0
- webscout/zeroart/fonts.py +1239 -0
- {webscout-8.2.7.dist-info → webscout-8.2.8.dist-info}/METADATA +115 -60
- webscout-8.2.8.dist-info/RECORD +334 -0
- {webscout-8.2.7.dist-info → webscout-8.2.8.dist-info}/WHEEL +1 -1
- webscout-8.2.7.dist-info/RECORD +0 -26
- {webscout-8.2.7.dist-info → webscout-8.2.8.dist-info}/entry_points.txt +0 -0
- {webscout-8.2.7.dist-info → webscout-8.2.8.dist-info}/licenses/LICENSE.md +0 -0
- {webscout-8.2.7.dist-info → webscout-8.2.8.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"""
|
|
2
|
+
AsyncArtbitImager - Your go-to async provider for generating fire images with Artbit! ⚡
|
|
3
|
+
|
|
4
|
+
Examples:
|
|
5
|
+
>>> from webscout import AsyncArtbitImager
|
|
6
|
+
>>> import asyncio
|
|
7
|
+
>>>
|
|
8
|
+
>>> async def example():
|
|
9
|
+
... # Initialize provider
|
|
10
|
+
... provider = AsyncArtbitImager()
|
|
11
|
+
...
|
|
12
|
+
... # Generate a single image
|
|
13
|
+
... images = await provider.generate("Cool art")
|
|
14
|
+
... paths = await provider.save(images)
|
|
15
|
+
...
|
|
16
|
+
... # Generate multiple images with parameters
|
|
17
|
+
... images = await provider.generate(
|
|
18
|
+
... prompt="Epic dragon in cyberpunk city",
|
|
19
|
+
... amount=3,
|
|
20
|
+
... caption_model="sdxl",
|
|
21
|
+
... selected_ratio="1024",
|
|
22
|
+
... negative_prompt="blurry, bad quality"
|
|
23
|
+
... )
|
|
24
|
+
... paths = await provider.save(images, name="dragon", dir="outputs")
|
|
25
|
+
>>>
|
|
26
|
+
>>> # Run the example
|
|
27
|
+
>>> asyncio.run(example())
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
import aiohttp
|
|
31
|
+
import aiofiles
|
|
32
|
+
import asyncio
|
|
33
|
+
import os
|
|
34
|
+
from typing import Union, List
|
|
35
|
+
from webscout.AIbase import AsyncImageProvider
|
|
36
|
+
from webscout.litagent import LitAgent
|
|
37
|
+
|
|
38
|
+
agent = LitAgent()
|
|
39
|
+
|
|
40
|
+
class AsyncArtbitImager(AsyncImageProvider):
|
|
41
|
+
"""Your go-to async provider for generating fire images with Artbit! ⚡"""
|
|
42
|
+
|
|
43
|
+
def __init__(self, timeout: int = 60, proxies: dict = {}):
|
|
44
|
+
"""Initialize your async Artbit provider with custom settings! ⚙️
|
|
45
|
+
|
|
46
|
+
Args:
|
|
47
|
+
timeout (int): Request timeout in seconds (default: 60)
|
|
48
|
+
proxies (dict): Proxy settings for requests (default: {})
|
|
49
|
+
"""
|
|
50
|
+
self.url = "https://artbit.ai/api/generateImage"
|
|
51
|
+
self.headers = {
|
|
52
|
+
"User-Agent": agent.random(),
|
|
53
|
+
"Content-Type": "application/json",
|
|
54
|
+
"Accept": "application/json"
|
|
55
|
+
}
|
|
56
|
+
self.timeout = timeout
|
|
57
|
+
self.proxies = proxies
|
|
58
|
+
self.prompt: str = "AI-generated image - webscout"
|
|
59
|
+
self.image_extension: str = "png"
|
|
60
|
+
|
|
61
|
+
async def generate(
|
|
62
|
+
self,
|
|
63
|
+
prompt: str,
|
|
64
|
+
amount: int = 1,
|
|
65
|
+
caption_model: str = "sdxl",
|
|
66
|
+
selected_ratio: str = "1024",
|
|
67
|
+
negative_prompt: str = ""
|
|
68
|
+
) -> List[str]:
|
|
69
|
+
"""Generate some fire images asynchronously! ⚡
|
|
70
|
+
|
|
71
|
+
Args:
|
|
72
|
+
prompt (str): Your lit image description
|
|
73
|
+
amount (int): How many images to generate (default: 1)
|
|
74
|
+
caption_model (str): Which model to use (default: "sdxl")
|
|
75
|
+
selected_ratio (str): Image size ratio (default: "1024")
|
|
76
|
+
negative_prompt (str): What you don't want in the image (default: "")
|
|
77
|
+
|
|
78
|
+
Returns:
|
|
79
|
+
List[str]: Your generated image URLs
|
|
80
|
+
"""
|
|
81
|
+
assert bool(prompt), "Yo fam, prompt can't be empty! 🚫"
|
|
82
|
+
assert isinstance(amount, int), f"Amount gotta be an integer, not {type(amount)} 🤔"
|
|
83
|
+
assert amount > 0, "Amount gotta be greater than 0! 📈"
|
|
84
|
+
|
|
85
|
+
self.prompt = prompt
|
|
86
|
+
response: List[str] = []
|
|
87
|
+
|
|
88
|
+
payload = {
|
|
89
|
+
"captionInput": prompt,
|
|
90
|
+
"captionModel": caption_model,
|
|
91
|
+
"selectedRatio": selected_ratio,
|
|
92
|
+
"selectedSamples": str(amount),
|
|
93
|
+
"negative_prompt": negative_prompt
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
try:
|
|
97
|
+
async with aiohttp.ClientSession(headers=self.headers) as session:
|
|
98
|
+
async with session.post(self.url, json=payload, timeout=self.timeout) as resp:
|
|
99
|
+
resp.raise_for_status()
|
|
100
|
+
response_data = await resp.json()
|
|
101
|
+
imgs = response_data.get("imgs", [])
|
|
102
|
+
if imgs:
|
|
103
|
+
response.extend(imgs)
|
|
104
|
+
|
|
105
|
+
except aiohttp.ClientError as e:
|
|
106
|
+
raise
|
|
107
|
+
|
|
108
|
+
return response
|
|
109
|
+
|
|
110
|
+
async def save(
|
|
111
|
+
self,
|
|
112
|
+
response: List[str],
|
|
113
|
+
name: str = None,
|
|
114
|
+
dir: str = os.getcwd(),
|
|
115
|
+
filenames_prefix: str = "",
|
|
116
|
+
) -> List[str]:
|
|
117
|
+
"""Save your fire images asynchronously! 💾
|
|
118
|
+
|
|
119
|
+
Args:
|
|
120
|
+
response (List[str]): Your image URLs to save
|
|
121
|
+
name (str, optional): Custom name (default: uses prompt)
|
|
122
|
+
dir (str, optional): Where to save (default: current directory)
|
|
123
|
+
filenames_prefix (str, optional): Add prefix to filenames
|
|
124
|
+
|
|
125
|
+
Returns:
|
|
126
|
+
List[str]: Where your images were saved
|
|
127
|
+
"""
|
|
128
|
+
assert isinstance(response, list), f"Response gotta be a list, not {type(response)} 🤔"
|
|
129
|
+
name = self.prompt if name is None else name
|
|
130
|
+
|
|
131
|
+
filenames = []
|
|
132
|
+
count = 0
|
|
133
|
+
|
|
134
|
+
async with aiohttp.ClientSession(headers=self.headers) as session:
|
|
135
|
+
for img_url in response:
|
|
136
|
+
def complete_path():
|
|
137
|
+
count_value = "" if count == 0 else f"_{count}"
|
|
138
|
+
return os.path.join(dir, name + count_value + "." + self.image_extension)
|
|
139
|
+
|
|
140
|
+
while os.path.isfile(complete_path()):
|
|
141
|
+
count += 1
|
|
142
|
+
|
|
143
|
+
absolute_path_to_file = complete_path()
|
|
144
|
+
filenames.append(filenames_prefix + os.path.split(absolute_path_to_file)[1])
|
|
145
|
+
|
|
146
|
+
try:
|
|
147
|
+
async with session.get(img_url, timeout=self.timeout) as resp:
|
|
148
|
+
resp.raise_for_status()
|
|
149
|
+
async with aiofiles.open(absolute_path_to_file, "wb") as fh:
|
|
150
|
+
await fh.write(await resp.read())
|
|
151
|
+
|
|
152
|
+
except aiohttp.ClientError as e:
|
|
153
|
+
raise
|
|
154
|
+
|
|
155
|
+
return filenames
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"""
|
|
2
|
+
ArtbitImager - Your go-to provider for generating fire images with Artbit! 🔥
|
|
3
|
+
|
|
4
|
+
Examples:
|
|
5
|
+
>>> from webscout import ArtbitImager
|
|
6
|
+
>>>
|
|
7
|
+
>>> # Initialize provider
|
|
8
|
+
>>> provider = ArtbitImager()
|
|
9
|
+
>>>
|
|
10
|
+
>>> # Generate a single image
|
|
11
|
+
>>> images = provider.generate("Cool art")
|
|
12
|
+
>>> paths = provider.save(images)
|
|
13
|
+
>>>
|
|
14
|
+
>>> # Generate multiple images with parameters
|
|
15
|
+
>>> images = provider.generate(
|
|
16
|
+
... prompt="Epic dragon in cyberpunk city",
|
|
17
|
+
... amount=3,
|
|
18
|
+
... caption_model="sdxl",
|
|
19
|
+
... selected_ratio="1024",
|
|
20
|
+
... negative_prompt="blurry, bad quality"
|
|
21
|
+
... )
|
|
22
|
+
>>> paths = provider.save(images, name="dragon", dir="outputs")
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
import cloudscraper
|
|
26
|
+
import os
|
|
27
|
+
import requests
|
|
28
|
+
from typing import Union, List
|
|
29
|
+
from webscout.AIbase import ImageProvider
|
|
30
|
+
from webscout.litagent import LitAgent
|
|
31
|
+
|
|
32
|
+
agent = LitAgent()
|
|
33
|
+
|
|
34
|
+
class ArtbitImager(ImageProvider):
|
|
35
|
+
"""Your go-to provider for generating fire images with Artbit! 🔥"""
|
|
36
|
+
|
|
37
|
+
def __init__(self, timeout: int = 60, proxies: dict = {}):
|
|
38
|
+
"""Initialize your Artbit provider with custom settings! ⚙️
|
|
39
|
+
|
|
40
|
+
Args:
|
|
41
|
+
timeout (int): Request timeout in seconds (default: 60)
|
|
42
|
+
proxies (dict): Proxy settings for requests (default: {})
|
|
43
|
+
"""
|
|
44
|
+
self.url = "https://artbit.ai/api/generateImage"
|
|
45
|
+
self.scraper = cloudscraper.create_scraper()
|
|
46
|
+
self.scraper.headers.update({"User-Agent": agent.random()})
|
|
47
|
+
self.scraper.proxies.update(proxies)
|
|
48
|
+
self.timeout = timeout
|
|
49
|
+
self.prompt: str = "AI-generated image - webscout"
|
|
50
|
+
self.image_extension: str = "png"
|
|
51
|
+
|
|
52
|
+
def generate(
|
|
53
|
+
self,
|
|
54
|
+
prompt: str,
|
|
55
|
+
amount: int = 1,
|
|
56
|
+
caption_model: str = "sdxl",
|
|
57
|
+
selected_ratio: str = "1024",
|
|
58
|
+
negative_prompt: str = ""
|
|
59
|
+
) -> List[str]:
|
|
60
|
+
"""Generate some fire images! 🎨
|
|
61
|
+
|
|
62
|
+
Args:
|
|
63
|
+
prompt (str): Your lit image description
|
|
64
|
+
amount (int): How many images to generate (default: 1)
|
|
65
|
+
caption_model (str): Which model to use (default: "sdxl")
|
|
66
|
+
selected_ratio (str): Image size ratio (default: "1024")
|
|
67
|
+
negative_prompt (str): What you don't want in the image (default: "")
|
|
68
|
+
|
|
69
|
+
Returns:
|
|
70
|
+
List[str]: Your generated image URLs
|
|
71
|
+
"""
|
|
72
|
+
assert bool(prompt), "Yo fam, prompt can't be empty! 🚫"
|
|
73
|
+
assert isinstance(amount, int), f"Amount gotta be an integer, not {type(amount)} 🤔"
|
|
74
|
+
assert amount > 0, "Amount gotta be greater than 0! 📈"
|
|
75
|
+
|
|
76
|
+
self.prompt = prompt
|
|
77
|
+
response: List[str] = []
|
|
78
|
+
|
|
79
|
+
payload = {
|
|
80
|
+
"captionInput": prompt,
|
|
81
|
+
"captionModel": caption_model,
|
|
82
|
+
"selectedRatio": selected_ratio,
|
|
83
|
+
"selectedSamples": str(amount),
|
|
84
|
+
"negative_prompt": negative_prompt
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
try:
|
|
88
|
+
resp = self.scraper.post(self.url, json=payload, timeout=self.timeout)
|
|
89
|
+
resp.raise_for_status()
|
|
90
|
+
|
|
91
|
+
response_data = resp.json()
|
|
92
|
+
imgs = response_data.get("imgs", [])
|
|
93
|
+
|
|
94
|
+
if imgs:
|
|
95
|
+
response.extend(imgs)
|
|
96
|
+
|
|
97
|
+
except requests.RequestException as e:
|
|
98
|
+
raise
|
|
99
|
+
|
|
100
|
+
return response
|
|
101
|
+
|
|
102
|
+
def save(
|
|
103
|
+
self,
|
|
104
|
+
response: List[str],
|
|
105
|
+
name: str = None,
|
|
106
|
+
dir: str = os.getcwd(),
|
|
107
|
+
filenames_prefix: str = "",
|
|
108
|
+
) -> List[str]:
|
|
109
|
+
"""Save your fire images! 💾
|
|
110
|
+
|
|
111
|
+
Args:
|
|
112
|
+
response (List[str]): Your image URLs to save
|
|
113
|
+
name (str, optional): Custom name (default: uses prompt)
|
|
114
|
+
dir (str, optional): Where to save (default: current directory)
|
|
115
|
+
filenames_prefix (str, optional): Add prefix to filenames
|
|
116
|
+
|
|
117
|
+
Returns:
|
|
118
|
+
List[str]: Where your images were saved
|
|
119
|
+
"""
|
|
120
|
+
assert isinstance(response, list), f"Response gotta be a list, not {type(response)} 🤔"
|
|
121
|
+
name = self.prompt if name is None else name
|
|
122
|
+
|
|
123
|
+
filenames = []
|
|
124
|
+
count = 0
|
|
125
|
+
|
|
126
|
+
for img_url in response:
|
|
127
|
+
def complete_path():
|
|
128
|
+
count_value = "" if count == 0 else f"_{count}"
|
|
129
|
+
return os.path.join(dir, name + count_value + "." + self.image_extension)
|
|
130
|
+
|
|
131
|
+
while os.path.isfile(complete_path()):
|
|
132
|
+
count += 1
|
|
133
|
+
|
|
134
|
+
absolute_path_to_file = complete_path()
|
|
135
|
+
filenames.append(filenames_prefix + os.path.split(absolute_path_to_file)[1])
|
|
136
|
+
|
|
137
|
+
try:
|
|
138
|
+
img_response = requests.get(img_url, stream=True, timeout=self.timeout)
|
|
139
|
+
img_response.raise_for_status()
|
|
140
|
+
|
|
141
|
+
with open(absolute_path_to_file, "wb") as fh:
|
|
142
|
+
for chunk in img_response.iter_content(chunk_size=8192):
|
|
143
|
+
fh.write(chunk)
|
|
144
|
+
|
|
145
|
+
except requests.exceptions.RequestException as e:
|
|
146
|
+
raise
|
|
147
|
+
|
|
148
|
+
return filenames
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# 🎨 FastFlux Image Generator
|
|
2
|
+
|
|
3
|
+
Generate amazing images with FastFlux's AI art generator! 🚀
|
|
4
|
+
|
|
5
|
+
## 🌟 Features
|
|
6
|
+
|
|
7
|
+
- Fast and reliable image generation
|
|
8
|
+
- Both sync and async implementations
|
|
9
|
+
- Smart retry mechanism
|
|
10
|
+
- Multiple model options
|
|
11
|
+
- Different aspect ratios
|
|
12
|
+
- Proxy support
|
|
13
|
+
- Custom timeouts
|
|
14
|
+
- Easy-to-use interface
|
|
15
|
+
|
|
16
|
+
## 📦 Installation
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
pip install webscout
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## 🚀 Quick Start
|
|
23
|
+
|
|
24
|
+
### Sync Usage
|
|
25
|
+
|
|
26
|
+
```python
|
|
27
|
+
from webscout import FastFluxImager
|
|
28
|
+
|
|
29
|
+
# Initialize the provider
|
|
30
|
+
provider = FastFluxImager()
|
|
31
|
+
|
|
32
|
+
# Generate a single image
|
|
33
|
+
images = provider.generate("A beautiful sunset over mountains")
|
|
34
|
+
paths = provider.save(images)
|
|
35
|
+
|
|
36
|
+
# Generate multiple images with parameters
|
|
37
|
+
images = provider.generate(
|
|
38
|
+
prompt="Epic dragon breathing fire",
|
|
39
|
+
amount=3,
|
|
40
|
+
model="flux_1_dev",
|
|
41
|
+
size="16_9"
|
|
42
|
+
)
|
|
43
|
+
paths = provider.save(images, dir="dragon_pics")
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Async Usage
|
|
47
|
+
|
|
48
|
+
```python
|
|
49
|
+
from webscout import AsyncFastFluxImager
|
|
50
|
+
import asyncio
|
|
51
|
+
|
|
52
|
+
async def generate_images():
|
|
53
|
+
provider = AsyncFastFluxImager()
|
|
54
|
+
|
|
55
|
+
# Generate multiple images
|
|
56
|
+
images = await provider.generate(
|
|
57
|
+
"Epic dragon in cyberpunk city",
|
|
58
|
+
amount=2,
|
|
59
|
+
model="flux_1_schnell"
|
|
60
|
+
)
|
|
61
|
+
paths = await provider.save(images, dir="outputs")
|
|
62
|
+
|
|
63
|
+
# Run the async function
|
|
64
|
+
asyncio.run(generate_images())
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## 🎨 Available Models
|
|
68
|
+
|
|
69
|
+
- `flux_1_schnell` - Fast generation model (default)
|
|
70
|
+
- `flux_1_dev` - Developer model with detailed outputs
|
|
71
|
+
- `sana_1_6b` - SANA 1.6B model for specialized images
|
|
72
|
+
|
|
73
|
+
## ⚙️ Configuration
|
|
74
|
+
|
|
75
|
+
```python
|
|
76
|
+
# Custom settings
|
|
77
|
+
provider = FastFluxImager(
|
|
78
|
+
timeout=120, # Longer timeout
|
|
79
|
+
proxies={
|
|
80
|
+
'http': 'http://proxy:8080',
|
|
81
|
+
'https': 'http://proxy:8080'
|
|
82
|
+
},
|
|
83
|
+
logging=True # Enable logging
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
# Advanced usage
|
|
87
|
+
images = provider.generate(
|
|
88
|
+
prompt="A shiny red sports car",
|
|
89
|
+
amount=3,
|
|
90
|
+
model="flux_1_dev",
|
|
91
|
+
size="16_9",
|
|
92
|
+
is_public=False,
|
|
93
|
+
max_retries=5,
|
|
94
|
+
retry_delay=3
|
|
95
|
+
)
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## 💾 Save Options
|
|
99
|
+
|
|
100
|
+
```python
|
|
101
|
+
# Save with custom options
|
|
102
|
+
paths = provider.save(
|
|
103
|
+
images,
|
|
104
|
+
name="sports_car", # Custom name
|
|
105
|
+
dir="my_images", # Custom directory
|
|
106
|
+
filenames_prefix="v1_" # Add prefix
|
|
107
|
+
)
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## 🛡️ Error Handling
|
|
111
|
+
|
|
112
|
+
```python
|
|
113
|
+
try:
|
|
114
|
+
images = provider.generate("Cool art")
|
|
115
|
+
paths = provider.save(images)
|
|
116
|
+
except ValueError as e:
|
|
117
|
+
print(f"Invalid input: {e}")
|
|
118
|
+
except Exception as e:
|
|
119
|
+
print(f"Generation failed: {e}")
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## 💡 Tips
|
|
123
|
+
|
|
124
|
+
1. Use clear, descriptive prompts
|
|
125
|
+
2. `flux_1_schnell` is faster but `flux_1_dev` gives better quality
|
|
126
|
+
3. Set longer timeouts for better quality models
|
|
127
|
+
4. Enable proxies for better reliability
|
|
128
|
+
5. Use retry mechanism for stability
|
|
129
|
+
6. Save images with meaningful names
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"""
|
|
2
|
+
FastFlux Image Generator - Your go-to provider for generating fire images! 🔥
|
|
3
|
+
|
|
4
|
+
Examples:
|
|
5
|
+
>>> # Sync Usage
|
|
6
|
+
>>> from webscout import FastFluxImager
|
|
7
|
+
>>> provider = FastFluxImager()
|
|
8
|
+
>>> images = provider.generate("Cool art")
|
|
9
|
+
>>> paths = provider.save(images)
|
|
10
|
+
>>>
|
|
11
|
+
>>> # Async Usage
|
|
12
|
+
>>> from webscout import AsyncFastFluxImager
|
|
13
|
+
>>> async def example():
|
|
14
|
+
... provider = AsyncFastFluxImager()
|
|
15
|
+
... images = await provider.generate("Epic dragon")
|
|
16
|
+
... paths = await provider.save(images)
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
from .sync_fastflux import FastFluxImager
|
|
20
|
+
from .async_fastflux import AsyncFastFluxImager
|
|
21
|
+
|
|
22
|
+
__all__ = ["FastFluxImager", "AsyncFastFluxImager"]
|