Curve Editor

The Domain Editor's main surface is the curve editor: an SVG canvas where you place anchors and shape their bezier curve. For the data model (domain, binding, curve), see Authoring Overview. Stepped-output mechanics live in Stepped Output: the step set picker, editing steps on the canvas, and saving step sets.


The editor surface

The Domain Editor's title bar names the domain being edited, for example 3-Band EQ. Inside the window, it lays out top-down:

  1. Side tabs, Incoming / Outgoing, always both present: every domain holds both sides. Each side has its own bindings; switching sides reloads the canvas. Opening the editor for the first time on a domain lands you on a side that has a curve rather than a blank one; with neither side authored yet, it opens on Outgoing.
  2. Ghost dropdown, top-right of the side-tabs row. Switches the underlay (see Ghost Overlays). This is everything the top row holds, on every domain.
  3. Slot tabs (FX domains and Channel Fader), one button per slot. Double-click a slot button to name what the slot holds: the effect on an FX slot, the variant on Channel Fader. The name becomes the button's label. It is also the only way to name an FX slot that has no curve of its own, such as one switched on beside a Dry/Wet curve, since the editor asks for the effect's name only when you create a curve on the slot (double-click is suppressed in the read-only Preview mode opened by Import Domain). Channel Fader shows two slots, Variant 1 and Variant 2; see Domains → Channel Fader variants.
  4. Parameter tabs, one button per parameter binding in the active side and slot (for 3-Band EQ: Low / Mid / High; for an FX slot: Dry/Wet, Param 1, …). Click to switch which binding the canvas is editing. Opened from a domain card's header, the editor selects the parameter you last had selected on that domain of that fusor. Clicking a parameter name on the card opens that parameter instead.
  5. Curve canvas, the SVG editing surface itself. On a stepped binding, dashed reference lines and a labeled gutter down the left edge replace the grid. Stepped Output covers editing steps there.
  6. Property strip, below the canvas: two boxes on one line. On the left, the Step Set box. On the right, an unheaded box with an FX Unit's Mode and, on the Outgoing tab of an FX Unit, FX Banks or Mixer FX domain, the Effect tail switch (FX Banks and Mixer FX have no Mode, so the switch is alone there). Interpolation and handle mode are set from the point menu and the Edit curve menu, not the strip. See Interpolation below.

Reading the canvas

The canvas is a square frame:

  • X axis is transition progress (0% → 100%).
  • Y axis is the binding's normalized value (0 to 1). What 0 and 1 mean for a specific control is set by the binding's address; the canvas shows the shape.

Visual conventions:

  • Orange anchors are the endpoints, at progress 0 and progress 1. You can drag them up and down only; their X position is fixed.
  • Blue anchors are middle points. You can drag them in both axes, clamped between their neighbors so they never cross another anchor.
  • The selected anchor grows slightly larger with a yellow outline. Clicking another anchor moves the selection; clicking empty canvas clears it.
  • Small squares off an anchor are its bezier handles, drawn at the end of a thin line. The selected anchor's handles render yellow too. A handle dragged off the top or bottom of the plot draws hollow, with a dashed stem, instead (see Handles beyond the canvas edge).
  • A grid plus axis labels render behind the curve. Dashed lines mark the quarters (0, 0.25, 0.5, 0.75, 1) on both axes, and fainter solid lines fall every 1/32 of progress and every 0.05 of value. Stepped curves replace the horizontal lines with dashed reference lines at each step level and keep the vertical ones.
  • Above the canvas, the point readout shows the selected anchor's number, progress (P) and value (V). See Typing a position.

The anchor cap is 16, for continuous and stepped curves alike. The editor stops adding anchors when you hit the cap.

A curve never draws or sends a value outside 0 to 1. If a handle pushes the shape past the top or bottom of the plot, the curve flattens against that limit instead of exceeding it. Curve limits below has the detail. What the canvas draws is exactly what the DJ app receives.


Anchor manipulation

  • Select. Click an anchor.
  • Move (end anchor). Drag. Vertical motion only; the X position stays at 0 or 1.
  • Move (middle anchor). Drag. The anchor follows the cursor on the grid, clamped between its left and right neighbors. It can reach a neighbor's progress, which makes a jump, but never passes it.
  • Add. Right-click an anchor and choose Add control point on its point menu. See below for where the new anchor lands.
  • Remove. Right-click a middle anchor and choose Remove control point on its point menu. Endpoints cannot be removed; the editor enforces a minimum of two anchors.
  • Deselect. Click empty canvas.

The grid

