Skip to main content
Version: v2.10.3 (current)

NodeLink Filters

Standard Filtersโ€‹

Shared setters include equalizer, karaoke, timescale, vibrato, tremolo, rotation, distortion, channel mix, and low pass. Availability still depends on the server.

await player.filters.setChannelMix({
leftToLeft: 1,
leftToRight: 0,
rightToLeft: 0,
rightToRight: 1,
});

await player.filters.setLowPass({ smoothing: 20 });
await player.filters.setTremolo({ frequency: 2, depth: 0.5 });

The public low-pass setter is shared. Magmastream serializes NodeLink's lowercase lowpass key while retaining Lavalink's lowPass spelling for that backend.

Native Extra Filtersโ€‹

These setters require NodeLink when options are supplied. Omitting options clears the setting; it does not turn a Lavalink node into a native-filter provider.

Explicit setterShort aliasOptions
setNodeLinkHighPasssetHighPassHighPassOptions
setNodeLinkEchosetEchoEchoOptions
setNodeLinkReverbsetReverbReverbOptions
setNodeLinkChorussetChorusChorusOptions
setNodeLinkCompressorsetCompressorCompressorOptions
setNodeLinkFlangersetFlangerFlangerOptions
setNodeLinkPhasersetPhaserPhaserOptions
setNodeLinkPhonographsetPhonographPhonographOptions
setNodeLinkSpatialsetSpatialSpatialOptions
setNodeLinkTapesetTapeTapeOptions
if (player.node.isNodeLink) {
await player.filters.setNodeLinkEcho({ delay: 0.2, feedback: 0.3, mix: 0.2 });
await player.filters.setNodeLinkReverb({ wet: 0.2, dry: 0.8 });
await player.filters.setNodeLinkEcho();
}

Consult the source/server's accepted ranges and units for effect-specific values. The client typings describe fields; they do not guarantee an upstream source or effect is enabled.

Animation Transitionsโ€‹

NodeLink filter types expose transition/animation parameters:

if (player.node.isNodeLink) {
await player.filters.setTimescale({
speed: 1.05,
pitch: 1,
rate: 1,
transition: { durationMs: 500, curve: "linear" },
});
}

These fields are not part of portable Lavalink v4 filter options. The REST guard checks native filter keys, not every animation field nested inside shared filters. Keep animation settings inside your own NodeLink branch.

pluginFilters is separate from NodeLink native effects.

await player.filters.setPluginFilters(customPluginFilters);

A nonempty plugin-filter object requires a matching plugin in node.info.plugins. The default accepted names are lavadspx-plugin and LavaDSPX-Plugin (case-insensitive). This verifies presence, not the validity of every option.

For another filter plugin, supply its advertised name or accepted aliases:

await player.filters.setPluginFilters(customPluginFilters, "my-filter-plugin");
await player.filters.setPluginFilters(); // Clear without a plugin requirement.

Load node info before setting plugin filters. Missing/mismatched info causes a local guard failure. Do not nest NodeLink native effects in pluginFilters.

Synchronization and Resetโ€‹

Native FiltersChangedEvent messages synchronize local filter fields through syncFromNode() without issuing another REST request. The helper accepts direct filter data or a wrapped { filters } payload.

await player.filters.clearFilters() clears the configured effects. getFilterStatus() exposes the preset/status flags; do not treat those flags as a complete report of externally modified server filters.

The current updateFilters() implementation catches and logs REST update errors. Awaiting a setter is therefore not proof that the server accepted it; inspect server events/state during validation. Local backend/plugin guards still throw.

See the complete Filters reference.