New:Socket for Asana Is Now Available.Learn more
Get Started

@byteplus/avatar-web-sdk

Package Overview
Dependencies
Maintainers
26
Versions
11
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@byteplus/avatar-web-sdk

Avatar Web SDK enables conversational digital-avatar interactions in the browser. Your users speak into the microphone, and an AI-driven avatar (rendered via WebRTC) responds in real time with both voice and video.

npmnpm
Version
1.0.1-beta.4
Version published
Weekly downloads
32
28%
Maintainers
26
Weekly downloads
 
Created
Source

Avatar Web SDK

Avatar Web SDK enables conversational digital-avatar interactions in the browser. Your users speak into the microphone, and an AI-driven avatar (rendered via WebRTC) responds in real time with both voice and video.

Package variants

Two builds of the SDK are published — pick the one that matches your deployment region. They share the same API; only the underlying RTC module and registry differ.

RegionPackageRTC dependency
Global@byteplus/avatar-web-sdk@byteplus/rtc
npm install @byteplus/avatar-web-sdk

Requirements

  • Browser with WebRTC, Web Audio API and Secure Context (HTTPS or localhost)
  • Micropaccess permission required for voice interaction
  • Chrome 90+, Safari 14+, Firefox 88+, Edge 90+

Quick start

import {
  AvatarSDK,
  AvatarSession,
  AvatarSessionConfig,
  RenderMode,
} from "@byteplus/avatar-web-sdk"; // pkg-variant

// 1. Initialize the SDK (do this once, treat as a singleton)
const sdk = new AvatarSDK({
  appKey: "YOUR_APP_KEY",
  secretKey: "YOUR_SECRET_KEY",
  stsToken: "OPTIONAL_STS_TOKEN",
  environment: "overseas",
  logEnabled: true,
  logLevel: "info",
});

// 2. Prepare a container for the avatar video
const videoContainer = document.getElementById("avatar-video") as HTMLDivElement;

// 3. Create and start a session
const sessionConfig: AvatarSessionConfig = {
  avatarImageUrl: "https://your-cdn.example/avatar.jpg",
  speaker: "zh_female_qingxin",    // TTS voice ID
  userPrompt: "You are a friendly assistant.",
  speechRate: 0,                    // -50 to 100, default 0
  loudnessRate: 0,                  // -50 to 100, default 0
  enableWebsearch: false,
};

const session: AvatarSession = sdk.createSession(sessionConfig);

session.setAvatarVideoCanvas(videoContainer, RenderMode.FIT);

session.on("start", () => {
  console.log("Avatar session started");
});

session.on("end", (error?: Error) => {
  if (error) {
    console.error("Session ended with error:", error);
  } else {
    console.log("Session ended normally");
  }
});

await session.start();

// 4. Begin capturing microphone audio for voice interaction
await session.startAudioCapture();

// ... user speaks, avatar responds with voice + video ...

// 5. Stop
await session.stopAudioCapture();
await session.end();
// session is now invalid; create a new one for the next interaction

Session lifecycle

 idle ──start()──▶ starting ──▶ started ──end()──▶ ending ──▶ ended
                                                    (cannot be reused)
  • A session is single-use. After end() returns, discard it and call sdk.createSession(...) again to start a new conversation.
  • start() opens a WebSocket connection and initializes the WebRTC video/audio channel.
  • end() sends a clean shutdown to the server and releases microphone / WebRTC resources.
  • You may call destroy() as a safety net to force-release resources.

Events

AvatarSession extends EventEmitter. Subscribe with session.on(eventName, handler):

EventPayloadWhen it fires
startSession is ready for interaction
enderror?: ErrorSession ended (either normally or with error)
audioCaptureStartMicrophone recording began
audioCaptureStopMicrophone recording stopped
audioCaptureFailerror: ErrorMicrophone access or recording failed
audioFrameframe: AudioFrameRaw PCM frame from the microphone
session.on("audioCaptureFail", (error) => {
  alert("Microphone access denied: " + error.message);
});

Render modes

Passed to setAvatarVideoCanvas(container, mode):

  • RenderMode.HIDDEN — fill the container, cropping if necessary (default)
  • RenderMode.FIT — fit within the container, preserving aspect ratio
  • RenderMode.FILL — stretch to fill the container (may distort)

FAQs

Package last updated on 22 Jul 2026

Related posts