From Easy-Effects-Manager
Bind an Easy Effects preset to autoload when a specific microphone (or output device) becomes active. Lists current PipeWire devices, lets the user pick, and writes the autoload JSON Easy Effects expects.
How this skill is triggered — by the user, by Claude, or both
Slash command
/Easy-Effects-Manager:bind-mic-autoloadThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Easy Effects autoload bindings live as JSON files under
Easy Effects autoload bindings live as JSON files under
<data>/autoload/{input,output}/<device-name>:<port>.json. When the
matching device shows up, the named preset loads automatically.
preset_name — must be already installed (see install-preset).channel — input | output. Default input.device_node — optional. If absent, list devices and ask.port_name — optional. If absent, list and ask.if command -v easyeffects >/dev/null 2>&1; then
EE_DATA="${XDG_CONFIG_HOME:-$HOME/.config}/easyeffects"
elif flatpak info com.github.wwmm.easyeffects >/dev/null 2>&1; then
EE_DATA="$HOME/.var/app/com.github.wwmm.easyeffects/data/easyeffects"
else
echo "Easy Effects not installed."; exit 1
fi
mkdir -p "$EE_DATA/autoload/$channel"
For input:
pw-cli ls Node | grep -A1 -E 'media.class.*=.*"Audio/Source"' | grep node.name | sort -u
For output:
pw-cli ls Node | grep -A1 -E 'media.class.*=.*"Audio/Sink"' | grep node.name | sort -u
Show the user the list and ask which node.name to bind. Then list
ports for that node:
pactl list sources short | awk '{print $2}' | grep -F "$device_node"
(Common port names: [Out] Microphone, analog-stereo, mono-fallback.
The exact format varies; existing autoload files in $EE_DATA/autoload/$channel/
are the best reference for what shape works on this box.)
[ -f "$EE_DATA/$channel/${preset_name}.json" ] || {
echo "Preset '${preset_name}' is not installed in channel '$channel'. Run install-preset first."
exit 1
}
The filename pattern is <device_node>:<port_name>.json; the body is
JSON pointing at the preset. Verify with one of the existing autoload
files (they're authoritative for the schema your Easy Effects version
expects):
ls "$EE_DATA/autoload/$channel/"
cat "$EE_DATA/autoload/$channel/"*.json | head -50
Match the same shape. Typically:
fname="$EE_DATA/autoload/$channel/${device_node}:${port_name}.json"
python3 - <<PY
import json
out = {
"device": "$device_node",
"device-description": "$device_node",
"device-profile": "$port_name",
"preset-name": "$preset_name"
}
open("$fname","w").write(json.dumps(out, indent=4))
PY
If existing autoload files use different field names, copy from those rather than fabricating — Easy Effects schema has changed between versions and the working examples on disk are the contract.
ls -la "$EE_DATA/autoload/$channel/"
Tell the user the binding is in place; the preset will load next time that device+port combination becomes active.
npx claudepluginhub danielrosehill/claude-code-plugins --plugin Easy-Effects-ManagerProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.