diff --git a/api/demo/load-demo-data.sh b/api/demo/load-demo-data.sh
index c09c5075e8b1bdd19b9260d96439704b74f6b2da..fab0de8b3318966d06e0cca5e88acd90cd2b1178 100755
--- a/api/demo/load-demo-data.sh
+++ b/api/demo/load-demo-data.sh
@@ -6,8 +6,8 @@ python manage.py migrate --noinput
 
 echo "Creating demo user..."
 
-cat demo/demo-user.py | python manage.py shell --plain
+cat demo/demo-user.py | python manage.py shell -i python
 
 echo "Importing demo tracks..."
 
-python manage.py import_files "/music/**/*.ogg" --recursive --noinput
+python manage.py import_files "/music/**/*.ogg" --recursive --noinput --username demo
diff --git a/demo/setup.sh b/demo/setup.sh
new file mode 100644
index 0000000000000000000000000000000000000000..599ca33baa3bf97f70498fb93f245c19fa720ba4
--- /dev/null
+++ b/demo/setup.sh
@@ -0,0 +1,29 @@
+#!/bin/bash -eux
+version="develop"
+music_path="/usr/share/music"
+demo_path="/srv/funkwhale-demo/demo"
+
+echo 'Cleaning everything...'
+docker-compose down -v || echo 'Nothing to stop'
+rm -rf /srv/funkwhale-demo/demo*
+mkdir -p $demo_path
+cd $demo_path
+echo 'Downloading demo files...'
+curl -L -o docker-compose.yml "https://code.eliotberriot.com/funkwhale/funkwhale/raw/$version/deploy/docker-compose.yml"
+curl -L -o .env "https://code.eliotberriot.com/funkwhale/funkwhale/raw/$version/deploy/env.prod.sample"
+
+mkdir data/
+cp -r $music_path data/music
+
+curl -L -o front.zip "https://code.eliotberriot.com/funkwhale/funkwhale/-/jobs/artifacts/$version/download?job=build_front"
+unzip front.zip
+
+echo "FUNKWHALE_URL=https://demo.funkwhale.audio/" >> .env
+echo "DJANGO_SECRET_KEY=demo" >> .env
+echo "DJANGO_ALLOWED_HOSTS=demo.funkwhale.audio" >> .env
+echo "FUNKWHALE_VERSION=$version" >> .env
+echo "FUNKWHALE_API_PORT=5001" >> .env
+
+docker-compose pull
+docker-compose run --rm api "sleep 5; demo/load-demo-data.sh"
+docker-compose up -d