←
Narrative Marketing Engine
Unlock Your Campaign’s Power




Frame Control

VIEWER RUNTIME v6 β€” FINAL ========================== ROOT CAUSE (confirmed by console error): "VFXManager IIFE never ran" β€” this timeout fires because the Engine's _initVFXSystem() was calling VFXManager.init() itself, which conflicts with the DOMContentLoaded handler that ALSO calls VFXManager.init(). THE ACTUAL FIX (simple): - The page's DOMContentLoaded handler already calls VFXManager.init() + VFXManager.pauseVFX() on BOTH author and viewer pages. - Engine must NOT call init() itself β€” just wait for it to complete. - Detection: VFXManager.init() appends a to #vfx-container. Poll for that canvas. Once it exists, the GPU system is ready. - Then call pauseVFX() (no args) to put into known state. - Per-bubble: activateVFX() does pauseVFX() + resumeVFX() to restart loop. VFX AUDIO: - exportFullProject uploads ArrayBuffers to R2, stores vfxAudioUrl/windAudioUrl. - Viewer plays from URLs. No ArrayBuffers in JSON. REWIND: - _rewindCooldown prevents timer race when rewinding. - History stack only grows via advanceToNextBubble (forward). - Empty stack = strict no-op. -->