storysplat-viewer 2.2.6 → 2.2.9

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.
@@ -0,0 +1,87 @@
1
+ /**
2
+ * FrameSequencePlayer - 4DGS Frame-by-Frame Playback
3
+ *
4
+ * Handles loading and playing back sequences of PLY/SOG splat files
5
+ * for volumetric video (4D Gaussian Splatting) playback.
6
+ */
7
+ import * as pc from 'playcanvas';
8
+ export interface FrameSequenceConfig {
9
+ frameUrls: string[];
10
+ fps?: number;
11
+ loop?: boolean;
12
+ preloadCount?: number;
13
+ autoplay?: boolean;
14
+ }
15
+ export interface FrameSequencePlayerOptions {
16
+ onFrameChange?: (frame: number, total: number) => void;
17
+ onLoadProgress?: (loaded: number, total: number) => void;
18
+ onError?: (error: string) => void;
19
+ }
20
+ type FramePlayerEventCallback = (...args: any[]) => void;
21
+ export declare class FrameSequencePlayer {
22
+ private options;
23
+ private app;
24
+ private frameUrls;
25
+ private frameAssets;
26
+ private entities;
27
+ private activeEntityIndex;
28
+ private currentFrame;
29
+ private fps;
30
+ private isPlaying;
31
+ private loop;
32
+ private preloadCount;
33
+ private lastFrameTime;
34
+ private frameInterval;
35
+ private loadingFrames;
36
+ private destroyed;
37
+ private listeners;
38
+ constructor(app: pc.Application, config: FrameSequenceConfig, options?: FrameSequencePlayerOptions);
39
+ private createSplatEntity;
40
+ /**
41
+ * Preload initial frames for smooth playback start
42
+ */
43
+ private preloadInitialFrames;
44
+ /**
45
+ * Preload a specific frame
46
+ */
47
+ preloadFrame(index: number): Promise<pc.Asset | null>;
48
+ /**
49
+ * Unload a frame to free memory
50
+ */
51
+ unloadFrame(index: number): void;
52
+ /**
53
+ * Update the preload window based on current frame
54
+ */
55
+ private updatePreloadWindow;
56
+ /**
57
+ * Display a specific frame using double-buffering
58
+ */
59
+ private displayFrame;
60
+ /**
61
+ * Main update loop - called every frame
62
+ */
63
+ update(dt: number): void;
64
+ play(): void;
65
+ pause(): void;
66
+ stop(): void;
67
+ setFrame(index: number): void;
68
+ nextFrame(): void;
69
+ previousFrame(): void;
70
+ getCurrentFrame(): number;
71
+ getTotalFrames(): number;
72
+ getProgress(): number;
73
+ setProgress(progress: number): void;
74
+ getFps(): number;
75
+ setFps(fps: number): void;
76
+ getIsPlaying(): boolean;
77
+ setLoop(loop: boolean): void;
78
+ getLoop(): boolean;
79
+ setPosition(x: number, y: number, z: number): void;
80
+ setRotation(x: number, y: number, z: number): void;
81
+ setScale(x: number, y: number, z: number): void;
82
+ on(event: string, callback: FramePlayerEventCallback): void;
83
+ off(event: string, callback: FramePlayerEventCallback): void;
84
+ private emit;
85
+ destroy(): void;
86
+ }
87
+ export {};
@@ -15,6 +15,8 @@ export { generateHTML, generateHTMLFromUrl } from './html-generation/generateHTM
15
15
  export type { GenerateHTMLOptions } from './html-generation/generateHTML';
16
16
  export { createViewer, createViewerFromUrl } from './dynamic-viewer/createViewer';
17
17
  export { createViewerFromSceneId, fetchSceneMeta, SceneNotFoundError, SceneApiError } from './dynamic-viewer/createViewerFromSceneId';
18
+ export { FrameSequencePlayer } from './dynamic-viewer/FrameSequencePlayer';
19
+ export type { FrameSequenceConfig, FrameSequencePlayerOptions } from './dynamic-viewer/FrameSequencePlayer';
18
20
  export { transformSceneToExportProps, exportPropsToViewerConfig } from './transformers/sceneToConfig';
19
21
  export type { ExportProps, TemplateType, SceneData, WaypointData, HotspotData, ViewerInstance, ViewerOptions, ViewerEvent, ViewerFromSceneIdOptions } from './types';
20
22
  export type { RevealPreset, RevealPresetConfig } from './effects';
@@ -3,6 +3,7 @@
3
3
  */
4
4
  export type { ViewerConfig } from '../transformers/sceneToConfig';
5
5
  export type { ViewerFromSceneIdOptions } from '../dynamic-viewer/createViewerFromSceneId';
6
+ export type { FrameSequenceConfig, FrameSequencePlayerOptions } from '../dynamic-viewer/FrameSequencePlayer';
6
7
  /**
7
8
  * HTML Mesh configuration (renders HTML as 3D texture)
8
9
  */
@@ -414,6 +415,14 @@ export interface SceneData {
414
415
  additionalSplats?: SplatSwapPoint[];
415
416
  /** Keep preloaded splats in memory (true = hide/show, false = dispose/reload) */
416
417
  keepMeshesInMemory?: boolean;
418
+ /** Frame sequence configuration for 4DGS playback */
419
+ frameSequence?: {
420
+ frameUrls: string[];
421
+ fps?: number;
422
+ loop?: boolean;
423
+ preloadCount?: number;
424
+ autoplay?: boolean;
425
+ };
417
426
  }
418
427
  /**
419
428
  * Splat swap point - defines when to swap to a different splat during navigation
@@ -668,6 +677,13 @@ export interface ViewerInstance {
668
677
  pause: () => void;
669
678
  stop: () => void;
670
679
  isPlaying: () => boolean;
680
+ setFrame?: (index: number) => void;
681
+ getCurrentFrame?: () => number;
682
+ getTotalFrames?: () => number;
683
+ setFps?: (fps: number) => void;
684
+ getFps?: () => number;
685
+ getFrameProgress?: () => number;
686
+ setFrameProgress?: (progress: number) => void;
671
687
  destroy: () => void;
672
688
  resize: () => void;
673
689
  navigateToScene: (sceneId: string) => Promise<void>;
@@ -694,7 +710,7 @@ export interface ViewerOptions {
694
710
  /**
695
711
  * Events emitted by viewer
696
712
  */
697
- export type ViewerEvent = 'ready' | 'waypointChange' | 'playbackStart' | 'playbackStop' | 'error' | 'loaded' | 'progress' | 'warning' | 'portalActivated';
713
+ export type ViewerEvent = 'ready' | 'waypointChange' | 'playbackStart' | 'playbackStop' | 'error' | 'loaded' | 'progress' | 'warning' | 'portalActivated' | 'frameChange' | 'frameComplete';
698
714
  /**
699
715
  * Warning event data structure
700
716
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "storysplat-viewer",
3
- "version": "2.2.6",
3
+ "version": "2.2.9",
4
4
  "description": "PlayCanvas-based 3D viewer for StorySplat scenes - HTML export & dynamic embedding",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",