@aura3d/engine 1.0.2 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +331 -16
- package/dist/animation/AnimationClipEvents.d.ts +57 -0
- package/dist/animation/AnimationClipEvents.d.ts.map +1 -0
- package/dist/animation/AnimationClipEvents.js +171 -0
- package/dist/animation/AnimationClipEvents.js.map +1 -0
- package/dist/animation/AnimationClipRegistry.d.ts +76 -0
- package/dist/animation/AnimationClipRegistry.d.ts.map +1 -0
- package/dist/animation/AnimationClipRegistry.js +130 -0
- package/dist/animation/AnimationClipRegistry.js.map +1 -0
- package/dist/animation/AnimationController.d.ts +168 -0
- package/dist/animation/AnimationController.d.ts.map +1 -0
- package/dist/animation/AnimationController.js +619 -0
- package/dist/animation/AnimationController.js.map +1 -0
- package/dist/animation/HumanoidRetargeting.d.ts +76 -0
- package/dist/animation/HumanoidRetargeting.d.ts.map +1 -0
- package/dist/animation/HumanoidRetargeting.js +331 -0
- package/dist/animation/HumanoidRetargeting.js.map +1 -0
- package/dist/animation/browser-index.d.ts +18 -0
- package/dist/animation/browser-index.d.ts.map +1 -1
- package/dist/animation/browser-index.js +13 -0
- package/dist/animation/browser-index.js.map +1 -1
- package/dist/animation/index.d.ts +16 -1
- package/dist/animation/index.d.ts.map +1 -1
- package/dist/animation/index.js +11 -1
- package/dist/animation/index.js.map +1 -1
- package/dist/animation/threejs-compatibility/AnimationDiagnostics.d.ts.map +1 -1
- package/dist/animation/threejs-compatibility/AnimationDiagnostics.js +3 -5
- package/dist/animation/threejs-compatibility/AnimationDiagnostics.js.map +1 -1
- package/dist/assets/GLTFAnimationRuntime.js +1 -1
- package/dist/assets/GLTFLoader.js +1 -1
- package/dist/aura3d-cli/cli.js +194 -8
- package/dist/aura3d-cli/cli.js.map +1 -1
- package/dist/aura3d-cli/index.d.ts +280 -3
- package/dist/aura3d-cli/index.d.ts.map +1 -1
- package/dist/aura3d-cli/index.js +886 -4
- package/dist/aura3d-cli/index.js.map +1 -1
- package/dist/aura3d-cli/pull-bridge.d.ts +95 -0
- package/dist/aura3d-cli/pull-bridge.d.ts.map +1 -0
- package/dist/aura3d-cli/pull-bridge.js +247 -0
- package/dist/aura3d-cli/pull-bridge.js.map +1 -0
- package/dist/create-aura3d/index.d.ts +1 -1
- package/dist/create-aura3d/index.d.ts.map +1 -1
- package/dist/create-aura3d/index.js +9 -2
- package/dist/create-aura3d/index.js.map +1 -1
- package/dist/editor-runtime/ProjectSerializer.d.ts +74 -1
- package/dist/editor-runtime/ProjectSerializer.d.ts.map +1 -1
- package/dist/editor-runtime/ProjectSerializer.js +123 -6
- package/dist/editor-runtime/ProjectSerializer.js.map +1 -1
- package/dist/editor-runtime/TimelineModel.d.ts +18 -0
- package/dist/editor-runtime/TimelineModel.d.ts.map +1 -1
- package/dist/editor-runtime/TimelineModel.js +67 -3
- package/dist/editor-runtime/TimelineModel.js.map +1 -1
- package/dist/editor-runtime/TimelineRuntimeBridge.d.ts +98 -0
- package/dist/editor-runtime/TimelineRuntimeBridge.d.ts.map +1 -0
- package/dist/editor-runtime/TimelineRuntimeBridge.js +186 -0
- package/dist/editor-runtime/TimelineRuntimeBridge.js.map +1 -0
- package/dist/editor-runtime/index.d.ts +3 -1
- package/dist/editor-runtime/index.d.ts.map +1 -1
- package/dist/editor-runtime/index.js +1 -0
- package/dist/editor-runtime/index.js.map +1 -1
- package/dist/engine/agent-api/AnimationController.d.ts +607 -0
- package/dist/engine/agent-api/AnimationController.d.ts.map +1 -0
- package/dist/engine/agent-api/AnimationController.js +2192 -0
- package/dist/engine/agent-api/AnimationController.js.map +1 -0
- package/dist/engine/agent-api/AssetEvidence.d.ts +88 -0
- package/dist/engine/agent-api/AssetEvidence.d.ts.map +1 -0
- package/dist/engine/agent-api/AssetEvidence.js +157 -0
- package/dist/engine/agent-api/AssetEvidence.js.map +1 -0
- package/dist/engine/agent-api/AuraAppHandle.d.ts +55 -0
- package/dist/engine/agent-api/AuraAppHandle.d.ts.map +1 -0
- package/dist/engine/agent-api/AuraAppHandle.js +15 -0
- package/dist/engine/agent-api/AuraAppHandle.js.map +1 -0
- package/dist/engine/agent-api/AuraVoiceBridge.d.ts +96 -0
- package/dist/engine/agent-api/AuraVoiceBridge.d.ts.map +1 -0
- package/dist/engine/agent-api/AuraVoiceBridge.js +370 -0
- package/dist/engine/agent-api/AuraVoiceBridge.js.map +1 -0
- package/dist/engine/agent-api/CartoonDirector.d.ts +95 -0
- package/dist/engine/agent-api/CartoonDirector.d.ts.map +1 -0
- package/dist/engine/agent-api/CartoonDirector.js +342 -0
- package/dist/engine/agent-api/CartoonDirector.js.map +1 -0
- package/dist/engine/agent-api/CartoonPerformance.d.ts +149 -0
- package/dist/engine/agent-api/CartoonPerformance.d.ts.map +1 -0
- package/dist/engine/agent-api/CartoonPerformance.js +317 -0
- package/dist/engine/agent-api/CartoonPerformance.js.map +1 -0
- package/dist/engine/agent-api/CartoonRenderQueue.d.ts +132 -0
- package/dist/engine/agent-api/CartoonRenderQueue.d.ts.map +1 -0
- package/dist/engine/agent-api/CartoonRenderQueue.js +385 -0
- package/dist/engine/agent-api/CartoonRenderQueue.js.map +1 -0
- package/dist/engine/agent-api/CharacterAssembly.d.ts +126 -0
- package/dist/engine/agent-api/CharacterAssembly.d.ts.map +1 -0
- package/dist/engine/agent-api/CharacterAssembly.js +280 -0
- package/dist/engine/agent-api/CharacterAssembly.js.map +1 -0
- package/dist/engine/agent-api/DialoguePerformance.d.ts +150 -0
- package/dist/engine/agent-api/DialoguePerformance.d.ts.map +1 -0
- package/dist/engine/agent-api/DialoguePerformance.js +335 -0
- package/dist/engine/agent-api/DialoguePerformance.js.map +1 -0
- package/dist/engine/agent-api/FrameLoop.d.ts +70 -0
- package/dist/engine/agent-api/FrameLoop.d.ts.map +1 -0
- package/dist/engine/agent-api/FrameLoop.js +165 -0
- package/dist/engine/agent-api/FrameLoop.js.map +1 -0
- package/dist/engine/agent-api/GameAssetValidation.d.ts +279 -0
- package/dist/engine/agent-api/GameAssetValidation.d.ts.map +1 -0
- package/dist/engine/agent-api/GameAssetValidation.js +719 -0
- package/dist/engine/agent-api/GameAssetValidation.js.map +1 -0
- package/dist/engine/agent-api/GameEvidence.d.ts +148 -0
- package/dist/engine/agent-api/GameEvidence.d.ts.map +1 -0
- package/dist/engine/agent-api/GameEvidence.js +269 -0
- package/dist/engine/agent-api/GameEvidence.js.map +1 -0
- package/dist/engine/agent-api/GameRuntime.d.ts +931 -0
- package/dist/engine/agent-api/GameRuntime.d.ts.map +1 -0
- package/dist/engine/agent-api/GameRuntime.js +2229 -0
- package/dist/engine/agent-api/GameRuntime.js.map +1 -0
- package/dist/engine/agent-api/GameSceneBridge.d.ts +54 -0
- package/dist/engine/agent-api/GameSceneBridge.d.ts.map +1 -0
- package/dist/engine/agent-api/GameSceneBridge.js +110 -0
- package/dist/engine/agent-api/GameSceneBridge.js.map +1 -0
- package/dist/engine/agent-api/PromptAnimationContract.d.ts +278 -0
- package/dist/engine/agent-api/PromptAnimationContract.d.ts.map +1 -0
- package/dist/engine/agent-api/PromptAnimationContract.js +238 -0
- package/dist/engine/agent-api/PromptAnimationContract.js.map +1 -0
- package/dist/engine/agent-api/PromptAnimationEvidence.d.ts +183 -0
- package/dist/engine/agent-api/PromptAnimationEvidence.d.ts.map +1 -0
- package/dist/engine/agent-api/PromptAnimationEvidence.js +454 -0
- package/dist/engine/agent-api/PromptAnimationEvidence.js.map +1 -0
- package/dist/engine/agent-api/RuntimeNodeHandle.d.ts +100 -0
- package/dist/engine/agent-api/RuntimeNodeHandle.d.ts.map +1 -0
- package/dist/engine/agent-api/RuntimeNodeHandle.js +36 -0
- package/dist/engine/agent-api/RuntimeNodeHandle.js.map +1 -0
- package/dist/engine/agent-api/ShotTimeline.d.ts +179 -0
- package/dist/engine/agent-api/ShotTimeline.d.ts.map +1 -0
- package/dist/engine/agent-api/ShotTimeline.js +264 -0
- package/dist/engine/agent-api/ShotTimeline.js.map +1 -0
- package/dist/engine/agent-api/VisemeController.d.ts +89 -0
- package/dist/engine/agent-api/VisemeController.d.ts.map +1 -0
- package/dist/engine/agent-api/VisemeController.js +207 -0
- package/dist/engine/agent-api/VisemeController.js.map +1 -0
- package/dist/engine/agent-api/game-kits/fighting.d.ts +123 -0
- package/dist/engine/agent-api/game-kits/fighting.d.ts.map +1 -0
- package/dist/engine/agent-api/game-kits/fighting.js +483 -0
- package/dist/engine/agent-api/game-kits/fighting.js.map +1 -0
- package/dist/engine/agent-api/game-kits/index.d.ts +15 -0
- package/dist/engine/agent-api/game-kits/index.d.ts.map +1 -0
- package/dist/engine/agent-api/game-kits/index.js +6 -0
- package/dist/engine/agent-api/game-kits/index.js.map +1 -0
- package/dist/engine/agent-api/humanoid-walk-runtime.d.ts +18 -81
- package/dist/engine/agent-api/humanoid-walk-runtime.d.ts.map +1 -1
- package/dist/engine/agent-api/humanoid-walk-runtime.js +4 -279
- package/dist/engine/agent-api/humanoid-walk-runtime.js.map +1 -1
- package/dist/engine/agent-api/index.d.ts +490 -4
- package/dist/engine/agent-api/index.d.ts.map +1 -1
- package/dist/engine/agent-api/index.js +759 -1802
- package/dist/engine/agent-api/index.js.map +1 -1
- package/dist/engine/agent-api/particle-fountain-runtime.d.ts +5 -80
- package/dist/engine/agent-api/particle-fountain-runtime.d.ts.map +1 -1
- package/dist/engine/agent-api/particle-fountain-runtime.js +7 -291
- package/dist/engine/agent-api/particle-fountain-runtime.js.map +1 -1
- package/dist/engine/agent-api/product-viewer-runtime.d.ts +17 -107
- package/dist/engine/agent-api/product-viewer-runtime.d.ts.map +1 -1
- package/dist/engine/agent-api/product-viewer-runtime.js +4 -330
- package/dist/engine/agent-api/product-viewer-runtime.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/physics/CollisionVolumes.d.ts +57 -0
- package/dist/physics/CollisionVolumes.d.ts.map +1 -0
- package/dist/physics/CollisionVolumes.js +159 -0
- package/dist/physics/CollisionVolumes.js.map +1 -0
- package/dist/physics/HitboxWorld.d.ts +229 -0
- package/dist/physics/HitboxWorld.d.ts.map +1 -0
- package/dist/physics/HitboxWorld.js +640 -0
- package/dist/physics/HitboxWorld.js.map +1 -0
- package/dist/physics/KinematicBody.d.ts +157 -0
- package/dist/physics/KinematicBody.d.ts.map +1 -0
- package/dist/physics/KinematicBody.js +405 -0
- package/dist/physics/KinematicBody.js.map +1 -0
- package/dist/physics/KinematicWorld.d.ts +58 -0
- package/dist/physics/KinematicWorld.d.ts.map +1 -0
- package/dist/physics/KinematicWorld.js +246 -0
- package/dist/physics/KinematicWorld.js.map +1 -0
- package/dist/physics/index.d.ts +4 -0
- package/dist/physics/index.d.ts.map +1 -1
- package/dist/physics/index.js +4 -0
- package/dist/physics/index.js.map +1 -1
- package/dist/rendering/ForwardPass.js +2 -2
- package/dist/rendering/ShaderLibrary.js +2 -2
- package/dist/rendering/SkinnedLitMaterial.js +3 -3
- package/dist/rendering/SkinnedUnlitMaterial.js +3 -3
- package/dist/scene/Renderable.js +2 -2
- package/dist/scripting/VisualGraph.d.ts +2 -1
- package/dist/scripting/VisualGraph.d.ts.map +1 -1
- package/dist/scripting/VisualGraph.js +118 -1
- package/dist/scripting/VisualGraph.js.map +1 -1
- package/dist/scripting/VisualGraphContext.d.ts +123 -0
- package/dist/scripting/VisualGraphContext.d.ts.map +1 -0
- package/dist/scripting/VisualGraphContext.js +2 -0
- package/dist/scripting/VisualGraphContext.js.map +1 -0
- package/dist/scripting/VisualGraphExecutor.d.ts +6 -1
- package/dist/scripting/VisualGraphExecutor.d.ts.map +1 -1
- package/dist/scripting/VisualGraphExecutor.js +364 -7
- package/dist/scripting/VisualGraphExecutor.js.map +1 -1
- package/dist/scripting/VisualNodeCatalog.d.ts +1 -1
- package/dist/scripting/VisualNodeCatalog.d.ts.map +1 -1
- package/dist/scripting/VisualNodeCatalog.js +61 -1
- package/dist/scripting/VisualNodeCatalog.js.map +1 -1
- package/dist/scripting/index.d.ts +1 -0
- package/dist/scripting/index.d.ts.map +1 -1
- package/dist/scripting/index.js.map +1 -1
- package/package.json +193 -121
- package/templates/product-viewer/src/main.ts +1 -0
- package/dist/three-compat/ThreeApiInventory.d.ts +0 -18
- package/dist/three-compat/ThreeApiInventory.d.ts.map +0 -1
- package/dist/three-compat/ThreeApiInventory.js +0 -99
- package/dist/three-compat/ThreeApiInventory.js.map +0 -1
- package/dist/three-compat/ThreeCompatibilityMatrix.d.ts +0 -30
- package/dist/three-compat/ThreeCompatibilityMatrix.d.ts.map +0 -1
- package/dist/three-compat/ThreeCompatibilityMatrix.js +0 -69
- package/dist/three-compat/ThreeCompatibilityMatrix.js.map +0 -1
- package/dist/three-compat/animation/index.d.ts +0 -3
- package/dist/three-compat/animation/index.d.ts.map +0 -1
- package/dist/three-compat/animation/index.js +0 -2
- package/dist/three-compat/animation/index.js.map +0 -1
- package/dist/three-compat/cameras/index.d.ts +0 -24
- package/dist/three-compat/cameras/index.d.ts.map +0 -1
- package/dist/three-compat/cameras/index.js +0 -44
- package/dist/three-compat/cameras/index.js.map +0 -1
- package/dist/three-compat/controls/index.d.ts +0 -3
- package/dist/three-compat/controls/index.d.ts.map +0 -1
- package/dist/three-compat/controls/index.js +0 -2
- package/dist/three-compat/controls/index.js.map +0 -1
- package/dist/three-compat/core/Object3DCompat.d.ts +0 -62
- package/dist/three-compat/core/Object3DCompat.d.ts.map +0 -1
- package/dist/three-compat/core/Object3DCompat.js +0 -112
- package/dist/three-compat/core/Object3DCompat.js.map +0 -1
- package/dist/three-compat/core/RaycasterCompat.d.ts +0 -18
- package/dist/three-compat/core/RaycasterCompat.d.ts.map +0 -1
- package/dist/three-compat/core/RaycasterCompat.js +0 -28
- package/dist/three-compat/core/RaycasterCompat.js.map +0 -1
- package/dist/three-compat/core/SceneCompat.d.ts +0 -8
- package/dist/three-compat/core/SceneCompat.d.ts.map +0 -1
- package/dist/three-compat/core/SceneCompat.js +0 -8
- package/dist/three-compat/core/SceneCompat.js.map +0 -1
- package/dist/three-compat/geometries/index.d.ts +0 -67
- package/dist/three-compat/geometries/index.d.ts.map +0 -1
- package/dist/three-compat/geometries/index.js +0 -114
- package/dist/three-compat/geometries/index.js.map +0 -1
- package/dist/three-compat/helpers/index.d.ts +0 -40
- package/dist/three-compat/helpers/index.d.ts.map +0 -1
- package/dist/three-compat/helpers/index.js +0 -129
- package/dist/three-compat/helpers/index.js.map +0 -1
- package/dist/three-compat/index.d.ts +0 -32
- package/dist/three-compat/index.d.ts.map +0 -1
- package/dist/three-compat/index.js +0 -22
- package/dist/three-compat/index.js.map +0 -1
- package/dist/three-compat/lights/index.d.ts +0 -35
- package/dist/three-compat/lights/index.d.ts.map +0 -1
- package/dist/three-compat/lights/index.js +0 -39
- package/dist/three-compat/lights/index.js.map +0 -1
- package/dist/three-compat/loaders/index.d.ts +0 -54
- package/dist/three-compat/loaders/index.d.ts.map +0 -1
- package/dist/three-compat/loaders/index.js +0 -79
- package/dist/three-compat/loaders/index.js.map +0 -1
- package/dist/three-compat/materials/index.d.ts +0 -70
- package/dist/three-compat/materials/index.d.ts.map +0 -1
- package/dist/three-compat/materials/index.js +0 -85
- package/dist/three-compat/materials/index.js.map +0 -1
- package/dist/three-compat/math/index.d.ts +0 -34
- package/dist/three-compat/math/index.d.ts.map +0 -1
- package/dist/three-compat/math/index.js +0 -90
- package/dist/three-compat/math/index.js.map +0 -1
- package/dist/three-compat/migration/CompatibilityWarnings.d.ts +0 -6
- package/dist/three-compat/migration/CompatibilityWarnings.d.ts.map +0 -1
- package/dist/three-compat/migration/CompatibilityWarnings.js +0 -8
- package/dist/three-compat/migration/CompatibilityWarnings.js.map +0 -1
- package/dist/three-compat/migration/ImportMap.d.ts +0 -2
- package/dist/three-compat/migration/ImportMap.d.ts.map +0 -1
- package/dist/three-compat/migration/ImportMap.js +0 -10
- package/dist/three-compat/migration/ImportMap.js.map +0 -1
- package/dist/three-compat/migration/ThreeToA3DAdapter.d.ts +0 -8
- package/dist/three-compat/migration/ThreeToA3DAdapter.d.ts.map +0 -1
- package/dist/three-compat/migration/ThreeToA3DAdapter.js +0 -20
- package/dist/three-compat/migration/ThreeToA3DAdapter.js.map +0 -1
- package/dist/three-compat/postprocessing/index.d.ts +0 -2
- package/dist/three-compat/postprocessing/index.d.ts.map +0 -1
- package/dist/three-compat/postprocessing/index.js +0 -2
- package/dist/three-compat/postprocessing/index.js.map +0 -1
- package/dist/three-compat/render-targets/index.d.ts +0 -17
- package/dist/three-compat/render-targets/index.d.ts.map +0 -1
- package/dist/three-compat/render-targets/index.js +0 -29
- package/dist/three-compat/render-targets/index.js.map +0 -1
- package/dist/three-compat/shaders/index.d.ts +0 -3
- package/dist/three-compat/shaders/index.d.ts.map +0 -1
- package/dist/three-compat/shaders/index.js +0 -3
- package/dist/three-compat/shaders/index.js.map +0 -1
- package/dist/three-compat/textures/index.d.ts +0 -19
- package/dist/three-compat/textures/index.d.ts.map +0 -1
- package/dist/three-compat/textures/index.js +0 -24
- package/dist/three-compat/textures/index.js.map +0 -1
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import { createPromptAnimationIssue, normalizePromptAnimationTime, promptAnimationContractVersion, promptAnimationFrameAtTime } from "./PromptAnimationContract.js";
|
|
2
|
+
import { sampleVisemeTrack } from "./VisemeController.js";
|
|
3
|
+
export function defineShotTimeline(timeline) {
|
|
4
|
+
return timeline;
|
|
5
|
+
}
|
|
6
|
+
export function createShotTimeline(input) {
|
|
7
|
+
let duration = input.duration ?? 0;
|
|
8
|
+
for (const shot of input.shots) {
|
|
9
|
+
duration = Math.max(duration, shot.endTime);
|
|
10
|
+
}
|
|
11
|
+
return {
|
|
12
|
+
artifact: "shot-timeline",
|
|
13
|
+
contractId: promptAnimationContractVersion,
|
|
14
|
+
episodeId: input.episodeId,
|
|
15
|
+
frameRate: input.frameRate,
|
|
16
|
+
duration: normalizePromptAnimationTime(duration),
|
|
17
|
+
shots: input.shots,
|
|
18
|
+
...(input.generatedAt ? { generatedAt: input.generatedAt } : {})
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export function shotTimeline(input) {
|
|
22
|
+
return createShotTimeline(input);
|
|
23
|
+
}
|
|
24
|
+
export function createShotPlaybackPlan(input) {
|
|
25
|
+
const runtimeNodeByCharacterId = {};
|
|
26
|
+
for (const shot of input.timeline.shots) {
|
|
27
|
+
for (const character of shot.characters) {
|
|
28
|
+
runtimeNodeByCharacterId[character.characterId] =
|
|
29
|
+
input.runtimeNodeByCharacterId?.[character.characterId] ?? character.characterId;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
kind: "shot-playback-plan",
|
|
34
|
+
timeline: input.timeline,
|
|
35
|
+
...(input.performance ? { performance: input.performance } : {}),
|
|
36
|
+
...(input.captions ? { captions: input.captions } : {}),
|
|
37
|
+
...(input.visemes ? { visemes: input.visemes } : {}),
|
|
38
|
+
runtimeNodeByCharacterId,
|
|
39
|
+
loop: input.loop ?? false
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
export function sampleShotPlaybackPlan(plan, time) {
|
|
43
|
+
const sampledTime = normalizeShotPlaybackTime(plan, time);
|
|
44
|
+
const shot = getShotAtTime(plan.timeline, sampledTime);
|
|
45
|
+
if (!shot) {
|
|
46
|
+
return {
|
|
47
|
+
time: sampledTime,
|
|
48
|
+
frame: promptAnimationFrameAtTime(sampledTime, plan.timeline.frameRate),
|
|
49
|
+
nodeUpdates: []
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
const caption = plan.captions?.cues.find((cue) => sampledTime >= cue.startTime && sampledTime < cue.endTime);
|
|
53
|
+
const nodeUpdates = shot.characters.map((character) => {
|
|
54
|
+
const activeCues = activePerformanceCues(plan.performance, sampledTime, character.characterId, shot.shotId);
|
|
55
|
+
const primaryCue = activeCues.find((cue) => cue.action === "speak") ??
|
|
56
|
+
activeCues.find((cue) => cue.animationClip || cue.blocking || cue.body) ??
|
|
57
|
+
activeCues[activeCues.length - 1];
|
|
58
|
+
const viseme = plan.visemes ? sampleVisemeTrack(plan.visemes, sampledTime, character.characterId) : undefined;
|
|
59
|
+
const blockingPosition = primaryCue?.blocking?.position ?? primaryCue?.body?.position ?? character.position;
|
|
60
|
+
const blockingRotation = primaryCue?.blocking?.rotation ?? primaryCue?.body?.rotation ?? facingRotation(character.facing);
|
|
61
|
+
const scale = primaryCue?.blocking?.scale ?? primaryCue?.body?.scale;
|
|
62
|
+
return {
|
|
63
|
+
nodeId: plan.runtimeNodeByCharacterId[character.characterId] ?? character.characterId,
|
|
64
|
+
characterId: character.characterId,
|
|
65
|
+
...(blockingPosition ? { position: blockingPosition } : {}),
|
|
66
|
+
...(blockingRotation ? { rotation: blockingRotation } : {}),
|
|
67
|
+
...(scale !== undefined ? { scale } : {}),
|
|
68
|
+
visible: primaryCue?.blocking?.visible ?? true,
|
|
69
|
+
...(primaryCue?.animationClip ?? character.animationClip
|
|
70
|
+
? { animationClip: primaryCue?.animationClip ?? character.animationClip }
|
|
71
|
+
: {}),
|
|
72
|
+
action: primaryCue?.action ?? character.action,
|
|
73
|
+
...(primaryCue?.emotion ?? character.emotion ? { emotion: primaryCue?.emotion ?? character.emotion } : {}),
|
|
74
|
+
...(primaryCue?.gaze?.targetId
|
|
75
|
+
? { gazeTargetId: primaryCue.gaze.targetId }
|
|
76
|
+
: typeof character.lookAt === "string"
|
|
77
|
+
? { gazeTargetId: character.lookAt }
|
|
78
|
+
: {}),
|
|
79
|
+
activeCueIds: activeCues.map((cue) => cue.id),
|
|
80
|
+
...(viseme
|
|
81
|
+
? {
|
|
82
|
+
mouth: {
|
|
83
|
+
visemeId: viseme.primaryVisemeId,
|
|
84
|
+
mouthOpenness: viseme.mouthOpenness,
|
|
85
|
+
primitiveMouthCard: viseme.primitiveMouthCard,
|
|
86
|
+
blendshapeWeights: viseme.blendshapeWeights
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
: {})
|
|
90
|
+
};
|
|
91
|
+
});
|
|
92
|
+
return {
|
|
93
|
+
time: sampledTime,
|
|
94
|
+
frame: promptAnimationFrameAtTime(sampledTime, plan.timeline.frameRate),
|
|
95
|
+
shot,
|
|
96
|
+
shotId: shot.shotId,
|
|
97
|
+
sceneId: shot.sceneId,
|
|
98
|
+
...(caption ? { caption } : {}),
|
|
99
|
+
nodeUpdates
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
export function applyShotPlaybackFrame(app, framePlan, options = {}) {
|
|
103
|
+
for (const update of framePlan.nodeUpdates) {
|
|
104
|
+
const node = app.nodes.get(update.nodeId);
|
|
105
|
+
if (node)
|
|
106
|
+
applyNodeUpdate(node, update, options.playAnimationClips ?? true);
|
|
107
|
+
const mouthNodeId = update.characterId ? options.primitiveMouthNodeByCharacterId?.[update.characterId] : undefined;
|
|
108
|
+
const mouthNode = mouthNodeId ? app.nodes.get(mouthNodeId) : undefined;
|
|
109
|
+
if (mouthNode && update.mouth)
|
|
110
|
+
applyPrimitiveMouthUpdate(mouthNode, update.mouth, update.position);
|
|
111
|
+
}
|
|
112
|
+
options.onCaption?.(framePlan.caption, framePlan);
|
|
113
|
+
}
|
|
114
|
+
export function installShotPlayback(app, plan, options = {}) {
|
|
115
|
+
let localTime = options.timeOffset ?? 0;
|
|
116
|
+
return app.onFrame((frame) => {
|
|
117
|
+
const sampledTime = options.useRuntimeTime === false ? localTime : frame.time + (options.timeOffset ?? 0);
|
|
118
|
+
applyShotPlaybackFrame(app, sampleShotPlaybackPlan(plan, sampledTime), options);
|
|
119
|
+
localTime = normalizePromptAnimationTime(localTime + frame.dt);
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
export function shotDuration(shot) {
|
|
123
|
+
return normalizePromptAnimationTime(shot.endTime - shot.startTime);
|
|
124
|
+
}
|
|
125
|
+
export function getShotAtTime(timeline, time) {
|
|
126
|
+
const normalized = normalizePromptAnimationTime(time);
|
|
127
|
+
for (const shot of timeline.shots) {
|
|
128
|
+
if (normalized >= shot.startTime && normalized < shot.endTime)
|
|
129
|
+
return shot;
|
|
130
|
+
}
|
|
131
|
+
const lastShot = timeline.shots[timeline.shots.length - 1];
|
|
132
|
+
if (lastShot && normalized === lastShot.endTime)
|
|
133
|
+
return lastShot;
|
|
134
|
+
return undefined;
|
|
135
|
+
}
|
|
136
|
+
export function getShotTimelineCaptureTimes(timeline) {
|
|
137
|
+
const times = new Set();
|
|
138
|
+
for (const shot of timeline.shots) {
|
|
139
|
+
for (const captureTime of shot.captureTimes) {
|
|
140
|
+
times.add(normalizePromptAnimationTime(captureTime));
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return [...times].sort((a, b) => a - b);
|
|
144
|
+
}
|
|
145
|
+
export function validateShotTimeline(timeline) {
|
|
146
|
+
const issues = [];
|
|
147
|
+
const shotIds = new Set();
|
|
148
|
+
let previousEnd = 0;
|
|
149
|
+
if (timeline.frameRate <= 0) {
|
|
150
|
+
issues.push(createPromptAnimationIssue("error", "shot-timeline-frame-rate", "Shot timeline frame rate must be positive."));
|
|
151
|
+
}
|
|
152
|
+
if (timeline.shots.length === 0) {
|
|
153
|
+
issues.push(createPromptAnimationIssue("error", "shot-timeline-empty", "Shot timeline must contain at least one shot."));
|
|
154
|
+
}
|
|
155
|
+
timeline.shots.forEach((shot, index) => {
|
|
156
|
+
if (!shot.shotId) {
|
|
157
|
+
issues.push(createPromptAnimationIssue("error", "shot-id-missing", `Shot at index ${index} is missing a stable shot id.`, {
|
|
158
|
+
path: `shots.${index}.shotId`
|
|
159
|
+
}));
|
|
160
|
+
}
|
|
161
|
+
if (shotIds.has(shot.shotId)) {
|
|
162
|
+
issues.push(createPromptAnimationIssue("error", "shot-id-duplicate", `Duplicate shot id "${shot.shotId}".`, {
|
|
163
|
+
path: `shots.${index}.shotId`
|
|
164
|
+
}));
|
|
165
|
+
}
|
|
166
|
+
shotIds.add(shot.shotId);
|
|
167
|
+
if (shot.endTime <= shot.startTime) {
|
|
168
|
+
issues.push(createPromptAnimationIssue("error", "shot-duration-invalid", `Shot "${shot.shotId}" must end after it starts.`, {
|
|
169
|
+
path: `shots.${index}`,
|
|
170
|
+
time: shot.startTime
|
|
171
|
+
}));
|
|
172
|
+
}
|
|
173
|
+
if (index > 0 && shot.startTime < previousEnd) {
|
|
174
|
+
issues.push(createPromptAnimationIssue("error", "shot-overlap", `Shot "${shot.shotId}" overlaps the previous shot.`, {
|
|
175
|
+
path: `shots.${index}`,
|
|
176
|
+
time: shot.startTime
|
|
177
|
+
}));
|
|
178
|
+
}
|
|
179
|
+
for (const captureTime of shot.captureTimes) {
|
|
180
|
+
if (captureTime < shot.startTime || captureTime > shot.endTime) {
|
|
181
|
+
issues.push(createPromptAnimationIssue("error", "shot-capture-outside-bounds", `Capture time ${captureTime}s is outside shot "${shot.shotId}".`, {
|
|
182
|
+
path: `shots.${index}.captureTimes`,
|
|
183
|
+
frame: promptAnimationFrameAtTime(captureTime, timeline.frameRate),
|
|
184
|
+
time: captureTime
|
|
185
|
+
}));
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
previousEnd = Math.max(previousEnd, shot.endTime);
|
|
189
|
+
});
|
|
190
|
+
if (previousEnd > timeline.duration) {
|
|
191
|
+
issues.push(createPromptAnimationIssue("error", "shot-timeline-duration-short", "Shot timeline duration is shorter than its final shot.", { time: previousEnd }));
|
|
192
|
+
}
|
|
193
|
+
return issues;
|
|
194
|
+
}
|
|
195
|
+
export function createShotTimelineDiagnostics(timeline) {
|
|
196
|
+
const sceneIds = new Set();
|
|
197
|
+
for (const shot of timeline.shots)
|
|
198
|
+
sceneIds.add(shot.sceneId);
|
|
199
|
+
const captureTimes = getShotTimelineCaptureTimes(timeline);
|
|
200
|
+
return {
|
|
201
|
+
shotCount: timeline.shots.length,
|
|
202
|
+
duration: timeline.duration,
|
|
203
|
+
captureCount: captureTimes.length,
|
|
204
|
+
uniqueSceneIds: [...sceneIds],
|
|
205
|
+
frameRate: timeline.frameRate,
|
|
206
|
+
issues: validateShotTimeline(timeline)
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
function activePerformanceCues(performance, time, characterId, shotId) {
|
|
210
|
+
if (!performance)
|
|
211
|
+
return [];
|
|
212
|
+
return performance.cues.filter((cue) => {
|
|
213
|
+
if (cue.characterId !== characterId)
|
|
214
|
+
return false;
|
|
215
|
+
if (cue.shotId && cue.shotId !== shotId)
|
|
216
|
+
return false;
|
|
217
|
+
return time >= cue.startTime && time < cue.endTime;
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
function normalizeShotPlaybackTime(plan, time) {
|
|
221
|
+
const normalized = normalizePromptAnimationTime(time);
|
|
222
|
+
if (!plan.loop || plan.timeline.duration <= 0)
|
|
223
|
+
return normalized;
|
|
224
|
+
return normalizePromptAnimationTime(normalized % plan.timeline.duration);
|
|
225
|
+
}
|
|
226
|
+
function facingRotation(facing) {
|
|
227
|
+
if (facing === "left")
|
|
228
|
+
return [0, -0.35, 0];
|
|
229
|
+
if (facing === "right")
|
|
230
|
+
return [0, 0.35, 0];
|
|
231
|
+
if (facing === "three-quarter")
|
|
232
|
+
return [0, 0.18, 0];
|
|
233
|
+
return undefined;
|
|
234
|
+
}
|
|
235
|
+
function applyNodeUpdate(node, update, playAnimationClips) {
|
|
236
|
+
if (update.visible !== undefined)
|
|
237
|
+
node.setVisible?.(update.visible);
|
|
238
|
+
if (update.position)
|
|
239
|
+
node.setPosition?.(update.position[0], update.position[1], update.position[2]);
|
|
240
|
+
if (update.rotation)
|
|
241
|
+
node.setRotation?.(update.rotation[0], update.rotation[1], update.rotation[2]);
|
|
242
|
+
if (update.scale !== undefined)
|
|
243
|
+
node.setScale?.(update.scale);
|
|
244
|
+
if (playAnimationClips && update.animationClip)
|
|
245
|
+
node.play?.(update.animationClip, { loop: true });
|
|
246
|
+
}
|
|
247
|
+
function applyPrimitiveMouthUpdate(mouthNode, mouth, bodyPosition) {
|
|
248
|
+
const openness = Math.min(1, Math.max(0, mouth.mouthOpenness));
|
|
249
|
+
const width = mouth.primitiveMouthCard === "round"
|
|
250
|
+
? 0.16
|
|
251
|
+
: mouth.primitiveMouthCard === "wide"
|
|
252
|
+
? 0.34
|
|
253
|
+
: mouth.primitiveMouthCard === "narrow"
|
|
254
|
+
? 0.12
|
|
255
|
+
: mouth.primitiveMouthCard === "smile"
|
|
256
|
+
? 0.3
|
|
257
|
+
: 0.22;
|
|
258
|
+
const height = mouth.primitiveMouthCard === "closed" ? 0.025 : 0.035 + openness * 0.12;
|
|
259
|
+
if (bodyPosition)
|
|
260
|
+
mouthNode.setPosition?.(bodyPosition[0], bodyPosition[1] + 0.05, bodyPosition[2] + 0.32);
|
|
261
|
+
mouthNode.setScale?.([width, height, 0.025]);
|
|
262
|
+
mouthNode.setVisible?.(mouth.primitiveMouthCard !== "closed" || openness > 0.04);
|
|
263
|
+
}
|
|
264
|
+
//# sourceMappingURL=ShotTimeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShotTimeline.js","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/ShotTimeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { type PromptAnimationArtifactBase, type PromptAnimationFrameRate, type PromptAnimationId, type PromptAnimationLanguageCode, type PromptAnimationSeconds, type PromptAnimationValidationIssue } from "./PromptAnimationContract.js";
|
|
2
|
+
export type AuraVoiceVisemeFormat = "auravoice-visemes-v2";
|
|
3
|
+
export type AuraVoiceVisemeId = "sil" | "aa" | "ae" | "ah" | "ao" | "eh" | "er" | "ih" | "iy" | "oh" | "ow" | "uh" | "uw" | "bmp" | "ch" | "d" | "fv" | "g" | "k" | "l" | "m" | "n" | "p" | "r" | "s" | "th" | "wq" | string;
|
|
4
|
+
export type PrimitiveMouthCard = "closed" | "narrow" | "open" | "wide" | "round" | "smile";
|
|
5
|
+
export interface AuraVoiceVisemeCue {
|
|
6
|
+
readonly id: PromptAnimationId;
|
|
7
|
+
readonly characterId: PromptAnimationId;
|
|
8
|
+
readonly speakerId?: PromptAnimationId | undefined;
|
|
9
|
+
readonly lineId?: PromptAnimationId | undefined;
|
|
10
|
+
readonly phoneme?: string | undefined;
|
|
11
|
+
readonly phonemeId?: string | undefined;
|
|
12
|
+
readonly word?: string | undefined;
|
|
13
|
+
readonly wordIndex?: number | undefined;
|
|
14
|
+
readonly wordStartTime?: PromptAnimationSeconds | undefined;
|
|
15
|
+
readonly wordEndTime?: PromptAnimationSeconds | undefined;
|
|
16
|
+
readonly startTime: PromptAnimationSeconds;
|
|
17
|
+
readonly endTime: PromptAnimationSeconds;
|
|
18
|
+
readonly visemeId: AuraVoiceVisemeId;
|
|
19
|
+
readonly mouthOpenness: number;
|
|
20
|
+
readonly weight: number;
|
|
21
|
+
readonly weights?: Record<string, number> | undefined;
|
|
22
|
+
readonly blendshapeWeights?: Record<string, number> | undefined;
|
|
23
|
+
readonly blendshapeNames?: readonly string[] | undefined;
|
|
24
|
+
}
|
|
25
|
+
export interface AuraVoiceVisemeTrack extends PromptAnimationArtifactBase<"visemes"> {
|
|
26
|
+
readonly format: AuraVoiceVisemeFormat;
|
|
27
|
+
readonly language: PromptAnimationLanguageCode;
|
|
28
|
+
readonly frameRate: PromptAnimationFrameRate;
|
|
29
|
+
readonly cues: readonly AuraVoiceVisemeCue[];
|
|
30
|
+
}
|
|
31
|
+
export interface VisemeSample {
|
|
32
|
+
readonly time: PromptAnimationSeconds;
|
|
33
|
+
readonly characterId?: PromptAnimationId | undefined;
|
|
34
|
+
readonly activeCues: readonly AuraVoiceVisemeCue[];
|
|
35
|
+
readonly visemeId: AuraVoiceVisemeId;
|
|
36
|
+
readonly primaryVisemeId: AuraVoiceVisemeId;
|
|
37
|
+
readonly mouthOpenness: number;
|
|
38
|
+
readonly primitiveMouthCard: PrimitiveMouthCard;
|
|
39
|
+
readonly weights: Record<string, number>;
|
|
40
|
+
readonly blendshapeWeights: Record<string, number>;
|
|
41
|
+
}
|
|
42
|
+
export interface VisemeController {
|
|
43
|
+
readonly track: AuraVoiceVisemeTrack;
|
|
44
|
+
sample(time: PromptAnimationSeconds, characterId?: PromptAnimationId): VisemeSample;
|
|
45
|
+
validate(): readonly PromptAnimationValidationIssue[];
|
|
46
|
+
}
|
|
47
|
+
export interface PrimitiveMouthVisemeCueInput {
|
|
48
|
+
readonly characterId: PromptAnimationId;
|
|
49
|
+
readonly speakerId?: PromptAnimationId | undefined;
|
|
50
|
+
readonly lineId?: PromptAnimationId | undefined;
|
|
51
|
+
readonly startTime: PromptAnimationSeconds;
|
|
52
|
+
readonly endTime: PromptAnimationSeconds;
|
|
53
|
+
readonly openVisemeId?: AuraVoiceVisemeId | undefined;
|
|
54
|
+
readonly closeVisemeId?: AuraVoiceVisemeId | undefined;
|
|
55
|
+
}
|
|
56
|
+
export interface GlbVisemeBlendshapeExample {
|
|
57
|
+
readonly description: string;
|
|
58
|
+
readonly mouthFallback: "blendshape";
|
|
59
|
+
readonly requiredCharacterAssetRule: string;
|
|
60
|
+
readonly blendshapeMap: Record<string, string>;
|
|
61
|
+
readonly sampleWeights: Record<string, number>;
|
|
62
|
+
readonly notes: readonly string[];
|
|
63
|
+
}
|
|
64
|
+
export interface PrimitiveMouthExample {
|
|
65
|
+
readonly description: string;
|
|
66
|
+
readonly mouthFallback: "primitive-mouth-card";
|
|
67
|
+
readonly runtimeNodeSuffix: string;
|
|
68
|
+
readonly cards: readonly PrimitiveMouthCard[];
|
|
69
|
+
readonly notes: readonly string[];
|
|
70
|
+
}
|
|
71
|
+
export declare const primitiveMouthVisemeExample: PrimitiveMouthExample;
|
|
72
|
+
export declare const glbVisemeBlendshapeExample: GlbVisemeBlendshapeExample;
|
|
73
|
+
export declare function defineAuraVoiceVisemes<const TTrack extends AuraVoiceVisemeTrack>(track: TTrack): TTrack;
|
|
74
|
+
export declare function createAuraVoiceVisemeTrack(input: {
|
|
75
|
+
readonly episodeId: PromptAnimationId;
|
|
76
|
+
readonly language: PromptAnimationLanguageCode;
|
|
77
|
+
readonly frameRate: PromptAnimationFrameRate;
|
|
78
|
+
readonly cues: readonly AuraVoiceVisemeCue[];
|
|
79
|
+
readonly generatedAt?: string | undefined;
|
|
80
|
+
}): AuraVoiceVisemeTrack;
|
|
81
|
+
export declare function createPrimitiveMouthVisemeCues(input: PrimitiveMouthVisemeCueInput): readonly AuraVoiceVisemeCue[];
|
|
82
|
+
export declare function createGlbBlendshapeVisemeCue(input: Omit<AuraVoiceVisemeCue, "blendshapeWeights" | "blendshapeNames"> & {
|
|
83
|
+
readonly blendshapeMap?: Record<string, string> | undefined;
|
|
84
|
+
}): AuraVoiceVisemeCue;
|
|
85
|
+
export declare function primitiveMouthCardForViseme(visemeId: AuraVoiceVisemeId, mouthOpenness: number): PrimitiveMouthCard;
|
|
86
|
+
export declare function sampleVisemeTrack(track: AuraVoiceVisemeTrack, time: PromptAnimationSeconds, characterId?: PromptAnimationId): VisemeSample;
|
|
87
|
+
export declare function createVisemeController(track: AuraVoiceVisemeTrack): VisemeController;
|
|
88
|
+
export declare function validateVisemeTrack(track: AuraVoiceVisemeTrack): readonly PromptAnimationValidationIssue[];
|
|
89
|
+
//# sourceMappingURL=VisemeController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VisemeController.d.ts","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/VisemeController.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { createPromptAnimationIssue, normalizePromptAnimationTime, promptAnimationContractVersion } from "./PromptAnimationContract.js";
|
|
2
|
+
export const primitiveMouthVisemeExample = {
|
|
3
|
+
description: "Primitive character fallback that scales a small mouth-card runtime node from sampled visemes.",
|
|
4
|
+
mouthFallback: "primitive-mouth-card",
|
|
5
|
+
runtimeNodeSuffix: ":mouth",
|
|
6
|
+
cards: ["closed", "narrow", "open", "wide", "round", "smile"],
|
|
7
|
+
notes: [
|
|
8
|
+
"Use this for generated primitive characters only.",
|
|
9
|
+
"Register the mouth card with game.runtimeNode(`${characterId}:mouth`) and update it from sampleVisemeTrack."
|
|
10
|
+
]
|
|
11
|
+
};
|
|
12
|
+
export const glbVisemeBlendshapeExample = {
|
|
13
|
+
description: "Typed GLB character example that drives named blendshape weights from AuraVoice visemes.",
|
|
14
|
+
mouthFallback: "blendshape",
|
|
15
|
+
requiredCharacterAssetRule: "Add the GLB with `npx @aura3d/cli@latest assets add ./assets/character.glb --name character`, then use model(assets.character).",
|
|
16
|
+
blendshapeMap: {
|
|
17
|
+
sil: "mouthClose",
|
|
18
|
+
aa: "mouthOpen",
|
|
19
|
+
ah: "mouthOpen",
|
|
20
|
+
ae: "mouthSmile",
|
|
21
|
+
eh: "mouthSmile",
|
|
22
|
+
iy: "mouthNarrow",
|
|
23
|
+
oh: "mouthFunnel",
|
|
24
|
+
ow: "mouthFunnel",
|
|
25
|
+
uw: "mouthPucker",
|
|
26
|
+
bmp: "mouthPress",
|
|
27
|
+
m: "mouthPress",
|
|
28
|
+
p: "mouthPress",
|
|
29
|
+
fv: "mouthLowerLipBite",
|
|
30
|
+
th: "tongueOut"
|
|
31
|
+
},
|
|
32
|
+
sampleWeights: {
|
|
33
|
+
mouthOpen: 0.68,
|
|
34
|
+
mouthFunnel: 0.12,
|
|
35
|
+
mouthSmile: 0.18,
|
|
36
|
+
mouthPress: 0
|
|
37
|
+
},
|
|
38
|
+
notes: [
|
|
39
|
+
"Do not reference a string asset id; import generated typed assets from ./aura-assets.",
|
|
40
|
+
"Keep primitive-mouth-card available as a fallback when a GLB does not expose matching blendshapes."
|
|
41
|
+
]
|
|
42
|
+
};
|
|
43
|
+
export function defineAuraVoiceVisemes(track) {
|
|
44
|
+
return track;
|
|
45
|
+
}
|
|
46
|
+
export function createAuraVoiceVisemeTrack(input) {
|
|
47
|
+
return {
|
|
48
|
+
artifact: "visemes",
|
|
49
|
+
contractId: promptAnimationContractVersion,
|
|
50
|
+
episodeId: input.episodeId,
|
|
51
|
+
format: "auravoice-visemes-v2",
|
|
52
|
+
language: input.language,
|
|
53
|
+
frameRate: input.frameRate,
|
|
54
|
+
cues: input.cues,
|
|
55
|
+
...(input.generatedAt ? { generatedAt: input.generatedAt } : {})
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
export function createPrimitiveMouthVisemeCues(input) {
|
|
59
|
+
const duration = Math.max(0.001, input.endTime - input.startTime);
|
|
60
|
+
const openEnd = input.startTime + duration * 0.62;
|
|
61
|
+
return [
|
|
62
|
+
{
|
|
63
|
+
id: `${input.lineId ?? input.characterId}:${input.startTime}:primitive-mouth-open`,
|
|
64
|
+
characterId: input.characterId,
|
|
65
|
+
...(input.speakerId ? { speakerId: input.speakerId } : {}),
|
|
66
|
+
...(input.lineId ? { lineId: input.lineId } : {}),
|
|
67
|
+
startTime: input.startTime,
|
|
68
|
+
endTime: normalizePromptAnimationTime(openEnd),
|
|
69
|
+
visemeId: input.openVisemeId ?? "ah",
|
|
70
|
+
mouthOpenness: 0.58,
|
|
71
|
+
weight: 0.9
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
id: `${input.lineId ?? input.characterId}:${input.startTime}:primitive-mouth-close`,
|
|
75
|
+
characterId: input.characterId,
|
|
76
|
+
...(input.speakerId ? { speakerId: input.speakerId } : {}),
|
|
77
|
+
...(input.lineId ? { lineId: input.lineId } : {}),
|
|
78
|
+
startTime: normalizePromptAnimationTime(openEnd),
|
|
79
|
+
endTime: input.endTime,
|
|
80
|
+
visemeId: input.closeVisemeId ?? "m",
|
|
81
|
+
mouthOpenness: 0.12,
|
|
82
|
+
weight: 0.82
|
|
83
|
+
}
|
|
84
|
+
];
|
|
85
|
+
}
|
|
86
|
+
export function createGlbBlendshapeVisemeCue(input) {
|
|
87
|
+
const { blendshapeMap: inputBlendshapeMap, ...cue } = input;
|
|
88
|
+
const blendshapeMap = inputBlendshapeMap ?? glbVisemeBlendshapeExample.blendshapeMap;
|
|
89
|
+
const blendshapeName = blendshapeMap[input.visemeId] ?? blendshapeMap[String(input.visemeId)] ?? input.visemeId;
|
|
90
|
+
return {
|
|
91
|
+
...cue,
|
|
92
|
+
blendshapeNames: [blendshapeName],
|
|
93
|
+
blendshapeWeights: {
|
|
94
|
+
[blendshapeName]: Math.min(1, Math.max(0, input.weight * Math.max(input.mouthOpenness, 0.12)))
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
export function primitiveMouthCardForViseme(visemeId, mouthOpenness) {
|
|
99
|
+
if (mouthOpenness <= 0.08 || visemeId === "sil")
|
|
100
|
+
return "closed";
|
|
101
|
+
if (visemeId === "oh" || visemeId === "ow" || visemeId === "uw" || visemeId === "wq")
|
|
102
|
+
return "round";
|
|
103
|
+
if (visemeId === "iy" || visemeId === "s" || visemeId === "th")
|
|
104
|
+
return "narrow";
|
|
105
|
+
if (mouthOpenness >= 0.72 || visemeId === "aa" || visemeId === "ah")
|
|
106
|
+
return "wide";
|
|
107
|
+
if (visemeId === "eh" || visemeId === "ae")
|
|
108
|
+
return "smile";
|
|
109
|
+
return "open";
|
|
110
|
+
}
|
|
111
|
+
export function sampleVisemeTrack(track, time, characterId) {
|
|
112
|
+
const normalized = normalizePromptAnimationTime(time);
|
|
113
|
+
const activeCues = [];
|
|
114
|
+
let primary;
|
|
115
|
+
let mouthOpenness = 0;
|
|
116
|
+
const weights = {};
|
|
117
|
+
const blendshapeWeights = {};
|
|
118
|
+
for (const cue of track.cues) {
|
|
119
|
+
if (characterId && cue.characterId !== characterId)
|
|
120
|
+
continue;
|
|
121
|
+
if (normalized < cue.startTime || normalized >= cue.endTime)
|
|
122
|
+
continue;
|
|
123
|
+
activeCues.push(cue);
|
|
124
|
+
if (!primary || cue.weight > primary.weight)
|
|
125
|
+
primary = cue;
|
|
126
|
+
mouthOpenness = Math.max(mouthOpenness, cue.mouthOpenness * cue.weight);
|
|
127
|
+
weights[cue.visemeId] = Math.max(weights[cue.visemeId] ?? 0, cue.weight);
|
|
128
|
+
if (cue.weights) {
|
|
129
|
+
for (const [name, value] of Object.entries(cue.weights)) {
|
|
130
|
+
weights[name] = Math.max(weights[name] ?? 0, value);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
if (cue.blendshapeWeights) {
|
|
134
|
+
for (const [name, value] of Object.entries(cue.blendshapeWeights)) {
|
|
135
|
+
blendshapeWeights[name] = Math.max(blendshapeWeights[name] ?? 0, value * cue.weight);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
const primaryVisemeId = primary?.visemeId ?? "sil";
|
|
140
|
+
return {
|
|
141
|
+
time: normalized,
|
|
142
|
+
...(characterId ? { characterId } : {}),
|
|
143
|
+
activeCues,
|
|
144
|
+
visemeId: primaryVisemeId,
|
|
145
|
+
primaryVisemeId,
|
|
146
|
+
mouthOpenness,
|
|
147
|
+
primitiveMouthCard: primitiveMouthCardForViseme(primaryVisemeId, mouthOpenness),
|
|
148
|
+
weights,
|
|
149
|
+
blendshapeWeights
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
export function createVisemeController(track) {
|
|
153
|
+
return {
|
|
154
|
+
track,
|
|
155
|
+
sample(time, characterId) {
|
|
156
|
+
return sampleVisemeTrack(track, time, characterId);
|
|
157
|
+
},
|
|
158
|
+
validate() {
|
|
159
|
+
return validateVisemeTrack(track);
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
export function validateVisemeTrack(track) {
|
|
164
|
+
const issues = [];
|
|
165
|
+
const ids = new Set();
|
|
166
|
+
if (track.format !== "auravoice-visemes-v2") {
|
|
167
|
+
issues.push(createPromptAnimationIssue("error", "viseme-format", "Viseme track must use AuraVoice v2 format."));
|
|
168
|
+
}
|
|
169
|
+
if (track.frameRate <= 0) {
|
|
170
|
+
issues.push(createPromptAnimationIssue("error", "viseme-frame-rate", "Viseme track frame rate must be positive."));
|
|
171
|
+
}
|
|
172
|
+
track.cues.forEach((cue, index) => {
|
|
173
|
+
if (ids.has(cue.id)) {
|
|
174
|
+
issues.push(createPromptAnimationIssue("error", "viseme-id-duplicate", `Duplicate viseme cue id "${cue.id}".`, {
|
|
175
|
+
path: `cues.${index}.id`,
|
|
176
|
+
time: cue.startTime
|
|
177
|
+
}));
|
|
178
|
+
}
|
|
179
|
+
ids.add(cue.id);
|
|
180
|
+
if (cue.endTime <= cue.startTime) {
|
|
181
|
+
issues.push(createPromptAnimationIssue("error", "viseme-duration", `Viseme cue "${cue.id}" must end after it starts.`, {
|
|
182
|
+
path: `cues.${index}`,
|
|
183
|
+
time: cue.startTime
|
|
184
|
+
}));
|
|
185
|
+
}
|
|
186
|
+
if (cue.wordStartTime !== undefined && cue.wordEndTime !== undefined && cue.wordEndTime < cue.wordStartTime) {
|
|
187
|
+
issues.push(createPromptAnimationIssue("error", "viseme-word-timing-order", `Viseme cue "${cue.id}" word timing must not end before it starts.`, { path: `cues.${index}.wordEndTime`, time: cue.startTime }));
|
|
188
|
+
}
|
|
189
|
+
if (cue.wordIndex !== undefined && cue.wordIndex < 0) {
|
|
190
|
+
issues.push(createPromptAnimationIssue("error", "viseme-word-index", `Viseme cue "${cue.id}" word index must be non-negative.`, {
|
|
191
|
+
path: `cues.${index}.wordIndex`,
|
|
192
|
+
time: cue.startTime
|
|
193
|
+
}));
|
|
194
|
+
}
|
|
195
|
+
if (cue.mouthOpenness < 0 || cue.mouthOpenness > 1) {
|
|
196
|
+
issues.push(createPromptAnimationIssue("error", "viseme-mouth-openness", `Viseme cue "${cue.id}" mouth openness must be between 0 and 1.`, { path: `cues.${index}.mouthOpenness`, time: cue.startTime }));
|
|
197
|
+
}
|
|
198
|
+
if (cue.weight < 0 || cue.weight > 1) {
|
|
199
|
+
issues.push(createPromptAnimationIssue("error", "viseme-weight", `Viseme cue "${cue.id}" weight must be between 0 and 1.`, {
|
|
200
|
+
path: `cues.${index}.weight`,
|
|
201
|
+
time: cue.startTime
|
|
202
|
+
}));
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
return issues;
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=VisemeController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VisemeController.js","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/VisemeController.ts"],"names":[],"mappings":"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"}
|