Looking for Gendy alternative

Hi,

I’m using a synth that currently relies on Gendy3, but I’m running into occasional pops that I cannot resolve so I am looking to explore alternatives. Not sure where to start.
I’m after something that has a similar sonic quality to this:

(
SynthDef("genPad", { arg out = 0, amp = 1, gate = 1;
	var src, numSpk = 2;

	src = SplayAz.ar(numSpk, {LeakDC.ar(RLPF.ar(Gendy3.ar(0,2,SinOsc.kr(0.21, 0, 0.1, 0.9),1,[80,100,101,LFNoise2.kr(82,5,200),LFNoise2.kr(92,5,400)],0.001,0.02,12,9).sum,LFNoise2.kr(12,245,1200).lag(0.3) * LFNoise1.kr(0.15).range(0.2,0.3) ) )} !7,1,1,1,LFNoise0.ar(0.2).range(-1,1).lag(0.9));

	src = src + src.clip(0.02);
	src = HPF.ar(src,40);
	src = LPF.ar(src,XLine.kr(40,15000,20));
	src = src * -17.dbamp *\am_p.kr(1);
	Out.ar(out, src * EnvGen.kr(Env.asr, gate, doneAction: 2) )
}).add;
)

~a = Synth("genPad",[\amp,0.3])

D

(
SynthDef("genChaos", { |out=0, freq=100, chaosRate=0.2, amp=0.1|
    var sig = Gendy3.ar(
        ampdist: LFNoise2.kr(chaosRate).range(0.1, 0.9),
        durdist: chaosRate,
        adparam: SinOsc.kr(0.21).range(0.1, 0.9),
        minfreq: freq,
        maxfreq: freq * 1.5,
        ampscale: 0.02,
        durscale: 0.02,
        initCPs: 12,
        knum: 11
    ).sum;
    
    Out.ar(out, sig * amp);
}).add;
)

(
SynthDef("genFilter", { |in, out=0, amp=1|
    var sig = In.ar(in, 2);
    sig = RLPF.ar(
        LeakDC.ar(sig),
        freq: LFNoise2.kr(0.12).exprange(200, 4800).lag(0.3),
        rq: LFNoise1.kr(0.15).range(0.002, 0.3)
    );
    Out.ar(out, sig * amp);
}).add;
)

(
SynthDef("genDistort", { |in, out=0, drive=4, wet=0.3|
    var sig = In.ar(in, 2);
    var clean = (sig * drive).tanh;
    var distorted = clean.distort;
    Out.ar(out, (clean + (distorted * wet)).softclip);
}).add;
)

(
SynthDef("genSpace", { |in, out=0, spread=1, amp=1|
    var sig = In.ar(in, 2);
    sig = NHHall.ar(sig, 1.0, modDepth: 0.2) * 0.5;
    sig = SplayAz.ar(2, sig, spread: spread, center: LFNoise2.kr(0.1).range(-1,1));
    Out.ar(out, sig * amp);
}).add;
)

(
SynthDef("genMaster", { |in, out=0, gate=1, amp=0.3|
    var sig = In.ar(in, 2);
    sig = HPF.ar(sig, 40);
    sig = LPF.ar(sig, XLine.kr(40, 18000, 20));
    sig = Limiter.ar(sig, -3.dbamp);
    
    sig = sig * EnvGen.kr(Env.asr(4, 1, 8, \sin), gate, doneAction: 2);
    Out.ar(out, sig * amp);
}).add;
)

// Create a group for ordered processing
~fxGroup = Group.new;

// Allocate audio buses (adjust number of channels as needed)
~chaosBus = Bus.audio(s, 2);
~filterBus = Bus.audio(s, 2);
~distortBus = Bus.audio(s, 2);
~spaceBus = Bus.audio(s, 2);

// Instantiate synths in processing order
~chaos = Synth("genChaos", [\out, ~chaosBus, \freq, 100, \amp, 0.2], ~fxGroup);
~filter = Synth.after(~chaos, "genFilter", [\in, ~chaosBus, \out, ~filterBus], ~fxGroup);
~distort = Synth.after(~filter, "genDistort", [\in, ~filterBus, \out, ~distortBus, \drive, 3], ~fxGroup);
~space = Synth.after(~distort, "genSpace", [\in, ~distortBus, \out, ~spaceBus, \spread, 0.7], ~fxGroup);
~master = Synth.after(~space, "genMaster", [\in, ~spaceBus, \amp, 0.3], ~fxGroup);

// To release gracefully
~master.set(\gate, 0);

~chaos.set(\chaosRate, 0); // Freeze modulation