Every anchor drag lands on the grid:

  • Progress moves in steps of 1/128 of the transition. That is one beat at 32 bars. At 1, 2, 4, 8, 16, 32, 64 or 128 bars, every bar line falls on a step.
  • Value moves in steps of 0.01. On a stepped binding, the value moves between the step levels instead.
  • Handles do not snap. They move freely.

The grid is always on. An anchor saved off the grid stays where it is until you move it, and then it moves to the grid.

Typing a position

Select an anchor and the point readout above the canvas reads Point 2 | P 0.500 | V 0.50. P and V are boxes you can type into:

  • Type a number and press Enter, or click away. The anchor moves there, set to the nearest grid line. A number with no legal position reverts to the previous one, and so does a P beyond either neighbor.
  • Escape discards what you typed.
  • The up and down arrows beside each box, and the Up and Down arrow keys, move the anchor one grid step: 1/128 for P, 0.01 (or the next step level) for V. From an off-grid value, the first step goes to the nearest grid line in that direction.
  • P is disabled on the end anchors, since their progress is fixed.

Each typed entry and each arrow step is one Undo step.

Jumps

Two anchors can share a progress, or a value, but not both. Two anchors at the same progress make the curve jump there: up to that progress it follows the first anchor, and from that progress on it follows the second. The span between them has no width, so it draws as a vertical line with no handles.

  • At most two anchors share a progress.
  • A jump is at least 0.02 tall. Two anchors one value step apart would sit on top of each other on the canvas.
  • A middle anchor can share the last anchor's progress, at 1. The curve then reaches the last anchor's value only at completion. No middle anchor can share the first anchor's progress, at 0.

Hold also makes a jump, after a flat line. Use a shared progress when the curve should run into the jump with a ramp or an ease.

When a drag or a typed entry would put an anchor on another one, or closer to it than that, the editor moves it away instead:

  • In the middle of the curve, one progress step back the way it came.
  • At progress 1, beside the last anchor, two value steps back toward where it came from. The last anchor, dragged onto a middle anchor at progress 1, moves two value steps the same way.

If no step is free, the anchor stays where it was.

Where a new anchor lands

Add control point inserts the new anchor on the grid line nearest halfway between the point you right-clicked and the next one, on the curve, and selects it. Its value is the curve's value there, set to the nearest 0.01. On a Hold span it keeps the held value. The new point inherits the interpolation of the segment it split.

So you add from a specific point, not from anywhere on the canvas: right-click the point before the gap you want to fill, choose Add control point, then drag the new anchor where you want it. The item is offered on any point but the last. It greys out once the curve holds 16 points, and when no grid line lies between the two points.


Interpolation: Bezier, Linear, Hold

A curve's interpolation sets what the DJ app receives between anchors, not only how the canvas draws the curve. Each point governs the segment to its right, and every segment is one of three modes:

  • Bezier (the default). The curve eases through each anchor along a spline shaped by bezier handles. This is the mode for a musical fade. If an anchor sits higher than both its neighbors, the curve eases up into it and back down without passing it. The peak you placed is the maximum value the DJ app receives, and the same holds at a trough.
  • Linear. Straight segments between anchors, no handles to drag. A control on a Linear span moves at a constant rate from one anchor to the next.
  • Hold. Sample-and-hold: the curve jumps to each anchor's value and holds it flat until the next anchor, with no ramp in between. That suits stepped or stuttered output, and gates (an on/off control that should change instantly rather than ramp).

There is no property-strip control for interpolation. Set the mode for the whole curve from Interpolation for every point on the Edit curve menu, or for one segment from Interpolation to next point on a point's own point menu — see Per-point interpolation below.

A segment narrower than 8 progress steps can't be Bezier. It is too narrow to hold a handle from each end. Moving or adding an anchor so that a Bezier segment becomes that narrow switches it to Linear, and the point menu greys out Bezier for it. Its handles are kept, so widening the segment and choosing Bezier again brings the shape back.

Switching to Bezier derives handles from the neighboring anchors so the curve visibly bows. Hand-shaped handles are never overwritten by a mode switch, so switching Bezier → Hold → Bezier returns exactly the shape you had before. There is no confirmation prompt for a mode switch: switching back restores the shape, and Undo reverses it as well.

Hold works on any curve, with or without a step set attached. The property strip has a separate Step Set control (Attach… / Change… / Detach) that constrains anchors to a fixed, named list of levels on top of Hold. Stepped Output covers when that constraint is worth adding. A step set always holds, so while one is attached both interpolation menus stop offering a choice: the point menu leaves the item off entirely, and the Edit curve menu's Interpolation for every point greys out.

