Good rundown - the "Rule of Three" section is the part people skip and then regret. The GSAP { paused: true } + window.__timelines requirement trips up almost everyone coming from a normal animation background, because your timeline plays perfectly in a live browser tab (wall-clock driven) and then renders as a single frozen frame, because the render pass seeks the timeline instead of letting it run. Same failure mode shows up with anything counter/ticker-based: if the number is driven by requestAnimationFrame deltas instead of being seekable to an exact timestamp, you get a frozen or wrong value on export even though it looked fine in preview. Worth calling out as its own gotcha since the error Hyperframes gives you when this happens isn't very descriptive. I ended up writing these up in more detail (this one plus four others) after hitting all of them myself - happy to share the notes if useful to anyone else going down this path.
