livekit-plugins-spatius 1.8.3


pip install livekit-plugins-spatius

  Latest version

Released: Sep 23, 2026


Meta
Author: LiveKit
Requires Python: >=3.10.0

Classifiers

Intended Audience
  • Developers

License
  • OSI Approved :: Apache Software License

Programming Language
  • Python :: 3
  • Python :: 3 :: Only
  • Python :: 3.10

Topic
  • Multimedia :: Sound/Audio
  • Multimedia :: Video
  • Scientific/Engineering :: Artificial Intelligence

LiveKit Plugins Spatius

Agent Framework plugin for Spatius avatars.

See the Spatius documentation for Spatius account setup and avatar configuration.

Client-side rendering

Spatius avatars are rendered on the client instead of being sent as conventional server-rendered video. The avatar's LiveKit video track carries motion data in otherwise black frames, so a standard LiveKit video renderer will display a black screen. Your frontend must use the Spatius client SDK and LiveKit adapter to decode the track and render the avatar.

See the client integration guide and the reference frontend for a working implementation.

Installation

pip install livekit-plugins-spatius

Usage

from livekit.plugins import spatius

avatar = spatius.AvatarSession()
await avatar.start(session, room=ctx.room)

The plugin reads SPATIUS_API_KEY, SPATIUS_APP_ID, and SPATIUS_AVATAR_ID from the environment when constructor arguments are omitted.

Warm-up

At session start, the Spatius SDK resolves the ingress region via the bootstrap API (with the default region="auto") and exchanges the API key for a session token — two sequential HTTPS round trips on the room-join critical path. Register the plugin's prewarm function to move that work into process warm-up, before a job is dispatched:

from livekit import agents
from livekit.plugins import spatius


def prewarm(proc: agents.JobProcess):
    spatius.prewarm(proc)


if __name__ == "__main__":
    agents.cli.run_app(
        agents.WorkerOptions(entrypoint_fnc=entrypoint, prewarm_fnc=prewarm)
    )

The spatius SDK caches the resolved region (5 minutes) and the prefetched session token (until shortly before expiry) process-wide, so AvatarSession.start() in the dispatched job reuses them and goes straight to the ingress WebSocket connect. It also opens throwaway TLS connections to the console and ingress endpoints to prime DNS and the shared TLS session cache. Warm-up is best-effort and never fails process initialization; without it, everything resolves inline as before.

Session-token prefetch assumes the Spatius backend allows a token to back more than one session; opt out with spatius.prewarm(proc, prefetch_session_token=False).

Extras: None
Dependencies:
livekit-agents (>=1.8.3)
spatius[opus] (>=1.1.0)