Metadata-Version: 2.4
Name: livekit-browser
Version: 0.1.2
Summary: Chromium Embedded Framework (CEF) bindings for LiveKit
Project-URL: Documentation, https://docs.livekit.io
Project-URL: Website, https://livekit.io/
Project-URL: Source, https://github.com/livekit/cloud-browser
Author-email: LiveKit <hello@livekit.io>
License-Expression: Apache-2.0
License-File: LICENSE.txt
Keywords: audio,browser,cef,livekit,realtime,video,webrtc
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Multimedia :: Sound/Audio
Classifier: Topic :: Multimedia :: Video
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Requires-Python: >=3.12.0
Requires-Dist: livekit>=1.0.0
Requires-Dist: numpy>=1.26
Description-Content-Type: text/markdown

# Browser plugin for LiveKit Agents

Chromium Embedded Framework (CEF) for LiveKit Agents

## Development notes

### Avoid excessive asyncio task creation

Audio is very sensitive to event loop latency. Avoid creating short-lived tasks
(`asyncio.create_task`, `asyncio.ensure_future`) on hot paths like paint
callbacks, audio callbacks, and input event dispatch. Each task adds scheduling
overhead that accumulates into audible jitter.

Prefer a single persistent loop task that drains a queue (see
`_input_sender_loop`, `_audio_loop` in `session.py`). The total number of
long-lived tasks in steady state should stay in the low tens — not scale with
frame rate or input frequency.
