Metadata-Version: 2.5
Name: render-lab-tasks-elevenlabs
Version: 0.1.0
Summary: elevenlabs tasks for Render Workflows
Project-URL: Repository, https://github.com/render-lab/render-tasks-python
License-Expression: MIT
License-File: LICENSE
Requires-Python: >=3.12
Requires-Dist: httpx<0.29,>=0.28
Requires-Dist: render-lab-media-contract<0.2,>=0.1.0
Requires-Dist: render-lab-tasks-core<0.2,>=0.1.1
Requires-Dist: render-lab-triggers<0.2,>=0.1.0
Requires-Dist: render==1.0.1
Description-Content-Type: text/markdown

# render-lab-tasks-elevenlabs

Twelve ElevenLabs voice, audio and dubbing tasks, with raw injectable async
implementations in `render_lab_tasks_elevenlabs.tasks`. The root is inert.

## Environment

`ELEVENLABS_API_KEY` is required lazily for vendor requests. Source downloads use
only source headers; signed PUT destinations use only destination headers.

## Media and polling

Audio outputs are bounded base64 (at most 1 MiB) or an uploaded reference to a
signed PUT destination. Streams stop immediately upon exceeding their byte limit.
Inline media and destination contracts are validated; invalid byte budgets fail.
Dubbing URL inputs are passed to ElevenLabs directly, matching TS, so source headers
and maxSourceBytes cannot constrain that server-side download. Use an inline source
when local validation is required. Await checks status once and polls through the
durable retry policy. Deletes converge on 404. Vendor HTTP retries are disabled.
Live verification requires a disposable voice/dubbing project and remains pending.

The pinned TS SDK ignores `listVoices.search`; this port preserves that behavior.
Destination validation happens before audio generation, and transport failures do
not expose signed destination URLs. See ADR-0016.

## Webhook adapter

`render_lab_tasks_elevenlabs.webhooks.elevenlabs_adapter(on_event, ...)` returns a
registration-free adapter for `render_lab_triggers`. The callback receives the
verified event and returns `{"task": "namespace.task", "args": [event]}` or `None`.
The signing credential `ELEVENLABS_WEBHOOK_SECRET` is read inside verification unless
provided explicitly. Importing this module does not register tasks. Signature
checks use the raw body; live delivery remains in the testing backlog.

## Installation

```sh
pip install render-lab-tasks-elevenlabs==0.1.0
```
