Metadata-Version: 2.4
Name: omniflash-sdk
Version: 0.1.0
Summary: Omni Flash Python SDK — generate short videos (with synchronized audio) and images via the Gemini Omni Flash family of models.
Author: Omni Flash
License: MIT
Project-URL: Homepage, https://omniflash.net/
Project-URL: Documentation, https://omniflash.net/api-docs
Project-URL: Source, https://omniflash.net/
Keywords: omni flash,omniflash,gemini omni flash,ai video,ai image,seedance
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Multimedia :: Video
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: requests>=2.25
Dynamic: license-file

# Omni Flash Python SDK

Python client for [Gemini Omni Flash](https://omniflash.net/) — generate short video clips (with synchronized audio) and images using Google's **Gemini Omni Flash** family of models.

[Gemini Omni Flash](https://omniflash.net/) hosts the Omni Flash family (`seedance-2` for text/image → video + audio, `gpt-image-2` and `nano-banana-2` for text/image → image) behind one REST API.

## Install

```bash
pip install omniflash-sdk
```

## Get an API key

Sign in at **[Gemini Omni Flash](https://omniflash.net/)**, open the account page, and create a `sk-…` token. Then export it:

```bash
export OMNIFLASH_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
```

## Quick start

```python
from omniflash_sdk import OmniFlash

client = OmniFlash()  # reads OMNIFLASH_API_KEY

# One-shot: create and wait for the result
task = client.run(
    model_id="seedance-2",
    prompt="a kettle whistles as steam rises, cozy kitchen, warm light",
    aspect_ratio="16:9",
)
print(task.video_url)
print(task.audio_url)  # synchronized audio track
```

### Lower level: create + poll yourself

```python
from omniflash_sdk import OmniFlash, TaskStatus

client = OmniFlash(api_key="sk-...")

task = client.create_task(
    model_id="gpt-image-2",
    prompt="cyberpunk corgi, neon rim light",
    aspect_ratio="1:1",
)
print(task.task_id)

while not task.done:
    task = client.get_task(task.task_id)

assert task.task_status == TaskStatus.SUCCESS
print(task.image_url)
```

## Supported models

| `model_id`      | Modality           | Output                |
| --------------- | ------------------ | --------------------- |
| `seedance-2`    | text/image → video | `video_url` + `audio_url` |
| `gpt-image-2`   | text/image → image | `image_url`           |
| `nano-banana-2` | text/image → image | `image_url`           |

See the live model list and pricing on [Gemini Omni Flash](https://omniflash.net/).

## API surface

- `OmniFlash(api_key=None, base_url=..., timeout=60.0)`
- `client.create_task(model_id, prompt, image_urls=None, aspect_ratio=None, **extra) -> Task`
- `client.get_task(task_id) -> Task`
- `client.run(model_id, prompt, ..., poll_interval=3.0, max_wait=600.0) -> Task`
- `Task` fields: `task_id`, `task_status` (1=queued, 2=running, 3=success, 4=failed), `image_url`, `video_url`, `audio_url`, `task_type`, `model_id`, `credits`, `created_at`, `output_url`, `done`.

Errors are raised as `OmniFlashError`.

## Links

- Website & account: [Gemini Omni Flash](https://omniflash.net/)
- API docs: <https://omniflash.net/api-docs>

## License

MIT
