# Changelog

All notable changes to the RunBlob Python SDK will be documented in this file.

Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.3.0] - 2026-03-18

### Added
- **ChatGPT** image generation and editing (`client.chatgpt`)
- **Veo 3** video generation — Fast, Quality, HD, 4K (`client.veo`)
- Universal `WebhookEvent` — works with all resources (images, video, photo)
- `WebhookEvent.id` and `WebhookEvent.result_url` universal properties
- `list()` method for Kling resource
- MIT LICENSE file

### Fixed
- API key no longer leaks in `ClientConfig.__repr__()` — masked output
- Cache key determinism — uses `json.dumps(sort_keys=True)` instead of `str(dict)`
- Removed hardcoded API keys from example files
- Removed unused `Optional` imports

## [0.2.0] - 2026-03-18

### Added
- **Kling** video and image generation (`client.kling`)
  - 12 video models (1.6, 2.1, 2.5, 2.6, 3.0)
  - O1 and O3 video generation (up to 15s)
  - O1 and O3 photo generation (up to 4K)
  - Motion control support
  - First + end frame mode
  - Batch video generation

## [0.1.1] - 2026-03-18

### Changed
- Updated README with Nano Banana examples
- Updated PyPI description

## [0.1.0] - 2026-03-18

### Added
- Initial release
- **Nano Banana (Gemini)** image generation (`client.nanobanana`)
- Async-only client with `httpx` + HTTP/2
- Connection pooling (100 concurrent connections)
- Automatic retry with exponential backoff + jitter
- Circuit breaker (CLOSED → OPEN → HALF_OPEN)
- Token bucket rate limiter (50 rps, burst ×2)
- TTL LRU cache for GET requests
- Auto-polling with `generate_and_wait()`
- Batch generation with semaphore concurrency control
- Webhook parsing and HMAC-SHA256 verification
- Full type hints (py.typed, Pydantic v2)
- `X-Request-ID` correlation on every request
- Idempotency key support