Use Hold for a staircase. Independent handles flattened by hand can produce the same shape, but that takes twice the control points, and switching interpolation mode afterwards reshapes it. If the output should be stepped, use Hold, with or without a step set.

Per-point interpolation

Right-click a control point to open its point menu, and choose an option under Interpolation to next point to set the mode for just the span between that point and the next one, independent of the rest of the curve. Choosing a mode applies it immediately, including re-choosing the mode a point already shows. That last case is the fix for a curve that looks Bezier and still draws a straight line: a fresh Bezier point derives its handles on the spot.

The option is not offered on the curve's last point, since nothing follows it, and it is absent on step-set curves, since a step set always holds. A point with nothing to offer on its menu shows a single greyed line, Nothing to change on this point.


Bezier handles

Bezier is the default interpolation (see Interpolation above); this section covers the handles that shape it.

Each middle anchor has two handles: an in-handle controlling the curve coming in from the previous anchor, and an out-handle controlling the curve going out to the next. End anchors have only the relevant single handle.

  • Drag. Click a handle's square and drag. The line and square track the cursor.
  • Clamp, sideways. The out-handle cannot extend past the next anchor; the in-handle cannot extend past the previous one. The editor stops the drag at that limit.
  • Minimum length. A handle's square stays clear of its anchor's dot, about 16 pixels from the anchor's center. Drag a handle closer and it stops at that distance, in the direction of the pointer. Where the neighboring anchor leaves too little room sideways, the handle tilts up or down to keep its length. Handles the editor creates for you follow the same minimum, and moving an anchor brings a shorter handle up to it.
  • Vertically, a handle can leave the canvas. See Handles beyond the canvas edge below.
  • Default position. New anchors get 1/3-distance handles toward each neighbor, producing a smooth shape with no kink.

Linked vs Independent handles

Each middle anchor has a handle mode:

  • Linked (the default, and what an anchor with no stored mode means). Dragging one handle drags the other to match, keeping them in line through the anchor, so the curve passes through smoothly.
  • Independent. Each handle moves on its own, so the curve can turn sharply at the anchor.

Toggle the mode for a selected anchor via its point menu's Handles group (Linked / Independent / Reset handles, the last restoring the derived shape). The group is offered only where the point has a bezier handle on both sides — the segment before it and the segment after it are both Bezier. A point with a handle on one side only (an end anchor, or a middle point that's Bezier on just one neighboring span) offers Reset handles alone; when the other segment becomes Bezier again later, the handle returns to whatever mode it was last set to. End anchors do not have a mode, since each has at most one handle.

To set the mode for every eligible point at once, use Handles for every point ▸ Linked / Independent on the Edit curve menu; it greys out when the curve has no bezier stretch at all.

Handles beyond the canvas edge

A handle can be dragged above or below the plot. Its real position keeps traveling with the pointer and keeps shaping the curve, and its drawn marker freezes at the edge of the canvas, hollow and with a dashed stem, so it is clear the marker is not where the handle actually is.

To bring it back, drag the frozen marker inward. The pointer separates from the marker as you drag: the marker stays pinned until the handle's real position comes back into view, and then the two rejoin. If a handle is too far out to bring back in one drag, release it and drag again, or use Reset handles on the point menu to restore the derived shape.

A handle can leave the plot only vertically. Its sideways travel is limited by the neighboring anchors, so it cannot leave the plot left or right.

Curve limits

A curve never draws or sends a value outside 0 to 1. If handles push a shape past the top or bottom of the plot, you get a flat plateau where the curve holds at the limit. That plateau is exactly what the DJ app receives.


The bottom row

The row under the canvas reads Edit curve ▾ · Undo · Redo … Cancel · Save · Save & Close.

ControlWhat it does
Edit curve ▾Opens the Edit curve menu: copy, paste, flip, whole-curve interpolation and handles, and clear
Undo / RedoStep the curve on screen back or forward through its own history; see Undo and redo below
CancelDiscards every unsaved edit in the editor and closes
SaveCommits your edits and keeps the window open for the next binding
Save & CloseCommits and closes. When there's nothing to save, this button reads Close

Adding or removing a point, and setting its interpolation or handle mode, live on the point menu (right-click a control point). Clearing, copying, pasting, flipping, and setting interpolation or handles for the whole curve live on the Edit curve menu.

