Python client library for Siray AI API
Project description
Siray Python SDK
The official Python client library for Siray AI - a platform for AI-powered image and video generation.
Installation
Install the package using pip:
pip install siray
Or install from source:
git clone https://github.com/siray-ai/siray-python.git
cd siray-python
pip install .
Quick Start
Authentication
Get your API key from Siray AI Dashboard and set it as an environment variable:
export SIRAY_API_KEY="your-api-key-here"
Or pass it directly when initializing the client:
from siray import Siray
client = Siray(api_key="your-api-key-here")
Image Generation
Image-to-Image (Flux 1.1 Pro Ultra I2i)
from siray import Siray
client = Siray()
# Generate image asynchronously
response = client.image.generate_async(
model="black-forest-labs/flux-1.1-pro-ultra-i2i",
prompt="A beautiful sunset over mountains with vibrant colors",
image="https://example.com/input-image.jpg"
)
print(f"Task ID: {response.task_id}")
Query Task Status
# After starting an async generation, query its status
status = client.image.query_task(response.task_id)
if status.is_completed():
print(f"✓ Completed!")
for i, url in enumerate(status.outputs, 1):
print(f" Image {i}: {url}")
elif status.is_processing():
print(f"⏳ Processing... {status.progress}")
elif status.is_failed():
print(f"✗ Failed: {status.fail_reason}")
Video Generation
from siray import Siray
client = Siray()
# Generate video asynchronously
response = client.video.generate_async(
model="your-video-model",
prompt="A cat playing piano in a cozy room"
)
print(f"Task ID: {response.task_id}")
API Reference
Client
Siray(api_key=None, base_url="https://api.siray.ai")
Main client for interacting with Siray AI API.
Parameters:
api_key(str, optional): API key for authentication. If not provided, reads fromSIRAY_API_KEYenvironment variable.base_url(str, optional): Base URL for the API. Default:https://api.siray.ai
Attributes:
image: Image generation namespacevideo: Video generation namespace
Image
image.generate_async(model, prompt, image, **kwargs)
Generate an image asynchronously using image-to-image models.
Parameters:
model(str): Model identifier (e.g.,"black-forest-labs/flux-1.1-pro-ultra-i2i")prompt(str): Text prompt for image generationimage(str): Input image (URL or base64 encoded string)**kwargs: Additional model-specific parameters
Returns: GenerationResponse object with the following attributes:
task_id(str): Unique identifier for the generation taskraw_response(dict): Raw API response data
image.query_task(task_id)
Query the status and result of an image generation task.
Parameters:
task_id(str): Task ID returned from the image generation request
Returns: TaskStatus object with the following attributes:
code(str): Response code (e.g., 'success')message(str): Response messagetask_id(str): Task identifieraction(str): Action type (e.g., 'imageGenerate')status(str): Current task status (e.g., 'SUCCESS', 'PENDING', 'FAILED')outputs(List[str]): List of output URLsfail_reason(str | None): Failure reason if task failedprogress(str | None): Progress string (e.g., '100%')submit_time(int | None): Unix timestamp when submittedstart_time(int | None): Unix timestamp when startedfinish_time(int | None): Unix timestamp when finishedresult(property): First output URL (for backward compatibility)progress_percent(property): Progress as integer (0-100)is_completed()(method): Check if task is completedis_processing()(method): Check if task is still processingis_failed()(method): Check if task has failed
Example:
# Start async generation
response = client.image.generate_async(
model="black-forest-labs/flux-kontext-i2i-max",
prompt="A beautiful sunset",
image="https://example.com/input.jpg"
)
# Query task status
status = client.image.query_task(response.task_id)
if status.is_completed():
print(f"Generated {len(status.outputs)} image(s)")
for url in status.outputs:
print(f" - {url}")
elif status.is_failed():
print(f"Error: {status.fail_reason}")
Video
video.generate_async(model, prompt, **kwargs)
Generate a video asynchronously.
Parameters:
model(str): Model identifierprompt(str): Text prompt for video generation**kwargs: Additional model-specific parameters (e.g., duration, fps)
Returns: GenerationResponse object with the following attributes:
task_id(str): Unique identifier for the generation taskraw_response(dict): Raw API response data
video.query_task(task_id)
Query the status and result of a video generation task.
Parameters:
task_id(str): Task ID returned from the video generation request
Returns: TaskStatus object (same structure as image query)
Example:
# Start async generation
response = client.video.generate_async(
model="your-video-model",
prompt="A cat playing piano"
)
# Query task status
status = client.video.query_task(response.task_id)
if status.is_completed():
print(f"Generated {len(status.outputs)} video(s)")
for url in status.outputs:
print(f" - {url}")
elif status.is_failed():
print(f"Error: {status.fail_reason}")
Response Models
The SDK provides typed response objects instead of raw dictionaries:
GenerationResponse
Returned by generate_async() methods. Contains:
task_id: Unique task identifierraw_response: Raw API response datato_dict(): Convert to dictionary
TaskStatus
Returned by query_task() method. Contains:
code: Response code (e.g., 'success')message: Response messagetask_id: Task identifieraction: Action type (e.g., 'imageGenerate')status: Current status (e.g., 'SUCCESS', 'PENDING', 'FAILED')outputs: List of output URLsfail_reason: Failure reason if task failedprogress: Progress string (e.g., '100%')submit_time: Unix timestamp when submittedstart_time: Unix timestamp when startedfinish_time: Unix timestamp when finishedresult(property): First output URL (backward compatibility)progress_percent(property): Progress as integer (0-100)is_completed(): Check if completedis_processing(): Check if processingis_failed(): Check if failedto_dict(): Convert to dictionary
Error Handling
The SDK provides specific exception classes for different error scenarios:
from siray import Siray, SirayError, AuthenticationError, BadRequestError
client = Siray()
try:
result = client.image.generate_async(
model="black-forest-labs/flux-1.1-pro-ultra-i2i",
prompt="A beautiful sunset",
image="https://example.com/image.jpg"
)
except AuthenticationError as e:
print(f"Authentication failed: {e.message}")
except BadRequestError as e:
print(f"Invalid request: {e.message}")
print(f"Error code: {e.code}")
print(f"Error type: {e.error_type}")
except SirayError as e:
print(f"API error: {e.message}")
print(f"Status code: {e.status_code}")
Exception Types
SirayError: Base exception for all SDK errorsAuthenticationError: Raised when authentication fails (401)BadRequestError: Raised when the request is invalid (400)InternalServerError: Raised when the server encounters an error (500)APIError: Raised for general API errors
Examples
See the examples directory for more comprehensive usage examples:
Development
Setup Development Environment
# Clone the repository
git clone https://github.com/siray-ai/siray-python.git
cd siray-python
# Install development dependencies
pip install -r requirements-dev.txt
# Install package in editable mode
pip install .
Running Tests
pytest tests/
Code Formatting
# Format code
black siray/
# Check code style
flake8 siray/
# Sort imports
isort siray/
# Type checking
mypy siray/
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
License
This project is licensed under the MIT License - see the LICENSE file for details.
Support
- Documentation: https://docs.siray.ai
- API Reference: https://api.siray.ai/docs
- Issues: https://github.com/siray-ai/siray-python/issues
- Email: support@siray.ai
Changelog
See CHANGELOG.md for a list of changes in each release.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file siray-0.1.0.tar.gz.
File metadata
- Download URL: siray-0.1.0.tar.gz
- Upload date:
- Size: 19.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.9.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0bad711b7e5caaeaba1fe46b5733523338f9535fc60711612357f683dd7e6ba0
|
|
| MD5 |
414b63cded59d3c8e313515251081493
|
|
| BLAKE2b-256 |
aa9b35917a7c81a68bb35141c4f96a7789ec59f7071f05116ed8eb89b974f39b
|
File details
Details for the file siray-0.1.0-py3-none-any.whl.
File metadata
- Download URL: siray-0.1.0-py3-none-any.whl
- Upload date:
- Size: 15.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.9.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
04d061d2454d25e77e05415dd7a0320d4393c7f915da5dbe67af4ddd6dcac9a3
|
|
| MD5 |
dcb36be3664573545b99819cc16a1a7b
|
|
| BLAKE2b-256 |
dde1e7f0ef3347c3859303530eb05e3affc574b863517a260dee0059b879ede2
|