Observed since 20 Oct, 17:48 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
abyssale
Official Python SDK for the Abyssale API — image, video and PDF generation.
Official Python client for the Abyssale API — generate images, videos, HTML5 banners and print-ready PDFs from your designs.
📖 Full reference: developers.abyssale.com/sdks/python — every method, configuration, error handling, retry behaviour and the polling helpers.
pip install abyssale
Requires Python 3.10+. This release models API version v2026-10-19 — see
CHANGELOG.md for the
SDK-to-API version pairing, and abyssale.__api_version__ to read it at runtime.
from abyssale import Abyssale
with Abyssale() as client: # reads ABYSSALE_API_KEY
design = client.get_design("64238d01-d402-474b-8c2d-fbc957e9d290")
banner = client.generate_image(design.id, {
"elements": {"text_title": {"payload": "Summer sale — 40% off"}},
"template_format_name": "facebook-feed",
})
print(banner.file.cdn_url)
Async is the same surface:
import asyncio
from abyssale import AsyncAbyssale
async def main():
async with AsyncAbyssale() as client:
accepted = await client.generate_multi_format_media(design_id, {
"elements": {"text_title": {"payload": "Summer sale — 40% off"}},
"template_format_names": ["facebook-feed", "instagram-post"],
})
result = await client.wait_for_generation_request(accepted.generation_request_id)
for banner in result.banners:
print(banner.file.cdn_url)
asyncio.run(main())
Methods return the result and raise on failure. Branch on the API's machine-readable id, never
on the message:
from abyssale import AbyssaleAPIError
try:
client.generate_image(design_id, {...})
except AbyssaleAPIError as err:
print(err.status, err.id, err.message, err.errors)
operationId snake_cased,
plus two wait_for_* polling helpers —
every method200, request bodies pass through untouched —
request bodies and responsesid, errors and retry_after —
errorsABYSSALE_API_KEY, ABYSSALE_TIMEOUT_MS, ABYSSALE_MAX_RETRIES,
ABYSSALE_MAX_RETRY_WAIT_MS) —
configuration ·
what is retried, and what is notabyssale.webhooks, which imports only the standard library
— no client and no API key needed in a receiver process —
signature verificationRunnable scripts are in examples/,
including a complete webhook receiver. Each one names its own command:
ABYSSALE_API_KEY=your-key python examples/generate_image.py
See AGENTS.md for the architecture, how to regenerate the models from the OpenAPI spec, and how to add an endpoint.
Download counts and popularity will appear here as the collector receives them.
| Package / target | Requirement | Relationship |
|---|---|---|
httpxEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | httpx>=0.27 | runtime |
pydanticEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | pydantic>=2.7 | runtime |
datamodel-code-generatorEnvironment{
"extras": "",
"marker": "extra == \"codegen\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | datamodel-code-generator>=0.25; extra == "codegen" | runtime |
pyyamlEnvironment{
"extras": "",
"marker": "extra == \"codegen\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | pyyaml>=6; extra == "codegen" | runtime |
anyioEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | anyio>=4; extra == "dev" | runtime |
buildEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | build>=1.2; extra == "dev" | runtime |
mypyEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | mypy>=1.10; extra == "dev" | runtime |
pytest-asyncioEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | pytest-asyncio>=0.23; extra == "dev" | runtime |
pytestEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | pytest>=8; extra == "dev" | runtime |
respxEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | respx>=0.21; extra == "dev" | runtime |
ruffEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | ruff>=0.5; extra == "dev" | runtime |
twineEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | twine>=5; extra == "dev" | runtime |
bdist_wheel · 64.95 KB · Python py3
sdist · 60.82 KB · Python source
Shared repository data · GitHub
Observed since 20 Oct, 17:48 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package_version:e08dfc8a9b334e26f6a14ec0d824eee362874172ebd119ef10b1f0c6a8733d72