Curve work is not autosaved. The Domain Editor has its own Save boundary, where the detail view around it autosaves. Close the window with unsaved edits, with the header's X or the window's own close, and it asks first: Save, Discard or Keep editing. Opening another domain in it while it has unsaved edits asks the same. Cancel discards without asking.


The point menu

Right-click a control point to open its point menu. It acts on that point alone. Each item shows a dot next to the option currently in effect, rather than naming what clicking it would do:

  • Interpolation to next point: Bezier / Linear / Hold. Sets the span between this point and the next one (see Per-point interpolation above). Absent on the curve's last point, and never offered on a step-set curve. Bezier is greyed on a segment too narrow for it.
  • Handles: Linked / Independent, plus Reset handles to restore the derived shape, where the point has a bezier handle on both sides. A point with one bezier handle, including an end anchor, offers Reset handles alone. See Linked vs Independent handles above.
  • Add control point. Inserts a new point on the grid line nearest halfway to the next one, on the curve, and selects it. Offered on any point but the last; greys out once the curve holds 16 points, or when no grid line lies between the two points. See Where a new anchor lands above.
  • Remove control point. Available on any middle point; endpoints can't be removed.

A point with nothing to offer — the last point on a curve, for instance — shows a single greyed line: Nothing to change on this point. On a locked FX Unit slot's Enable (see below), the point menu always reads this way.


The Edit curve menu

Open it three ways: the Edit curve button on the bottom row, right-clicking the curve line, or right-clicking empty canvas — including on a binding with no curve yet, where it's the way to paste one in. All three open the same menu, and every item acts on the whole curve, never on a single point.

ItemBehavior
Copy curvePuts the curve on screen on the curve clipboard. Greyed when the parameter has no curve.
Paste curve (source, n points)Replaces the curve on screen with the clipboard's curve, step set included, regardless of what kind of parameter you're pasting onto. Handles shorter than the minimum are lengthened and Bezier segments too narrow for it become Linear; anchors keep their positions. Reads Paste curve (nothing copied), greyed, when the clipboard is empty.
Flip ▸ Left–rightprogress → 1 − p, applied in place.
Flip ▸ Upside downvalue → 1 − v, and every handle's vertical offset flips with it. Flipping twice restores the curve.
Interpolation for every point ▸ Bezier / Linear / HoldSets every point at once. Bezier skips a segment too narrow for it. Greyed on a stepped lane.
Handles for every point ▸ Linked / IndependentSets every eligible point at once. Greyed (not hidden) when the curve has no bezier stretch.
Clear curveThe parameter is no longer modulated by this fusor.

On a locked FX Unit slot's Enable (see FX Routing → a fusor owns the whole FX unit), the menu offers Copy curve only.

The curve clipboard

Copying a curve holds it on a clipboard of its own, separate from your operating system's clipboard:

  • It is held by the app itself, not by one editor window, so it survives Save, closing the editor, and moving to a different domain, a different fusor, or a different editor window entirely. Copy a curve, close everything, open an unrelated fusor later in the same session, and it is still there to paste.
  • It lasts until Fusor Studio quits. It is not written to disk and does not survive a restart.
  • It appears only on the Paste curve item's label, which names the source it holds (side, domain and parameter, for example Outgoing 3-Band EQ Low) and its point count. Copying again replaces what was there.

Undo and redo

Two icon buttons sit beside Edit curve on the bottom row: Undo and Redo, greyed when there's nothing to step through. Tooltips read "Undo the last change to this curve" and "Redo the last change to this curve." Ctrl+Z undoes; Ctrl+Y and Ctrl+Shift+Z redo (Cmd on Mac). Neither fires while a text field has focus.

  • Each curve keeps its own history, up to 50 steps, for as long as the editor window stays open. Switching to a different parameter or side doesn't touch it: undo a change on one binding, switch away, come back, and it's still there to undo.
  • Counted as one step each: a point or handle drag (press to release is one step), a typed position or arrow step in the point readout, adding or removing a point, per-point and whole-curve interpolation and handles, paste, flip, clear, creating a curve, and attaching, changing or detaching a step set. FX Mode is not a curve edit and is not in the history. An edit that changes nothing adds no step.
  • A new edit clears that curve's redo list.
  • Save clears every curve's history in the editor, and so do Cancel and Close. A failed save clears nothing.
  • Undo enough changes across every curve you touched this session and the bottom row reads Close again, same as if you had made no edits at all.
  • An undo is subject to the same rules as any edit, and the FX Unit lock, so an undo the lock would refuse is not offered.

Ghost overlays

