diff --git a/components/bl00mbox/CMakeLists.txt b/components/bl00mbox/CMakeLists.txt
index 734fd79ed7087ac0cd2f9e56bc7c6e77f7deb21e..1a99b66feaec5b10d458c4161c9c242c56c3f271 100644
--- a/components/bl00mbox/CMakeLists.txt
+++ b/components/bl00mbox/CMakeLists.txt
@@ -15,6 +15,7 @@ idf_component_register(
         plugins/flanger.c
         plugins/sequencer.c
         plugins/noise.c
+        plugins/noise_burst.c
         plugins/distortion.c
         plugins/lowpass.c
         plugins/mixer.c
diff --git a/components/bl00mbox/bl00mbox_plugin_registry.c b/components/bl00mbox/bl00mbox_plugin_registry.c
index 278bead36c141f7e8e3e7c01917bf903b20544b8..c3f9fa0eecec967b009ffb56bbd2949acde1ea6f 100644
--- a/components/bl00mbox/bl00mbox_plugin_registry.c
+++ b/components/bl00mbox/bl00mbox_plugin_registry.c
@@ -96,6 +96,7 @@ radspa_descriptor_t * bl00mbox_plugin_registry_get_id_from_index(uint32_t index)
 #include "sampler.h"
 #include "flanger.h"
 #include "noise.h"
+#include "noise_burst.h"
 #include "distortion.h"
 #include "mixer.h"
 #include "slew_rate_limiter.h"
@@ -111,6 +112,7 @@ void bl00mbox_plugin_registry_init(void){
     plugin_add(&sampler_desc);
     plugin_add(&flanger_desc);
     plugin_add(&noise_desc);
+    plugin_add(&noise_burst_desc);
     plugin_add(&distortion_desc);
     plugin_add(&mixer_desc);
     plugin_add(&slew_rate_limiter_desc);
diff --git a/components/bl00mbox/plugins/noise_burst.c b/components/bl00mbox/plugins/noise_burst.c
new file mode 100644
index 0000000000000000000000000000000000000000..13c16138f611418d6805e95b1bdfe374aa0a9ecd
--- /dev/null
+++ b/components/bl00mbox/plugins/noise_burst.c
@@ -0,0 +1,64 @@
+#include "noise_burst.h"
+
+radspa_descriptor_t noise_burst_desc = {
+    .name = "noise_burst",
+    .id = 7,
+    .description = "outputs flat noise upon trigger input for an amount of milliseconds",
+    .create_plugin_instance = noise_burst_create,
+    .destroy_plugin_instance = radspa_standard_plugin_destroy
+};
+
+#define NOISE_BURST_NUM_SIGNALS 3
+#define NOISE_BURST_OUTPUT 0
+#define NOISE_BURST_TRIGGER 1
+#define NOISE_BURST_LENGTH_MS 2
+
+radspa_t * noise_burst_create(uint32_t init_var){
+    radspa_t * noise_burst = radspa_standard_plugin_create(&noise_burst_desc, NOISE_BURST_NUM_SIGNALS, sizeof(noise_burst_data_t),0);
+    noise_burst->render = noise_burst_run;
+    radspa_signal_set(noise_burst, NOISE_BURST_OUTPUT, "output", RADSPA_SIGNAL_HINT_OUTPUT, 0);
+    radspa_signal_set(noise_burst, NOISE_BURST_TRIGGER, "trigger", RADSPA_SIGNAL_HINT_INPUT | RADSPA_SIGNAL_HINT_TRIGGER, 0);
+    radspa_signal_set(noise_burst, NOISE_BURST_LENGTH_MS, "length", RADSPA_SIGNAL_HINT_INPUT, 100);
+    radspa_signal_get_by_index(noise_burst, NOISE_BURST_LENGTH_MS)->unit = "ms";
+
+    noise_burst_data_t * data = noise_burst->plugin_data;
+    data->counter = 15;
+    data->limit = 15;
+
+    return noise_burst;
+}
+
+#define SAMPLE_RATE_SORRY 48000
+
+
+void noise_burst_run(radspa_t * noise_burst, uint16_t num_samples, uint32_t render_pass_id){
+    noise_burst_data_t * plugin_data = noise_burst->plugin_data;
+    radspa_signal_t * output_sig = radspa_signal_get_by_index(noise_burst, NOISE_BURST_OUTPUT);
+    if(output_sig->buffer == NULL) return;
+    radspa_signal_t * trigger_sig = radspa_signal_get_by_index(noise_burst, NOISE_BURST_TRIGGER);
+    radspa_signal_t * length_ms_sig = radspa_signal_get_by_index(noise_burst, NOISE_BURST_LENGTH_MS);
+
+    int16_t ret = output_sig->value;
+
+    for(uint16_t i = 0; i < num_samples; i++){
+
+        int16_t trigger = trigger_sig->get_value(trigger_sig, i, num_samples, render_pass_id);
+        int16_t vel = radspa_trigger_get(trigger, &(plugin_data->trigger_prev));
+
+        if(vel < 0){ // stop
+            plugin_data->counter = plugin_data->limit;
+        } else if(vel > 0 ){ // start
+            plugin_data->counter = 0;
+            int32_t length_ms = trigger_sig->get_value(length_ms_sig, i, num_samples, render_pass_id);
+            plugin_data->limit = length_ms * 48;
+        }
+        if(plugin_data->counter < plugin_data->limit){
+            ret = radspa_random();
+            plugin_data->counter++;
+        } else {
+            ret = 0;
+        }
+        if(output_sig->buffer != NULL) (output_sig->buffer)[i] = ret;
+    }
+    output_sig->value = ret;
+}
diff --git a/components/bl00mbox/plugins/noise_burst.h b/components/bl00mbox/plugins/noise_burst.h
new file mode 100644
index 0000000000000000000000000000000000000000..6eded45728d6e9744416554887fec457332cdd9a
--- /dev/null
+++ b/components/bl00mbox/plugins/noise_burst.h
@@ -0,0 +1,14 @@
+#pragma once
+#include "radspa.h"
+#include "radspa_helpers.h"
+
+typedef struct {
+    int32_t counter;
+    int32_t limit;
+    int16_t trigger_prev;    
+} noise_burst_data_t;
+
+extern radspa_descriptor_t noise_burst_desc;
+radspa_t * noise_burst_create(uint32_t init_var);
+void noise_burst_run(radspa_t * osc, uint16_t num_samples, uint32_t render_pass_id);
+
diff --git a/python_payload/apps/shoegaze/__init__.py b/python_payload/apps/shoegaze/__init__.py
index 7726f43a72f81a70bb36158b3745a5455e0fa738..288809869edb766da2f59e17a747cdbf8faea747 100644
--- a/python_payload/apps/shoegaze/__init__.py
+++ b/python_payload/apps/shoegaze/__init__.py
@@ -10,6 +10,7 @@ import bl00mbox
 
 import leds
 import hardware
+import random
 
 chords = [
     [-5, -5, 2, 7, 10],
@@ -88,6 +89,11 @@ class ShoegazeApp(Application):
         self._git_string_tuning = [0] * 4
         self._button_prev = 0
         self._update_connections()
+        self._spinny = -0.5
+        self._gaze_counter = 0
+        self._rand_counter = 0
+        self._rand_limit = 16
+        self._rand_rot = 0.0
 
     def _update_connections(self) -> None:
         if self.fuzz_on:
@@ -124,7 +130,7 @@ class ShoegazeApp(Application):
         self._update_connections()
 
     def _set_chord(self, i: int) -> None:
-        hue = int(72 * (i + 0.5)) % 360
+        hue = int(54 * (i + 0.5)) % 360
         if i != self.chord_index:
             self.chord_index = i
             for j in range(40):
@@ -134,31 +140,55 @@ class ShoegazeApp(Application):
 
     def draw(self, ctx: Context) -> None:
         ctx.text_align = ctx.CENTER
-        ctx.font = ctx.get_font_name(5)
-        ctx.font_size = 30
+        self._rand_counter += 1
+        if self._rand_counter > self._rand_limit:
+            self._rand_counter = 0
+            self._rand_rot = 0.01 * float(random.getrandbits(3))
+        if self._rand_counter == 1:
+            self._rand_limit = 2 + random.getrandbits(3)
 
         ctx.rgb(0, 0, 0).rectangle(-120, -120, 240, 240).fill()
-
-        ctx.move_to(60, 60)
+        ctx.font = ctx.get_font_name(5)
+        ctx.font_size = 35
+
+        ctx.move_to(0, -112)
+        ctx.rgb(0.2, 0, 0.2)
+        ctx.text("bass")
+
+        rot = self._spinny  # + self._detune_prev
+        ctx.rgb(0, 0.5, 0.5)
+        ctx.rotate(rot + self._rand_rot)
+        ctx.move_to(0, -10)
+        ctx.text("shoegazeshoegazeshoe")
+        ctx.move_to(0, 10)
+        ctx.text("gazeshoegazeshoegaze")
+        ctx.rotate(-2.2 * (rot + self._rand_rot) - 0.5)
+
+        ctx.move_to(40, 40)
         if self.delay_on:
-            ctx.rgb(0, 255, 0)
+            ctx.rgb(0, 0.8, 0)
             ctx.text("delay ON!")
         else:
-            ctx.rgb(255, 0, 0)
+            ctx.rgb(0, 0.6, 0)
             ctx.text("delay off")
 
+        ctx.rotate(0.2 + self._rand_rot)
+
         ctx.move_to(50, -50)
         detune = "detune: " + str(int(self._detune_prev * 100))
-        ctx.rgb(0, 255, 0)
-        ctx.text(detune).rotate(-10)
+        ctx.rgb(0, 0.8, 0)
+        ctx.text(detune)
+
+        ctx.rotate(-2.5 * (rot + 4 * self._rand_rot))
 
         ctx.move_to(-50, 50)
         if self.fuzz_on:
-            ctx.rgb(0, 255, 0)
+            ctx.rgb(0, 0.8, 0)
             ctx.text("fuzz ON!")
         else:
-            ctx.rgb(255, 0, 0)
+            ctx.rgb(0, 0.6, 0)
             ctx.text("fuzz off")
+
         ctx.restore()
 
     def think(self, ins: InputState, delta_ms: int) -> None:
diff --git a/python_payload/bl00mbox/_patches.py b/python_payload/bl00mbox/_patches.py
index 7fd2bb6ca3e0811fe2bddb297382c046a27c6b7e..bb85b1ca7e031f65fefea93c5901ba444a5a4771 100644
--- a/python_payload/bl00mbox/_patches.py
+++ b/python_payload/bl00mbox/_patches.py
@@ -281,30 +281,21 @@ class karplus_strong(_Patch):
     def __init__(self, chan):
         self.buds = _PatchBudList()
         self.signals = _PatchSignalList()
-        self.buds.noise = chan.new_bud(bl00mbox.plugins.noise)
+
+        self.buds.noise = chan.new_bud(bl00mbox.plugins.noise_burst)
+        self.buds.noise.signals.length = 25
+
         self.buds.flanger = chan.new_bud(bl00mbox.plugins.flanger)
-        self.buds.amp = chan.new_bud(bl00mbox.plugins.ampliverter)
-        self.buds.env = chan.new_bud(bl00mbox.plugins.env_adsr)
-        # self.buds.slew = chan.new_bud(bl00mbox.plugins.slew_rate_limiter)
 
         self.buds.flanger.signals.resonance = 32500
         self.buds.flanger.signals.manual.tone = "A2"
 
-        self.buds.env.signals.sustain = 0
-        self.buds.env.signals.decay = 20
-        self.buds.env.signals.attack = 5
+        self.buds.flanger.signals.input = self.buds.noise.signals.output
 
-        self.buds.amp.signals.output = self.buds.flanger.signals.input
-        self.buds.amp.signals.input = self.buds.noise.signals.output
-        # self.buds.amp.signals.input = self.buds.slew.signals.output
-        # self.buds.slew.signals.input = self.buds.noise.signals.output
-        # self.buds.slew.signals.slew_rate = 10000
-        self.buds.amp.signals.gain = self.buds.env.signals.output
-
-        self.signals.trigger = self.buds.env.signals.trigger
+        self.signals.trigger = self.buds.noise.signals.trigger
         self.signals.pitch = self.buds.flanger.signals.manual
         self.signals.output = self.buds.flanger.signals.output
-        # self.signals.slew_rate = self.buds.slew.signals.slew_rate
+
         self.signals.level = self.buds.flanger.signals.level
         self.decay = 1000