{"_id":"@runwayml/avatars","_rev":"3-18958147e3c35166f8dbeeecaf29f3d3","name":"@runwayml/avatars","dist-tags":{"beta":"0.16.0-beta.0","latest":"0.17.0"},"versions":{"0.16.0-beta.0":{"name":"@runwayml/avatars","version":"0.16.0-beta.0","keywords":["runwayml","avatar","ai","realtime","gwm-1","video","webrtc","streaming"],"author":{"name":"RunwayML"},"license":"MIT","_id":"@runwayml/avatars@0.16.0-beta.0","maintainers":[{"name":"runwayml-admin","email":"hello@runwayml.com"},{"name":"brannondorsey","email":"brannon@brannondorsey.com"},{"name":"cvalenzuela","email":"cris@runwayml.com"},{"name":"matamalaortiz","email":"matamala@material.cl"},{"name":"robinandeer","email":"robin.andeer@gmail.com"},{"name":"danite","email":"luansnain@gmail.com"}],"dist":{"shasum":"8b27d250e2a187381e22d3143a013da37dbaa051","tarball":"https://registry.npmjs.org/@runwayml/avatars/-/avatars-0.16.0-beta.0.tgz","fileCount":14,"integrity":"sha512-ceyv6j/qQ/omf4XyIYm4KjRbgrtjYgj+92cMAfoKYG2SVB/OcYzE3chEfK/UXNqTaNUXR7sFRlb717ULUzFjZA==","signatures":[{"sig":"MEYCIQCVVQOqetwp1GxqqFvHTJfXu9m3ctOkIkezFMttTRiBlwIhAJQPDqtJ5dNmdiFk6MAc4n2JIlDETTcsd5aWUZbCbhAf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":315587},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./api":{"import":{"types":"./dist/api.d.ts","default":"./dist/api.js"},"require":{"types":"./dist/api.d.cts","default":"./dist/api.cjs"}}},"gitHead":"2a6c8651ff4ba6160add0f614e67e8eb08faf680","scripts":{"dev":"tsup --watch","lint":"biome lint src/","test":"bun test","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"runwayml-admin","email":"hello@runwayml.com"},"_npmVersion":"11.12.1","description":"Framework-agnostic SDK for real-time AI avatar interactions","directories":{},"_nodeVersion":"24.15.0","dependencies":{"livekit-client":"^2.18.2"},"typesVersions":{"*":{"api":["./dist/api.d.ts"]}},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/avatars_0.16.0-beta.0_1778608655914_0.5544925174960851","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"@runwayml/avatars","version":"0.16.0","keywords":["runwayml","avatar","ai","realtime","gwm-1","video","webrtc","streaming"],"author":"RunwayML","license":"MIT","_id":"@runwayml/avatars@0.16.0","maintainers":[{"name":"runwayml-admin","email":"hello@runwayml.com"},{"name":"brannondorsey","email":"brannon@brannondorsey.com"},{"name":"cvalenzuela","email":"cris@runwayml.com"},{"name":"matamalaortiz","email":"matamala@material.cl"},{"name":"robinandeer","email":"robin.andeer@gmail.com"},{"name":"danite","email":"luansnain@gmail.com"}],"dist":{"shasum":"1c926b8c31b6fe981e9be95f91edaeffff934459","tarball":"https://registry.npmjs.org/@runwayml/avatars/-/avatars-0.16.0.tgz","fileCount":14,"integrity":"sha512-sXUEt6wnQ7wuG2ZfdRJCdYBj0GMknBYMyWeKY8Z1m7uaUwksR2nprJoYC2SWd9pChmo2m6Eu7dGl2c+y7RyD4g==","signatures":[{"sig":"MEUCIQDJNo7MhokFjHOdxzeIT9LmrUs2h9DYxQUv0yxv9H39twIgb+0HVSozg4Dn83Xb1xcxCWjc812yPwKKBSQePteBnX4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":315580},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"1c926b8c31b6fe981e9be95f91edaeffff934459","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./api":{"import":{"types":"./dist/api.d.ts","default":"./dist/api.js"},"require":{"types":"./dist/api.d.cts","default":"./dist/api.cjs"}}},"scripts":{"dev":"tsup --watch","lint":"biome lint src/","test":"bun test","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"runwayml-admin","email":"hello@runwayml.com"},"_integrity":"sha512-sXUEt6wnQ7wuG2ZfdRJCdYBj0GMknBYMyWeKY8Z1m7uaUwksR2nprJoYC2SWd9pChmo2m6Eu7dGl2c+y7RyD4g==","_npmVersion":"10.8.3","description":"Framework-agnostic SDK for real-time AI avatar interactions","directories":{},"_nodeVersion":"24.3.0","dependencies":{"livekit-client":"^2.18.2"},"typesVersions":{"*":{"api":["./dist/api.d.ts"]}},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/avatars_0.16.0_1778613372248_0.6782153272916849","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"name":"@runwayml/avatars","version":"0.17.0","description":"Framework-agnostic SDK for real-time AI avatar interactions","type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./api":{"import":{"types":"./dist/api.d.ts","default":"./dist/api.js"},"require":{"types":"./dist/api.d.cts","default":"./dist/api.cjs"}}},"typesVersions":{"*":{"api":["./dist/api.d.ts"]}},"scripts":{"build":"tsup","dev":"tsup --watch","typecheck":"tsc --noEmit","lint":"biome lint src/","test":"bun test"},"keywords":["runwayml","avatar","ai","realtime","gwm-1","video","webrtc","streaming"],"author":{"name":"RunwayML"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/runwayml/avatars-sdk-react.git"},"publishConfig":{"access":"public"},"dependencies":{"livekit-client":"^2.18.2"},"gitHead":"917342729c1f23de20ba0238775dd003276c25b8","_id":"@runwayml/avatars@0.17.0","bugs":{"url":"https://github.com/runwayml/avatars-sdk-react/issues"},"homepage":"https://github.com/runwayml/avatars-sdk-react#readme","_nodeVersion":"22.23.1","_npmVersion":"11.6.2","dist":{"integrity":"sha512-jbi1pITBtzSak6hlS7cGTjK/dgLKGnmx4qmcWOpljPh5whnWBgTKTb+03Kjx5CHE/L4EklAN5S1G35E6ZqJUzw==","shasum":"000f46101d35c3b52cec25b9f09d5db5f0db4869","tarball":"https://registry.npmjs.org/@runwayml/avatars/-/avatars-0.17.0.tgz","fileCount":14,"unpackedSize":337442,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@runwayml%2favatars@0.17.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICS/ibqaLPNUznU3q8/YHXtq7UY9jDG2NxY/S41ZDRs0AiEA/4U7owsUiSE2egpnAUD+R323eP/EmwqXcNuXGFgwcWI="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5c554f20-293a-4b96-9e7e-7c89117737e8"}},"directories":{},"maintainers":[{"name":"runwayml-admin","email":"hello@runwayml.com"},{"name":"brannondorsey","email":"brannon@brannondorsey.com"},{"name":"cvalenzuela","email":"cris@runwayml.com"},{"name":"matamalaortiz","email":"matamala@material.cl"},{"name":"robinandeer","email":"robin.andeer@gmail.com"},{"name":"danite","email":"luansnain@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/avatars_0.17.0_1783362809838_0.006194245258921649"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-12T17:57:35.807Z","modified":"2026-07-06T18:33:30.367Z","0.16.0-beta.0":"2026-05-12T17:57:36.067Z","0.16.0":"2026-05-12T19:16:12.385Z","0.17.0":"2026-07-06T18:33:29.987Z"},"author":{"name":"RunwayML"},"license":"MIT","keywords":["runwayml","avatar","ai","realtime","gwm-1","video","webrtc","streaming"],"description":"Framework-agnostic SDK for real-time AI avatar interactions","maintainers":[{"name":"runwayml-admin","email":"hello@runwayml.com"},{"name":"brannondorsey","email":"brannon@brannondorsey.com"},{"name":"cvalenzuela","email":"cris@runwayml.com"},{"name":"matamalaortiz","email":"matamala@material.cl"},{"name":"robinandeer","email":"robin.andeer@gmail.com"},{"name":"danite","email":"luansnain@gmail.com"}],"readme":"# @runwayml/avatars\n\nFramework-agnostic SDK for real-time AI avatar interactions. Works with any JavaScript framework or none at all.\n\n## Quick start\n\n```javascript\nimport { streamTo } from '@runwayml/avatars';\n\n// Fetch credentials from your server\nconst res = await fetch('/api/avatar/connect', {\n  method: 'POST',\n  headers: { 'Content-Type': 'application/json' },\n  body: JSON.stringify({ avatarId: 'influencer' }),\n});\nconst credentials = await res.json();\n\n// Start streaming to a video element\nconst session = await streamTo({ credentials, target: document.getElementById('avatar') });\n\n// Control the session\nsession.mic.toggle();\nsession.end();\n```\n\n## API\n\n### Entry points\n\n- **`streamTo({ credentials, target })`** -- Start a session and stream video to an element. Handles the consume call, LiveKit connection, and media setup. Returns an `AvatarSession`.\n- **`connect({ credentials })`** -- Start a session without a video element (headless). Use `session.streamTo(element)` later to attach video.\n\n### `AvatarSession`\n\nReturned by `streamTo` and `connect`. Provides:\n\n- **`session.state`** -- `'idle' | 'connecting' | 'active' | 'ending' | 'ended' | 'error'`\n- **`session.sessionId`** -- The session identifier\n- **`session.mic`** -- `{ isEnabled, enable(), disable(), toggle() }`\n- **`session.camera`** -- `{ isEnabled, enable(), disable(), toggle() }`\n- **`session.screenShare`** -- `{ isActive, start(), stop(), toggle() }`\n- **`session.end()`** -- End the session\n- **`session.transcript(options?)`** -- Create a transcript accumulator\n- **`session.onClientEvent(tool, handler)`** -- Listen for typed client events\n- **`session.on(event, handler)`** / **`session.off(event, handler)`** -- Event emitter\n\n### Events\n\n```javascript\nimport { AvatarEvent } from '@runwayml/avatars';\n\nsession.on(AvatarEvent.StateChanged, (state) => {});\nsession.on(AvatarEvent.Transcript, (entry) => {});\nsession.on(AvatarEvent.ClientEvent, (event) => {});\nsession.on(AvatarEvent.Error, (error) => {});\nsession.on(AvatarEvent.AvatarVideoReady, (track) => {});\nsession.on(AvatarEvent.AvatarAudioReady, (track) => {});\nsession.on(AvatarEvent.MediaChanged, () => {});\n```\n\n### Error handling\n\nAll errors are instances of `AvatarError` with a typed `code` and optional `cause`:\n\n```javascript\nimport { AvatarError } from '@runwayml/avatars';\n\ntry {\n  const session = await streamTo({ credentials, target: el });\n} catch (err) {\n  if (err instanceof AvatarError) {\n    console.log(err.code, err.message, err.cause);\n  }\n}\n\nsession.on(AvatarEvent.Error, (err) => {\n  if (err instanceof AvatarError && err.code === 'MEDIA_PERMISSION_DENIED') {\n    showPermissionPrompt();\n  }\n});\n```\n\n| Code | When |\n|------|------|\n| `CONSUME_FAILED` | Session consume HTTP request failed |\n| `CONNECTION_FAILED` | LiveKit room connection failed |\n| `MEDIA_PERMISSION_DENIED` | Mic or camera permission denied on connect |\n| `MEDIA_DEVICE_ERROR` | Mic or camera toggle failed |\n| `SCREEN_SHARE_FAILED` | Screen share toggle failed |\n| `PUBLISH_FAILED` | Track publish failed |\n| `UNKNOWN` | Unexpected error |\n\n### Server subpath\n\n```javascript\nimport { consumeSession, clientTool, pageActionTools } from '@runwayml/avatars/api';\n```\n\nServer-safe utilities with no browser APIs. Use in Next.js API routes, Express handlers, etc.\n\n## React\n\nFor React apps, use [`@runwayml/avatars-react`](../react/) which provides components and hooks on top of this package.\n","readmeFilename":"README.md","homepage":"https://github.com/runwayml/avatars-sdk-react#readme","repository":{"type":"git","url":"git+https://github.com/runwayml/avatars-sdk-react.git"},"bugs":{"url":"https://github.com/runwayml/avatars-sdk-react/issues"}}