Time & playback
Press play and your whole graph comes alive — here's how DNA keeps frames, the timeline, and your simulations in sync.
DNA is a real-time app, so almost everything you build can move. Animation, fields, audio, and simulations all read from a shared sense of "what time is it right now." This page explains the transport (your play/pause/scrub controls), how frames and FPS work, the $T and $F you'll type into Expressions, and — importantly — what keeps moving live versus what freezes the moment you pause.
Frames, FPS, and the timeline
Your project plays back at a frame rate (FPS) — typically 24, 30, or 60 frames per second. Each tick of the clock is one frame.
Two values track this everywhere:
$F— the current frame number (an integer that counts up as you play).$T— the current time in seconds ($Fdivided by your FPS).
You can drop either one straight into an The Expression language to drive anything that changes over time. For example, sin($T) makes a value sway back and forth once per ~6 seconds, and $F * 2 ramps up steadily as the timeline advances.
Frames can go negative. If you scrub before frame 0 or use a time offset, $F lands in negative-frame space — that's expected, not a glitch.
The transport
The transport is your set of playback controls — play, pause, scrub, loop, and the playback range. It's the single source of "now" for the entire project, so every node, the audio engine, and any external sync all agree on the same moment.
Play / pause — start or stop the timeline advancing.
Scrub — drag the playhead to jump to any frame instantly.
Loop & range — set an in/out range so playback cycles over just the section you care about.
Speed — a playback multiplier to run faster or slower than real time.
Scrubbing is great for inspecting a single moment, but remember that scrubbing backward is a jump, not playback — time-based effects that build up over many frames (trails, accumulation, simulations) may need to replay forward to look right.
What plays live vs what freezes when paused
This is the key thing to internalise. There are two kinds of motion in DNA:
Always live — updates whenever you change something. Anything that simply reads the current time or your inputs recomputes instantly, even while paused. Drive a parameter with $T, move a Gradient, tweak a field, or feed in a live pointer position — you'll see the result immediately because the graph re-cooks on change.
Only advances during playback — simulations. Anything that integrates over time — particles, cloth, hair, soft bodies, fluids, feedback loops — needs the timeline to actually move forward. These step one frame at a time, building each frame on top of the last. When you pause, they hold their current state and wait. They advance only while the transport is playing (or as you step frames forward).
If a simulation looks frozen, check that you're actually playing. A paused transport intentionally freezes every simulation in place — it isn't broken, it's waiting for time to advance. Press play to let it run.
This split is what makes DNA feel responsive: you can pause on a frame and freely tweak look and layout with instant feedback, while your physics stays exactly where you left it until you hit play again.
Cook
You'll see a Cook badge on nodes. "Cook" just means DNA recalculating a node's output. Most nodes cook only when something they depend on changes — that's the efficient default. A few nodes (like a live pointer input) are set to cook every frame so downstream work always sees fresh values. The badge tells you a node's cook policy at a glance.
Beyond frames: audio and tempo
DNA also tracks time in two other ways that run alongside frames:
Audio time, counted in samples (e.g. 48,000 per second) for DSP and synthesis.
Musical time, counted in beats and bars at a tempo (BPM) — which can be set by hand, tapped in, or synced to Ableton Link, MIDI Clock, or MIDI Time Code.
All three move together under the same transport, so a beat-synced LFO, an audio effect, and a visual animation all line up. You don't have to manage this — tempo-aware and audio nodes simply read the right clock.
Advanced retiming nodes — Time Blur, Time Warp, Frame Hold, Retime — are planned. The timeline already understands per-node time-shifting under the hood, but these aren't yet built-in nodes you can drop in.