Where a tempo-synced face's playhead is, and โ just as important โ whose clock that position came from. A host transport that is PLAYING drives the phase from its ppqPosition, so the window tiles from the project start and the same musical position always draws at the same x; anything else free-runs from a bpm on a requestAnimationFrame loop, and `running: false` parks at phase 0 rather than drifting. The returned `source` is "host" | "free" | "stopped" precisely so a caption can say which, instead of implying a sync the face does not have. The phase mappings, the source rule and the tempo fallback are pure exported functions, pinned in Node; the hook is only the loop around them, and nothing touches requestAnimationFrame outside an effect, so the first render is phase 0 on the server.
pnpm dlx shadcn@latest add "https://pluginui.com/r/core-beat-clock.json"No files included in this item.