Playback
Play simulation results on a timeline and export them to video.
When a board shows an overlay with several frames, the timeline docks at the bottom of the canvas, above the tool bar. Every time-bearing overlay of the board shares it: fields blend between frames, markers and geometry hold their last frame, and overlays with different time bases line up through their offset and scale.
Transport. Jump to start · step back · play/pause · step forward · jump to end · stop · loop · speed menu
(0.1× to 10×; real time plays simulated seconds per wall second) · scrub rail with ticks, the played
portion, in/out handles and the playhead · readout t = 2.350 ns · frame 47 / 200 · LIVE badge (a running
tool’s newest frame; scrubbing back detaches, a click re-attaches) · export.
Keys (canvas or timeline focused, no drawing tool active):
| Key | Action |
|---|---|
| Space | Play / pause |
| ← / → | Step one frame (Shift: ten) |
| Home / End | Start / end of the range |
| L (or Shift+L) | Loop on/off |
| J / K / ; | Shuttle backwards / pause / forwards (press again: 2×, 4×, 8×) |
| [ / ] | In / out point at the playhead (playback and export stay inside) |
The keys are the Playback (Timeline) tool card’s and live in the keymap’s playback context, so they can be rebound like the others.
Overlays tab. Each time-bearing overlay gets time rows: its frame count and range (with LIVE while it grows), the interpolation (linear, nearest, hold) and offset × scale on the shared timeline. Vector fields add chips for quiver, slice, isosurface, streamlines and volume rendering. On a flat field (one plane) streamlines and isolines (the isosurface levels, Isolines row) are drawn on the 2D canvas too. A complex field whose timeline axis is a phase axis binds the phase slider to the timeline: playing sweeps the phase, and dragging the slider seeks the timeline (the slider shows a link mark while bound).
Probes. Turn on the probe in the field’s legend (target icon) and click the board: on a time-bearing field the probe records the value at that point for every frame. Each probe gets a row in the Overlays tab with its colour, a sparkline and the value at the playhead. The Probes tab on the right shows the full chart: every probe, nice axes, the in/out range shaded and a cursor at the playhead; drag on the chart to seek (←/→ step). Vector probes (2D vectors, 3D volumes) keep magnitude, x, y and z, and phase for frequency-domain fields: pick the component per probe or tick components to draw them all. Streamed fields fill a probe as their frames load (playing, scrubbing or exporting; the percentage shows how much is sampled); Sample all frames fetches the rest. CSV saves one row per frame time and one column per probe component.
Export. The export button on the timeline opens Export playback: format WebM (VP9/VP8; encoded
frame by frame with WebCodecs and muxed by the extension, so the file has exactly one frame per exported frame,
the encoder flushed before the file is closed; MediaRecorder where WebCodecs is missing), PNG sequence (a .zip of frame_00001.png …) or MP4 (H.264, when
ffmpeg is on PATH or softforge.edsnx.ffmpegPath names it), frame rate, resolution (4K, 1440p, 1080p,
720p, 480p or custom), range (whole timeline, in/out, custom), the view (2D or 3D, with its cuts and
quivers) and a HUD with the time readout and the legend. Export plays the range frame by frame (every
frame of the data once, nothing dropped), with a progress bar and Cancel, and asks where to save. The
dialog also saves the probes as CSV.
3D: vector fields and cuts. In the 3D view a vector field draws as arrow glyphs through the volume (density, length, colour by magnitude or component), streamlines and isosurfaces. A section cut (cut A, B, +: axis-aligned or through three points, position slider, clip the near side) shows the colour-mapped field slice on its face with the in-plane arrows; the slice is clipped by the other cuts that clip, so it stops where the volume is cut away; the slider moves the cut and the timeline moves time, both live. Probes in a volume take a height and read the vector there.
From scripts and agents. api.timeline (get/set, play, pause, stop, seek, step, export, probes,
onDidChange) for extensions; the edsnx commands timeline get|set|play|pause|seek|export and
overlay probes list|add|remove|export with --attach (they need the open editor; docs/commands.md).