Documentation

Ship a character in an afternoon.

The SDK takes audio and gives you frames. Everything else — the brain, the voice, the UI — stays yours.

Install

Swift Package Manager, iOS 16 and up. Models are not in the package — they arrive over an authenticated channel on first launch, so your binary stays small and the weights are never sitting in a downloadable .ipa.

// Package.swift
.package(url: "https://github.com/yoob/yoob-ios.git", from: "1.0.0")

Render a character

Point a view at a character and feed it audio. The renderer handles geometry, compositing and the idle host; you never manage frames.

import Yoob

let avatar = try await YoobAvatar(character: "samantha", licence: licenceKey)

// Any PCM source: your TTS, our on-device TTS, or a live stream.
try await avatar.speak(pcm: audioBuffer)

// SwiftUI
YoobAvatarView(avatar)
    .aspectRatio(9/16, contentMode: .fit)

Bring your own brain

The SDK has no opinion about your LLM. Stream tokens from anywhere, synthesise them however you like, and hand us the audio. We never see the conversation.

for try await chunk in myLLM.stream(prompt) {
    let pcm = try await myTTS.synthesise(chunk)
    try await avatar.speak(pcm: pcm)   // barge-in safe
}

On-device voice

If you would rather not run a TTS at all, ours runs locally and costs nothing per word.

let voice = try YoobVoice(.warm)
try await avatar.say("Ready when you are.", voice: voice)

Listening states

A face that freezes while the user talks reads as broken. Tell the renderer what phase the conversation is in and it handles attention, blinks and acknowledgement nods locally.

avatar.setPhase(.listening)   // user is speaking
avatar.setPhase(.thinking)    // waiting on your LLM
avatar.setPhase(.speaking)    // audio is playing

What the SDK sends over the network

CallWhenPayload
Model fetchFirst launch, and on model updatesSigned character bundle
Licence checkFirst launchLicence key, app bundle id
Usage reportPeriodically, on paid plansConversation seconds. No audio, no frames, no text.

That is the complete list, and we would rather you read the third row twice than discover it later: on paid plans the SDK does report conversation seconds, because that is what we bill. It reports a duration and nothing else — no audio, video, transcript or rendered frame leaves the device at any point. Ask us for a packet capture from a live session and check it yourself — Security has the details.

Platforms

iOS 16+ on A15 and newer is what ships today. Android is in development and Web is on the roadmap; neither has a date we are willing to print. If your timeline depends on one of them, tell us — it moves our priorities.

Full API reference ships with the SDK. Last updated 26 July 2026.