diff --git a/src/UI/DocumentViews/AudioVisualizer.cc b/src/UI/DocumentViews/AudioVisualizer.cc
index 3a24341575ad12804254e2181ece722297017d20..e34843b825f2b27cda75351bcf59778beb79fcb7 100644
--- a/src/UI/DocumentViews/AudioVisualizer.cc
+++ b/src/UI/DocumentViews/AudioVisualizer.cc
@@ -81,4 +81,6 @@ AudioVisualizer::printSpectrum(QImage pixmap, AudioContext::StreamPtr stream) no
 
     connect(params->getZoomSlider(), &QSlider::valueChanged, timingScene->getAxis(),
             &TimingAxis::refreshTicks);
+    connect(params->getRebuildSceneButton(), &QPushButton::released, timingScene,
+            &TimingScene::rebuildScene);
 }
diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingAxis.cc b/src/UI/DocumentViews/AudioVisualizer/TimingAxis.cc
index 94b1c7f1abe7440b615f0383531337a0a04e7ab0..248dd011eddb570a8e93cbe6a4c04fea4d093c65 100644
--- a/src/UI/DocumentViews/AudioVisualizer/TimingAxis.cc
+++ b/src/UI/DocumentViews/AudioVisualizer/TimingAxis.cc
@@ -30,7 +30,7 @@ TimingAxis::TimingAxis(AudioContext::StreamPtr stream, int height_, int width_)
 QRectF
 TimingAxis::boundingRect() const
 {
-    return QRectF(0, penWidth, width + 2*penWidth, -height - penWidth);
+    return QRectF(0, penWidth, width + 2 * penWidth, -height - penWidth);
 }
 
 /*
@@ -40,10 +40,10 @@ TimingAxis::boundingRect() const
 void
 TimingAxis::refreshTicks()
 {
-    int nbAvailableTicks        = availableTicks.size();
-    int minorTicksIndex         = 0;
+    int nbAvailableTicks = availableTicks.size();
+    int minorTicksIndex  = 0;
     int length{ int(audioStream->getLength()) };
-    if (width != 0 && length != 0){
+    if (width != 0 && length != 0) {
         for (minorTicksIndex = 0; minorTicksIndex < nbAvailableTicks; minorTicksIndex++) {
             if (width * availableTicks[minorTicksIndex] / length >= minBetweenMinor) {
                 break;
diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingParams.cc b/src/UI/DocumentViews/AudioVisualizer/TimingParams.cc
index c50397b15314843d02847c14463b73580b5c883c..83baf547a6ee6dab30d83d27835d7496a1a09ba8 100644
--- a/src/UI/DocumentViews/AudioVisualizer/TimingParams.cc
+++ b/src/UI/DocumentViews/AudioVisualizer/TimingParams.cc
@@ -5,7 +5,9 @@ using namespace Vivy;
 TimingParams::TimingParams(QWidget *parent) noexcept
     : QWidget(parent)
 {
-    QHBoxLayout *layout = new QHBoxLayout;
+    QVBoxLayout *vlayout = new QVBoxLayout;
+    QHBoxLayout *hlayout = new QHBoxLayout;
+    vlayout->addLayout(hlayout);
 
     zoomSlider = std::make_unique<QSlider>(new QSlider(Qt::Vertical));
     if (QSlider *slider = zoomSlider.get()) {
@@ -14,7 +16,7 @@ TimingParams::TimingParams(QWidget *parent) noexcept
         slider->setSingleStep(0);
         slider->setPageStep(0);
         slider->setValue(0);
-        layout->addWidget(slider);
+        hlayout->addWidget(slider);
     }
     sensibilitySlider = std::make_unique<QSlider>(new QSlider(Qt::Vertical));
     if (QSlider *slider = sensibilitySlider.get()) {
@@ -23,10 +25,15 @@ TimingParams::TimingParams(QWidget *parent) noexcept
         slider->setSingleStep(0);
         slider->setPageStep(0);
         slider->setValue(0);
-        layout->addWidget(slider);
+        hlayout->addWidget(slider);
     }
 
-    setLayout(layout);
+    rebuildSceneButton = std::make_unique<QPushButton>(new QPushButton(QString("Rebuild scene")));
+    if (QPushButton *button = rebuildSceneButton.get()) {
+        vlayout->addWidget(button);
+    }
+
+    setLayout(vlayout);
 }
 
 QSlider *
@@ -40,3 +47,9 @@ TimingParams::getSensibilitySlider() const noexcept
 {
     return sensibilitySlider.get();
 }
+
+QPushButton *
+TimingParams::getRebuildSceneButton() const noexcept
+{
+    return rebuildSceneButton.get();
+}
diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingParams.hh b/src/UI/DocumentViews/AudioVisualizer/TimingParams.hh
index 5b9e8c388b05a2c9d6357de0a666ea5db340f535..09d56ce2339686a97ed499247207f35ad0ea64b4 100644
--- a/src/UI/DocumentViews/AudioVisualizer/TimingParams.hh
+++ b/src/UI/DocumentViews/AudioVisualizer/TimingParams.hh
@@ -10,6 +10,7 @@
 #include <QWidget>
 #include <QSlider>
 #include <QLayout>
+#include <QPushButton>
 
 namespace Vivy
 {
@@ -22,10 +23,12 @@ public:
 private:
     std::unique_ptr<QSlider> zoomSlider;
     std::unique_ptr<QSlider> sensibilitySlider;
+    std::unique_ptr<QPushButton> rebuildSceneButton;
 
 public:
     QSlider *getZoomSlider() const noexcept;
     QSlider *getSensibilitySlider() const noexcept;
+    QPushButton *getRebuildSceneButton() const noexcept;
 };
 
 }
diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc b/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc
index 230827e017d68c6d8861f4c1ed7a103251f494f2..a99fd4b02fef2cd6938828e5147966249b98f488 100644
--- a/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc
+++ b/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc
@@ -30,14 +30,33 @@ TimingScene::TimingScene(QImage img_, AudioContext::StreamPtr stream, QWidget *p
     , img(img_)
     , audioStream(stream)
 {
-    int timingAxisHeight = 30;
+    rebuildScene();
+}
+
+void
+TimingScene::updateScene(QImage img_, AudioContext::StreamPtr stream_)
+{
+    img         = img_;
+    audioStream = stream_;
+    rebuildScene();
+}
+
+void
+TimingScene::rebuildScene()
+{
+    for (auto &item : items()) {
+        removeItem(item);
+        delete (item);
+    }
 
     // We put a common origin for the items at the bottom of the axis
+    int timingAxisHeight = 30;
+
     QPixmap pixmap(QPixmap::fromImage(img));
     backgroundImg = addPixmap(pixmap);
     backgroundImg->setPos(0, timingAxisHeight);
 
-    ax = new TimingAxis(stream, timingAxisHeight, pixmap.width());
+    ax = new TimingAxis(audioStream, timingAxisHeight, pixmap.width());
     addItem(ax);
     ax->setPos(0, timingAxisHeight);
 
diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingScene.hh b/src/UI/DocumentViews/AudioVisualizer/TimingScene.hh
index 306a76558dc0e95791ed30d5aad07643de84e780..87779e0cf6f3ab9cf8f500284451f5d8fc649411 100644
--- a/src/UI/DocumentViews/AudioVisualizer/TimingScene.hh
+++ b/src/UI/DocumentViews/AudioVisualizer/TimingScene.hh
@@ -28,7 +28,7 @@ private:
     AudioContext::StreamPtr audioStream;
     Ass::LineWeakPtr currentLine{};
     TimingMode timingMode{ TimingMode::Line };
-    TimingAxis *ax;
+    TimingAxis *ax{ nullptr };
 
 public:
     QGraphicsPixmapItem *bg() noexcept;
@@ -46,6 +46,8 @@ private:
     inline int posFromTime(int t) const noexcept;
 
 public slots:
+    void updateScene(QImage, AudioContext::StreamPtr);
+    void rebuildScene();
 };
 
 }