Official Python SDK for Oaktis - AI-powered image & video generation
Project description
oaktis
🔗 Try Oaktis → https://oaktis.com
Official Python SDK for Oaktis - AI-powered image & video generation.
Features
- 🎬 Video Generation - Create AI-powered videos from text prompts
- 🖼️ Image Generation - Generate images with advanced AI models
- 🔄 Async Support - Built on httpx with full async/await support
- 📝 Type Hints - Complete type annotations with Pydantic models
- 🛡️ Error Handling - Comprehensive error types and messages
- 🔌 Context Managers - Automatic resource cleanup
Installation
pip install oaktis
Quick Start
Async Usage (Recommended)
import asyncio
from oaktis import OaktisClient, VideoGenerateParams
async def main():
client = OaktisClient(api_key="your-api-key")
# Generate a video
job = await client.video.generate(
VideoGenerateParams(
prompt="a cat surfing on ocean waves at sunset",
duration=5,
resolution="1080p"
)
)
print(f"Job ID: {job.id}")
# Check job status
status = await client.video.get_status(job.id)
print(f"Status: {status.status}")
print(f"Progress: {status.progress}%")
# Get completed job with video URL
if status.status == "completed":
completed_job = await client.video.get_job(job.id)
print(f"Video URL: {completed_job.video_url}")
await client.close()
asyncio.run(main())
Sync Usage
from oaktis import OaktisClient, VideoGenerateParams
client = OaktisClient(api_key="your-api-key")
# Generate a video (sync)
job = client.video.generate_sync(
VideoGenerateParams(prompt="a cat surfing")
)
print(f"Job ID: {job.id}")
# Check status (sync)
status = client.video.get_status_sync(job.id)
print(f"Status: {status.status}")
client.close_sync()
Context Manager
import asyncio
from oaktis import OaktisClient, ImageGenerateParams
async def main():
async with OaktisClient(api_key="your-api-key") as client:
job = await client.image.generate(
ImageGenerateParams(
prompt="a futuristic city at night with neon lights",
size="1024x1024",
n=1
)
)
completed_job = await client.image.get_job(job.id)
print(f"Image URLs: {completed_job.image_urls}")
asyncio.run(main())
API Reference
Client Initialization
from oaktis import OaktisClient
client = OaktisClient(
api_key="your-api-key", # Required
base_url="https://api.oaktis.com", # Optional
timeout=60.0 # Optional, in seconds
)
Video API
Generate Video (Async)
from oaktis import VideoGenerateParams
job = await client.video.generate(
VideoGenerateParams(
prompt="a cat surfing", # Required
duration=5, # Optional
resolution="1080p" # Optional: "720p", "1080p", "4k"
)
)
Generate Video (Sync)
job = client.video.generate_sync(
VideoGenerateParams(prompt="a cat surfing")
)
Get Video Status
# Async
status = await client.video.get_status(job.id)
# Sync
status = client.video.get_status_sync(job.id)
Get Video Job Details
# Async
job = await client.video.get_job(job_id)
# Sync
job = client.video.get_job_sync(job_id)
Image API
Generate Image (Async)
from oaktis import ImageGenerateParams
job = await client.image.generate(
ImageGenerateParams(
prompt="a futuristic city", # Required
size="1024x1024", # Optional
n=1 # Optional: number of images
)
)
Generate Image (Sync)
job = client.image.generate_sync(
ImageGenerateParams(prompt="a futuristic city")
)
Get Image Status
# Async
status = await client.image.get_status(job.id)
# Sync
status = client.image.get_status_sync(job.id)
Get Image Job Details
# Async
job = await client.image.get_job(job_id)
# Sync
job = client.image.get_job_sync(job_id)
Error Handling
The SDK raises APIError exceptions with detailed information:
from oaktis import OaktisClient, APIError, VideoGenerateParams
async def main():
client = OaktisClient(api_key="your-api-key")
try:
job = await client.video.generate(
VideoGenerateParams(prompt="test")
)
except APIError as e:
print(f"Error Code: {e.code}")
print(f"Message: {e.message}")
print(f"HTTP Status: {e.status}")
print(f"Details: {e.details}")
finally:
await client.close()
Common error codes:
UNAUTHORIZED- Invalid API keyTIMEOUT- Request timeoutAPI_ERROR- General API errorVALIDATION_ERROR- Invalid parameters
Type Hints
All functions and classes are fully typed. Use your IDE's autocomplete for better development experience:
from oaktis import (
OaktisClient,
VideoGenerateParams,
ImageGenerateParams,
VideoJob,
ImageJob,
JobStatus,
APIError
)
Advanced Usage
Custom Timeout
# 2 minute timeout
client = OaktisClient(
api_key="your-api-key",
timeout=120.0
)
Custom Base URL
client = OaktisClient(
api_key="your-api-key",
base_url="https://custom-api.example.com"
)
Polling for Completion
import asyncio
from oaktis import OaktisClient, VideoGenerateParams
async def wait_for_completion(client, job_id, max_wait=300):
"""Poll for job completion with timeout"""
start_time = asyncio.get_event_loop().time()
while True:
status = await client.video.get_status(job_id)
if status.status == "completed":
return await client.video.get_job(job_id)
if status.status == "failed":
raise Exception(f"Job failed: {status.error}")
# Check timeout
if asyncio.get_event_loop().time() - start_time > max_wait:
raise TimeoutError("Job did not complete in time")
# Wait before next poll
await asyncio.sleep(2)
async def main():
async with OaktisClient(api_key="your-api-key") as client:
job = await client.video.generate(
VideoGenerateParams(prompt="a cat surfing")
)
completed_job = await wait_for_completion(client, job.id)
print(f"Video URL: {completed_job.video_url}")
asyncio.run(main())
Requirements
- Python 3.9+
- httpx >= 0.25.0
- pydantic >= 2.5.0
Links
- 🌐 Website: https://oaktis.com
- 📚 Documentation: https://docs.oaktis.com
- 🐙 GitHub: https://github.com/Oaktis/Oaktis
- 🐛 Issues: https://github.com/Oaktis/Oaktis/issues
License
MIT © Oaktis
Need an API key? Get started at oaktis.com
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 oaktis-0.1.2.tar.gz.
File metadata
- Download URL: oaktis-0.1.2.tar.gz
- Upload date:
- Size: 5.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1b63fd84caf079ee9292de3bf2d100d9461583bea3c4831850c179369526f016
|
|
| MD5 |
386107504cda295719ebefe3e63b6699
|
|
| BLAKE2b-256 |
f12ce4aea53b7ea3ac167ace1c50a3e2272c009aae8b3803703a1e2e8c81a274
|
File details
Details for the file oaktis-0.1.2-py3-none-any.whl.
File metadata
- Download URL: oaktis-0.1.2-py3-none-any.whl
- Upload date:
- Size: 6.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8cc37218aa8f52f35f654fa94856f51b78bd545858d5774b4c3ceb019590f6f3
|
|
| MD5 |
9db8ff35057039851224f024d313b3f1
|
|
| BLAKE2b-256 |
4cf1308136daeec682a9db316b2d3f4a1f34317615a92fa8d30fb18e6a5236f3
|