Domains

The Domains tab is where you add the control surfaces a fusor will automate: Volume, EQ, FX Unit, FX Bank, Stems, and so on. Each domain holds the curves for one or both sides of the transition (outgoing / incoming).

The tab opens directly in the Library popover's fusor detail view, with no separate authoring step. See Authoring Overview → Opening a fusor for editing.

There are two ways to add a domain to a fusor:

  • Add Domain. Start fresh with empty curves.
  • Import Domain. Copy a domain from another fusor in your library.

Both buttons sit at the top of the Domains tab, above the list of existing domain cards. Each opens a popover anchored under the button it came from.


Why there are no kill or mute controls

You won't find EQ Kill buttons or Stem Mute toggles among the domains. A curve already moves through every value on its way to the target, so an EQ band curved down to 0 produces the same audio result as hitting its kill button. The kill control adds nothing a curve can't express. Automating both would mean two canonical addresses fighting over one audible outcome, so Fusor keeps a single address per control: the knob or fader itself.

Kill and mute are held, momentary gestures: a manual creative move you make live, not a shape you author into a transition. They stay on your controller, not in the fusor. (Signal-path enables that a knob genuinely needs to work, such as Mixer FX On or the per-stem Filter/FX-Send enables on Traktor, are a different thing and remain available.)


Add Domain

Click Add Domain to bring up the popover:

  1. Pick a domain type. Only types that the fusor can still add are listed, and the list is filtered to types compatible with the fusor's target apps (meta.apps). A Traktor fusor will not see djay-only domains such as fx_bank, and vice versa.

    The filter is strict in both directions, which catches people out on a brand-new fusor: an untagged fusor accepts only untagged domain types. Channel Fader and 3-Band EQ are the only universal types, so a fusor with no apps set offers exactly those two. Set the fusor's Apps on the Info tab and the rest of the list appears.

  2. Pick a scope. Choose Both Sides, Outgoing Only, or Incoming Only. Scopes that don't fit the fusor's current state (for example, "Outgoing Only" when the outgoing side already has that domain) are hidden.

  3. Confirm. The new domain is created with empty curves on the chosen side(s) and its card appears at the bottom of the Domains tab. The Domain Editor does not open on its own. Click the new card's header when you're ready to author its curves.

If a card of that type already exists covering only one side, the popover lists the type with a dimmed second line reading Extend to incoming side (or Extend to outgoing side, whichever side is missing). Picking it fills that missing side of the existing card and closes the popover. There is no scope step on this path, and no second card is created. The new side arrives empty, the same as using the card's Extend to other side icon (see Per-card affordances below).

A domain type whose card already covers both sides is not listed in the popover at all.


Import Domain

Click Import Domain to copy a domain, curves and all, from another fusor in your library. The flow parallels Add Domain, with one extra step for picking the source.

  1. Pick a domain type. Filtered the same way as Add Domain: addable to the target fusor and app-compatible.
  2. Pick a scope. Same labels and same fit rules as Add Domain.
  3. Pick a source fusor. Accordion list of every library fusor that has a matching domain. The first row is expanded by default; clicking another row collapses the open one and expands the new one. Each row shows the binding counts on each side, e.g. out: 2 bindings · in: 2 bindings, so you can pick the one that's already shaped the way you want.
  4. Preview or Import.
    • Preview opens the Domain Editor in read-only mode with full curve navigation. Cancel returns to the picker; Import applies the import.
    • Import applies it immediately.

The confirm step (when it appears)

If the source maps onto the target unambiguously (same sides, no role swap) the import applies directly. A small confirm step appears only when there's a choice to make:

  • Source-side picker. Shown when the target scope is single-sided but the source has both sides. Pick which source side to copy.
  • Mirror curve? Shown when the source side differs from the target side (an "outgoing" curve being imported onto the incoming side, for example). Defaulted to checked, which is almost always what you want; uncheck if you specifically want to preserve the original curve shape without flipping it.

Cross-role role-prefix rewriting (outgoing.*incoming.* inside bindings) is automatic; you don't need to touch it.


Per-card affordances

Each domain card in the list carries a small set of header controls:

  • Orange Switch (left of the header). Sets whether the domain arrives on or off. See The enable switch below.
  • Click the header (or any parameter name). Opens the Domain Editor for that card, the side-by-side curve surface where the actual authoring happens.
  • Trash icon (red). Delete the domain. A confirmation modal titled Delete domain? appears, reading "This drops its curves and bindings." There is no undo for domain deletion; text-field undo only covers metadata edits (see Authoring Overview → Autosave and undo). That confirmation prompt is all that stands between a stray click and a lost domain.
  • Split icon (gray, single-sided rows only; tooltip Extend to other side). Extends a single-sided card (outgoing-only or incoming-only) to cover both sides by adding empty bindings on the missing side, so extending a domain that's switched off doesn't switch it on. Picking the same domain type again in the Add Domain popover does the same thing. The new side carries no curves yet, so it shows the not saved warning below until you author one.
  • Orange not saved: needs curve warning. Appears when a side of the card has no curves on it. See Sides without curves aren't saved below.

Sides without curves aren't saved

A side of a domain — outgoing or incoming — is only written to the fusor file once it has at least one curve on it. A side with none is left out, and comes back missing the next time the fusor loads.

