Transforms and data morphs
Move between views, change a plot’s data, or turn one object into another.
Transforms
Choose a transform to match what you want to show:
| Transform | Use it to… |
|---|---|
| Change | Move, resize, recolour or edit an object |
| Ghost | Send independent copies out from one source |
| Become | Turn an object into another object or plot parts |
All three use the same timing and easing controls. An object, or a specific set of plot parts, can have one transform per step; later steps can transform it again. While a transform is selected, Before and After choose which of its two endpoints you edit.
Change
Keep the objects; change their state. Each of the 233 seeds is one object. One Change per seed moves the spiral to a nearby angle, which leaves gaps; the next moves it back to the golden angle, which fills the disc. Later steps draw the 13 and 21 spiral families through the same seeds. Vogel’s model, computed. Use the next-step arrow to play; reset to watch again. Reduced motion shows each finished step.
A Change animates an object into a different version of itself.
- Select the object and choose Transform ▸ Change (Ctrl+Shift+C).
- Edit its After state with the ordinary tools: move, resize, recolour or rewrite it.
- Preview the step, then adjust its duration and easing in the Animator.
The bar above the stage tells you where edits go. Before selects the preceding step (or Design for the first change); After selects the current step. Only the properties you edit are recorded, so later changes build on earlier ones. To stop overriding a property, remove it from the Animation inspector’s Δ row.
Rewriting text plays a text morph. Words the old and new text share glide from where they were to where they land, even when they change order, case or style; a word that grows into a longer one (quick → quickly, Microscope → Microscopy) glides and gains its new letters on the way. Everything else fades: old letters drift down and fade in reading order while the new ones rise in, so the line turns over left to right without ever going empty. Crossing words pass on slightly separated lanes, and a size, weight or colour change travels with each word. A rewrite of more than 200 characters moves line by line. A change of a single number still counts up in place.
For a box move, the Arc slider bends the path to either side of the straight line. Zero keeps it straight; the endpoints stay fixed. The small path preview shows the bend. Arc shares the transform’s easing and can be inherited from an animation style.
flux set-transform talk slide1 step1 object1 --state '{"x":420,"y":160}' --arc 0.5Ghost
One source, independent copies. Every projection of the three disks leaves a Ghost that travels into the sinogram, one angle per step. In the last step the same copies sweep back through the object to form an unfiltered backprojection. Exact projections, computed. Use the next-step arrow to play; reset to watch again. Reduced motion shows each finished step.
Transform ▸ Ghost… creates independent copies that move out from an object. For example, one arrow can split into three arrows pointing to three new results.
- Select the source object and the step where the copies should appear, then choose Transform ▸ Ghost….
- Choose the number of copies (1–32; initially 3) and whether the original should Stay, Disappear, or Transform too.
- Create the ghosts. Flux selects the first copy in Edit after step. Move, resize, rotate, restyle, or edit it with the ordinary tools to set its destination — or make it Become something else (below).
- Use the copy selector and Previous/Next controls to edit the other copies, even while they overlap. Add copy adds another destination; Select original returns to the source.
- Play the step. Each copy begins at the original’s state at the end of the preceding step and moves to its own destination. Adjust each lane’s delay, duration, and easing normally.
Ghosts are identical copies when they start; they have normal opacity unless you change it. Changes to the original in earlier steps update their starting state. A transform of the original in the same step runs independently. The copies remain available for further animations in later steps.
Before their creation step, ghosts are absent, including with Show hidden enabled. Use Edit destination to return to the step where a selected ghost can be edited. Deleting a ghost’s creation lane removes that copy and its later effects; Undo restores them together.
Become
Objects become other objects. The 88 dots of a plotted Flux mark Become five shapes, a frame and a caption, and each letter flies out of a dot. This is the slide made live in the Flux film: select the dots, press B, pick the targets. Use the next-step arrow to play; reset to watch again. Reduced motion shows each finished step.
Transform ▸ Become (or just B with something selected) makes an object become another object or part of a plot. Select the source first. To start from plot parts, Ctrl+click a part or pick several rows in the X-ray before arming Become.
- Select the source, then press B.
- Pick what it should become. Double-click for a single destination, or select several and press Enter.
- Preview the step. Adjust its duration and easing in the Animation inspector.
Picker shortcuts and selecting several targets
Choosing Become enters the Become picker, a temporary mode. The slide wears a soft green outline, the canvas around it dims slightly, the source gets a dashed green outline, and the bar above the canvas names what is waiting (‹Rect› becomes…). Nothing is moved or edited while picking: every click on the canvas is a pick.
Hover outlines the finest thing under the pointer: a single point, bar, box, tick or label of a plot, or one member of a group. The bar names it exactly as its timeline lane will, with the point’s data where it has one.
Click picks it. Picking is always multi-select: keep clicking to add more, and click a picked thing again to remove it. Picks wear a solid green outline (a ring around round marks), numbered in picking order when there are few of them; the bar lists them as chips (6 points · W1, 2 ellipses) that you can remove with ×.
Drag anywhere on the stage to draw a box: it picks everything fully inside. Data marks win over ticks and labels; a whole object inside the box is picked whole. Alt+drag removes what it encloses.
Alt+click picks the whole plot or group instead of the part. A widens the last pick to its siblings: the other members of its group, then the same part of every series, then the rest of its series. Backspace drops the last pick.
Double-click picks something and confirms at once, the quick path for a single object.
Space, Enter or the Become button confirms. Escape or Cancel leaves the picker without creating a transform and puts the source selection back. Changing slides or steps also cancels.
Add mode lets the source become something that does not exist yet. Press a drawing tool key (R rect, O ellipse, L line, P pen, T text), Ctrl+P for a preset or Alt+G for a gallery plot, or choose from Add ▾ on the bar. The outline gains an inner dashed line and the editor works as usual: everything you draw or insert joins the pick. Enter or Done returns to picking with those objects picked; Escape also returns, and a second Escape cancels.
X-ray: hover a plot and press Alt+R. Rows you select join the pick and rows you clear leave it, live on the canvas; points picked on the canvas stay picked. Axis rows include their spine, ticks and labels; expand them to choose only the spine. Space (or B) in the X-ray confirms the whole pick, and closing the X-ray keeps it.
Several things at once. Pick several things and the source becomes all of them: three loose ellipses, parts of two different plots, or a mix of shapes and plot parts. Your layers stay as they are; there is no need to group anything first (Alt+click a grouped object to pick its whole group). The source’s outline splits into one piece per destination, and each piece lands exactly on its own object. The lane and the Destination row name the set (Rect → 3 ellipses) and list its members; a set cannot be swapped — author the reverse hand-offs from each object.
A Become completes in one of two ways:
- Consume applies when one whole drawn object becomes another. The destination’s appearance becomes the source’s After state and the destination is removed; the source keeps its identity. One Undo restores both.
- Hand-off applies to plots, images, groups and part sets. Both objects stay in the slide: the destination is hidden until the source lands, and the source is hidden afterwards. For example, a drawn chevron can become a plot’s X and Y axis spines, or a box in a plot can become a rectangle.
After you confirm, the canvas switches to Edit after step, with the new track selected in the Animation inspector; Show hidden shows the hidden side as a faint ghost. Groups and sets of several objects can be destinations, but the source must be one object or a set of plot parts. A set always hands off, because Consume and ↔︎ Swap direction need a single destination. Video clips cannot take part in a Become; use Change to move or resize them.
Appear from… works from the other end. Select the destination object or plot parts (or several objects, which then appear together from one source) and choose Appear ▾ → Appear from… (Ctrl+Alt+A); the main Appear button still adds a normal entrance. The same picker opens, and the bar names what appears from…. Pick the source and confirm with Space or Enter, or double-click it. In the X-ray, press M, then 5 (Appear from…) to start the same flow from the picked rows. Both routes create the same hand-off.
Merge many into one. Pick several sources and confirm: each source gets its own hand-off into the same destination, all in one Undo. The destination is shared out among them (the reverse of becoming a set). The pieces converge, a piece that arrives early waits in place, and the destination appears when the last one lands. Each source keeps its own lane, so you can stagger them.
Pair chooses how the outlines match: auto, by position, by order, by data, or tile. Connected strokes, such as two axis spines, form one path. Order follows point indices; tile divides one outline among its partners. By data lands points at their values on the destination axis. This supports data ↔︎ summary: points can become a distribution, or a summary can expand back into its points. Unmatched sources fade out; unmatched parts of the destination fade in. Images crossfade while their boxes move.
Text and shapes. When a shape becomes text, it splits into one piece per letter, in reading order, and each piece pours into its letter’s outline. When text becomes a shape, the letters fuse into it. A text that becomes another text plays the text morph described under Change, whether by Consume or by hand-off. Letter outlines come from the font installed on your computer, and an exported presentation carries the outlines of the letters it needs. When no outline is readable, the letters land as rounded boxes and then fade into the text, and the Animation inspector reports it. This happens with the bundled Gelasio typeface or in a browser preview without the desktop app.
After a hand-off to some of a plot’s parts, when the plot has no appearance effects yet, the toast offers Auto-animate the rest…. It adds the plot’s remaining build phases after the landing, excluding the leaves already revealed by the hand-off. A hand-off to the whole plot already reveals every part, so it offers no remainder.
Destination. The Animation inspector names both sides of a hand-off; for a set it reads, for example, “hands off to 3 ellipses” and lists each member below. Its controls:
- Pair ▾ chooses auto, by position, by order, by data or tile; Reveal chooses flip or draw.
- Method ▾ chooses what a filled shape’s interior does while its outline splits into several pieces (or several pieces merge into it). Shatter, the default, splits it into wedges that fly with the pieces; dissolve fades it away in place as the outline leaves; collapse shrinks it into the shape’s centre; drain empties it toward where the pieces are going (and fills from that side when pieces merge).
- ↔︎ Swap direction reverses the hand-off, including plot parts, in one Undo, keeping timing, styles and follower links. It is unavailable for a ghost’s creation, a group source, a missing outline, or a destination that already has a transform in this step. The command twin is
swap-become. - Consume instead, for whole loose objects, asks for a second click before it removes the destination.
- Auto-animate the rest… builds the destination plot’s remaining parts after the hand-off. Like the toast, it appears only for a hand-off to some of the plot’s parts.
- Become picks a different destination for this effect.
With a whole plot as the source, From gallery… keeps its frame and changes its content to another project plot. Data from gallery… and Keep own data in the Animation inspector edit or remove that content target. Shared supported series tween in data space; a series without a tweenable counterpart fades on its own, and only an SVG without semantic IDs crossfades as a whole. A Become at a step with an existing Change replaces that same target’s endpoint; a ghost can Become something at its birth step.
From the command line or an agent, become creates the same transforms, and appear-from authors them from the destination’s side:
--partnames destination parts and--source-partnames source parts.- A destination set is
--to <id>repeated, or--memberswith a JSON list of objects and their parts.appear-from --memberslikewise reveals a destination set from one source. - Plots, images and part sets hand off by default, and whole drawn objects use Consume;
--modechooses either completion for whole objects. --pairchooses how outlines match,--revealchooses flip or draw, and--methodchooses shatter, dissolve, collapse or drain for a filled shape’s interior.
See the slide command reference for the full syntax.
In the Slides workspace, Alt+G opens the same Plot gallery that Figure uses. Preview sizes, spacing and names are adjustable, and Pin open keeps the gallery in a separate window so you can insert several plots onto the active slide.
Camera: Zoom vs Fly
Zoom adds a camera move toward the selected object; Reset pulls back to the full slide. When plot parts are drilled, Zoom frames their combined outline instead of the whole plot. After-step editing uses the same camera mapping, so selection, dragging, and highlights stay aligned.
Select a camera track in the Animator to choose Path: Zoom | Fly. Zoom is the default: the view expands or contracts about a fixed point, at a constant proportional zoom rate before easing. With no zoom change, it pans in a straight line. Fly pulls back for a long pan, travels, then moves in toward the destination. Its suggested … ms hint shows a duration based on the distance and zoom change; click Apply to use it. You can still edit duration and easing yourself.
Camera tracks created in earlier versions of Flux also use the Zoom path now. Their start and end views are unchanged, but the frames in between differ, and there is no option to restore the old path.
Axis view: data-space transforms
Axis view edits a plot’s data view, which records its x/y limits and linear or log scales. A Change of this view zooms, pans or rescales the data inside the plot; the plot’s position and size can change at the same time. A ghost can therefore float away while zooming into a smaller data range. A saved view also applies in the Figure workspace, Paper embeds and exports.
Lines, points, bars, heatmap cells, hexagons, contour bands and box or violin bodies move through the new axis mapping. During the glide the existing ticks, gridlines and tick labels move with their data values and fade near the edges; at rest the viewed axis is re-ticked for its new limits (categories, dates and fixed labels keep their own ticks). A log view requires positive limits and positive data; an unsupported series keeps its original geometry and the animation reports why. Images and rasterized layers keep their geometry. A twin value axis (y2 / x2, recorded from fluxplot schema 0.3.2) has its own limits in the view.
A plot needs a manifest with series and calibrated axes. Unsupported axes stay disabled with a reason. Select a plot and use Axis view in the Object inspector, or x view / y view in its F menu. Enter limits in data units; empty fields use the generated limits shown as placeholders. Choose linear or log, or Reset both axes. At After step N the edit becomes a Change on that step, with one undo per edit. Scrubbing previews the axis glide. X-ray’s axis-row v · Axis view… focuses the matching Inspector row.
Ticks exactly on a new limit fade to zero (the outer 4% rule). Non-series marks, such as a dashed reference line, stay put. For multi-panel plots the same view applies to each panel; placeholders show the first panel’s limits.
Becomes between plots and Changes of a data view use the same projection, so one Change may combine new data, axis limits and movement. Shared semantic parts tween; removed parts fade out in the first 40% and added parts fade in during the last 40%.
From fluxplot schema 0.3.2, bars carry stable keys by category, and heatmap cells and hexagons by row and column. Between two versions of such a plot, each member tweens to its namesake: a bar grows or shrinks to its new height, and a hexagon’s colour passes through the colour scale at the intermediate value. A bar chart or a hexmatrix with new data can therefore be a Become even without lines or points.
A local change in the SVG structure fades that part, and an SVG without semantic IDs crossfades as a whole. Matching ignores positional IDs (matplotlib’s numbered ytick_7-style IDs and the ones Flux stamps), so a tick keeps its identity when a regenerated plot renumbers them, and the last frame is exactly the new plot.
The CLI/MCP twin is set-plot-view / set_plot_view:
flux set-plot-view figure1 plot1 --x-min 0 --x-max 10
flux set-plot-view talk/slide1 plot1 --y-min 1 --y-max 100 --y-scale log \
--beat beat2
flux set-plot-view talk/slide1 plot1 --reset --beat beat3With a figure as the target, the command saves the view on the object. With a deck/slide target and no --beat, it edits the Design object; with --beat, it writes a Change’s state.view at that step, preserving other changed properties and inheriting earlier limits. --reset restores the generated axes.
Plots follow the deck theme
A plot saved with fluxplot schema 0.3.1 or later tags every piece of its scaffold — tick labels, titles, ticks, spines, gridlines, backgrounds — with the theme token it was drawn in. On a slide the plot follows the deck theme by default: its ink takes the theme’s text colour, its axes the muted text, its gridlines a faint mix of text into the background, and its backgrounds turn transparent, so a plot saved on white reads on Flux Dark without a regeneration. Data colours never change. Follow deck theme in the Object inspector turns it off for one plot (a plot whose white ground is the point). Copies of the plot in the Figure workspace and Paper keep their generated ink: there is no deck theme to follow there.
Colour scale: recolouring in data units
A colour-mapped plot saved with fluxplot schema 0.3.1 or later carries Colour scales, element state like the axis view: the palette, its direction, the norm kind, the limits and extend. A Change of a colour scale repaints every coloured element and the key’s gradient and ticks through the data values, so one step can narrow a heatmap’s range, switch a hexbin to a log scale or swap its colormap while the plot moves. Limits glide (log limits in log space), a new palette blends table by table, a changed norm kind switches at the midpoint. A saved scale also applies in the Figure workspace, Paper embeds and exports.
Select the plot and edit Colour scales in the Object inspector. At After step N the edit becomes a Change on that step, with one undo per edit; scrubbing the Animator previews the glide. A scale drawn as one raster image cannot recolour live and reports itself.
The CLI/MCP twin is set-plot-color-scale / set_plot_color_scale; get-plot-color-scales / get_plot_color_scales lists a plot’s scales, what may change and the live view a figure, a Design or a step holds:
flux set-plot-color-scale figure1 plot1 --cmap crameri.batlow --vmax 20
flux set-plot-color-scale talk/slide1 plot1 --norm log --vmin 1 --vmax 100 \
--beat beat2
flux set-plot-color-scale talk/slide1 plot1 --reset --beat beat3
flux set-plot-color-scale figure1 plot1 --scale rates --cmap magma --regenerate
flux get-plot-color-scales talk/slide1 plot1 --beat beat2With a figure as the target, the command saves the scale on the object; --regenerate also writes the complete __fluxplot__ control into the recipe, re-runs it, refreshes the figure and clears the live edit. With a deck/slide target and no --beat, it edits the Design object; with --beat it writes state.colorScale at that step, inheriting earlier edits. --scale names the scale when a plot has several. Omitted fields are preserved, and --reset restores the generated scale.
set-series-color / set_series_color gives a whole series one colour on a slide’s Design:
flux set-series-color talk/slide1 counts '#205ea6' --element plot1To check colour choices, View as… in the toolbar previews the stage as a colour-deficient audience sees it (see View as).