livepilot 1.9.23 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +3 -3
- package/AGENTS.md +3 -3
- package/CHANGELOG.md +119 -0
- package/CONTRIBUTING.md +1 -1
- package/README.md +144 -13
- package/bin/livepilot.js +87 -0
- package/installer/codex.js +147 -0
- package/livepilot/.Codex-plugin/plugin.json +2 -2
- package/livepilot/.claude-plugin/plugin.json +2 -2
- package/livepilot/skills/livepilot-core/SKILL.md +21 -4
- package/livepilot/skills/livepilot-core/references/device-knowledge/00-index.md +34 -0
- package/livepilot/skills/livepilot-core/references/device-knowledge/automation-as-music.md +204 -0
- package/livepilot/skills/livepilot-core/references/device-knowledge/chains-genre.md +173 -0
- package/livepilot/skills/livepilot-core/references/device-knowledge/creative-thinking.md +211 -0
- package/livepilot/skills/livepilot-core/references/device-knowledge/effects-distortion.md +188 -0
- package/livepilot/skills/livepilot-core/references/device-knowledge/effects-space.md +162 -0
- package/livepilot/skills/livepilot-core/references/device-knowledge/effects-spectral.md +229 -0
- package/livepilot/skills/livepilot-core/references/device-knowledge/instruments-synths.md +243 -0
- package/livepilot/skills/livepilot-core/references/overview.md +13 -9
- package/livepilot/skills/livepilot-core/references/sample-manipulation.md +724 -0
- package/livepilot/skills/livepilot-core/references/sound-design-deep.md +140 -0
- package/livepilot/skills/livepilot-devices/SKILL.md +16 -2
- package/livepilot/skills/livepilot-evaluation/references/capability-modes.md +1 -1
- package/livepilot/skills/livepilot-release/SKILL.md +19 -5
- package/livepilot/skills/livepilot-sample-engine/SKILL.md +104 -0
- package/livepilot/skills/livepilot-sample-engine/references/sample-critics.md +87 -0
- package/livepilot/skills/livepilot-sample-engine/references/sample-philosophy.md +51 -0
- package/livepilot/skills/livepilot-sample-engine/references/sample-techniques.md +131 -0
- package/livepilot/skills/livepilot-sound-design-engine/SKILL.md +45 -0
- package/livepilot/skills/livepilot-wonder/SKILL.md +15 -0
- package/livepilot.mcpb +0 -0
- package/m4l_device/livepilot_bridge.js +1 -1
- package/manifest.json +2 -2
- package/mcp_server/__init__.py +1 -1
- package/mcp_server/atlas/__init__.py +357 -0
- package/mcp_server/atlas/device_atlas.json +44067 -0
- package/mcp_server/atlas/enrichments/__init__.py +111 -0
- package/mcp_server/atlas/enrichments/audio_effects/auto_filter.yaml +162 -0
- package/mcp_server/atlas/enrichments/audio_effects/beat_repeat.yaml +183 -0
- package/mcp_server/atlas/enrichments/audio_effects/channel_eq.yaml +126 -0
- package/mcp_server/atlas/enrichments/audio_effects/chorus_ensemble.yaml +149 -0
- package/mcp_server/atlas/enrichments/audio_effects/color_limiter.yaml +109 -0
- package/mcp_server/atlas/enrichments/audio_effects/compressor.yaml +159 -0
- package/mcp_server/atlas/enrichments/audio_effects/convolution_reverb.yaml +143 -0
- package/mcp_server/atlas/enrichments/audio_effects/convolution_reverb_pro.yaml +178 -0
- package/mcp_server/atlas/enrichments/audio_effects/delay.yaml +151 -0
- package/mcp_server/atlas/enrichments/audio_effects/drum_buss.yaml +142 -0
- package/mcp_server/atlas/enrichments/audio_effects/dynamic_tube.yaml +147 -0
- package/mcp_server/atlas/enrichments/audio_effects/echo.yaml +167 -0
- package/mcp_server/atlas/enrichments/audio_effects/eq_eight.yaml +148 -0
- package/mcp_server/atlas/enrichments/audio_effects/eq_three.yaml +121 -0
- package/mcp_server/atlas/enrichments/audio_effects/erosion.yaml +103 -0
- package/mcp_server/atlas/enrichments/audio_effects/filter_delay.yaml +173 -0
- package/mcp_server/atlas/enrichments/audio_effects/gate.yaml +130 -0
- package/mcp_server/atlas/enrichments/audio_effects/gated_delay.yaml +133 -0
- package/mcp_server/atlas/enrichments/audio_effects/glue_compressor.yaml +142 -0
- package/mcp_server/atlas/enrichments/audio_effects/grain_delay.yaml +141 -0
- package/mcp_server/atlas/enrichments/audio_effects/hybrid_reverb.yaml +160 -0
- package/mcp_server/atlas/enrichments/audio_effects/limiter.yaml +97 -0
- package/mcp_server/atlas/enrichments/audio_effects/multiband_dynamics.yaml +174 -0
- package/mcp_server/atlas/enrichments/audio_effects/overdrive.yaml +119 -0
- package/mcp_server/atlas/enrichments/audio_effects/pedal.yaml +145 -0
- package/mcp_server/atlas/enrichments/audio_effects/phaser_flanger.yaml +161 -0
- package/mcp_server/atlas/enrichments/audio_effects/redux.yaml +114 -0
- package/mcp_server/atlas/enrichments/audio_effects/reverb.yaml +190 -0
- package/mcp_server/atlas/enrichments/audio_effects/roar.yaml +159 -0
- package/mcp_server/atlas/enrichments/audio_effects/saturator.yaml +146 -0
- package/mcp_server/atlas/enrichments/audio_effects/shifter.yaml +154 -0
- package/mcp_server/atlas/enrichments/audio_effects/spectral_resonator.yaml +141 -0
- package/mcp_server/atlas/enrichments/audio_effects/spectral_time.yaml +164 -0
- package/mcp_server/atlas/enrichments/audio_effects/vector_delay.yaml +140 -0
- package/mcp_server/atlas/enrichments/audio_effects/vinyl_distortion.yaml +141 -0
- package/mcp_server/atlas/enrichments/instruments/analog.yaml +222 -0
- package/mcp_server/atlas/enrichments/instruments/bass.yaml +202 -0
- package/mcp_server/atlas/enrichments/instruments/collision.yaml +150 -0
- package/mcp_server/atlas/enrichments/instruments/drift.yaml +167 -0
- package/mcp_server/atlas/enrichments/instruments/electric.yaml +137 -0
- package/mcp_server/atlas/enrichments/instruments/emit.yaml +163 -0
- package/mcp_server/atlas/enrichments/instruments/meld.yaml +164 -0
- package/mcp_server/atlas/enrichments/instruments/operator.yaml +197 -0
- package/mcp_server/atlas/enrichments/instruments/poli.yaml +192 -0
- package/mcp_server/atlas/enrichments/instruments/sampler.yaml +218 -0
- package/mcp_server/atlas/enrichments/instruments/simpler.yaml +217 -0
- package/mcp_server/atlas/enrichments/instruments/tension.yaml +156 -0
- package/mcp_server/atlas/enrichments/instruments/tree_tone.yaml +162 -0
- package/mcp_server/atlas/enrichments/instruments/vector_fm.yaml +165 -0
- package/mcp_server/atlas/enrichments/instruments/vector_grain.yaml +166 -0
- package/mcp_server/atlas/enrichments/instruments/wavetable.yaml +162 -0
- package/mcp_server/atlas/enrichments/midi_effects/arpeggiator.yaml +156 -0
- package/mcp_server/atlas/enrichments/midi_effects/bouncy_notes.yaml +93 -0
- package/mcp_server/atlas/enrichments/midi_effects/chord.yaml +147 -0
- package/mcp_server/atlas/enrichments/midi_effects/melodic_steps.yaml +97 -0
- package/mcp_server/atlas/enrichments/midi_effects/note_echo.yaml +108 -0
- package/mcp_server/atlas/enrichments/midi_effects/note_length.yaml +97 -0
- package/mcp_server/atlas/enrichments/midi_effects/pitch.yaml +76 -0
- package/mcp_server/atlas/enrichments/midi_effects/random.yaml +117 -0
- package/mcp_server/atlas/enrichments/midi_effects/rhythmic_steps.yaml +103 -0
- package/mcp_server/atlas/enrichments/midi_effects/scale.yaml +83 -0
- package/mcp_server/atlas/enrichments/midi_effects/step_arp.yaml +112 -0
- package/mcp_server/atlas/enrichments/midi_effects/velocity.yaml +119 -0
- package/mcp_server/atlas/enrichments/utility/amp.yaml +159 -0
- package/mcp_server/atlas/enrichments/utility/cabinet.yaml +109 -0
- package/mcp_server/atlas/enrichments/utility/corpus.yaml +150 -0
- package/mcp_server/atlas/enrichments/utility/resonators.yaml +131 -0
- package/mcp_server/atlas/enrichments/utility/spectrum.yaml +63 -0
- package/mcp_server/atlas/enrichments/utility/tuner.yaml +51 -0
- package/mcp_server/atlas/enrichments/utility/utility.yaml +136 -0
- package/mcp_server/atlas/enrichments/utility/vocoder.yaml +160 -0
- package/mcp_server/atlas/scanner.py +236 -0
- package/mcp_server/atlas/tools.py +224 -0
- package/mcp_server/composer/__init__.py +1 -0
- package/mcp_server/composer/engine.py +452 -0
- package/mcp_server/composer/layer_planner.py +427 -0
- package/mcp_server/composer/prompt_parser.py +329 -0
- package/mcp_server/composer/tools.py +201 -0
- package/mcp_server/connection.py +53 -8
- package/mcp_server/corpus/__init__.py +377 -0
- package/mcp_server/device_forge/__init__.py +1 -0
- package/mcp_server/device_forge/builder.py +377 -0
- package/mcp_server/device_forge/models.py +142 -0
- package/mcp_server/device_forge/templates.py +483 -0
- package/mcp_server/device_forge/tools.py +162 -0
- package/mcp_server/hook_hunter/analyzer.py +23 -0
- package/mcp_server/hook_hunter/models.py +1 -0
- package/mcp_server/hook_hunter/tools.py +4 -2
- package/mcp_server/m4l_bridge.py +1 -0
- package/mcp_server/memory/taste_graph.py +68 -1
- package/mcp_server/memory/tools.py +15 -4
- package/mcp_server/musical_intelligence/detectors.py +14 -1
- package/mcp_server/musical_intelligence/tools.py +11 -8
- package/mcp_server/persistence/__init__.py +1 -0
- package/mcp_server/persistence/base_store.py +82 -0
- package/mcp_server/persistence/project_store.py +106 -0
- package/mcp_server/persistence/taste_store.py +122 -0
- package/mcp_server/preview_studio/models.py +1 -0
- package/mcp_server/preview_studio/tools.py +56 -13
- package/mcp_server/runtime/capability.py +66 -0
- package/mcp_server/runtime/capability_probe.py +137 -0
- package/mcp_server/runtime/execution_router.py +143 -0
- package/mcp_server/runtime/live_version.py +102 -0
- package/mcp_server/runtime/remote_commands.py +87 -0
- package/mcp_server/runtime/tools.py +18 -4
- package/mcp_server/sample_engine/__init__.py +1 -0
- package/mcp_server/sample_engine/analyzer.py +216 -0
- package/mcp_server/sample_engine/critics.py +390 -0
- package/mcp_server/sample_engine/models.py +193 -0
- package/mcp_server/sample_engine/moves.py +127 -0
- package/mcp_server/sample_engine/planner.py +186 -0
- package/mcp_server/sample_engine/sources.py +540 -0
- package/mcp_server/sample_engine/techniques.py +908 -0
- package/mcp_server/sample_engine/tools.py +442 -0
- package/mcp_server/semantic_moves/__init__.py +3 -0
- package/mcp_server/semantic_moves/device_creation_moves.py +237 -0
- package/mcp_server/semantic_moves/mix_moves.py +41 -41
- package/mcp_server/semantic_moves/performance_moves.py +13 -13
- package/mcp_server/semantic_moves/sample_compilers.py +372 -0
- package/mcp_server/semantic_moves/sound_design_moves.py +15 -15
- package/mcp_server/semantic_moves/tools.py +18 -17
- package/mcp_server/semantic_moves/transition_moves.py +16 -16
- package/mcp_server/server.py +51 -0
- package/mcp_server/services/__init__.py +1 -0
- package/mcp_server/services/motif_service.py +67 -0
- package/mcp_server/session_continuity/tracker.py +29 -1
- package/mcp_server/song_brain/builder.py +28 -1
- package/mcp_server/song_brain/models.py +4 -0
- package/mcp_server/song_brain/tools.py +20 -2
- package/mcp_server/sound_design/critics.py +89 -1
- package/mcp_server/splice_client/__init__.py +1 -0
- package/mcp_server/splice_client/client.py +347 -0
- package/mcp_server/splice_client/models.py +96 -0
- package/mcp_server/splice_client/protos/__init__.py +1 -0
- package/mcp_server/splice_client/protos/app_pb2.py +319 -0
- package/mcp_server/splice_client/protos/app_pb2.pyi +1153 -0
- package/mcp_server/splice_client/protos/app_pb2_grpc.py +1946 -0
- package/mcp_server/tools/arrangement.py +69 -0
- package/mcp_server/tools/automation.py +15 -2
- package/mcp_server/tools/devices.py +117 -6
- package/mcp_server/tools/notes.py +37 -4
- package/mcp_server/wonder_mode/diagnosis.py +5 -0
- package/mcp_server/wonder_mode/engine.py +85 -1
- package/mcp_server/wonder_mode/tools.py +6 -1
- package/package.json +12 -2
- package/remote_script/LivePilot/__init__.py +8 -1
- package/remote_script/LivePilot/arrangement.py +114 -0
- package/remote_script/LivePilot/browser.py +56 -1
- package/remote_script/LivePilot/devices.py +236 -6
- package/remote_script/LivePilot/mixing.py +8 -3
- package/remote_script/LivePilot/server.py +5 -1
- package/remote_script/LivePilot/transport.py +3 -0
- package/remote_script/LivePilot/version_detect.py +78 -0
- package/scripts/sync_metadata.py +132 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Enrichment loader — reads YAML files from subdirectories and merges them
|
|
3
|
+
into scanned device entries.
|
|
4
|
+
|
|
5
|
+
Directory layout::
|
|
6
|
+
|
|
7
|
+
enrichments/
|
|
8
|
+
instruments/
|
|
9
|
+
analog.yaml
|
|
10
|
+
wavetable.yaml
|
|
11
|
+
audio_effects/
|
|
12
|
+
compressor.yaml
|
|
13
|
+
eq_eight.yaml
|
|
14
|
+
_templates/ # skipped (leading underscore)
|
|
15
|
+
...
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
from __future__ import annotations
|
|
19
|
+
|
|
20
|
+
import os
|
|
21
|
+
from pathlib import Path
|
|
22
|
+
from typing import Any
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def load_enrichments(enrichments_dir: str | Path) -> dict[str, dict[str, Any]]:
|
|
26
|
+
"""Walk *enrichments_dir* and load every YAML file into a dict.
|
|
27
|
+
|
|
28
|
+
Files whose name starts with ``_`` are skipped (convention for templates
|
|
29
|
+
or drafts). Each file must be named ``<device_id>.yaml`` and contain a
|
|
30
|
+
mapping of enrichment fields.
|
|
31
|
+
|
|
32
|
+
Returns
|
|
33
|
+
-------
|
|
34
|
+
dict[str, dict]
|
|
35
|
+
``{device_id: enrichment_data}``
|
|
36
|
+
"""
|
|
37
|
+
try:
|
|
38
|
+
import yaml # type: ignore[import-untyped]
|
|
39
|
+
except ImportError:
|
|
40
|
+
# PyYAML not installed — return empty gracefully
|
|
41
|
+
return {}
|
|
42
|
+
|
|
43
|
+
enrichments_path = Path(enrichments_dir)
|
|
44
|
+
result: dict[str, dict[str, Any]] = {}
|
|
45
|
+
|
|
46
|
+
if not enrichments_path.is_dir():
|
|
47
|
+
return result
|
|
48
|
+
|
|
49
|
+
for root, _dirs, files in os.walk(enrichments_path):
|
|
50
|
+
# Skip directories whose name starts with _
|
|
51
|
+
root_name = os.path.basename(root)
|
|
52
|
+
if root_name.startswith("_"):
|
|
53
|
+
continue
|
|
54
|
+
for fname in sorted(files):
|
|
55
|
+
if fname.startswith("_"):
|
|
56
|
+
continue
|
|
57
|
+
if not fname.endswith((".yaml", ".yml")):
|
|
58
|
+
continue
|
|
59
|
+
device_id = fname.rsplit(".", 1)[0]
|
|
60
|
+
filepath = os.path.join(root, fname)
|
|
61
|
+
with open(filepath, "r", encoding="utf-8") as fh:
|
|
62
|
+
data = yaml.safe_load(fh)
|
|
63
|
+
if isinstance(data, dict):
|
|
64
|
+
result[device_id] = data
|
|
65
|
+
|
|
66
|
+
return result
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
# Fields that enrichment data can overwrite on a device entry
|
|
70
|
+
_ENRICHMENT_FIELDS = frozenset({
|
|
71
|
+
"sonic_description",
|
|
72
|
+
"synthesis_type",
|
|
73
|
+
"effect_type",
|
|
74
|
+
"character_tags",
|
|
75
|
+
"use_cases",
|
|
76
|
+
"genre_affinity",
|
|
77
|
+
"complexity",
|
|
78
|
+
"self_contained",
|
|
79
|
+
"mcp_controllable",
|
|
80
|
+
"key_parameters",
|
|
81
|
+
"pairs_well_with",
|
|
82
|
+
"starter_recipes",
|
|
83
|
+
"gotchas",
|
|
84
|
+
"health_flags",
|
|
85
|
+
"introduced_in",
|
|
86
|
+
"signal_type",
|
|
87
|
+
})
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def merge_enrichments(
|
|
91
|
+
devices: list[dict[str, Any]],
|
|
92
|
+
enrichments: dict[str, dict[str, Any]],
|
|
93
|
+
) -> list[dict[str, Any]]:
|
|
94
|
+
"""Merge enrichment data into device entries **in place** and return the list.
|
|
95
|
+
|
|
96
|
+
Only fields in ``_ENRICHMENT_FIELDS`` are written. Sets ``enriched=True``
|
|
97
|
+
on every device that receives at least one enrichment field.
|
|
98
|
+
"""
|
|
99
|
+
for device in devices:
|
|
100
|
+
device_id = device.get("id", "")
|
|
101
|
+
if device_id not in enrichments:
|
|
102
|
+
continue
|
|
103
|
+
enrich = enrichments[device_id]
|
|
104
|
+
touched = False
|
|
105
|
+
for field in _ENRICHMENT_FIELDS:
|
|
106
|
+
if field in enrich:
|
|
107
|
+
device[field] = enrich[field]
|
|
108
|
+
touched = True
|
|
109
|
+
if touched:
|
|
110
|
+
device["enriched"] = True
|
|
111
|
+
return devices
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
id: auto_filter
|
|
2
|
+
name: Auto Filter
|
|
3
|
+
sonic_description: >
|
|
4
|
+
Versatile resonant filter with built-in envelope follower, LFO, and sidechain input.
|
|
5
|
+
Creates everything from classic acid sweeps to rhythmic wobbles and auto-wah effects.
|
|
6
|
+
The morph filter type smoothly blends between low-pass and high-pass for evolving textures.
|
|
7
|
+
effect_type: filter
|
|
8
|
+
character_tags: [dynamic, resonant, expressive, rhythmic, acid]
|
|
9
|
+
use_cases: [filter_sweeps, acid_bass, auto_wah, rhythmic_filter, wobble, sidechain_filter]
|
|
10
|
+
genre_affinity:
|
|
11
|
+
primary: [techno, house, dubstep, electronic]
|
|
12
|
+
secondary: [funk, pop, ambient]
|
|
13
|
+
complexity: intermediate
|
|
14
|
+
signal_type: audio
|
|
15
|
+
introduced_in: "1.0"
|
|
16
|
+
|
|
17
|
+
key_parameters:
|
|
18
|
+
- name: "Filter Type"
|
|
19
|
+
description: "Filter topology — LP, HP, BP, Notch, or Morph (blends between types)"
|
|
20
|
+
range: ["LP 12", "LP 24", "HP 12", "HP 24", "BP 6", "BP 12", "Notch", "Morph"]
|
|
21
|
+
type: enum
|
|
22
|
+
sweet_spots:
|
|
23
|
+
acid: "LP 24"
|
|
24
|
+
wah: "BP 12"
|
|
25
|
+
sweep: "Morph"
|
|
26
|
+
|
|
27
|
+
- name: "Frequency"
|
|
28
|
+
description: "Filter cutoff frequency"
|
|
29
|
+
range: [20.0, 20000.0]
|
|
30
|
+
unit: Hz
|
|
31
|
+
type: float
|
|
32
|
+
sweet_spots:
|
|
33
|
+
dark: 200.0
|
|
34
|
+
warm: 800.0
|
|
35
|
+
bright: 4000.0
|
|
36
|
+
open: 12000.0
|
|
37
|
+
|
|
38
|
+
- name: "Resonance"
|
|
39
|
+
description: "Filter resonance — adds emphasis at cutoff frequency"
|
|
40
|
+
range: [0.0, 1.25]
|
|
41
|
+
type: float
|
|
42
|
+
sweet_spots:
|
|
43
|
+
clean: 0.0
|
|
44
|
+
warm: 0.3
|
|
45
|
+
squelchy: 0.6
|
|
46
|
+
screaming: 1.0
|
|
47
|
+
|
|
48
|
+
- name: "Env Amount"
|
|
49
|
+
description: "How much the envelope follower modulates the filter cutoff"
|
|
50
|
+
range: [-100.0, 100.0]
|
|
51
|
+
unit: "%"
|
|
52
|
+
type: float
|
|
53
|
+
sweet_spots:
|
|
54
|
+
subtle: 20.0
|
|
55
|
+
auto_wah: 50.0
|
|
56
|
+
aggressive: 80.0
|
|
57
|
+
|
|
58
|
+
- name: "Env Attack"
|
|
59
|
+
description: "Envelope follower attack time"
|
|
60
|
+
range: [0.1, 100.0]
|
|
61
|
+
unit: ms
|
|
62
|
+
type: float
|
|
63
|
+
sweet_spots:
|
|
64
|
+
fast: 1.0
|
|
65
|
+
medium: 10.0
|
|
66
|
+
slow: 50.0
|
|
67
|
+
|
|
68
|
+
- name: "Env Release"
|
|
69
|
+
description: "Envelope follower release time"
|
|
70
|
+
range: [1.0, 3000.0]
|
|
71
|
+
unit: ms
|
|
72
|
+
type: float
|
|
73
|
+
sweet_spots:
|
|
74
|
+
fast: 20.0
|
|
75
|
+
medium: 100.0
|
|
76
|
+
slow: 500.0
|
|
77
|
+
|
|
78
|
+
- name: "LFO Amount"
|
|
79
|
+
description: "How much the LFO modulates the filter cutoff"
|
|
80
|
+
range: [0.0, 100.0]
|
|
81
|
+
unit: "%"
|
|
82
|
+
type: float
|
|
83
|
+
sweet_spots:
|
|
84
|
+
subtle: 10.0
|
|
85
|
+
moderate: 30.0
|
|
86
|
+
heavy: 60.0
|
|
87
|
+
extreme: 100.0
|
|
88
|
+
|
|
89
|
+
- name: "LFO Rate"
|
|
90
|
+
description: "LFO speed — can be free or synced to tempo"
|
|
91
|
+
range: [0.01, 30.0]
|
|
92
|
+
unit: Hz
|
|
93
|
+
type: float
|
|
94
|
+
sweet_spots:
|
|
95
|
+
slow_sweep: 0.1
|
|
96
|
+
moderate: 1.0
|
|
97
|
+
wobble: 4.0
|
|
98
|
+
fast: 8.0
|
|
99
|
+
|
|
100
|
+
- name: "LFO Shape"
|
|
101
|
+
description: "LFO waveform shape"
|
|
102
|
+
range: ["Sine", "Square", "Triangle", "Saw Up", "Saw Down", "Random"]
|
|
103
|
+
type: enum
|
|
104
|
+
sweet_spots:
|
|
105
|
+
smooth: "Sine"
|
|
106
|
+
choppy: "Square"
|
|
107
|
+
ramp: "Saw Up"
|
|
108
|
+
|
|
109
|
+
- name: "Sidechain"
|
|
110
|
+
description: "External sidechain input for envelope follower"
|
|
111
|
+
type: toggle
|
|
112
|
+
range: [0, 1]
|
|
113
|
+
|
|
114
|
+
pairs_well_with:
|
|
115
|
+
- device: "Saturator"
|
|
116
|
+
reason: "Distortion before filter for classic acid sound"
|
|
117
|
+
- device: "Delay"
|
|
118
|
+
reason: "Filtered delays for dub-style effects"
|
|
119
|
+
- device: "Reverb"
|
|
120
|
+
reason: "Filter sweep into reverb for dramatic transitions"
|
|
121
|
+
- device: "Compressor"
|
|
122
|
+
reason: "Tame dynamics after resonant filter sweeps"
|
|
123
|
+
|
|
124
|
+
starter_recipes:
|
|
125
|
+
- name: "Acid Filter Sweep"
|
|
126
|
+
description: "Classic acid house resonant filter with LFO movement"
|
|
127
|
+
genre: techno
|
|
128
|
+
params:
|
|
129
|
+
"Filter Type": "LP 24"
|
|
130
|
+
Frequency: 400.0
|
|
131
|
+
Resonance: 0.7
|
|
132
|
+
"LFO Amount": 50.0
|
|
133
|
+
"LFO Rate": 2.0
|
|
134
|
+
"LFO Shape": "Saw Up"
|
|
135
|
+
|
|
136
|
+
- name: "Auto-Wah"
|
|
137
|
+
description: "Dynamic filter that opens with playing intensity"
|
|
138
|
+
genre: funk
|
|
139
|
+
params:
|
|
140
|
+
"Filter Type": "BP 12"
|
|
141
|
+
Frequency: 500.0
|
|
142
|
+
Resonance: 0.5
|
|
143
|
+
"Env Amount": 60.0
|
|
144
|
+
"Env Attack": 2.0
|
|
145
|
+
"Env Release": 80.0
|
|
146
|
+
|
|
147
|
+
- name: "Rhythmic Filter"
|
|
148
|
+
description: "Tempo-synced choppy filter for rhythmic textures"
|
|
149
|
+
genre: house
|
|
150
|
+
params:
|
|
151
|
+
"Filter Type": "LP 24"
|
|
152
|
+
Frequency: 600.0
|
|
153
|
+
Resonance: 0.4
|
|
154
|
+
"LFO Amount": 70.0
|
|
155
|
+
"LFO Shape": "Square"
|
|
156
|
+
|
|
157
|
+
gotchas:
|
|
158
|
+
- "Resonance above 1.0 causes self-oscillation — the filter will ring/whistle on its own"
|
|
159
|
+
- "LFO Rate can be free-running (Hz) or tempo-synced — check which mode is active"
|
|
160
|
+
- "Env Amount can be negative — inverts the envelope follower direction (filter closes when input is loud)"
|
|
161
|
+
- "Morph filter type smoothly blends between LP and HP — great for automated sweeps"
|
|
162
|
+
- "High resonance + low frequency + loud input can produce very loud output — watch levels"
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
id: beat_repeat
|
|
2
|
+
name: Beat Repeat
|
|
3
|
+
sonic_description: >
|
|
4
|
+
Rhythmic audio repeater and glitch machine that captures and stutters incoming audio
|
|
5
|
+
at controllable intervals. Creates fills, builds, and glitch effects by grabbing a
|
|
6
|
+
slice of audio and repeating it at various grid divisions with pitch decay and filtering.
|
|
7
|
+
effect_type: delay
|
|
8
|
+
character_tags: [glitchy, rhythmic, stuttered, creative, performable]
|
|
9
|
+
use_cases: [fill_builder, glitch_stutter, dj_style, beat_mangle, transition, live_performance]
|
|
10
|
+
genre_affinity:
|
|
11
|
+
primary: [electronic, glitch, idm, hip_hop]
|
|
12
|
+
secondary: [dnb, house, experimental]
|
|
13
|
+
complexity: intermediate
|
|
14
|
+
signal_type: audio
|
|
15
|
+
introduced_in: "5.0"
|
|
16
|
+
|
|
17
|
+
key_parameters:
|
|
18
|
+
- name: "Interval"
|
|
19
|
+
description: "How often Beat Repeat activates — the repetition cycle"
|
|
20
|
+
range: ["1/32", "1/16", "1/8", "1/4", "1/2", "1 Bar", "2 Bars", "4 Bars"]
|
|
21
|
+
type: enum
|
|
22
|
+
sweet_spots:
|
|
23
|
+
every_beat: "1/4"
|
|
24
|
+
every_bar: "1 Bar"
|
|
25
|
+
every_2_bars: "2 Bars"
|
|
26
|
+
|
|
27
|
+
- name: "Offset"
|
|
28
|
+
description: "Shifts the activation point within the Interval"
|
|
29
|
+
range: [0, 16]
|
|
30
|
+
type: int
|
|
31
|
+
sweet_spots:
|
|
32
|
+
start: 0
|
|
33
|
+
half: 8
|
|
34
|
+
|
|
35
|
+
- name: "Grid"
|
|
36
|
+
description: "Size of the repeated slice — determines the repeat rhythm"
|
|
37
|
+
range: ["1/32", "1/16", "1/8", "1/4", "1/2", "1 Bar"]
|
|
38
|
+
type: enum
|
|
39
|
+
sweet_spots:
|
|
40
|
+
fast_stutter: "1/32"
|
|
41
|
+
sixteenth: "1/16"
|
|
42
|
+
eighth: "1/8"
|
|
43
|
+
quarter: "1/4"
|
|
44
|
+
|
|
45
|
+
- name: "Variation"
|
|
46
|
+
description: "Adds rhythmic variation to the grid size over time"
|
|
47
|
+
range: [0, 100]
|
|
48
|
+
unit: "%"
|
|
49
|
+
type: int
|
|
50
|
+
sweet_spots:
|
|
51
|
+
locked: 0
|
|
52
|
+
subtle: 20
|
|
53
|
+
wild: 60
|
|
54
|
+
|
|
55
|
+
- name: "Chance"
|
|
56
|
+
description: "Probability that Beat Repeat activates each interval"
|
|
57
|
+
range: [0, 100]
|
|
58
|
+
unit: "%"
|
|
59
|
+
type: int
|
|
60
|
+
sweet_spots:
|
|
61
|
+
always: 100
|
|
62
|
+
occasional: 50
|
|
63
|
+
rare: 20
|
|
64
|
+
|
|
65
|
+
- name: "Gate"
|
|
66
|
+
description: "How long the repeat effect runs before passing through"
|
|
67
|
+
range: ["1/32", "1/16", "1/8", "1/4", "1/2", "1 Bar", "2 Bars", "4 Bars"]
|
|
68
|
+
type: enum
|
|
69
|
+
sweet_spots:
|
|
70
|
+
short: "1/4"
|
|
71
|
+
medium: "1 Bar"
|
|
72
|
+
long: "2 Bars"
|
|
73
|
+
|
|
74
|
+
- name: "Pitch"
|
|
75
|
+
description: "Pitch decay — repeats descend in pitch over time"
|
|
76
|
+
range: [0, 100]
|
|
77
|
+
unit: "%"
|
|
78
|
+
type: int
|
|
79
|
+
sweet_spots:
|
|
80
|
+
off: 0
|
|
81
|
+
subtle: 20
|
|
82
|
+
heavy: 60
|
|
83
|
+
|
|
84
|
+
- name: "Pitch Decay"
|
|
85
|
+
description: "Rate at which pitch drops during the repeat"
|
|
86
|
+
range: [0, 100]
|
|
87
|
+
unit: "%"
|
|
88
|
+
type: int
|
|
89
|
+
sweet_spots:
|
|
90
|
+
slow: 20
|
|
91
|
+
medium: 50
|
|
92
|
+
fast: 80
|
|
93
|
+
|
|
94
|
+
- name: "Filter Freq"
|
|
95
|
+
description: "Low-pass filter on the repeated signal"
|
|
96
|
+
range: [20.0, 20000.0]
|
|
97
|
+
unit: Hz
|
|
98
|
+
type: float
|
|
99
|
+
sweet_spots:
|
|
100
|
+
dark: 2000.0
|
|
101
|
+
warm: 5000.0
|
|
102
|
+
open: 15000.0
|
|
103
|
+
|
|
104
|
+
- name: "Volume"
|
|
105
|
+
description: "Output volume of the repeated signal"
|
|
106
|
+
range: [-inf, 6.0]
|
|
107
|
+
unit: dB
|
|
108
|
+
type: float
|
|
109
|
+
sweet_spots:
|
|
110
|
+
unity: 0.0
|
|
111
|
+
quiet: -6.0
|
|
112
|
+
|
|
113
|
+
- name: "Decay"
|
|
114
|
+
description: "Volume decay of repeats over time"
|
|
115
|
+
range: [0, 100]
|
|
116
|
+
unit: "%"
|
|
117
|
+
type: int
|
|
118
|
+
sweet_spots:
|
|
119
|
+
constant: 0
|
|
120
|
+
gentle: 30
|
|
121
|
+
rapid: 70
|
|
122
|
+
|
|
123
|
+
- name: "Mix Mode"
|
|
124
|
+
description: "Insert (replaces audio) or Mix (layers with original)"
|
|
125
|
+
range: ["Insert", "Mix"]
|
|
126
|
+
type: enum
|
|
127
|
+
sweet_spots:
|
|
128
|
+
replace: "Insert"
|
|
129
|
+
layer: "Mix"
|
|
130
|
+
|
|
131
|
+
pairs_well_with:
|
|
132
|
+
- device: "Auto Filter"
|
|
133
|
+
reason: "Dynamic filter movement on the repeated audio"
|
|
134
|
+
- device: "Reverb"
|
|
135
|
+
reason: "Smear the stutters with reverb for dramatic builds"
|
|
136
|
+
- device: "Redux"
|
|
137
|
+
reason: "Bitcrush the repeats for extra lo-fi glitch character"
|
|
138
|
+
- device: "Saturator"
|
|
139
|
+
reason: "Drive the stuttered audio for aggressive texture"
|
|
140
|
+
|
|
141
|
+
starter_recipes:
|
|
142
|
+
- name: "Fill Builder"
|
|
143
|
+
description: "Rhythmic fill that activates every 2 bars with accelerating stutter"
|
|
144
|
+
genre: electronic
|
|
145
|
+
params:
|
|
146
|
+
Interval: "2 Bars"
|
|
147
|
+
Grid: "1/8"
|
|
148
|
+
Variation: 40
|
|
149
|
+
Chance: 100
|
|
150
|
+
Gate: "1 Bar"
|
|
151
|
+
Pitch: 0
|
|
152
|
+
Decay: 20
|
|
153
|
+
|
|
154
|
+
- name: "Glitch Stutter"
|
|
155
|
+
description: "Random glitch bursts for experimental textures"
|
|
156
|
+
genre: idm
|
|
157
|
+
params:
|
|
158
|
+
Interval: "1/4"
|
|
159
|
+
Grid: "1/32"
|
|
160
|
+
Variation: 60
|
|
161
|
+
Chance: 30
|
|
162
|
+
Gate: "1/4"
|
|
163
|
+
Pitch: 30
|
|
164
|
+
"Pitch Decay": 50
|
|
165
|
+
|
|
166
|
+
- name: "DJ-Style Beat Mangle"
|
|
167
|
+
description: "Performance-ready beat repeat for live manipulation"
|
|
168
|
+
genre: dj
|
|
169
|
+
params:
|
|
170
|
+
Interval: "1 Bar"
|
|
171
|
+
Grid: "1/16"
|
|
172
|
+
Variation: 20
|
|
173
|
+
Chance: 100
|
|
174
|
+
Gate: "1/2"
|
|
175
|
+
"Mix Mode": "Insert"
|
|
176
|
+
|
|
177
|
+
gotchas:
|
|
178
|
+
- "Insert mode replaces the original audio — Mix mode layers repeats on top"
|
|
179
|
+
- "Chance at 100% means it always triggers — lower values create unpredictable fills"
|
|
180
|
+
- "Variation adds randomness to grid size — starts musical but can get chaotic at high values"
|
|
181
|
+
- "Pitch decay creates a classic turntable-slowdown effect — set Pitch and Pitch Decay together"
|
|
182
|
+
- "Gate controls duration, not whether it triggers — Chance controls probability"
|
|
183
|
+
- "Map Grid to a MIDI controller for real-time stutter size changes during performance"
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
id: channel_eq
|
|
2
|
+
name: Channel EQ
|
|
3
|
+
sonic_description: >
|
|
4
|
+
Streamlined channel strip EQ with fixed low, sweepable mid, and fixed high bands plus
|
|
5
|
+
a built-in spectrum analyzer. Designed for fast tonal shaping with minimal controls,
|
|
6
|
+
perfect for quick adjustments when EQ Eight feels like overkill.
|
|
7
|
+
effect_type: eq
|
|
8
|
+
character_tags: [simple, quick, clean, channel_strip]
|
|
9
|
+
use_cases: [quick_tonal_shaping, channel_strip, vocal_brightening, bass_warmth]
|
|
10
|
+
genre_affinity:
|
|
11
|
+
primary: [all]
|
|
12
|
+
secondary: []
|
|
13
|
+
complexity: beginner
|
|
14
|
+
signal_type: audio
|
|
15
|
+
introduced_in: "10.0"
|
|
16
|
+
|
|
17
|
+
key_parameters:
|
|
18
|
+
- name: "Low Gain"
|
|
19
|
+
description: "Low shelf gain for bass control"
|
|
20
|
+
range: [-15.0, 15.0]
|
|
21
|
+
unit: dB
|
|
22
|
+
type: float
|
|
23
|
+
sweet_spots:
|
|
24
|
+
warmth: 2.0
|
|
25
|
+
thin_out: -3.0
|
|
26
|
+
bass_boost: 4.0
|
|
27
|
+
|
|
28
|
+
- name: "Mid Gain"
|
|
29
|
+
description: "Mid bell gain for body/presence control"
|
|
30
|
+
range: [-15.0, 15.0]
|
|
31
|
+
unit: dB
|
|
32
|
+
type: float
|
|
33
|
+
sweet_spots:
|
|
34
|
+
presence: 2.0
|
|
35
|
+
scoop: -3.0
|
|
36
|
+
body: 3.0
|
|
37
|
+
|
|
38
|
+
- name: "Mid Freq"
|
|
39
|
+
description: "Sweepable mid frequency — target the problem or sweet spot"
|
|
40
|
+
range: [120.0, 7500.0]
|
|
41
|
+
unit: Hz
|
|
42
|
+
type: float
|
|
43
|
+
sweet_spots:
|
|
44
|
+
mud: 350.0
|
|
45
|
+
body: 800.0
|
|
46
|
+
presence: 3000.0
|
|
47
|
+
clarity: 5000.0
|
|
48
|
+
|
|
49
|
+
- name: "High Gain"
|
|
50
|
+
description: "High shelf gain for brightness control"
|
|
51
|
+
range: [-15.0, 15.0]
|
|
52
|
+
unit: dB
|
|
53
|
+
type: float
|
|
54
|
+
sweet_spots:
|
|
55
|
+
air: 2.0
|
|
56
|
+
darken: -3.0
|
|
57
|
+
bright: 4.0
|
|
58
|
+
|
|
59
|
+
- name: "HP On"
|
|
60
|
+
description: "Enable the built-in high-pass filter"
|
|
61
|
+
type: toggle
|
|
62
|
+
range: [0, 1]
|
|
63
|
+
|
|
64
|
+
- name: "HP Freq"
|
|
65
|
+
description: "High-pass filter cutoff frequency"
|
|
66
|
+
range: [20.0, 500.0]
|
|
67
|
+
unit: Hz
|
|
68
|
+
type: float
|
|
69
|
+
sweet_spots:
|
|
70
|
+
rumble: 30.0
|
|
71
|
+
vocal: 80.0
|
|
72
|
+
thin: 200.0
|
|
73
|
+
|
|
74
|
+
- name: "Output"
|
|
75
|
+
description: "Output gain for level matching"
|
|
76
|
+
range: [-15.0, 15.0]
|
|
77
|
+
unit: dB
|
|
78
|
+
type: float
|
|
79
|
+
sweet_spots:
|
|
80
|
+
unity: 0.0
|
|
81
|
+
|
|
82
|
+
pairs_well_with:
|
|
83
|
+
- device: "Compressor"
|
|
84
|
+
reason: "Quick EQ shaping before dynamics processing"
|
|
85
|
+
- device: "Utility"
|
|
86
|
+
reason: "Channel EQ for tone, Utility for level and width"
|
|
87
|
+
- device: "Saturator"
|
|
88
|
+
reason: "Tone shaping before saturation for controlled harmonic content"
|
|
89
|
+
|
|
90
|
+
starter_recipes:
|
|
91
|
+
- name: "Quick Vocal Brightening"
|
|
92
|
+
description: "Add air and presence to a vocal with one device"
|
|
93
|
+
genre: all
|
|
94
|
+
params:
|
|
95
|
+
"Low Gain": -1.0
|
|
96
|
+
"Mid Gain": 1.5
|
|
97
|
+
"Mid Freq": 3000.0
|
|
98
|
+
"High Gain": 2.5
|
|
99
|
+
"HP On": 1
|
|
100
|
+
"HP Freq": 80.0
|
|
101
|
+
|
|
102
|
+
- name: "Bass Warmth"
|
|
103
|
+
description: "Warm up a bass track with low boost and mud cut"
|
|
104
|
+
genre: all
|
|
105
|
+
params:
|
|
106
|
+
"Low Gain": 3.0
|
|
107
|
+
"Mid Gain": -2.0
|
|
108
|
+
"Mid Freq": 400.0
|
|
109
|
+
"High Gain": 0.0
|
|
110
|
+
|
|
111
|
+
- name: "General Cleanup"
|
|
112
|
+
description: "High-pass and slight presence boost for most sources"
|
|
113
|
+
genre: all
|
|
114
|
+
params:
|
|
115
|
+
"HP On": 1
|
|
116
|
+
"HP Freq": 40.0
|
|
117
|
+
"Low Gain": 0.0
|
|
118
|
+
"Mid Gain": 1.0
|
|
119
|
+
"Mid Freq": 2500.0
|
|
120
|
+
"High Gain": 1.0
|
|
121
|
+
|
|
122
|
+
gotchas:
|
|
123
|
+
- "Only one mid band with fixed Q — for surgical work, use EQ Eight instead"
|
|
124
|
+
- "The built-in spectrum analyzer is useful for visual feedback but adds slight CPU overhead"
|
|
125
|
+
- "High-pass filter has a fixed slope — less control than EQ Eight's HP options"
|
|
126
|
+
- "Good enough for 80% of EQ tasks — save EQ Eight for complex multi-band needs"
|