@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 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