<h1 align="center">
StableHordeAPI.py
</h1>
<h2 align="center">Simple wrapper around Stable Horde API</h2>
# Content
- [Installation](#installation)
- [Usage](#usage)
- [Examples](#examples)
- [License](#license)
# Installation
```
pip install stablehordeapi.py
```
# Usage
```python
import asyncio
from stablehorde_api import StableHordeAPI
async def main():
client = StableHordeAPI("Your Stable Horde token here")
await client.generate_from_txt(
"Futuristic cyberpunk landscape, 8k, hyper realistic, cinematic"
)
asyncio.run(main())
```
This code will generate an image based on your prompt and save it as "{unix timestamp}\_0.webp" in your current directory.
Additionally, you can specify file name:
```python
await client.generate_from_txt(
"Your prompt...",
filename="my_image"
)
```
In that case, your file will be saved as "my\_image.webp"
However, you'll probably want more control over how image is generated. So, for example, you can do this:
```python
import asyncio
from stablehorde_api import GenerationInput, ModelGenerationInputStable
async def main():
client = StableHordeAPI("Your Stable Horde token here")
payload = GenerationInput(
"masterpiece, best quality, ((Hu Tao)), brown hair, long hair, flower-shaped pupils",
params=ModelGenerationInputStable(
height=512,
width=768,
steps=50,
post_processing=['RealESRGAN_x4plus']
),
nsfw=True,
censor_nsfw=False,
models=['Anything Diffusion'],
n=5
)
# payload can also be a dict, which is useful, if something new added
txt2img_rsp = await client.txt2img_request(payload)
img_uuid = txt2img_rsp.id
done = False
while not done:
# Checking every second if image is generated
await asyncio.sleep(1)
generate_check = await client.generate_check(img_uuid)
if generate_check.done == 1:
done = True
# Generating a status which has all generations (in our case,
# there should be 5 generations, because n is set to 5)
generate_status = await client.generate_status(img_uuid)
generations = generate_status.generations
```
After that, all generations will be in `generations` variable. To access first image, use `generations[0].img`
# Examples
This example will generate 3 Hu Tao images using Anything Diffusion model.
```python
import asyncio
import base64
import aiofiles
from stablehorde_api import GenerationInput, ModelGenerationInputStable
async def main():
client = StableHordeAPI("Your Stable Horde token here")
payload = GenerationInput(
"masterpiece, best quality, ((Hu Tao)), brown hair, long hair, flower-shaped pupils",
models=['Anything Diffusion'],
n=3
)
txt2img_rsp = await client.txt2img_request(payload)
img_uuid = txt2img_rsp.id
done = False
while not done:
await asyncio.sleep(1)
generate_check = await client.generate_check(img_uuid)
if generate_check.done == 1:
done = True
generate_status = await client.generate_status(img_uuid)
generations = generate_status.generations
for num, generation in enumerate(generations):
new_filename = f'{filename}_{num}.webp'
async with aiofiles.open(new_filename, 'wb') as file:
b64_bytes = generation.img.encode('utf-8')
img_bytes = base64.b64decode(b64_bytes)
awat file.write(img_bytes)
```
If you set `r2` to true, then you will need to request content from the link in generations. You can do that by using aiohttp:
```python
import aiohttp
...
aiohttp_client = aiohttp.ClientSession()
...
img_rsp = (await aiohttp_client.request(url=generation.img)).content
img_bytes = await img_rsp.read()
```
# License
[MIT License](./LICENSE)
Raw data
{
"_id": null,
"home_page": "https://github.com/timius100/StableHordeAPI.py",
"name": "stablehordeapi-py",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.8,<4.0",
"maintainer_email": "",
"keywords": "stablehorde,async,asyncio",
"author": "Timur Bogdanov",
"author_email": "timurbogdanov2008@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/53/43/2c1c9cea39fee70a7afd4cb3a49f7686de79e89f0f85f8d7aeca6e70973b/stablehordeapi_py-0.1.0.tar.gz",
"platform": null,
"description": "<h1 align=\"center\">\nStableHordeAPI.py\n</h1>\n<h2 align=\"center\">Simple wrapper around Stable Horde API</h2>\n\n# Content\n- [Installation](#installation)\n- [Usage](#usage)\n- [Examples](#examples)\n- [License](#license)\n\n# Installation\n```\npip install stablehordeapi.py\n```\n\n# Usage\n```python\nimport asyncio\n\nfrom stablehorde_api import StableHordeAPI\n\nasync def main():\n client = StableHordeAPI(\"Your Stable Horde token here\")\n await client.generate_from_txt(\n \"Futuristic cyberpunk landscape, 8k, hyper realistic, cinematic\"\n )\n\nasyncio.run(main())\n```\nThis code will generate an image based on your prompt and save it as \"{unix timestamp}\\_0.webp\" in your current directory.\n\nAdditionally, you can specify file name:\n```python\nawait client.generate_from_txt(\n \"Your prompt...\",\n filename=\"my_image\"\n)\n```\nIn that case, your file will be saved as \"my\\_image.webp\"\n\nHowever, you'll probably want more control over how image is generated. So, for example, you can do this:\n```python\nimport asyncio\nfrom stablehorde_api import GenerationInput, ModelGenerationInputStable\n\nasync def main():\n client = StableHordeAPI(\"Your Stable Horde token here\")\n payload = GenerationInput(\n \"masterpiece, best quality, ((Hu Tao)), brown hair, long hair, flower-shaped pupils\",\n\tparams=ModelGenerationInputStable(\n\t height=512,\n\t width=768,\n\t steps=50,\n\t post_processing=['RealESRGAN_x4plus']\n\t),\n\tnsfw=True,\n\tcensor_nsfw=False,\n\tmodels=['Anything Diffusion'],\n\tn=5\n )\n # payload can also be a dict, which is useful, if something new added\n txt2img_rsp = await client.txt2img_request(payload)\n img_uuid = txt2img_rsp.id\n\n done = False\n while not done:\n # Checking every second if image is generated\n await asyncio.sleep(1)\n generate_check = await client.generate_check(img_uuid)\n\tif generate_check.done == 1:\n\t done = True\n\n # Generating a status which has all generations (in our case,\n # there should be 5 generations, because n is set to 5)\n generate_status = await client.generate_status(img_uuid)\n generations = generate_status.generations\n```\nAfter that, all generations will be in `generations` variable. To access first image, use `generations[0].img`\n\n# Examples\nThis example will generate 3 Hu Tao images using Anything Diffusion model.\n```python\nimport asyncio\nimport base64\n\nimport aiofiles\nfrom stablehorde_api import GenerationInput, ModelGenerationInputStable\n\nasync def main():\n client = StableHordeAPI(\"Your Stable Horde token here\")\n payload = GenerationInput(\n \"masterpiece, best quality, ((Hu Tao)), brown hair, long hair, flower-shaped pupils\",\n\tmodels=['Anything Diffusion'],\n\tn=3\n )\n txt2img_rsp = await client.txt2img_request(payload)\n img_uuid = txt2img_rsp.id\n\n done = False\n while not done:\n await asyncio.sleep(1)\n generate_check = await client.generate_check(img_uuid)\n\tif generate_check.done == 1:\n\t done = True\n\n generate_status = await client.generate_status(img_uuid)\n generations = generate_status.generations\n for num, generation in enumerate(generations):\n new_filename = f'{filename}_{num}.webp'\n async with aiofiles.open(new_filename, 'wb') as file:\n b64_bytes = generation.img.encode('utf-8')\n img_bytes = base64.b64decode(b64_bytes)\n awat file.write(img_bytes)\n```\nIf you set `r2` to true, then you will need to request content from the link in generations. You can do that by using aiohttp:\n```python\nimport aiohttp\n...\n\naiohttp_client = aiohttp.ClientSession()\n...\n\nimg_rsp = (await aiohttp_client.request(url=generation.img)).content\nimg_bytes = await img_rsp.read()\n```\n\n# License\n[MIT License](./LICENSE)\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Library for using Stable Horde API in Python",
"version": "0.1.0",
"split_keywords": [
"stablehorde",
"async",
"asyncio"
],
"urls": [
{
"comment_text": "",
"digests": {
"md5": "e99f59b1f7231efefb898f78a678d88d",
"sha256": "7b0f1d735c65db6051c2013c0d74571c0aa74a6b0ffee6016b99236c092fd93a"
},
"downloads": -1,
"filename": "stablehordeapi_py-0.1.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "e99f59b1f7231efefb898f78a678d88d",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8,<4.0",
"size": 6165,
"upload_time": "2022-12-14T00:06:59",
"upload_time_iso_8601": "2022-12-14T00:06:59.400167Z",
"url": "https://files.pythonhosted.org/packages/9d/fc/15a565651cd7047223240e84e638f11ae96233e4d90d17b56da3786c02cc/stablehordeapi_py-0.1.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "f6e3b02d93b983fe82e5f3dbffa8c789",
"sha256": "0cd696cc9ddf795e7f5e5571284e620c0d9671dd32eb7872e3f6a6384a103b06"
},
"downloads": -1,
"filename": "stablehordeapi_py-0.1.0.tar.gz",
"has_sig": false,
"md5_digest": "f6e3b02d93b983fe82e5f3dbffa8c789",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8,<4.0",
"size": 5903,
"upload_time": "2022-12-14T00:07:01",
"upload_time_iso_8601": "2022-12-14T00:07:01.061507Z",
"url": "https://files.pythonhosted.org/packages/53/43/2c1c9cea39fee70a7afd4cb3a49f7686de79e89f0f85f8d7aeca6e70973b/stablehordeapi_py-0.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2022-12-14 00:07:01",
"github": true,
"gitlab": false,
"bitbucket": false,
"github_user": "timius100",
"github_project": "StableHordeAPI.py",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "stablehordeapi-py"
}