The card says so before that happens. When a side has no curves, its header shows an orange warning: Incoming not saved: needs curve (or Outgoing), naming the side that's short. When neither side has curves — a domain you added and haven't authored yet — it reads Not saved: needs curve, because the whole domain is what goes missing. Hovering it gives the same thing in a sentence.

Author a curve on that side and the warning clears. The warning appears the same way whichever route left the side empty: extending a domain, adding a new one, or deleting a side's last curve.

The enable switch

Each domain card carries its own orange Switch, at the left of the header. It sets whether the domain arrives on or off every time the fusor loads. Toggling it autosaves to the fusor file, the same as everything else on this tab.

Hovering the Switch shows the reminder: "Off here means off every time this Fusor loads — it's saved into the Fusor. The same switch in the player only changes the current run." The switch it's contrasting with is the domain's enable Switch in Session View on a loaded fusor, which looks identical. The two mean the same thing at different scopes. This one sets how the fusor ships, every time it loads. The player's switch only changes the run in progress and never touches the file.

Per-card preflight

Each domain card has its own preflight editor rendered beneath the card body. It controls what shows up for that one domain on the player's Before you run this surface — both the line on each domain card in the Session View stack and the per-domain reminder the engine surfaces at arm time.

The editor has three pieces:

  • Snapshot preview. When no override is set, the editor shows the default reminder that came with the domain type. For a fusor tagged with a single DJ app, the per-app variant of the snapshot is shown (when the domain type has one for that app); for multi-app or universal fusors, the snapshot's default text is shown. The preview is read-only. Overriding is the only way to change the text.
  • Override. Click Override to copy the snapshot text into a textarea and start editing. While an override is in effect, the resolved text is the override verbatim; the snapshot no longer contributes. A small reset icon appears next to the Hide switch once you've overridden; clicking it clears the override and brings the snapshot preview back. Press Esc to release focus when you're done typing.
  • Hide. The Hide Switch on the right suppresses this domain's line entirely. The preflight block dims and an orange · hidden tag appears so it's obvious from the editor side; on the player's surface the line vanishes.

Where the snapshot text comes from

The snapshot is a frozen copy of the domain type's authored reminders. It's captured at the moment you add the domain to the fusor — both Add Domain and Import Domain populate it — and travels with the fusor on disk. That means:

  • Editing the domain type's registry default afterwards does not update existing fusors. They keep the snapshot they were given.
  • Import Domain copies the source fusor's full preflight block (snapshot, override, and hide) along with the bindings. The receiving fusor inherits the source's per-domain reminders.
  • The snapshot itself isn't editable in this editor; Override is the supported way to write a fusor-specific version of the text.

Resolution order at session time

When the player surfaces the fusor's preflight, each domain card resolves its line in this order:

  1. Hidden? Skip. No line for this domain.
  2. Overridden? Show the override text exactly.
  3. Snapshot, per current app. If the loaded fusor is tagged with a single DJ app and the snapshot has a string for that app, show it.
  4. Snapshot default. Fall back to snapshot.default.
  5. Empty. No text means no line.

The same rule applies to per-action preflight blocks. See Pre-run Actions → Per-action preflight.

Two preflight levels — which to edit

Before you run this text comes from two layers. Knowing which one to edit avoids stepping on the other:

LayerEdited fromScope
Per-domainThis editor (per card in the Domains tab)Reminders specific to one domain in this one fusor. Override or hide as needed.
Domain-type default (registry)Outside the app — domain definitions in config/domain_types.jsonGeneric reminders that ship with the domain type. Changes affect only new fusors that add the domain afterwards, never fusors whose snapshot has already been frozen.

There is no fusor-wide preflight field. A reminder that applies to the whole transition rather than one domain goes on the domain it most concerns, or in the fusor's Intent or Your Notes field on the Info tab, both of which the reader sees in Session View before arming.


Opening the Domain Editor

Click a domain card's header or any parameter name to open the Domain Editor in its own window. The Domain Editor has its own Save/Cancel boundary: its edits don't autosave; they commit when you save. This is the one exception to the popover's autosave model.

Its footer carries the full set of controls — Clear, Add (n/16), Remove, Handles, Reset on the left, then Cancel, Save, and Save & Close on the right. Save keeps the window open so you can carry on to the next binding; Save & Close commits and closes in one click. See Curve Editor for the anchor, handle, and right-click mechanics.


Domains on library fusors you haven't loaded

Right-click any fusor in the Library and choose Details to open its detail view. The Domains tab there is the same editable surface as the loaded fusor's detail view. There's no difference between "inspect" and "edit". That helps when you're shopping around for a fusor to import from, or when you want to tweak a fusor before its turn comes up in the set list.


Tips

  • Import is the easiest way to share a domain across fusors without hand-editing JSON: single-domain copy in a few clicks.
  • If the source row you want isn't listed, check that the source fusor's app tags overlap with the target's. A djay-only fusor won't appear as a source for a Traktor target on a djay-only domain type, and vice versa.
  • Preview before Import when in doubt. The read-only editor gives you the full curve nav so you can scrub through every binding before committing.
  • Per-card preflight is the right place for one-off domain reminders ("This fusor's EQ assumes Low cut all the way at start"). For generic reminders that should apply to every fusor using the domain, edit the domain type's registry default instead. The per-card override is for per-fusor exceptions.