Product media placeholder
Replace this area with a screenshot or short walkthrough video during the media sweep.
A one-shot 0..1 clock driven by event pulses, not by input progress. Each input is rising-edge-detected: **`play`** advances toward 1, **`reverse`** advances toward 0, **`restart`** resets to 0 and plays forward, **`pause`** freezes the current value, **`resume`** un-freezes. Output `progress` is the eased 0..1 value; `playing` is 1 while advancing. The node OWNS the progress — distinct from the stateless `tween` interpolator (which is a pure function of an input progress source). Use this whenever a transition should be triggered by a discrete event rather than driven by a continuous external clock.
Inputs
| Port | Type | Description |
|---|---|---|
play | float | Rising-edge trigger. Each 0 → 1 transition starts (or resumes) advancing `progress` toward 1 at the configured duration. |
reverse | float | Rising-edge trigger. Each 0 → 1 transition starts advancing `progress` toward 0 at the configured duration. Use as the "leave" pulse for hover-style reveals. |
restart | float | Rising-edge trigger. Each 0 → 1 transition resets `progress` to 0 and plays forward to 1. **Use this** for "fire one transition per pulse" navigation patterns where the previous run might still be partway through. |
pause | float | Rising-edge trigger. Freezes `progress` at its current value. Ignored if not currently playing. |
resume | float | Rising-edge trigger. Un-freezes a paused tween at the same direction it was going before pause. |
Outputs
| Port | Type | Description |
|---|---|---|
progress | float | The eased 0..1 value. Wire into any consumer expecting a 0..1 driver — `propertyAnimation.progress`, `staggerWrite.progress`, `multiKeyframe.progress`, `tween.progress` for chained interpolations, `remap.value`. |
playing | float | 1 while the tween is currently advancing, 0 when paused or settled at 0/1. Use as a gate for sound effects, "loading" indicators, or to suppress other animations while a transition is mid-flight. |
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
duration | float | 1 | How long `progress` takes to travel 0 → 1 (or 1 → 0). Common values: `0.3`–`0.6` for hover micro-interactions, `0.8`–`1.5` for section transitions, `2`–`3` for hero reveals. Pair with the upstream pulse source's `cooldownMs` (set ≥ duration) so the next pulse cannot fire mid-tween. min 0.05; max 10; step 0.05 |
ease | easingCurve | "easeOutCubic" | Shape of the 0 → 1 curve. **Smart picker**: type to filter, click to apply. Common picks: `easeOutCubic` (UI default — fast in, soft tail), `power2.inOut` (symmetric ease — natural for reversible transitions), `back.out(1.7)` (gentle overshoot — playful), `expo.out` (whip-snap — dramatic reveals). Custom: `cubic-bezier(0.4, 0, 0.2, 1)`. |
Use cases
- Section / page transitions on click, wheel, or threshold pulse — wire a `clickPulse` / `thresholdPulse.pulse` into `restart`, drive a `propertyAnimation` / `staggerWrite` from `progress` for the in-animation. (See `section-snap` demo.)
- Toggle-actions parity (`play / reverse / pause / resume / restart`) — separate pulse sources for each action map cleanly onto the five inputs.
- Hover reveal — pair `hover.hover` rising-edge through a `thresholdPulse` into `play`, falling-edge into `reverse`. Card content slides in on enter, slides out on leave.
- One-shot reaction to a velocity / proximity event — `thresholdPulse(rising)` from a velocity signal feeds `restart`; the tween plays a fixed-duration burst regardless of how long the underlying signal stays past threshold.
Related nodes
Envelope
Use pulseTween as the node type inside a graph node envelope. Add id, optional params, optional connections, and optional activeWhen based on the guide context.
Generated source
Registry faster-motion-docs/node-registry.jsonCategory page /help/faster-motion/faster-motion-node-category-animation/