oaktis


Nameoaktis JSON
Version 0.1.12 PyPI version JSON
download
home_pageNone
SummaryOfficial Python SDK for Oaktis - AI-powered image & video generation
upload_time2025-10-28 06:03:33
maintainerNone
docs_urlNone
authorNone
requires_python>=3.9
licenseMIT
keywords ai api generation image oaktis video
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # oaktis

> **🔗 Try Oaktis → [https://oaktis.com](https://oaktis.com/?r=pp)**

Official Python SDK for Oaktis - AI-powered image & video generation.

[![PyPI version](https://img.shields.io/pypi/v/oaktis)](https://pypi.org/project/oaktis/)
[![Python versions](https://img.shields.io/pypi/pyversions/oaktis)](https://pypi.org/project/oaktis/)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)

## 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

```bash
pip install oaktis
```

## Quick Start

### Async Usage (Recommended)

```python
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

```python
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

```python
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

```python
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)

```python
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)

```python
job = client.video.generate_sync(
    VideoGenerateParams(prompt="a cat surfing")
)
```

#### Get Video Status

```python
# Async
status = await client.video.get_status(job.id)

# Sync
status = client.video.get_status_sync(job.id)
```

#### Get Video Job Details

```python
# Async
job = await client.video.get_job(job_id)

# Sync
job = client.video.get_job_sync(job_id)
```

### Image API

#### Generate Image (Async)

```python
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)

```python
job = client.image.generate_sync(
    ImageGenerateParams(prompt="a futuristic city")
)
```

#### Get Image Status

```python
# Async
status = await client.image.get_status(job.id)

# Sync
status = client.image.get_status_sync(job.id)
```

#### Get Image Job Details

```python
# 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:

```python
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 key
- `TIMEOUT` - Request timeout
- `API_ERROR` - General API error
- `VALIDATION_ERROR` - Invalid parameters

## Type Hints

All functions and classes are fully typed. Use your IDE's autocomplete for better development experience:

```python
from oaktis import (
    OaktisClient,
    VideoGenerateParams,
    ImageGenerateParams,
    VideoJob,
    ImageJob,
    JobStatus,
    APIError
)
```

## Advanced Usage

### Custom Timeout

```python
# 2 minute timeout
client = OaktisClient(
    api_key="your-api-key",
    timeout=120.0
)
```

### Custom Base URL

```python
client = OaktisClient(
    api_key="your-api-key",
    base_url="https://custom-api.example.com"
)
```

### Polling for Completion

```python
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](https://oaktis.com)
- 📚 **Documentation**: [https://docs.oaktis.com](https://docs.oaktis.com)
- 🐙 **GitHub**: [https://github.com/Oaktis/Oaktis](https://github.com/Oaktis/Oaktis)
- 🐛 **Issues**: [https://github.com/Oaktis/Oaktis/issues](https://github.com/Oaktis/Oaktis/issues)

## License

MIT © Oaktis

---

**Need an API key?** Get started at [oaktis.com](https://oaktis.com/?r=pp)

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "oaktis",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "ai, api, generation, image, oaktis, video",
    "author": null,
    "author_email": "Oaktis <dev@oaktis.com>",
    "download_url": "https://files.pythonhosted.org/packages/05/4b/7e6ee1b05deeee0ac0e665ae1b16342c798bf11ce19d84e774c91755ecca/oaktis-0.1.12.tar.gz",
    "platform": null,
    "description": "# oaktis\n\n> **\ud83d\udd17 Try Oaktis \u2192 [https://oaktis.com](https://oaktis.com/?r=pp)**\n\nOfficial Python SDK for Oaktis - AI-powered image & video generation.\n\n[![PyPI version](https://img.shields.io/pypi/v/oaktis)](https://pypi.org/project/oaktis/)\n[![Python versions](https://img.shields.io/pypi/pyversions/oaktis)](https://pypi.org/project/oaktis/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)\n\n## Features\n\n- \ud83c\udfac **Video Generation** - Create AI-powered videos from text prompts\n- \ud83d\uddbc\ufe0f **Image Generation** - Generate images with advanced AI models\n- \ud83d\udd04 **Async Support** - Built on httpx with full async/await support\n- \ud83d\udcdd **Type Hints** - Complete type annotations with Pydantic models\n- \ud83d\udee1\ufe0f **Error Handling** - Comprehensive error types and messages\n- \ud83d\udd0c **Context Managers** - Automatic resource cleanup\n\n## Installation\n\n```bash\npip install oaktis\n```\n\n## Quick Start\n\n### Async Usage (Recommended)\n\n```python\nimport asyncio\nfrom oaktis import OaktisClient, VideoGenerateParams\n\nasync def main():\n    client = OaktisClient(api_key=\"your-api-key\")\n\n    # Generate a video\n    job = await client.video.generate(\n        VideoGenerateParams(\n            prompt=\"a cat surfing on ocean waves at sunset\",\n            duration=5,\n            resolution=\"1080p\"\n        )\n    )\n\n    print(f\"Job ID: {job.id}\")\n\n    # Check job status\n    status = await client.video.get_status(job.id)\n    print(f\"Status: {status.status}\")\n    print(f\"Progress: {status.progress}%\")\n\n    # Get completed job with video URL\n    if status.status == \"completed\":\n        completed_job = await client.video.get_job(job.id)\n        print(f\"Video URL: {completed_job.video_url}\")\n\n    await client.close()\n\nasyncio.run(main())\n```\n\n### Sync Usage\n\n```python\nfrom oaktis import OaktisClient, VideoGenerateParams\n\nclient = OaktisClient(api_key=\"your-api-key\")\n\n# Generate a video (sync)\njob = client.video.generate_sync(\n    VideoGenerateParams(prompt=\"a cat surfing\")\n)\n\nprint(f\"Job ID: {job.id}\")\n\n# Check status (sync)\nstatus = client.video.get_status_sync(job.id)\nprint(f\"Status: {status.status}\")\n\nclient.close_sync()\n```\n\n### Context Manager\n\n```python\nimport asyncio\nfrom oaktis import OaktisClient, ImageGenerateParams\n\nasync def main():\n    async with OaktisClient(api_key=\"your-api-key\") as client:\n        job = await client.image.generate(\n            ImageGenerateParams(\n                prompt=\"a futuristic city at night with neon lights\",\n                size=\"1024x1024\",\n                n=1\n            )\n        )\n\n        completed_job = await client.image.get_job(job.id)\n        print(f\"Image URLs: {completed_job.image_urls}\")\n\nasyncio.run(main())\n```\n\n## API Reference\n\n### Client Initialization\n\n```python\nfrom oaktis import OaktisClient\n\nclient = OaktisClient(\n    api_key=\"your-api-key\",              # Required\n    base_url=\"https://api.oaktis.com\",   # Optional\n    timeout=60.0                         # Optional, in seconds\n)\n```\n\n### Video API\n\n#### Generate Video (Async)\n\n```python\nfrom oaktis import VideoGenerateParams\n\njob = await client.video.generate(\n    VideoGenerateParams(\n        prompt=\"a cat surfing\",      # Required\n        duration=5,                  # Optional\n        resolution=\"1080p\"           # Optional: \"720p\", \"1080p\", \"4k\"\n    )\n)\n```\n\n#### Generate Video (Sync)\n\n```python\njob = client.video.generate_sync(\n    VideoGenerateParams(prompt=\"a cat surfing\")\n)\n```\n\n#### Get Video Status\n\n```python\n# Async\nstatus = await client.video.get_status(job.id)\n\n# Sync\nstatus = client.video.get_status_sync(job.id)\n```\n\n#### Get Video Job Details\n\n```python\n# Async\njob = await client.video.get_job(job_id)\n\n# Sync\njob = client.video.get_job_sync(job_id)\n```\n\n### Image API\n\n#### Generate Image (Async)\n\n```python\nfrom oaktis import ImageGenerateParams\n\njob = await client.image.generate(\n    ImageGenerateParams(\n        prompt=\"a futuristic city\",           # Required\n        size=\"1024x1024\",                     # Optional\n        n=1                                   # Optional: number of images\n    )\n)\n```\n\n#### Generate Image (Sync)\n\n```python\njob = client.image.generate_sync(\n    ImageGenerateParams(prompt=\"a futuristic city\")\n)\n```\n\n#### Get Image Status\n\n```python\n# Async\nstatus = await client.image.get_status(job.id)\n\n# Sync\nstatus = client.image.get_status_sync(job.id)\n```\n\n#### Get Image Job Details\n\n```python\n# Async\njob = await client.image.get_job(job_id)\n\n# Sync\njob = client.image.get_job_sync(job_id)\n```\n\n## Error Handling\n\nThe SDK raises `APIError` exceptions with detailed information:\n\n```python\nfrom oaktis import OaktisClient, APIError, VideoGenerateParams\n\nasync def main():\n    client = OaktisClient(api_key=\"your-api-key\")\n\n    try:\n        job = await client.video.generate(\n            VideoGenerateParams(prompt=\"test\")\n        )\n    except APIError as e:\n        print(f\"Error Code: {e.code}\")\n        print(f\"Message: {e.message}\")\n        print(f\"HTTP Status: {e.status}\")\n        print(f\"Details: {e.details}\")\n    finally:\n        await client.close()\n```\n\nCommon error codes:\n- `UNAUTHORIZED` - Invalid API key\n- `TIMEOUT` - Request timeout\n- `API_ERROR` - General API error\n- `VALIDATION_ERROR` - Invalid parameters\n\n## Type Hints\n\nAll functions and classes are fully typed. Use your IDE's autocomplete for better development experience:\n\n```python\nfrom oaktis import (\n    OaktisClient,\n    VideoGenerateParams,\n    ImageGenerateParams,\n    VideoJob,\n    ImageJob,\n    JobStatus,\n    APIError\n)\n```\n\n## Advanced Usage\n\n### Custom Timeout\n\n```python\n# 2 minute timeout\nclient = OaktisClient(\n    api_key=\"your-api-key\",\n    timeout=120.0\n)\n```\n\n### Custom Base URL\n\n```python\nclient = OaktisClient(\n    api_key=\"your-api-key\",\n    base_url=\"https://custom-api.example.com\"\n)\n```\n\n### Polling for Completion\n\n```python\nimport asyncio\nfrom oaktis import OaktisClient, VideoGenerateParams\n\nasync def wait_for_completion(client, job_id, max_wait=300):\n    \"\"\"Poll for job completion with timeout\"\"\"\n    start_time = asyncio.get_event_loop().time()\n\n    while True:\n        status = await client.video.get_status(job_id)\n\n        if status.status == \"completed\":\n            return await client.video.get_job(job_id)\n\n        if status.status == \"failed\":\n            raise Exception(f\"Job failed: {status.error}\")\n\n        # Check timeout\n        if asyncio.get_event_loop().time() - start_time > max_wait:\n            raise TimeoutError(\"Job did not complete in time\")\n\n        # Wait before next poll\n        await asyncio.sleep(2)\n\nasync def main():\n    async with OaktisClient(api_key=\"your-api-key\") as client:\n        job = await client.video.generate(\n            VideoGenerateParams(prompt=\"a cat surfing\")\n        )\n\n        completed_job = await wait_for_completion(client, job.id)\n        print(f\"Video URL: {completed_job.video_url}\")\n\nasyncio.run(main())\n```\n\n## Requirements\n\n- Python 3.9+\n- httpx >= 0.25.0\n- pydantic >= 2.5.0\n\n## Links\n\n- \ud83c\udf10 **Website**: [https://oaktis.com](https://oaktis.com)\n- \ud83d\udcda **Documentation**: [https://docs.oaktis.com](https://docs.oaktis.com)\n- \ud83d\udc19 **GitHub**: [https://github.com/Oaktis/Oaktis](https://github.com/Oaktis/Oaktis)\n- \ud83d\udc1b **Issues**: [https://github.com/Oaktis/Oaktis/issues](https://github.com/Oaktis/Oaktis/issues)\n\n## License\n\nMIT \u00a9 Oaktis\n\n---\n\n**Need an API key?** Get started at [oaktis.com](https://oaktis.com/?r=pp)\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Official Python SDK for Oaktis - AI-powered image & video generation",
    "version": "0.1.12",
    "project_urls": {
        "Documentation": "https://docs.oaktis.com",
        "Homepage": "https://oaktis.com/?r=pp",
        "Issues": "https://github.com/Oaktis/Oaktis/issues",
        "Repository": "https://github.com/Oaktis/Oaktis"
    },
    "split_keywords": [
        "ai",
        " api",
        " generation",
        " image",
        " oaktis",
        " video"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e5f9c316ad82baf4f0f509409b221ac4e0d22016e25ab00c587a01373f78d9b3",
                "md5": "134d3c6c5b4472f6a44f2eb4e67e8a43",
                "sha256": "dfefdb24c08625560bf5dadbe0df2ff11a161b20bb0d8ef4149e707da47e6952"
            },
            "downloads": -1,
            "filename": "oaktis-0.1.12-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "134d3c6c5b4472f6a44f2eb4e67e8a43",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 6720,
            "upload_time": "2025-10-28T06:03:31",
            "upload_time_iso_8601": "2025-10-28T06:03:31.990290Z",
            "url": "https://files.pythonhosted.org/packages/e5/f9/c316ad82baf4f0f509409b221ac4e0d22016e25ab00c587a01373f78d9b3/oaktis-0.1.12-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "054b7e6ee1b05deeee0ac0e665ae1b16342c798bf11ce19d84e774c91755ecca",
                "md5": "67085b8d92a37a830cba13d5c82dcc8d",
                "sha256": "d27e60411e381ccb411de2623842e7d507328f344b793ffe31558f71c489dda4"
            },
            "downloads": -1,
            "filename": "oaktis-0.1.12.tar.gz",
            "has_sig": false,
            "md5_digest": "67085b8d92a37a830cba13d5c82dcc8d",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 5826,
            "upload_time": "2025-10-28T06:03:33",
            "upload_time_iso_8601": "2025-10-28T06:03:33.163175Z",
            "url": "https://files.pythonhosted.org/packages/05/4b/7e6ee1b05deeee0ac0e665ae1b16342c798bf11ce19d84e774c91755ecca/oaktis-0.1.12.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-28 06:03:33",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Oaktis",
    "github_project": "Oaktis",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "oaktis"
}
        
Elapsed time: 4.48607s