live2d-web ドキュメント
API リファレンス
公開 TypeScript 宣言から生成した英語の API リファレンスです。
以下のリファレンスは、パッケージで公開している TypeScript の型定義から生成しています。必要な機能は記載されたサブパスから読み込めます。使わない機能をアプリの基本バンドルに含めず、サイズを抑えられます。
公開 TypeScript の型定義から自動生成しています。
Core
AutoQualityPolicy
Overrides for the automatic quality policy. Omitted fields use DEFAULT_AUTO_QUALITY_POLICY.
interface AutoQualityPolicy {
desktopMaxResolution?: number
desktopPixelBudget?: number
longFrameMs?: number
longFrameRatioThreshold?: number
minResolution?: number
mobileMaxResolution?: number
mobilePixelBudget?: number
resolutionStep?: number
sampleWindowMs?: number
}
createLive2D
createLive2D(options: CreateLive2DOptions): Promise<Live2DInstance>
CreateLive2DOptions
type CreateLive2DOptions = BaseCreateLive2DOptions & RuntimeQualityOptions
createVolumeLipSync
Turns caller-sampled RMS volume into a stable mouth-open driver. The caller retains ownership of audio capture, analysis and scheduling.
createVolumeLipSync(): VolumeLipSyncDriver
DEFAULT_AUTO_QUALITY_POLICY
const DEFAULT_AUTO_QUALITY_POLICY: { desktopMaxResolution: 2; desktopPixelBudget: 4000000; longFrameMs: 33; longFrameRatioThreshold: 0.05; minResolution: 1; mobileMaxResolution: 1.5; mobilePixelBudget: 1500000; resolutionStep: 0.25; sampleWindowMs: 3000 }
ensureCubismCore
Verifies the user-supplied Cubism Core global, optionally loading a user-hosted script first. Concurrent calls for the same URL share one script load.
ensureCubismCore(coreUrl?: string, options?: EnsureCubismCoreOptions): Promise<void>
ExpressionOptions
interface ExpressionOptions {
fadeInMs?: number
fadeOutMs?: number
}
fitModel
fitModel(stage: Size, model: Size, fit?: ModelFit): ModelTransform
IdleMotion
type IdleMotion = string | false | IdleMotionOptions
IdleMotionOptions
interface IdleMotionOptions {
group: string
weights: readonly number[]
}
isMobileViewport
isMobileViewport(width: number, height: number): boolean
LipSyncDriver
interface LipSyncDriver {
getMouthOpen: () => number
isSpeaking: () => boolean
}
LipSyncProfile
type LipSyncProfile = Profile
LipSyncProfileInput
type LipSyncProfileInput = string | URL | ArrayBuffer | LipSyncProfile
Live2DAssetResolver
Supplies a model's files from somewhere other than the network: an unpacked archive held in memory, a browser storage layer, or any custom source. `path` is relative to the model3.json given as `src`, exactly as the model declares it, already decoded (so non-ASCII filenames arrive readable). Return `undefined` when the source has no such file; loading then fails with `model-load-failed` naming that path.
type Live2DAssetResolver = (path: string, signal?: AbortSignal) => Promise<Blob | ArrayBuffer | undefined> | Blob | ArrayBuffer | undefined
Live2DAssetType
type Live2DAssetType = "core" | "model3" | "moc3" | "texture" | "physics" | "pose" | "user-data" | "motion" | "expression" | "shader"
Live2DBackend
interface Live2DBackend {
createStage: (element: HTMLElement, options: StageOptions) => StageHandle
loadModel: (stage: StageHandle, url: string, options?: LoadModelOptions) => Promise<ModelHandle>
}
Live2DCanvasAccessibility
Optional semantics for the canvas exposed to assistive technologies.
type Live2DCanvasAccessibility = { mode: "decorative" } | { describedBy?: string; fallbackText?: string; label: string; mode?: "image" }
Live2DError
class Live2DError {
constructor(code: Live2DErrorCode, message: string, options?: Live2DErrorOptions): Live2DError
code: Live2DErrorCode
details?: Readonly<Live2DErrorDetails>
}
Live2DErrorCode
type Live2DErrorCode = "browser-only" | "core-missing" | "webgl-unsupported" | "invalid-props" | "invalid-tree" | "lipsync-error" | "tracking-error" | "model-load-failed" | "render-error" | "adapter-error"
Live2DErrorDetails
interface Live2DErrorDetails {
assetType?: Live2DAssetType
backend?: string
httpStatus?: number
url?: string
}
Live2DErrorOptions
interface Live2DErrorOptions {
details?: Live2DErrorDetails
}
Live2DInstance
interface Live2DInstance {
addLipSync: (options: RuntimeLipSyncOptions) => () => void
addParameterDriver: (id: string, driver: ParameterDriver) => () => void
clearExpression: () => void
clearParameter: (id: string) => void
dispose: () => void
expression: (id?: string, options?: ExpressionOptions) => Promise<void>
focus: (x: number, y: number) => void
focusAt: (clientX: number, clientY: number) => void
getModelInfo: () => ModelInfo
getParameter: (id: string) => number
getState: () => Live2DRuntimeState
hitTest: (clientX: number, clientY: number) => string[]
isMotionPlaying: () => boolean
motion: (group: string, index?: number, options?: MotionOptions) => Promise<void>
pause: () => void
playMotion: (group: string, index?: number, options?: MotionOptions) => Promise<MotionPlaybackResult>
resume: () => void
retry: () => Promise<void>
sequence: (steps: readonly MotionSequenceStep[]) => Promise<MotionSequenceResult>
setAccessibility: (accessibility: Live2DCanvasAccessibility | undefined) => void
setFit: (fit: ModelFit) => void
setParameter: (id: string, value: number) => void
subscribe: (listener: () => void) => () => void
}
Live2DRuntimeState
interface Live2DRuntimeState {
error?: Live2DError
loadingStage?: RuntimeLoadingStage
render?: RuntimeRenderState
status: "disposed" | "loading" | "ready" | "error"
}
LoadModelOptions
interface LoadModelOptions {
idleMotion?: IdleMotion
resolveAsset?: Live2DAssetResolver
signal?: AbortSignal
}
ModelFit
type ModelFit = "upper-body" | "full" | { offsetX?: number; offsetY?: number; scale: number }
ModelHandle
interface ModelHandle {
clearExpression: () => void
clearParameter: (id: string) => void
dispose: () => void
expression: (id?: string, options?: ExpressionOptions) => Promise<void>
focus: (x: number, y: number) => void
getIntrinsicSize: () => Size
getModelInfo: () => ModelInfo
getParameter: (id: string) => number
hitTest: (x: number, y: number) => string[]
isMotionPlaying: () => boolean
motion: (group: string, index?: number, options?: MotionOptions) => Promise<void>
onAfterMotionUpdate: (callback: (deltaMs: number) => void) => () => void
onBeforePhysicsUpdate?: (callback: (deltaMs: number) => void) => () => void
playMotion?: (group: string, index?: number, options?: MotionOptions) => Promise<MotionPlaybackResult>
setParameter: (id: string, value: number) => void
setTransform: (transform: ModelTransform) => void
}
ModelInfo
Version-neutral model metadata extracted from the model settings file.
interface ModelInfo {
expressions: string[]
hitAreas: string[]
mocVersion?: number
model3Version?: number
motions: Record<string, number>
parameters?: ModelParameterInfo[]
}
ModelParameterInfo
Range metadata for one parameter in the loaded Cubism model.
interface ModelParameterInfo {
defaultValue: number
id: string
maximum: number
minimum: number
}
ModelTransform
Backend-neutral contracts. Keep renderer-specific concepts out of this file.
interface ModelTransform {
scale: number
x: number
y: number
}
MotionOptions
interface MotionOptions {
fadeInMs?: number
fadeOutMs?: number
priority?: MotionPriority
}
MotionPlaybackResult
interface MotionPlaybackResult {
status: MotionPlaybackStatus
}
MotionPlaybackStatus
type MotionPlaybackStatus = "completed" | "interrupted" | "skipped" | "disposed"
MotionPriority
type MotionPriority = "force" | "idle" | "normal"
MotionSequenceResult
type MotionSequenceResult = { completedSteps: number; status: "completed" } | { completedSteps: number; status: Exclude<MotionPlaybackStatus, "completed">; stepIndex: number }
MotionSequenceStep
interface MotionSequenceStep {
group: string
index?: number
options?: MotionOptions
}
MOUTH_HANDOFF_HOLD_MS
const MOUTH_HANDOFF_HOLD_MS: 500
MOUTH_PARAMETER_ID
const MOUTH_PARAMETER_ID: "ParamMouthOpenY"
MOUTH_RELEASE_MS
const MOUTH_RELEASE_MS: 200
OFFICIAL_CUBISM_CORE_URL
Cubism 5.3 Core URL that Live2D publishes for hosting use. Handy to get started (`coreUrl: OFFICIAL_CUBISM_CORE_URL`); self-host the file for production so your app does not depend on a third-party host.
const OFFICIAL_CUBISM_CORE_URL: "https://cubism.live2d.com/sdk-web/core/06/live2dcubismcore.min.js"
ParameterDriver
interface ParameterDriver {
getValue: () => number
phase?: ParameterDriverPhase
}
Point
Backend-neutral contracts. Keep renderer-specific concepts out of this file.
interface Point {
x: number
y: number
}
QualityInput
interface QualityInput {
devicePixelRatio: number
height: number
mobile: boolean
width: number
}
resolveAutoQualityPolicy
resolveAutoQualityPolicy(policy?: AutoQualityPolicy): ResolvedAutoQualityPolicy
ResolvedAutoQualityPolicy
interface ResolvedAutoQualityPolicy {
desktopMaxResolution: number
desktopPixelBudget: number
longFrameMs: number
longFrameRatioThreshold: number
minResolution: number
mobileMaxResolution: number
mobilePixelBudget: number
resolutionStep: number
sampleWindowMs: number
}
RuntimeLipSyncOptions
type RuntimeLipSyncOptions = { onError?: (error: Live2DError) => void; parameterId?: string } & ({ driver: LipSyncDriver } | { isSpeaking: () => boolean; profile: LipSyncProfileInput; source: AudioNode })
RuntimeLoadingStage
type RuntimeLoadingStage = "core" | "stage" | "model"
RuntimeQualityOptions
type RuntimeQualityOptions = { quality?: "auto" | AutoQualityPolicy; resolution?: never } | { quality?: never; resolution: number }
RuntimeRenderState
interface RuntimeRenderState {
bufferPixels: number
height: number
resolution: number
width: number
}
selectInitialResolution
selectInitialResolution(input: QualityInput, policy?: ResolvedAutoQualityPolicy): number
selectLowerResolution
selectLowerResolution(current: number, longFrameRatio: number, policy?: ResolvedAutoQualityPolicy): number
Size
interface Size {
height: number
width: number
}
StageHandle
interface StageHandle {
dispose: () => void
getResolution: () => number
getSize: () => Size
onError: (callback: (error: Live2DError) => void) => () => void
onFrame: (callback: (deltaMs: number) => void) => () => void
pause: () => void
resize: (width: number, height: number) => void
resume: () => void
setAccessibility?: (accessibility: Live2DCanvasAccessibility | undefined) => void
setResolution: (resolution: number) => void
toWorld: (clientX: number, clientY: number) => Point
}
StageOptions
interface StageOptions {
accessibility?: Live2DCanvasAccessibility
height: number
maxFps?: number
resolution?: number
width: number
}
VolumeLipSyncDriver
interface VolumeLipSyncDriver {
getMouthOpen: () => number
isSpeaking: () => boolean
sample: (rms: number, elapsedMs: number) => void
}
Devtools
Live2DDevtools
interface Live2DDevtools {
dispose: () => void
setTab: (tab: Live2DDevtoolsTab) => void
setTarget: (target: Live2DDevtoolsTarget) => void
}
Live2DDevtoolsTab
type Live2DDevtoolsTab = "overview" | "parameters" | "motion" | "expression"
Live2DDevtoolsTarget
interface Live2DDevtoolsTarget {
addParameterDriver: (id: string, driver: ParameterDriver) => () => void
clearExpression: () => void
expression: (id?: string, options?: ExpressionOptions) => Promise<void>
getModelInfo: () => ModelInfo
getParameter: (id: string) => number
getState?: () => Live2DRuntimeState
isMotionPlaying: () => boolean
playMotion: (group: string, index?: number, options?: MotionOptions) => Promise<MotionPlaybackResult>
sequence: (steps: readonly MotionSequenceStep[]) => Promise<MotionSequenceResult>
subscribe?: (listener: () => void) => () => void
}
mountLive2DDevtools
Mounts a framework-free debugging panel for one loaded Live2D target.
mountLive2DDevtools(options: MountLive2DDevtoolsOptions): Live2DDevtools
MountLive2DDevtoolsOptions
interface MountLive2DDevtoolsOptions {
container: HTMLElement
initialTab?: Live2DDevtoolsTab
target: Live2DDevtoolsTarget
}
React
AutoQualityPolicy
Overrides for the automatic quality policy. Omitted fields use DEFAULT_AUTO_QUALITY_POLICY.
interface AutoQualityPolicy {
desktopMaxResolution?: number
desktopPixelBudget?: number
longFrameMs?: number
longFrameRatioThreshold?: number
minResolution?: number
mobileMaxResolution?: number
mobilePixelBudget?: number
resolutionStep?: number
sampleWindowMs?: number
}
CreateLive2DOptions
type CreateLive2DOptions = BaseCreateLive2DOptions & RuntimeQualityOptions
DEFAULT_AUTO_QUALITY_POLICY
const DEFAULT_AUTO_QUALITY_POLICY: { desktopMaxResolution: 2; desktopPixelBudget: 4000000; longFrameMs: 33; longFrameRatioThreshold: 0.05; minResolution: 1; mobileMaxResolution: 1.5; mobilePixelBudget: 1500000; resolutionStep: 0.25; sampleWindowMs: 3000 }
ensureCubismCore
Verifies the user-supplied Cubism Core global, optionally loading a user-hosted script first. Concurrent calls for the same URL share one script load.
ensureCubismCore(coreUrl?: string, options?: EnsureCubismCoreOptions): Promise<void>
ExpressionOptions
interface ExpressionOptions {
fadeInMs?: number
fadeOutMs?: number
}
fitModel
fitModel(stage: Size, model: Size, fit?: ModelFit): ModelTransform
IdleMotion
type IdleMotion = string | false | IdleMotionOptions
IdleMotionOptions
interface IdleMotionOptions {
group: string
weights: readonly number[]
}
isMobileViewport
isMobileViewport(width: number, height: number): boolean
LipSync
LipSync(props: LipSyncProps): null
LipSyncDriver
interface LipSyncDriver {
getMouthOpen: () => number
isSpeaking: () => boolean
}
LipSyncProfile
type LipSyncProfile = Profile
LipSyncProfileInput
type LipSyncProfileInput = string | URL | ArrayBuffer | LipSyncProfile
LipSyncProps
type LipSyncProps = LipSyncErrorProps & { active?: never; driver: LipSyncDriver; mouthOpen?: never; profile?: never; source?: never; speaking?: never } | LipSyncErrorProps & { active: boolean; driver?: never; mouthOpen?: never; profile: string | URL | ArrayBuffer | LipSyncProfile; source: AudioNode | null; speaking?: never } | LipSyncErrorProps & { active?: never; driver?: never; mouthOpen: number; profile?: never; source?: never; speaking: boolean }
Live2DAssetResolver
Supplies a model's files from somewhere other than the network: an unpacked archive held in memory, a browser storage layer, or any custom source. `path` is relative to the model3.json given as `src`, exactly as the model declares it, already decoded (so non-ASCII filenames arrive readable). Return `undefined` when the source has no such file; loading then fails with `model-load-failed` naming that path.
type Live2DAssetResolver = (path: string, signal?: AbortSignal) => Promise<Blob | ArrayBuffer | undefined> | Blob | ArrayBuffer | undefined
Live2DAssetType
type Live2DAssetType = "core" | "model3" | "moc3" | "texture" | "physics" | "pose" | "user-data" | "motion" | "expression" | "shader"
Live2DBackend
interface Live2DBackend {
createStage: (element: HTMLElement, options: StageOptions) => StageHandle
loadModel: (stage: StageHandle, url: string, options?: LoadModelOptions) => Promise<ModelHandle>
}
Live2DCanvas
Live2DCanvas(props: Live2DCanvasProps): Element
Live2DCanvasAccessibility
Optional semantics for the canvas exposed to assistive technologies.
type Live2DCanvasAccessibility = { mode: "decorative" } | { describedBy?: string; fallbackText?: string; label: string; mode?: "image" }
Live2DCanvasProps
type Live2DCanvasProps = BaseLive2DCanvasProps & Live2DCanvasQualityProps
Live2DCanvasQualityProps
type Live2DCanvasQualityProps = { quality?: "auto" | AutoQualityPolicy; resolution?: never } | { quality?: never; resolution: number }
Live2DCanvasState
interface Live2DCanvasState {
error?: Live2DError
loadingStage?: LoadingStage
render?: { bufferPixels: number; height: number; resolution: number; width: number }
retry: () => void
status: "loading" | "ready" | "error"
}
Live2DError
class Live2DError {
constructor(code: Live2DErrorCode, message: string, options?: Live2DErrorOptions): Live2DError
code: Live2DErrorCode
details?: Readonly<Live2DErrorDetails>
}
Live2DErrorCode
type Live2DErrorCode = "browser-only" | "core-missing" | "webgl-unsupported" | "invalid-props" | "invalid-tree" | "lipsync-error" | "tracking-error" | "model-load-failed" | "render-error" | "adapter-error"
Live2DErrorDetails
interface Live2DErrorDetails {
assetType?: Live2DAssetType
backend?: string
httpStatus?: number
url?: string
}
Live2DErrorOptions
interface Live2DErrorOptions {
details?: Live2DErrorDetails
}
Live2DInstance
interface Live2DInstance {
addLipSync: (options: RuntimeLipSyncOptions) => () => void
addParameterDriver: (id: string, driver: ParameterDriver) => () => void
clearExpression: () => void
clearParameter: (id: string) => void
dispose: () => void
expression: (id?: string, options?: ExpressionOptions) => Promise<void>
focus: (x: number, y: number) => void
focusAt: (clientX: number, clientY: number) => void
getModelInfo: () => ModelInfo
getParameter: (id: string) => number
getState: () => Live2DRuntimeState
hitTest: (clientX: number, clientY: number) => string[]
isMotionPlaying: () => boolean
motion: (group: string, index?: number, options?: MotionOptions) => Promise<void>
pause: () => void
playMotion: (group: string, index?: number, options?: MotionOptions) => Promise<MotionPlaybackResult>
resume: () => void
retry: () => Promise<void>
sequence: (steps: readonly MotionSequenceStep[]) => Promise<MotionSequenceResult>
setAccessibility: (accessibility: Live2DCanvasAccessibility | undefined) => void
setFit: (fit: ModelFit) => void
setParameter: (id: string, value: number) => void
subscribe: (listener: () => void) => () => void
}
Live2DModel
Live2DModel(__namedParameters: Live2DModelProps): Element
Live2DModelController
interface Live2DModelController {
addParameterDriver: (id: string, driver: ParameterDriver) => () => void
clearExpression: () => void
clearParameter: (id: string) => void
expression: (id?: string, options?: ExpressionOptions) => Promise<void>
focus: (x: number, y: number) => void
getModelInfo: () => ModelInfo
getParameter: (id: string) => number
isMotionPlaying: () => boolean
motion: (group: string, index?: number, options?: MotionOptions) => Promise<void>
playMotion: (group: string, index?: number, options?: MotionOptions) => Promise<MotionPlaybackResult>
sequence: (steps: readonly MotionSequenceStep[]) => Promise<MotionSequenceResult>
setParameter: (id: string, value: number) => void
}
Live2DModelProps
interface Live2DModelProps {
children?: ReactNode
fit?: ModelFit
followPointer?: boolean
idleMotion?: IdleMotion
onError?: (error: Live2DError) => void
onLoad?: (model: Live2DModelController) => void
onTap?: (hitAreas: string[], event: MouseEvent) => void
paused?: boolean
resolveAsset?: Live2DAssetResolver
retries?: number
src: string
}
Live2DRuntimeState
interface Live2DRuntimeState {
error?: Live2DError
loadingStage?: RuntimeLoadingStage
render?: RuntimeRenderState
status: "disposed" | "loading" | "ready" | "error"
}
LoadingStage
type LoadingStage = "core" | "stage" | "model"
LoadModelOptions
interface LoadModelOptions {
idleMotion?: IdleMotion
resolveAsset?: Live2DAssetResolver
signal?: AbortSignal
}
ModelFit
type ModelFit = "upper-body" | "full" | { offsetX?: number; offsetY?: number; scale: number }
ModelHandle
interface ModelHandle {
clearExpression: () => void
clearParameter: (id: string) => void
dispose: () => void
expression: (id?: string, options?: ExpressionOptions) => Promise<void>
focus: (x: number, y: number) => void
getIntrinsicSize: () => Size
getModelInfo: () => ModelInfo
getParameter: (id: string) => number
hitTest: (x: number, y: number) => string[]
isMotionPlaying: () => boolean
motion: (group: string, index?: number, options?: MotionOptions) => Promise<void>
onAfterMotionUpdate: (callback: (deltaMs: number) => void) => () => void
onBeforePhysicsUpdate?: (callback: (deltaMs: number) => void) => () => void
playMotion?: (group: string, index?: number, options?: MotionOptions) => Promise<MotionPlaybackResult>
setParameter: (id: string, value: number) => void
setTransform: (transform: ModelTransform) => void
}
ModelInfo
Version-neutral model metadata extracted from the model settings file.
interface ModelInfo {
expressions: string[]
hitAreas: string[]
mocVersion?: number
model3Version?: number
motions: Record<string, number>
parameters?: ModelParameterInfo[]
}
ModelParameterInfo
Range metadata for one parameter in the loaded Cubism model.
interface ModelParameterInfo {
defaultValue: number
id: string
maximum: number
minimum: number
}
ModelTransform
Backend-neutral contracts. Keep renderer-specific concepts out of this file.
interface ModelTransform {
scale: number
x: number
y: number
}
MotionOptions
interface MotionOptions {
fadeInMs?: number
fadeOutMs?: number
priority?: MotionPriority
}
MotionPlaybackResult
interface MotionPlaybackResult {
status: MotionPlaybackStatus
}
MotionPlaybackStatus
type MotionPlaybackStatus = "completed" | "interrupted" | "skipped" | "disposed"
MotionPriority
type MotionPriority = "force" | "idle" | "normal"
MotionSequenceResult
type MotionSequenceResult = { completedSteps: number; status: "completed" } | { completedSteps: number; status: Exclude<MotionPlaybackStatus, "completed">; stepIndex: number }
MotionSequenceStep
interface MotionSequenceStep {
group: string
index?: number
options?: MotionOptions
}
OFFICIAL_CUBISM_CORE_URL
Cubism 5.3 Core URL that Live2D publishes for hosting use. Handy to get started (`coreUrl: OFFICIAL_CUBISM_CORE_URL`); self-host the file for production so your app does not depend on a third-party host.
const OFFICIAL_CUBISM_CORE_URL: "https://cubism.live2d.com/sdk-web/core/06/live2dcubismcore.min.js"
ParameterDriver
interface ParameterDriver {
getValue: () => number
phase?: ParameterDriverPhase
}
Point
Backend-neutral contracts. Keep renderer-specific concepts out of this file.
interface Point {
x: number
y: number
}
QualityInput
interface QualityInput {
devicePixelRatio: number
height: number
mobile: boolean
width: number
}
resolveAutoQualityPolicy
resolveAutoQualityPolicy(policy?: AutoQualityPolicy): ResolvedAutoQualityPolicy
ResolvedAutoQualityPolicy
interface ResolvedAutoQualityPolicy {
desktopMaxResolution: number
desktopPixelBudget: number
longFrameMs: number
longFrameRatioThreshold: number
minResolution: number
mobileMaxResolution: number
mobilePixelBudget: number
resolutionStep: number
sampleWindowMs: number
}
RuntimeLoadingStage
type RuntimeLoadingStage = "core" | "stage" | "model"
RuntimeRenderState
interface RuntimeRenderState {
bufferPixels: number
height: number
resolution: number
width: number
}
selectInitialResolution
selectInitialResolution(input: QualityInput, policy?: ResolvedAutoQualityPolicy): number
selectLowerResolution
selectLowerResolution(current: number, longFrameRatio: number, policy?: ResolvedAutoQualityPolicy): number
Size
interface Size {
height: number
width: number
}
StageHandle
interface StageHandle {
dispose: () => void
getResolution: () => number
getSize: () => Size
onError: (callback: (error: Live2DError) => void) => () => void
onFrame: (callback: (deltaMs: number) => void) => () => void
pause: () => void
resize: (width: number, height: number) => void
resume: () => void
setAccessibility?: (accessibility: Live2DCanvasAccessibility | undefined) => void
setResolution: (resolution: number) => void
toWorld: (clientX: number, clientY: number) => Point
}
StageOptions
interface StageOptions {
accessibility?: Live2DCanvasAccessibility
height: number
maxFps?: number
resolution?: number
width: number
}
useLive2D
Owns a vanilla Live2D instance from React: creation, StrictMode replays, state subscription and disposal. Changing container or src recreates the instance; change other options by remounting with a key.
useLive2D(options: UseLive2DOptions): UseLive2DResult
useLive2DCanvas
useLive2DCanvas(): Live2DCanvasState
useLive2DModel
useLive2DModel(): Live2DModelController | null
UseLive2DOptions
interface UseLive2DOptions {
accessibility?: Live2DCanvasAccessibility
backend?: Live2DBackend
container: HTMLElement | null
coreUrl?: string
fit?: ModelFit
followPointer?: boolean
idleMotion?: IdleMotion
maxFps?: number
onError?: (error: Live2DError) => void
pauseWhenOffscreen?: boolean
quality?: AutoQualityPolicy | "auto"
resolution?: number
resolveAsset?: Live2DAssetResolver
retries?: number
signal?: AbortSignal
src: string
}
useLive2DParameter
useLive2DParameter(id: string, value: number): void
UseLive2DResult
interface UseLive2DResult {
error: Live2DError | undefined
instance: Live2DInstance | null
retry: () => void
state: Live2DRuntimeState
}
useParameterDriver
useParameterDriver(id: string, getter: () => number): void
Model inspection
inspectModelCapabilities
Reports Standard channel and ARKit Perfect Sync coverage from model metadata.
inspectModelCapabilities(info: ModelInfo): ModelCapabilityReport
inspectModelSource
Reads model3.json and every declared asset without creating a renderer. Content problems are aggregated in the returned report; only invalid caller input and cancellation reject.
inspectModelSource(options: InspectModelSourceOptions): Promise<ModelInspectionReport>
InspectModelSourceOptions
type InspectModelSourceOptions = InspectModelSourceBase & { resolveAsset?: never } | InspectModelSourceBase & { resolveAsset: Live2DAssetResolver }
ModelCapabilityReport
Tracking parameter coverage derived from a loaded backend's ModelInfo.
interface ModelCapabilityReport {
mocVersion?: number
model3Version?: number
perfectSync: { compatible: boolean; matched: number; minimum: number; missing: readonly string[]; total: number }
recommendedMapping: "standard" | "perfect-sync" | "none"
standardChannels: Readonly<Record<ModelTrackingChannel, ModelTrackingChannelSupport>>
}
ModelInspectionAsset
interface ModelInspectionAsset {
assetType: Live2DAssetType
bytes?: number
external: boolean
path: string
status: ModelInspectionAssetStatus
}
ModelInspectionAssetStatus
type ModelInspectionAssetStatus = "available" | "external" | "missing" | "too-large" | "unreadable"
ModelInspectionFinding
One stable, actionable content finding discovered during source inspection.
interface ModelInspectionFinding {
assetType?: Live2DAssetType
code: ModelInspectionFindingCode
message: string
path?: string
severity: ModelInspectionSeverity
}
ModelInspectionFindingCode
type ModelInspectionFindingCode = "asset-too-large" | "cross-origin-asset" | "empty-reference" | "external-asset" | "invalid-model3" | "missing-asset" | "missing-file-reference" | "too-many-references" | "total-assets-too-large" | "unreadable-asset" | "unsupported-model3-version"
ModelInspectionLimits
interface ModelInspectionLimits {
maxAssetBytes?: number
maxReferences?: number
maxTotalBytes?: number
}
ModelInspectionReport
Aggregate source report. An error finding makes the report incompatible.
interface ModelInspectionReport {
assets: readonly ModelInspectionAsset[]
expressions: readonly string[]
findings: readonly ModelInspectionFinding[]
hitAreas: readonly string[]
model3Version?: number
motions: Readonly<Record<string, number>>
source: string
status: ModelInspectionStatus
}
ModelInspectionSeverity
type ModelInspectionSeverity = "warning" | "error"
ModelInspectionStatus
type ModelInspectionStatus = "compatible" | "warning" | "incompatible"
ModelTrackingChannel
type ModelTrackingChannel = "pose" | "eyes" | "brows" | "mouth" | "cheeks"
ModelTrackingChannelSupport
type ModelTrackingChannelSupport = "full" | "partial" | "missing"
MediaPipe tracking
createMediaPipeFaceTracker
createMediaPipeFaceTracker(options: CreateMediaPipeWorkerFaceTrackerOptions): Promise<MediaPipeWorkerFaceTracker>
createMediaPipeFaceTracker(options: CreateMediaPipeMainThreadFaceTrackerOptions): Promise<MediaPipeFaceTracker>
CreateMediaPipeFaceTrackerBaseOptions
interface CreateMediaPipeFaceTrackerBaseOptions {
delegate?: "CPU" | "GPU"
inputMirrored?: boolean
maxFps?: number
minFaceDetectionConfidence?: number
minFacePresenceConfidence?: number
minTrackingConfidence?: number
onFaceLost?: MediaPipeFaceLostBehaviour
signal?: AbortSignal
wasmPath: string
}
CreateMediaPipeFaceTrackerOptions
type CreateMediaPipeFaceTrackerOptions = CreateMediaPipeMainThreadFaceTrackerOptions | CreateMediaPipeWorkerFaceTrackerOptions
CreateMediaPipeMainThreadFaceTrackerOptions
type CreateMediaPipeMainThreadFaceTrackerOptions = CreateMediaPipeFaceTrackerBaseOptions & MediaPipeModelAsset & CreateMediaPipeMainThreadOptions
CreateMediaPipeMainThreadOptions
interface CreateMediaPipeMainThreadOptions {
execution?: "main"
workerFactory?: undefined
}
CreateMediaPipeWorkerFaceTrackerOptions
type CreateMediaPipeWorkerFaceTrackerOptions = CreateMediaPipeFaceTrackerBaseOptions & MediaPipeModelAsset & CreateMediaPipeWorkerOptions
CreateMediaPipeWorkerOptions
interface CreateMediaPipeWorkerOptions {
execution: "worker"
workerFactory: () => Worker
}
MEDIAPIPE_BLENDSHAPES
const MEDIAPIPE_BLENDSHAPES: readonly ["_neutral", "browDownLeft", "browDownRight", "browInnerUp", "browOuterUpLeft", "browOuterUpRight", "cheekPuff", "cheekSquintLeft", "cheekSquintRight", "eyeBlinkLeft", "eyeBlinkRight", "eyeLookDownLeft", "eyeLookDownRight", "eyeLookInLeft", "eyeLookInRight", "eyeLookOutLeft", "eyeLookOutRight", "eyeLookUpLeft", "eyeLookUpRight", "eyeSquintLeft", "eyeSquintRight", "eyeWideLeft", "eyeWideRight", "jawForward", "jawLeft", "jawOpen", "jawRight", "mouthClose", "mouthDimpleLeft", "mouthDimpleRight", "mouthFrownLeft", "mouthFrownRight", "mouthFunnel", "mouthLeft", "mouthLowerDownLeft", "mouthLowerDownRight", "mouthPressLeft", "mouthPressRight", "mouthPucker", "mouthRight", "mouthRollLower", "mouthRollUpper", "mouthShrugLower", "mouthShrugUpper", "mouthSmileLeft", "mouthSmileRight", "mouthStretchLeft", "mouthStretchRight", "mouthUpperUpLeft", "mouthUpperUpRight", "noseSneerLeft", "noseSneerRight"]
MediaPipeAttachOptions
interface MediaPipeAttachOptions {
channels?: Partial<Record<MediaPipeFaceChannel, boolean>>
mapping?: MediaPipeMappingMode
sensitivity?: Partial<Record<MediaPipeFaceChannel, number>>
}
MediaPipeFaceChannel
type MediaPipeFaceChannel = "pose" | "eyes" | "brows" | "mouth" | "cheeks"
MediaPipeFaceLostBehaviour
type MediaPipeFaceLostBehaviour = "hold" | "neutral"
MediaPipeFaceTracker
interface MediaPipeFaceTracker {
attach: (target: MediaPipeParameterTarget, options?: MediaPipeAttachOptions) => () => void
calibrate: () => void
dispose: () => void
isTracking: () => boolean
update: (source: TexImageSource, timestampMs: number) => MediaPipeFaceTrackingUpdate
}
MediaPipeFaceTrackingUpdate
type MediaPipeFaceTrackingUpdate = { status: "skipped" } | { effectiveFps: number; inferenceMs: number; status: "calibrating" | "tracked" | "lost" }
MediaPipeMappingMode
type MediaPipeMappingMode = "auto" | "standard" | "perfect-sync"
MediaPipeModelAsset
type MediaPipeModelAsset = { modelAssetBuffer?: never; modelAssetPath: string } | { modelAssetBuffer: Uint8Array; modelAssetPath?: never }
MediaPipeParameterTarget
interface MediaPipeParameterTarget {
addParameterDriver: (id: string, driver: ParameterDriver) => () => void
getModelInfo: () => ModelInfo
}
MediaPipeWorkerFaceTracker
interface MediaPipeWorkerFaceTracker {
attach: (target: MediaPipeParameterTarget, options?: MediaPipeAttachOptions) => () => void
calibrate: () => void
dispose: () => void
isTracking: () => boolean
update: (source: TexImageSource, timestampMs: number) => Promise<MediaPipeFaceTrackingUpdate>
}
PERFECT_SYNC_PARAMETER_IDS
const PERFECT_SYNC_PARAMETER_IDS: readonly string[]
MediaPipe Worker
startMediaPipeFaceTrackerWorker
Starts the MediaPipe module-worker message loop. Call this once from the application's own worker entry; importing this module has no side effects.
startMediaPipeFaceTrackerWorker(): void