The Ghost dropdown at the top-right of the side-tabs row draws a faded reference curve underneath the active one. Three options:

  • Off. Just the active curve.
  • Other side. Shows the matching binding on the opposite side (e.g. while editing Incoming EQ Low, draws Outgoing EQ Low as a ghost). This is the overlay for designing complementary fades: the two curves should cross cleanly mid-transition.
  • This side. Shows the sibling bindings on the same side (e.g. while editing Incoming EQ Low, draws Incoming EQ Mid and Incoming EQ High). Useful for keeping the bands musically aligned.

Ghost curves render in their own color at reduced opacity, with a small label on the ghost curve, a quarter of the way across. The label is the parameter's name, or on a Channel Fader the variant's name. Ghosts are read-only. To edit a ghost, switch to its binding via the side or parameter tabs.

A curve you create, paste, or copy onto a control this session appears as a ghost right away, and a curve you clear this session is removed from the ghost immediately. Both take effect before you save.


Empty state and creation

A binding can exist without a curve: a freshly added domain on a side that hasn't been edited yet, for example. In the editor's normal (writable) mode the canvas shows "No binding (click to create)" centered.

Clicking the prompt creates a default binding:

  • Continuous parameter. A two-anchor flat line at the parameter's default value (typically 0.5 for bipolar controls, 0 or 1 for unipolar), ready to reshape.
  • Button parameter, such as an FX slot Enable. A three-anchor stepped curve with Off → On switching at progress 0.5, step set {Off, On}. Convert other curves to stepped via Attach… on the property strip below the canvas. See Stepped Output.
  • FX slot with no effect name yet. The editor first prompts for an effect name (the label that appears on the FX slot tab). Cancel aborts creation. A slot switched on with no effect named — the Open the unit shape, Enable plus Dry/Wet with no Amount curve — is warned about rather than blocked. Double-click the slot tab to name its effect. See FX Routing → Naming the effect on a slot.
  • Channel Fader variant with no name yet. The editor first offers an optional Variant name prompt. Cancelling it still creates the curve. If the other side has already named that variant, the curve takes that name without asking. See Domains → Channel Fader variants.

Right-clicking the empty canvas opens the Edit curve menu instead of creating a binding outright — the way to paste a curve onto a binding that doesn't have one yet.

In read-only contexts (Session View, or the Import Domain preview) the same message reads "No binding" with no click affordance.

One case where the prompt won't let you create

An FX Unit slot's Enable reads "Off: set by the fusor (author a curve on this unit to unlock)" and does not respond to a click until the fusor modulates that unit, which means until you author an Amount curve on any slot of it, or a Dry/Wet curve on the unit itself.

Until then there is nothing for the switch to enable, and the fusor sets the slot to Off anyway. Author something on the unit and every slot's Enable unlocks straight away, without saving first. See FX Routing → a fusor owns the whole FX unit.

While it's locked, right-clicking still opens a menu, but a reduced one: the Edit curve menu offers Copy curve only, and the point menu reads Nothing to change on this point.


Read-only preview mode

When you open a fusor via Import Domain → Preview (see Domains), the editor enters read-only mode:

  • The empty-state click-to-create is suppressed.
  • Both right-click menus — the point menu and the Edit curve menu — are suppressed.
  • Anchor and handle drags are discarded, since the source binding can't be mutated.

Use Preview to navigate a candidate source's curves before committing the import. Nothing you do can change the source file.


Seven things to know

  • Pick the mode for the job: Hold for stepped or stuttered output and gates, Linear for a constant-rate move, Bezier for a musical ease. A staircase built in Bezier with Independent handles costs twice the control points of the same shape in Hold, and switching modes on it afterwards does not give the staircase back.
  • Linked handles suit musical fades. Reach for Independent when you want a deliberate kink.
  • A handle you cannot find is probably pinned at the top or bottom edge. Look for the hollow, dashed marker, then drag it inward. If that fails, use Reset handles on the point menu.
  • Copy curve then Paste curve is the fastest way to build EQ Low/Mid/High as variations of one shape, or to move a curve to a different binding entirely. Author one band, copy it, switch to the next binding, and paste.
  • Flip ▸ Left–right turns a curve into its mirror image around the midpoint of the transition: the way to derive a fade-in from a fade-out, or an incoming curve from an outgoing one.
  • Ghost = Other side is the check for an EQ swap. The two curves should meet cleanly in the middle of the transition, and the overlay makes the cross visible at a glance.
  • Undo and Redo work per curve and survive switching bindings within the same editor session — but Save, Cancel and Close all clear every curve's history, so if you might want to undo later, don't save yet.