diff --git a/README.md b/README.md
index e69de29..2f0b742 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1,117 @@
+# Move PeerTube video storage to Hetzner S3 (Cloudron setup, CORS fix)
+Hi everyone,
+after a few failed attempts with other S3 providers like **iDrive** and **Backblaze**,
+I tried **Hetzner Object Storage (S3)** — where we also host our Cloudron servers.
+Here’s my working setup and migration process — maybe it helps someone.
+Everything works great: I’ve successfully moved **~240 GB** of videos, all without issues.
+
+This guide shows how to move PeerTube video storage to **Hetzner Object Storage (S3-compatible)** on a **Cloudron instance**. Tested with PeerTube 7.3.0 and Cloudron v8.3.2 (Ubuntu 24.04.1 LTS)
+
+
+
+## 1️⃣ Create your S3 bucket(s)
+- Region: **fsn1 (Falkenstein)**
+- Visibility: **Public (read)**
+- Block Public Access: **off**
+Example buckets:
+- `peertube-1`
+- `peertube-2` (optional, for another instance)
+
+## 2️⃣ Set CORS configuration
+Create a file called `example-cors.xml`:
+```json
+
+
+ *
+ GET
+ HEAD
+ *
+
+
+```
+Apply it to your bucket(s):
+```json
+s3cmd --config=/dev/null --no-check-certificate \
+ --access_key=YOUR_ACCESS_KEY \
+ --secret_key=YOUR_SECRET_KEY \
+ --host=fsn1.your-objectstorage.com \
+ --host-bucket="%(bucket)s.fsn1.your-objectstorage.com" \
+ setcors example-cors.xml s3://peertube-1
+```
+Check it:
+```json
+s3cmd --config=/dev/null --no-check-certificate \
+ --access_key=YOUR_ACCESS_KEY \
+ --secret_key=YOUR_SECRET_KEY \
+ --host=fsn1.your-objectstorage.com \
+ --host-bucket="%(bucket)s.fsn1.your-objectstorage.com" \
+ info s3://peertube-1 | grep CORS -A1
+```
+You should see:
+```json
+CORS: *...
+```
+## 3️⃣ Edit PeerTube configuration
+Open `/app/data/production.yaml` (Cloudron path) and add or modify this block:
+```yaml
+object_storage:
+ enabled: true
+ endpoint: 'https://fsn1.your-objectstorage.com'
+ region: 'eu-central'
+ credentials:
+ access_key_id: 'YOUR_ACCESS_KEY'
+ secret_access_key: 'YOUR_SECRET_KEY'
+ videos:
+ bucket_name: 'peertube-1'
+ prefix: 'videos/'
+ base_url: 'https://peertube-1.fsn1.your-objectstorage.com'
+ upload_acl: 'public-read'
+ streaming_playlists:
+ bucket_name: 'peertube-1'
+ prefix: 'hls/'
+ base_url: 'https://peertube-1.fsn1.your-objectstorage.com'
+ upload_acl: 'public-read'
+ previews:
+ bucket_name: 'peertube-1'
+ prefix: 'previews/'
+ base_url: 'https://peertube-1.fsn1.your-objectstorage.com'
+ upload_acl: 'public-read'
+ thumbnails:
+ bucket_name: 'peertube-1'
+ prefix: 'thumbnails/'
+ base_url: 'https://peertube-1.fsn1.your-objectstorage.com'
+ upload_acl: 'public-read'
+ captions:
+ bucket_name: 'peertube-1'
+ prefix: 'captions/'
+ base_url: 'https://peertube-1.fsn1.your-objectstorage.com'
+ upload_acl: 'public-read'
+```
+Save and restart PeerTube from the Cloudron dashboard.
+
+## 4️⃣ Move videos to S3
+From the Cloudron Web Terminal:
+```bash
+cd /app/code/server
+```
+```
+gosu cloudron:cloudron npm run create-move-video-storage-job -- --to-object-storage
+```
+This creates jobs that migrate all videos to your S3 bucket. Progress can be monitored in Cloudron → App → Logs.
+
+## 5️⃣ Verify
+Check the directory size before/after:
+
+```bash
+du -sh /app/data/storage
+du -sh /app/data/storage/* | sort -h
+```
+When migration finishes, most data (videos, HLS, previews) should move to S3. Local disk usage should drop to a few GB.
+
+
+
+**Tested setup**
+- PeerTube 7.3.0
+- Cloudron v8.3.2
+- Hetzner Object Storage (fsn1)
+