diff --git a/Dockerfile b/Dockerfile
index 08b4f2b321dfd2eae3e6794ff3c80b6039e53f82..924036b49ab7ca3981a6c96efe5bbff433d9fef4 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -5,6 +5,8 @@ RUN apt-get update && apt-get install -y \
     libgl1-mesa-dev \
     # requirements for WeasyPrint
     python3-cffi \
+    # requirements for Wand (GIF image resizing)
+    libmagickwand-dev \
     && rm -rf /var/lib/apt/lists/*
 
 RUN mkdir /app
diff --git a/requirements/base.in b/requirements/base.in
index 1025394b07ab0b9ad3eee6eb0a09d7a96f2265b6..b9ccf0ee7b9bb0c17a4fc765280f77c4e5fedf83 100644
--- a/requirements/base.in
+++ b/requirements/base.in
@@ -15,7 +15,6 @@ opencv-python
 requests
 icalevents
 ics
-instaloader
 arrow
 sentry-sdk
 Markdown
@@ -29,3 +28,4 @@ pyyaml
 fastjsonschema
 tweepy
 requests-cache
+wand
diff --git a/requirements/base.txt b/requirements/base.txt
index 7cd64da687589c51cdd34b5e9fbd89f49e62ed25..f6535dabfaa23ac9d7377ccc37e759af884192c4 100644
--- a/requirements/base.txt
+++ b/requirements/base.txt
@@ -1,57 +1,53 @@
 #
-# This file is autogenerated by pip-compile with Python 3.10
+# This file is autogenerated by pip-compile with Python 3.11
 # by the following command:
 #
 #    pip-compile base.in
 #
-amqp==5.1.1
+amqp==5.2.0
     # via kombu
 anyascii==0.3.2
     # via wagtail
-appnope==0.1.3
-    # via ipython
-arrow==1.2.3
+arrow==1.3.0
     # via
     #   -r base.in
     #   ics
 asgiref==3.7.2
     # via django
-asttokens==2.2.1
+asttokens==2.4.1
     # via stack-data
-async-timeout==4.0.2
+async-timeout==4.0.3
     # via redis
-attrs==23.1.0
+attrs==23.2.0
     # via
     #   cattrs
     #   ics
     #   requests-cache
-backcall==0.2.0
-    # via ipython
 beautifulsoup4==4.11.2
     # via
     #   -r base.in
     #   wagtail
-billiard==4.1.0
+billiard==4.2.0
     # via celery
-bleach==6.0.0
+bleach==6.1.0
     # via -r base.in
-brotli==1.0.9
+brotli==1.1.0
     # via fonttools
-cattrs==23.1.2
+cattrs==23.2.3
     # via requests-cache
-celery==5.3.1
+celery==5.3.6
     # via -r base.in
-certifi==2023.5.7
+certifi==2023.11.17
     # via
     #   requests
     #   sentry-sdk
-cffi==1.15.1
+cffi==1.16.0
     # via
     #   cryptography
     #   weasyprint
-charset-normalizer==3.2.0
+charset-normalizer==3.3.2
     # via requests
-click==8.1.4
+click==8.1.7
     # via
     #   celery
     #   click-didyoumean
@@ -63,7 +59,7 @@ click-plugins==1.1.1
     # via celery
 click-repl==0.3.0
     # via celery
-cryptography==41.0.2
+cryptography==41.0.7
     # via
     #   josepy
     #   mozilla-django-oidc
@@ -74,7 +70,7 @@ datetime==4.9
     # via icalevents
 decorator==5.1.1
     # via ipython
-django==4.1.10
+django==4.1.13
     # via
     #   -r base.in
     #   django-extensions
@@ -102,17 +98,17 @@ django-permissionedforms==0.1
     # via wagtail
 django-ranged-response==0.2.0
     # via django-simple-captcha
-django-redis==5.3.0
+django-redis==5.4.0
     # via -r base.in
 django-settings-export==1.2.1
     # via -r base.in
-django-simple-captcha==0.5.18
+django-simple-captcha==0.5.20
     # via -r base.in
 django-taggit==3.1.0
     # via wagtail
 django-treebeard==4.7
     # via wagtail
-django-widget-tweaks==1.4.12
+django-widget-tweaks==1.5.0
     # via -r base.in
 djangorestframework==3.14.0
     # via wagtail
@@ -120,13 +116,11 @@ draftjs-exporter==2.1.7
     # via wagtail
 et-xmlfile==1.1.0
     # via openpyxl
-exceptiongroup==1.1.2
-    # via cattrs
-executing==1.2.0
+executing==2.0.1
     # via stack-data
-fastjsonschema==2.17.1
+fastjsonschema==2.19.1
     # via -r base.in
-fonttools[woff]==4.40.0
+fonttools[woff]==4.47.2
     # via weasyprint
 html5lib==1.1
     # via
@@ -140,56 +134,52 @@ icalevents==0.1.27
     # via -r base.in
 ics==0.7.2
     # via -r base.in
-idna==3.4
+idna==3.6
     # via requests
-instaloader==4.10
+ipython==8.20.0
     # via -r base.in
-ipython==8.14.0
-    # via -r base.in
-jedi==0.18.2
+jedi==0.19.1
     # via ipython
-josepy==1.13.0
+josepy==1.14.0
     # via mozilla-django-oidc
-kombu==5.3.1
+kombu==5.3.5
     # via celery
 l18n==2021.3
     # via wagtail
-markdown==3.4.3
+markdown==3.5.2
     # via -r base.in
 matplotlib-inline==0.1.6
     # via ipython
-mozilla-django-oidc==2.0.0
+mozilla-django-oidc==3.0.0
     # via pirates
-numpy==1.25.1
+numpy==1.26.3
     # via opencv-python
 oauthlib==3.2.2
     # via
     #   requests-oauthlib
     #   tweepy
-opencv-python==4.8.0.74
+opencv-python==4.9.0.80
     # via -r base.in
 openpyxl==3.1.2
     # via wagtail
 parso==0.8.3
     # via jedi
-pexpect==4.8.0
-    # via ipython
-pickleshare==0.7.5
+pexpect==4.9.0
     # via ipython
 pillow==9.5.0
     # via
     #   django-simple-captcha
     #   wagtail
     #   weasyprint
-pirates==0.6.0
+pirates==0.7.0
     # via -r base.in
-platformdirs==3.8.1
+platformdirs==4.1.0
     # via requests-cache
-prompt-toolkit==3.0.39
+prompt-toolkit==3.0.43
     # via
     #   click-repl
     #   ipython
-psycopg2-binary==2.9.6
+psycopg2-binary==2.9.9
     # via -r base.in
 ptyprocess==0.7.0
     # via pexpect
@@ -197,13 +187,13 @@ pure-eval==0.2.2
     # via stack-data
 pycparser==2.21
     # via cffi
-pydyf==0.7.0
+pydyf==0.8.0
     # via weasyprint
-pygments==2.15.1
+pygments==2.17.2
     # via ipython
-pyopenssl==23.2.0
+pyopenssl==23.3.0
     # via josepy
-pyparsing==3.1.0
+pyparsing==3.1.1
     # via httplib2
 pypdf2==3.0.1
     # via -r base.in
@@ -224,24 +214,23 @@ pytz==2021.3
     #   icalendar
     #   icalevents
     #   l18n
-pyyaml==6.0
+pyyaml==6.0.1
     # via -r base.in
-redis==4.6.0
+redis==5.0.1
     # via django-redis
 requests==2.31.0
     # via
     #   -r base.in
-    #   instaloader
     #   mozilla-django-oidc
     #   requests-cache
     #   requests-oauthlib
     #   tweepy
     #   wagtail
-requests-cache==1.1.0
+requests-cache==1.1.1
     # via -r base.in
 requests-oauthlib==1.3.1
     # via tweepy
-sentry-sdk==1.28.0
+sentry-sdk==1.39.2
     # via -r base.in
 six==1.16.0
     # via
@@ -252,13 +241,13 @@ six==1.16.0
     #   l18n
     #   python-dateutil
     #   url-normalize
-soupsieve==2.4.1
+soupsieve==2.5
     # via beautifulsoup4
 sqlparse==0.4.4
     # via django
-stack-data==0.6.2
+stack-data==0.6.3
     # via ipython
-tatsu==5.8.3
+tatsu==5.11.3
     # via ics
 telepath==0.3.1
     # via wagtail
@@ -266,26 +255,24 @@ tinycss2==1.2.1
     # via
     #   cssselect2
     #   weasyprint
-traitlets==5.9.0
+traitlets==5.14.1
     # via
     #   ipython
     #   matplotlib-inline
 tweepy==4.14.0
     # via -r base.in
-typing-extensions==4.7.1
-    # via
-    #   asgiref
-    #   cattrs
-tzdata==2023.3
+types-python-dateutil==2.8.19.20240106
+    # via arrow
+tzdata==2023.4
     # via celery
 url-normalize==1.4.3
     # via requests-cache
-urllib3==2.0.3
+urllib3==2.1.0
     # via
     #   requests
     #   requests-cache
     #   sentry-sdk
-vine==5.0.0
+vine==5.1.0
     # via
     #   amqp
     #   celery
@@ -297,11 +284,13 @@ wagtail==4.2.4
     #   wagtail-trash
 wagtail-metadata==4.0.3
     # via -r base.in
-wagtail-trash==1.0.1
+wagtail-trash==2.0.0
+    # via -r base.in
+wand==0.6.13
     # via -r base.in
-wcwidth==0.2.6
+wcwidth==0.2.13
     # via prompt-toolkit
-weasyprint==59.0
+weasyprint==60.2
     # via -r base.in
 webencodings==0.5.1
     # via
@@ -309,13 +298,13 @@ webencodings==0.5.1
     #   cssselect2
     #   html5lib
     #   tinycss2
-whitenoise==6.5.0
+whitenoise==6.6.0
     # via -r base.in
 willow==1.4.1
     # via wagtail
-zope-interface==6.0
+zope-interface==6.1
     # via datetime
-zopfli==0.2.2
+zopfli==0.2.3
     # via fonttools
 
 # The following packages are considered to be unsafe in a requirements file:
diff --git a/requirements/dev.txt b/requirements/dev.txt
index bc904efd9d351aecc3d3fd8a1f0503b53af4aa7b..5678bf979b964ee07e8802c27e659ce862b09101 100644
--- a/requirements/dev.txt
+++ b/requirements/dev.txt
@@ -1,40 +1,38 @@
 #
-# This file is autogenerated by pip-compile with Python 3.10
+# This file is autogenerated by pip-compile with Python 3.11
 # by the following command:
 #
 #    pip-compile dev.in
 #
 asgiref==3.7.2
     # via django
-coverage[toml]==7.2.7
+coverage[toml]==7.4.0
     # via pytest-cov
-django==4.1.10
+django==4.1.13
     # via
     #   -r dev.in
     #   django-debug-toolbar
-django-debug-toolbar==4.1.0
+django-debug-toolbar==4.2.0
     # via -r dev.in
-exceptiongroup==1.1.2
-    # via pytest
-factory-boy==3.2.1
+factory-boy==3.3.0
     # via pytest-factoryboy
-faker==18.13.0
+faker==22.2.0
     # via factory-boy
 fastdiff==0.3.0
     # via snapshottest
-freezegun==1.2.2
+freezegun==1.4.0
     # via pytest-freezegun
 inflection==0.5.1
     # via pytest-factoryboy
 iniconfig==2.0.0
     # via pytest
-packaging==23.1
+packaging==23.2
     # via
     #   pytest
     #   pytest-sugar
-pluggy==1.2.0
+pluggy==1.3.0
     # via pytest
-pytest==7.4.0
+pytest==7.4.4
     # via
     #   -r dev.in
     #   pytest-cov
@@ -45,13 +43,13 @@ pytest==7.4.0
     #   pytest-sugar
 pytest-cov==4.1.0
     # via -r dev.in
-pytest-django==4.5.2
+pytest-django==4.7.0
     # via -r dev.in
-pytest-factoryboy==2.5.1
+pytest-factoryboy==2.6.0
     # via -r dev.in
 pytest-freezegun==0.4.2
     # via -r dev.in
-pytest-mock==3.11.1
+pytest-mock==3.12.0
     # via -r dev.in
 pytest-sugar==0.9.7
     # via -r dev.in
@@ -69,18 +67,12 @@ sqlparse==0.4.4
     # via
     #   django
     #   django-debug-toolbar
-termcolor==2.3.0
+termcolor==2.4.0
     # via
     #   pytest-sugar
     #   snapshottest
-tomli==2.0.1
-    # via
-    #   coverage
-    #   pytest
-typing-extensions==4.7.1
-    # via
-    #   asgiref
-    #   pytest-factoryboy
+typing-extensions==4.9.0
+    # via pytest-factoryboy
 wasmer==1.1.0
     # via fastdiff
 wasmer-compiler-cranelift==1.1.0
diff --git a/requirements/production.txt b/requirements/production.txt
index 4f1ff713e8bdd33fadf6ca9bece8acbfc4575046..74278924de31427cd843cb614e39cdeb8a461afd 100644
--- a/requirements/production.txt
+++ b/requirements/production.txt
@@ -1,11 +1,10 @@
 #
-# This file is autogenerated by pip-compile with Python 3.10
+# This file is autogenerated by pip-compile with Python 3.11
 # by the following command:
 #
 #    pip-compile production.in
 #
-gunicorn==20.1.0
+gunicorn==21.2.0
     # via -r production.in
-
-# The following packages are considered to be unsafe in a requirements file:
-# setuptools
+packaging==23.2
+    # via gunicorn