feat(nam): download 10 new A2 models for bass, orange, and other missing categories

Bank 7 — Bass: Ampeg PF20T, Aguilar Tone Hammer 500, GK 800RB (Gallien-Krueger), Aguilar DB751
Bank 7 — Orange: Orange Rocker 30 Dirty + Natural
Bank 7 — Others: Fender Bassman dimed, Hiwatt DR103 Bright + Cornish, Supro Black Magick M3

All SlimmableContainer v0.7.0, ~287-295 KB, verified JSON.
Also fixed Bank 2 Tone3000 storage keys to include .nam extension (Tone3000 changed URL format).
Inventory updated: 54 → 64 total models.
This commit is contained in:
2026-06-13 02:09:56 -04:00
parent 11c838a27e
commit 5c51b3db28
164 changed files with 22831 additions and 577 deletions
-144
View File
@@ -1106,147 +1106,3 @@ class TestDelaySubtypePingPong:
pipeline.load_preset(preset)
out = pipeline.process(HALF_SCALE)
assert np.allclose(out, HALF_SCALE)
# ═══════════════════════════════════════════════════════════════════
# Drive Subtype: Klon Centaur
# ═══════════════════════════════════════════════════════════════════
class TestKlon:
"""Klon Centaur-style transparent overdrive with clean blend."""
def test_output_clamped(self, pipeline):
"""Klon output should stay within [-1, 1]."""
_load_fx(pipeline, FXType.OVERDRIVE,
{"subtype": "klon", "drive": 0.8, "gain": 1.0})
out = pipeline.process(FULL_SCALE)
assert np.max(out) <= 1.0 and np.min(out) >= -1.0
def test_shapes_waveform(self, pipeline):
"""Klon should change waveform shape at high drive."""
_load_fx(pipeline, FXType.OVERDRIVE,
{"subtype": "klon", "drive": 1.0, "gain": 1.0})
out = pipeline.process(SINE_TONE * 0.5)
assert not np.allclose(out, SINE_TONE * 0.5, atol=0.05)
def test_clean_blend_dry(self, pipeline):
"""Blend=0 should pass clean signal (mostly dry)."""
_load_fx(pipeline, FXType.OVERDRIVE,
{"subtype": "klon", "drive": 1.0, "blend": 0.0, "gain": 1.0})
out = pipeline.process(SINE_TONE * 0.3)
assert np.allclose(out, SINE_TONE * 0.3, atol=0.02)
def test_clean_blend_wet(self, pipeline):
"""Blend=1 should pass only overdriven signal."""
_load_fx(pipeline, FXType.OVERDRIVE,
{"subtype": "klon", "drive": 1.0, "blend": 1.0, "gain": 1.0})
out = pipeline.process(SINE_TONE * 0.3)
assert np.max(out) > 0.0
assert np.max(np.abs(out - SINE_TONE * 0.3)) > 0.02
def test_low_drive_passthrough(self, pipeline):
"""Low drive should produce output."""
_load_fx(pipeline, FXType.OVERDRIVE,
{"subtype": "klon", "drive": 0.0, "gain": 1.0})
out = pipeline.process(SINE_TONE * 0.05)
assert np.max(np.abs(out)) > 0.0
def test_default_subtype_ts808(self, pipeline):
"""No subtype=ts808 should use original overdrive."""
_load_fx(pipeline, FXType.OVERDRIVE, {"drive": 0.5, "gain": 1.0})
out = pipeline.process(SINE_TONE * 0.5)
assert np.max(out) <= 1.0 and np.min(out) >= -1.0
# ═══════════════════════════════════════════════════════════════════
# Drive Subtype: Blues Driver (BD-2)
# ═══════════════════════════════════════════════════════════════════
class TestBluesDriver:
"""Blues Driver-style soft clipping with responsive tone stack."""
def test_output_clamped(self, pipeline):
"""BD-2 output should stay within [-1, 1]."""
_load_fx(pipeline, FXType.OVERDRIVE,
{"subtype": "bd2", "drive": 0.8, "gain": 1.0})
out = pipeline.process(FULL_SCALE)
assert np.max(out) <= 1.0 and np.min(out) >= -1.0
def test_shapes_waveform(self, pipeline):
"""BD-2 should change waveform shape at high drive."""
_load_fx(pipeline, FXType.OVERDRIVE,
{"subtype": "bd2", "drive": 1.0, "gain": 1.0})
out = pipeline.process(SINE_TONE * 0.5)
assert not np.allclose(out, SINE_TONE * 0.5, atol=0.05)
def test_tone_affects_output(self, pipeline):
"""Different tone values should produce different output."""
_load_fx(pipeline, FXType.OVERDRIVE,
{"subtype": "bd2", "drive": 0.5, "tone": 0.0, "gain": 1.0})
out_a = pipeline.process(SINE_TONE * 0.5)
pipeline.load_preset(Preset(
name="test", chain=[FXBlock(FXType.OVERDRIVE, enabled=True,
params={"subtype": "bd2", "drive": 0.5, "tone": 1.0, "gain": 1.0})],
master_volume=1.0,
))
out_b = pipeline.process(SINE_TONE * 0.5)
assert not np.allclose(out_a, out_b, atol=0.01)
def test_low_drive_passthrough(self, pipeline):
"""Low drive should pass signal."""
_load_fx(pipeline, FXType.OVERDRIVE,
{"subtype": "bd2", "drive": 0.0, "gain": 1.0})
out = pipeline.process(SINE_TONE * 0.05)
assert np.max(np.abs(out)) > 0.0
# ═══════════════════════════════════════════════════════════════════
# Drive Subtype: Big Muff Pi
# ═══════════════════════════════════════════════════════════════════
class TestBigMuff:
"""Big Muff Pi-style fuzz with tone stack."""
def test_output_clamped(self, pipeline):
"""Muff output should stay within [-1, 1]."""
_load_fx(pipeline, FXType.FUZZ,
{"subtype": "muff", "sustain": 0.8, "volume": 0.5})
out = pipeline.process(FULL_SCALE)
assert np.max(out) <= 1.0 and np.min(out) >= -1.0
def test_fuzz_shapes_waveform(self, pipeline):
"""Muff should significantly reshape waveform (fuzz)."""
_load_fx(pipeline, FXType.FUZZ,
{"subtype": "muff", "sustain": 1.0, "volume": 0.5})
out = pipeline.process(SINE_TONE * 0.8)
assert not np.allclose(out, SINE_TONE * 0.8, atol=0.05)
rms_out = np.sqrt(np.mean(out ** 2))
assert rms_out > 0.2, "Muff should produce significant output"
def test_tone_sweep(self, pipeline):
"""Different tone positions should produce different EQ."""
_load_fx(pipeline, FXType.FUZZ,
{"subtype": "muff", "sustain": 0.5, "tone": 0.0, "volume": 0.5})
out_a = pipeline.process(SINE_TONE)
pipeline.load_preset(Preset(
name="test", chain=[FXBlock(FXType.FUZZ, enabled=True,
params={"subtype": "muff", "sustain": 0.5, "tone": 1.0, "volume": 0.5})],
master_volume=1.0,
))
out_b = pipeline.process(SINE_TONE)
assert not np.allclose(out_a, out_b, atol=0.01)
def test_silence_muted(self, pipeline):
"""Silence in should give silence out."""
_load_fx(pipeline, FXType.FUZZ,
{"subtype": "muff", "sustain": 0.5, "volume": 0.5})
out = pipeline.process(SILENCE)
assert np.max(np.abs(out)) == 0.0
def test_default_subtype_fuzz(self, pipeline):
"""No subtype on FUZZ should use original fuzz algorithm."""
_load_fx(pipeline, FXType.FUZZ, {"drive": 0.5, "gain": 0.5})
out = pipeline.process(SINE_TONE * 0.8)
assert np.max(out) <= 1.0 and np.min(out) >= -1.0