So Ive got supercollider working on the Organelle with all the hardware working, keys, knobs, oled, and its launched in exactly the same way as other (PD) patches, so user doesn’t care if its PD or SC. 
and really liking supercollider for patching, its so compact… perhaps because I’m not really a GUI Patching type programmer 
heres an example of what a patch looks like so far
// initialise
~voices = Dictionary.new;
~cutoff = 5000.0;
~oled.screen(1,format("Cutoff % Hz",~cutoff.asInteger));
~oled.screen(5,"Test Patch Loaded");
// create knob callback
~knobfunc = {
arg func, msg, knob, value;
if(knob==0, {
~cutoff = value.linexp(0,1,50,20000);
~oled.screen(1,format("Cutoff % Hz",~cutoff.asInteger));
~voices.values.do({
arg v;
v.set(\cutoff,~cutoff);
}
);
});
};
// register knob callback
~knobs.addDependant(~knobfunc);
// create keys callback
~keyfunc = {
arg func, msg, key, vel;
if(vel>0 , {
if(~voices[key]!=nil,{~voices[key].set(\gate,0);});
~voices[key] = Synth.new(\testSynth,[
\freq, (key+59).midicps,
\cutoff, ~cutoff,
]
);
} , {
if(~voices[key]!=nil,{~voices[key].set(\gate,0);});
~voices[key] = nil;
};)
};
// register key callback
~keys.addDependant(~keyfunc);
// a boring synth
SynthDef(\testSynth,
{
arg freq=440,gate=1,cutoff=440;
var sig,env,amp=0.3;
sig = Saw.ar(freq);
env = EnvGen.ar(Env.adsr(),gate,doneAction:2);
sig = sig * env * amp;
sig = LPF.ar(sig,cutoff.clip(10,24000));
Out.ar(0,sig!2);
}
).add;
a breakdown of whats its doing is here
a few more features to add, but its getting close to being released as a v1.0 (or 0.2
)
thanks to help on the supercollider thread here… loads of great tips, the ‘addDependent’ stuff was really useful for a newbie like me.