diff --git a/.env.dev b/.env.dev
index 7037b1dbd48279ab3316d919d61b1a6e284d90a6..5b686560067818991668b0947fca99fc585d9817 100644
--- a/.env.dev
+++ b/.env.dev
@@ -10,5 +10,4 @@ PYTHONDONTWRITEBYTECODE=true
 WEBPACK_DEVSERVER_PORT=8080
 MUSIC_DIRECTORY_PATH=/music
 BROWSABLE_API_ENABLED=True
-CACHEOPS_ENABLED=False
 FORWARDED_PROTO=http
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 8d579c96358149cbd502f0f9430486b2f62a8675..57e258e9387f3225ffbfd576e828d84fb048db71 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -143,7 +143,6 @@ test_api:
     DJANGO_ALLOWED_HOSTS: "localhost"
     DATABASE_URL: "postgresql://postgres@postgres/postgres"
     FUNKWHALE_URL: "https://funkwhale.ci"
-    CACHEOPS_ENABLED: "false"
     DJANGO_SETTINGS_MODULE: config.settings.local
   only:
     - branches
diff --git a/api/config/settings/common.py b/api/config/settings/common.py
index 03ce8a9c82fa0256b33eec5c677f9fdcb23148e1..4a68f80f28b5d2ddb86609ad3ffe1af55ebce8fd 100644
--- a/api/config/settings/common.py
+++ b/api/config/settings/common.py
@@ -92,7 +92,6 @@ THIRD_PARTY_APPS = (
     "rest_auth.registration",
     "dynamic_preferences",
     "django_filters",
-    "cacheops",
     "django_cleanup",
     "versatileimagefield",
 )
@@ -421,15 +420,6 @@ PROTECT_FILES_PATH = env("PROTECT_FILES_PATH", default="/_protected")
 # use this setting to tweak for how long you want to cache
 # musicbrainz results. (value is in seconds)
 MUSICBRAINZ_CACHE_DURATION = env.int("MUSICBRAINZ_CACHE_DURATION", default=300)
-CACHEOPS_REDIS = env("CACHE_URL", default=CACHE_DEFAULT)
-CACHEOPS_ENABLED = env.bool("CACHEOPS_ENABLED", default=True)
-CACHEOPS = {
-    "music.artist": {"ops": "all", "timeout": 60 * 60},
-    "music.album": {"ops": "all", "timeout": 60 * 60},
-    "music.track": {"ops": "all", "timeout": 60 * 60},
-    "music.trackfile": {"ops": "all", "timeout": 60 * 60},
-    "taggit.tag": {"ops": "all", "timeout": 60 * 60},
-}
 
 # Custom Admin URL, use {% url 'admin:index' %}
 ADMIN_URL = env("DJANGO_ADMIN_URL", default="^api/admin/")
diff --git a/api/config/settings/production.py b/api/config/settings/production.py
index 72b08aa3c867efa475efb3dd8b5f502eed775abb..26def9fd036c3077721862dbd505af6aabfb56d2 100644
--- a/api/config/settings/production.py
+++ b/api/config/settings/production.py
@@ -51,12 +51,6 @@ CSRF_TRUSTED_ORIGINS = ALLOWED_HOSTS
 
 # END SITE CONFIGURATION
 
-# STORAGE CONFIGURATION
-# ------------------------------------------------------------------------------
-# Uploaded Media Files
-# ------------------------
-DEFAULT_FILE_STORAGE = "django.core.files.storage.FileSystemStorage"
-
 # Static Assets
 # ------------------------
 STATICFILES_STORAGE = "django.contrib.staticfiles.storage.StaticFilesStorage"
diff --git a/api/funkwhale_api/music/management/commands/fix_track_files.py b/api/funkwhale_api/music/management/commands/fix_track_files.py
index 988f9bed36e605c9417021314482c132008680c4..c61972db873821ce66a96cbab604a37a714574f7 100644
--- a/api/funkwhale_api/music/management/commands/fix_track_files.py
+++ b/api/funkwhale_api/music/management/commands/fix_track_files.py
@@ -1,4 +1,3 @@
-import cacheops
 from django.core.management.base import BaseCommand
 from django.db import transaction
 from django.db.models import Q
@@ -24,7 +23,6 @@ class Command(BaseCommand):
         self.fix_mimetypes(**options)
         self.fix_file_data(**options)
         self.fix_file_size(**options)
-        cacheops.invalidate_model(models.TrackFile)
 
     @transaction.atomic
     def fix_mimetypes(self, dry_run, **kwargs):
diff --git a/api/funkwhale_api/playlists/serializers.py b/api/funkwhale_api/playlists/serializers.py
index 5bb31f63e95b272cdfffc91411f9c2d3cb308250..a60a349387020a2dd110c9f101fef0bdfce0510a 100644
--- a/api/funkwhale_api/playlists/serializers.py
+++ b/api/funkwhale_api/playlists/serializers.py
@@ -107,13 +107,6 @@ class PlaylistSerializer(serializers.ModelSerializer):
         covers = []
         max_covers = 5
         for plt in plts:
-            if not hasattr(plt.track.album.cover, "crop"):
-                # In some rare situations, we end up with the following stack strace:
-                # AttributeError: 'VersatileImageFieldFile' object has no attribute 'crop'
-                # I tend to thing our complex prefetch logic is troubling for versatile
-                # image field, so wi initialize the missing attribute by hand, cf
-                # https://github.com/respondcreate/django-versatileimagefield/blob/1.9/versatileimagefield/mixins.py#L108
-                plt.track.album.cover.build_filters_and_sizers((0.5, 0, 5), False)
             url = plt.track.album.cover.crop["200x200"].url
             if url in covers:
                 continue
diff --git a/api/requirements/base.txt b/api/requirements/base.txt
index ed179a89780fd70e26ed826a9b97fc92550ed91f..e4a85d99fae020cf9d64ede59500d3e96132cb20 100644
--- a/api/requirements/base.txt
+++ b/api/requirements/base.txt
@@ -58,7 +58,6 @@ python-magic==0.4.15
 ffmpeg-python==0.1.10
 channels>=2,<2.1
 channels_redis>=2.1,<2.2
-django-cacheops>=4,<4.1
 
 daphne==2.0.4
 cryptography>=2,<3
diff --git a/api/setup.cfg b/api/setup.cfg
index 18e34bc3543290d54135c6757f1a64ca6c560c5c..aa9a57abb82f0ce78ff2a927880daa9b49f212d1 100644
--- a/api/setup.cfg
+++ b/api/setup.cfg
@@ -18,5 +18,4 @@ env =
     EMAIL_CONFIG=consolemail://
     CELERY_BROKER_URL=memory://
     CELERY_TASK_ALWAYS_EAGER=True
-    CACHEOPS_ENABLED=False
     FEDERATION_HOSTNAME=test.federation
diff --git a/changes/changelog.d/cacheops.enhancement b/changes/changelog.d/cacheops.enhancement
new file mode 100644
index 0000000000000000000000000000000000000000..7d5ea65fd925c5aaa3e0433f2f166edc4f20e0de
--- /dev/null
+++ b/changes/changelog.d/cacheops.enhancement
@@ -0,0 +1,12 @@
+Removed django-cacheops dependency
+
+Removed Cacheops dependency
+---------------------------
+
+We removed one of our dependency named django-cacheops. It was unly used in a few places,
+and not playing nice with other dependencies.
+
+You can safely remove this dependency in your environment with ``pip uninstall django-cacheops`` if you're
+not using docker.
+
+You can also safely remove any ``CACHEOPS_ENABLED`` setting from your environment file.