Runway Characters (GWM-1 Avatars)
Runway's realtime conversational avatars, photoreal or animated, powered by its GWM-1 world model. Usable through LiveKit, a React SDK or a hosted widget.
Overview
Best for: Creative or branded characters where visual quality matters more than sub-second latency.
At a glance
Latency is vendor server-side turnaround via a secondary summary. Session cap conflicts: 30 min (help center) vs 5 min (API reference). $0.20/min plus 2 credits upfront per session.
User mic; or your LiveKit agent's audio
Runway character voice, or your LiveKit TTS (which overrides the character voice)
Not captured.
Vendor claim (via secondary summary): 1.75 s server-side turnaround from end of user speech to character response; 24 fps.
Not captured.
Not verified.
Features
- photoreal and animated characters
- custom characters (avatar_id) or presets (preset_id)
- LiveKit plugin (Python and Node)
- React SDK
- hosted widget
Pricing
| What | Price | Unit |
|---|---|---|
| gwm1_avatars session | 2 credits upfront, then 2 credits per 6 seconds | per session |
| Credit price | $0.01 | per credit |
2 credits per 6 s = 20 credits/min at $0.01, plus a $0.02 upfront charge per session
Free tier: None found.
Source: docs.dev.runwayml.com
Setup
- Create a project and API key at dev.runwayml.com and buy credits.
- Create a character (avatar_id) or pick a preset (preset_id).
- Install livekit-agents[runway] and set RUNWAYML_API_SECRET.
- Start runway.AvatarSession before your AgentSession; pass exactly one of avatar_id or preset_id.
Endpoint
LiveKit plugin (livekit-agents[runway]); Runway API at docs.dev.runwayml.com
Authentication
RUNWAYML_API_SECRET
Quick start python
# uv add "livekit-agents[runway]~=1.8" env: RUNWAYML_API_SECRET
from livekit import agents
from livekit.agents import AgentServer, AgentSession
from livekit.plugins import runway
server = AgentServer()
@server.rtc_session(agent_name="my-agent")
async def my_agent(ctx: agents.JobContext):
session = AgentSession(
# stt=..., llm=..., tts=...
)
avatar = runway.AvatarSession(
avatar_id="...", # OR preset_id="...", never both
max_duration=600, # seconds
)
await avatar.start(session, room=ctx.room)
await session.start(
# room=ctx.room, agent=...
)
Written from the current docs. Check the vendor's SDK version before you ship.
Warnings
Session length limits conflict
Help center lists 30 minutes for production; the API reference reportedly lists 5 minutes for gwm1_avatars. Design for reconnects and test the real cap.
Slower turn-taking than avatar-only vendors
Runway's own 1.75 s turnaround figure is slower than the sub-second claims of face-only APIs; fine for characters, less so for snappy support bots.
LiveKit TTS overrides the character
If you run TTS in LiveKit, the character's configured voice and personality are replaced.
Per-session upfront charge
Each session costs 2 credits up front, so many tiny sessions cost more than the per-minute rate suggests.
Plus 9 warnings that apply to all avatars and live video APIs. See category warnings.
Limits
- Max session length: help center says 30 minutes for production API; API reference reportedly says 5 minutes (conflict)
- Creating a character is free; billing starts when a realtime session starts
Models and products
| Name | Status |
|---|---|
| gwm1_avatars | GA |
Docs and sources
Docs
Sources used
- docs.dev.runwayml.com/guides/pricing/
- docs.livekit.io/agents/models/avatar/plugins/runway
- help.runwayml.com/hc/en-us/articles/49557780326163-Runway-Characters
Max session length (conflicting), latency figure (from secondary summary of Runway pages), concurrency.