@lovelace_lol/embody 0.0.16 → 0.0.17
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/dist/index.js +107 -1
- package/dist/index.js.map +1 -1
- package/dist/three/index.d.ts +2 -0
- package/dist/three/sceneVideoCapture.d.ts +12 -0
- package/dist/three.js +107 -1
- package/dist/three.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -5151,6 +5151,111 @@ function disposeSceneBackground(scene) {
|
|
|
5151
5151
|
owner.override?.onSceneDispose();
|
|
5152
5152
|
}
|
|
5153
5153
|
|
|
5154
|
+
// three/sceneVideoCapture.ts
|
|
5155
|
+
var activeCaptures = /* @__PURE__ */ new WeakMap();
|
|
5156
|
+
function endCharacterSceneVideoCaptures(rendering) {
|
|
5157
|
+
for (const end of [...activeCaptures.get(rendering) ?? []]) end();
|
|
5158
|
+
}
|
|
5159
|
+
function acquireCharacterSceneVideoCapture(rendering, options = {}) {
|
|
5160
|
+
const fps = options.fps ?? 30;
|
|
5161
|
+
if (!Number.isFinite(fps) || fps < 1 || fps > 60) throw new Error("Video capture frame rate must be between 1 and 60 fps.");
|
|
5162
|
+
if (typeof MutationObserver === "undefined") throw new Error("Canvas size observation is unavailable for video capture.");
|
|
5163
|
+
const lease = rendering.acquireRenderer();
|
|
5164
|
+
const canvas = lease.renderer.domElement;
|
|
5165
|
+
let tracks = [];
|
|
5166
|
+
let unsubscribe = null;
|
|
5167
|
+
let observer = null;
|
|
5168
|
+
let released = false;
|
|
5169
|
+
let leaseReleased = false;
|
|
5170
|
+
const trackListeners = [];
|
|
5171
|
+
const stoppedTracks = /* @__PURE__ */ new Set();
|
|
5172
|
+
const captures = activeCaptures.get(rendering) ?? /* @__PURE__ */ new Set();
|
|
5173
|
+
activeCaptures.set(rendering, captures);
|
|
5174
|
+
const terminate = () => finish(true);
|
|
5175
|
+
captures.add(terminate);
|
|
5176
|
+
function cleanup() {
|
|
5177
|
+
captures.delete(terminate);
|
|
5178
|
+
if (!captures.size && activeCaptures.get(rendering) === captures) activeCaptures.delete(rendering);
|
|
5179
|
+
const observing = observer;
|
|
5180
|
+
observer = null;
|
|
5181
|
+
try {
|
|
5182
|
+
observing?.disconnect();
|
|
5183
|
+
} catch {
|
|
5184
|
+
}
|
|
5185
|
+
const subscribed = unsubscribe;
|
|
5186
|
+
unsubscribe = null;
|
|
5187
|
+
try {
|
|
5188
|
+
subscribed?.();
|
|
5189
|
+
} catch {
|
|
5190
|
+
}
|
|
5191
|
+
for (const remove of trackListeners.splice(0)) {
|
|
5192
|
+
try {
|
|
5193
|
+
remove();
|
|
5194
|
+
} catch {
|
|
5195
|
+
}
|
|
5196
|
+
}
|
|
5197
|
+
for (const track of tracks) {
|
|
5198
|
+
if (stoppedTracks.has(track)) continue;
|
|
5199
|
+
stoppedTracks.add(track);
|
|
5200
|
+
try {
|
|
5201
|
+
track.stop();
|
|
5202
|
+
} catch {
|
|
5203
|
+
}
|
|
5204
|
+
}
|
|
5205
|
+
if (!leaseReleased) {
|
|
5206
|
+
leaseReleased = true;
|
|
5207
|
+
lease.release();
|
|
5208
|
+
}
|
|
5209
|
+
}
|
|
5210
|
+
function finish(notify) {
|
|
5211
|
+
if (released) {
|
|
5212
|
+
cleanup();
|
|
5213
|
+
return;
|
|
5214
|
+
}
|
|
5215
|
+
released = true;
|
|
5216
|
+
const ended = notify ? tracks.filter((track) => track.readyState !== "ended") : [];
|
|
5217
|
+
cleanup();
|
|
5218
|
+
for (const track of ended) {
|
|
5219
|
+
try {
|
|
5220
|
+
track.dispatchEvent(new Event("ended"));
|
|
5221
|
+
} catch {
|
|
5222
|
+
}
|
|
5223
|
+
}
|
|
5224
|
+
}
|
|
5225
|
+
function check(snapshot3) {
|
|
5226
|
+
if (snapshot3.renderer !== lease.renderer || !["ready", "error"].includes(snapshot3.status)) finish(true);
|
|
5227
|
+
}
|
|
5228
|
+
try {
|
|
5229
|
+
if (typeof canvas.captureStream !== "function") throw new Error("This renderer canvas cannot provide a video stream.");
|
|
5230
|
+
const stream = canvas.captureStream(fps);
|
|
5231
|
+
tracks = stream.getTracks();
|
|
5232
|
+
if (released) throw new Error("Video capture ended during canvas acquisition.");
|
|
5233
|
+
if (!stream.getVideoTracks().some((track) => track.readyState === "live")) throw new Error("The renderer canvas did not provide a live video track.");
|
|
5234
|
+
for (const track of tracks) {
|
|
5235
|
+
const ended = () => finish(true);
|
|
5236
|
+
trackListeners.push(() => track.removeEventListener("ended", ended));
|
|
5237
|
+
track.addEventListener("ended", ended);
|
|
5238
|
+
if (released) throw new Error("Video capture ended during acquisition.");
|
|
5239
|
+
}
|
|
5240
|
+
const width = canvas.width, height = canvas.height;
|
|
5241
|
+
unsubscribe = rendering.subscribe(check);
|
|
5242
|
+
if (released) throw new Error("The renderer changed during video capture acquisition.");
|
|
5243
|
+
check(rendering.getSnapshot());
|
|
5244
|
+
if (released) throw new Error("The renderer is unavailable for video capture.");
|
|
5245
|
+
observer = new MutationObserver(() => {
|
|
5246
|
+
if (canvas.width !== width || canvas.height !== height) finish(true);
|
|
5247
|
+
});
|
|
5248
|
+
if (released) throw new Error("Video capture ended during size observer creation.");
|
|
5249
|
+
observer.observe(canvas, { attributes: true, attributeFilter: ["width", "height"] });
|
|
5250
|
+
if (canvas.width !== width || canvas.height !== height) finish(true);
|
|
5251
|
+
if (released) throw new Error("The renderer canvas changed size during video capture acquisition.");
|
|
5252
|
+
return { stream, release: () => finish(false) };
|
|
5253
|
+
} catch (error) {
|
|
5254
|
+
finish(false);
|
|
5255
|
+
throw error;
|
|
5256
|
+
}
|
|
5257
|
+
}
|
|
5258
|
+
|
|
5154
5259
|
// three/scene.ts
|
|
5155
5260
|
var DEFAULT_CHARACTER_LIGHTING_PRESETS = {
|
|
5156
5261
|
cleanStudio: { id: "cleanStudio", label: "Soft Studio", settings: { envMapEnabled: true, environmentIntensity: 0.24, environmentBlur: 0.04, exposure: 1.08, ambientIntensity: 0.32, keyIntensity: 0.52, fillIntensity: 0.18, rimIntensity: 0.08, shadowOpacity: 0.22 } },
|
|
@@ -5862,6 +5967,7 @@ function createDefaultCharacterSceneRuntime(container, options = {}) {
|
|
|
5862
5967
|
pendingResourceReleases--;
|
|
5863
5968
|
});
|
|
5864
5969
|
pending = operation;
|
|
5970
|
+
endCharacterSceneVideoCaptures(rendering);
|
|
5865
5971
|
void operation.then(() => {
|
|
5866
5972
|
if (pending === operation) pending = null;
|
|
5867
5973
|
}, () => {
|
|
@@ -8333,6 +8439,6 @@ var collectMorphMeshes = (root) => {
|
|
|
8333
8439
|
return meshes;
|
|
8334
8440
|
};
|
|
8335
8441
|
|
|
8336
|
-
export { BLENDING_MODES, CHARACTER_SCENE_TYPES, CHARACTER_SCENE_TYPE_IDS, ThreeAnnotationController as CameraController, CameraDOMControls, CameraDOMControls as Controls, DEFAULT_CHARACTER_LIGHTING_PRESETS, DEFAULT_CHARACTER_LIGHTING_PRESET_ID, DEFAULT_CHARACTER_LIGHTING_PRESET_IDS, DEFAULT_CHARACTER_LIGHTING_SETTINGS, DEFAULT_CHARACTER_SCENE_TYPE_ID, DEFAULT_MARKER_AUTO_HIDE_MS, DEFAULT_PREVIEW_AUTO_CLEAR_MS, Embody, HtmlAnnotationMarkers, ThreeAnnotationMarkers as Markers3D, HtmlAnnotationMarkers as MarkersHTML, MorphVertexPreview, HtmlAnnotationMarkers as OverlayAnnotationMarkers, RUNTIME_ANNOTATION_REGION_PREFIX, RustAnnotationCameraCore, SkeletonOverlay, THREE_BLENDING_MODES, ThreeAnnotationController, ThreeAnnotationMarkers, ThreeAnnotations, ThreeFrameApplier, ThreeModelInspector, ThreeNativePlaybackConnector, analyzeModel, applyAUBoneBindingUpdate, applyBilateralAxisBindingUpdate, applyBoneAxisBindingUpdate, applyCharacterModelTransform, bindModelReferencePose, boneResolutionProfile, buildBoneAuOptions, buildMappedBoneInfo, buildMorphVertexPreviewRenderData, buildMorphVertexPreviewSample, buildRegionDisplayOptions, captureModelReferencePose, classifyAuAsJointControl, collectMorphMeshes, collectSkeletonBones, computeHumanoidSkeletonTemplateRestBounds, convertMixamoFbxToVrmAnimations, convertMixamoToVrmAnimation, createAnimationClipFromClipIR, createAnimationClipFromVrmAnimation, createBilateralBoneAxisAu, createBoneAxisAu, createCharacterHost, createDefaultCharacterLighting, createDefaultCharacterScene, createDefaultCharacterSceneAsync, createDefaultCharacterSceneRuntime, createMarkerLifecycleRevealOptions, createMarkerVisibilityLifecycle, createRuntimeAnnotationPreviewLifecycle, createRustAnnotationCameraCore, createRustEmbodyHost, createRustEmbodyHostUnbound, createScenePlaybackFrame, createSceneSceneryRenderer, createShadowPlane, createValidationSkeletonFromHumanoidTemplate, detectAnnotationLaterality, disposeCharacterModel, ensureBilateralBoneNodeKeys, ensureBoneNodeKey, extendCharacterConfigWithPreset, extendModelReferencePose, extractHumanoidSkeletonTemplateFromModel, extractModelData, extractProfileOverrides, filterCameraViewRegions, findModelRoot, findNodeKeyForBone, formatAxisDirectionLabel, formatAxisLabel, fuzzyNameMatch, getAUBoneBindingState, getAUBoneBindingStates, getAxisFromChannel, getBilateralAxisBindingState, getBoneAxisBindingState, getDefaultAnnotationLaterality, getHumanoidSkeletonTemplate, getHumanoidSkeletonTemplateBoneNames, getHumanoidSpecification, getMeshNamesForAUProfile, getModelLocalOrbitAngle, getPreset, getRuntimeAUMeshSideOffset, getRuntimeAUMorphAnchorPoint, getRuntimeAnnotationSide, getSemanticHorizontalSign, getSemanticHorizontalSignForSide, getWorldDirectionForCameraAngle, hasLeftRightMorphs, inferChiralBoneNamePair, inferEyeControlFamily, inferEyeControlScope, inferRuntimeAnnotationPreviewSide, inspectVrmAnimation, isJointControlAuInfo, isMaxDegreesOnlyAxisBindingUpdate, isMixedAU, isRuntimeAnnotationRegionName, loadCharacterModel, mergeCharacterRegionsByName, normalizeDefaultCharacterLightingSettings, normalizeHairColorAppearance, parseCharacterModel, passesMarkerCameraAngleGate, pickContinuumAnnotationAuId, renderScenePlayback, resolveAnnotationCharacterConfig, resolveBoneAxisChannel, resolveBoneNameForNodeKey, resolveBoneNames, resolveContinuumDisplayLabel, resolveFaceCenter, resolveHumanoidCharacterization, resolveMarkerAnchorRegion, resolveMorphMeshSelections, resolveMorphPreviewMeshes, resolveRegionCameraAngle, resolveRegionVisibilityCameraAngle, resolveSkeletonOverlayStartBoneName, resolveVisemeProfile, serializeAnimationClips, setAUMorphTargets, setHumanoidRoleBinding, shouldProjectMarkerAnchorToSurface, shouldUseFaceCenterForMarkerAnchor, stripConfiguredBoneAffixes, supportsRustEmbodyPreset, toWorldDirection, validateHumanoidCharacterization, validateMappings };
|
|
8442
|
+
export { BLENDING_MODES, CHARACTER_SCENE_TYPES, CHARACTER_SCENE_TYPE_IDS, ThreeAnnotationController as CameraController, CameraDOMControls, CameraDOMControls as Controls, DEFAULT_CHARACTER_LIGHTING_PRESETS, DEFAULT_CHARACTER_LIGHTING_PRESET_ID, DEFAULT_CHARACTER_LIGHTING_PRESET_IDS, DEFAULT_CHARACTER_LIGHTING_SETTINGS, DEFAULT_CHARACTER_SCENE_TYPE_ID, DEFAULT_MARKER_AUTO_HIDE_MS, DEFAULT_PREVIEW_AUTO_CLEAR_MS, Embody, HtmlAnnotationMarkers, ThreeAnnotationMarkers as Markers3D, HtmlAnnotationMarkers as MarkersHTML, MorphVertexPreview, HtmlAnnotationMarkers as OverlayAnnotationMarkers, RUNTIME_ANNOTATION_REGION_PREFIX, RustAnnotationCameraCore, SkeletonOverlay, THREE_BLENDING_MODES, ThreeAnnotationController, ThreeAnnotationMarkers, ThreeAnnotations, ThreeFrameApplier, ThreeModelInspector, ThreeNativePlaybackConnector, acquireCharacterSceneVideoCapture, analyzeModel, applyAUBoneBindingUpdate, applyBilateralAxisBindingUpdate, applyBoneAxisBindingUpdate, applyCharacterModelTransform, bindModelReferencePose, boneResolutionProfile, buildBoneAuOptions, buildMappedBoneInfo, buildMorphVertexPreviewRenderData, buildMorphVertexPreviewSample, buildRegionDisplayOptions, captureModelReferencePose, classifyAuAsJointControl, collectMorphMeshes, collectSkeletonBones, computeHumanoidSkeletonTemplateRestBounds, convertMixamoFbxToVrmAnimations, convertMixamoToVrmAnimation, createAnimationClipFromClipIR, createAnimationClipFromVrmAnimation, createBilateralBoneAxisAu, createBoneAxisAu, createCharacterHost, createDefaultCharacterLighting, createDefaultCharacterScene, createDefaultCharacterSceneAsync, createDefaultCharacterSceneRuntime, createMarkerLifecycleRevealOptions, createMarkerVisibilityLifecycle, createRuntimeAnnotationPreviewLifecycle, createRustAnnotationCameraCore, createRustEmbodyHost, createRustEmbodyHostUnbound, createScenePlaybackFrame, createSceneSceneryRenderer, createShadowPlane, createValidationSkeletonFromHumanoidTemplate, detectAnnotationLaterality, disposeCharacterModel, ensureBilateralBoneNodeKeys, ensureBoneNodeKey, extendCharacterConfigWithPreset, extendModelReferencePose, extractHumanoidSkeletonTemplateFromModel, extractModelData, extractProfileOverrides, filterCameraViewRegions, findModelRoot, findNodeKeyForBone, formatAxisDirectionLabel, formatAxisLabel, fuzzyNameMatch, getAUBoneBindingState, getAUBoneBindingStates, getAxisFromChannel, getBilateralAxisBindingState, getBoneAxisBindingState, getDefaultAnnotationLaterality, getHumanoidSkeletonTemplate, getHumanoidSkeletonTemplateBoneNames, getHumanoidSpecification, getMeshNamesForAUProfile, getModelLocalOrbitAngle, getPreset, getRuntimeAUMeshSideOffset, getRuntimeAUMorphAnchorPoint, getRuntimeAnnotationSide, getSemanticHorizontalSign, getSemanticHorizontalSignForSide, getWorldDirectionForCameraAngle, hasLeftRightMorphs, inferChiralBoneNamePair, inferEyeControlFamily, inferEyeControlScope, inferRuntimeAnnotationPreviewSide, inspectVrmAnimation, isJointControlAuInfo, isMaxDegreesOnlyAxisBindingUpdate, isMixedAU, isRuntimeAnnotationRegionName, loadCharacterModel, mergeCharacterRegionsByName, normalizeDefaultCharacterLightingSettings, normalizeHairColorAppearance, parseCharacterModel, passesMarkerCameraAngleGate, pickContinuumAnnotationAuId, renderScenePlayback, resolveAnnotationCharacterConfig, resolveBoneAxisChannel, resolveBoneNameForNodeKey, resolveBoneNames, resolveContinuumDisplayLabel, resolveFaceCenter, resolveHumanoidCharacterization, resolveMarkerAnchorRegion, resolveMorphMeshSelections, resolveMorphPreviewMeshes, resolveRegionCameraAngle, resolveRegionVisibilityCameraAngle, resolveSkeletonOverlayStartBoneName, resolveVisemeProfile, serializeAnimationClips, setAUMorphTargets, setHumanoidRoleBinding, shouldProjectMarkerAnchorToSurface, shouldUseFaceCenterForMarkerAnchor, stripConfiguredBoneAffixes, supportsRustEmbodyPreset, toWorldDirection, validateHumanoidCharacterization, validateMappings };
|
|
8337
8443
|
//# sourceMappingURL=index.js.map
|
|
8338
8444
|
//# sourceMappingURL=index.js.map
|