How-To: Mastodon-Filter zu neuen Node umziehen
Da Mastodon-Filter nicht im regulären Archiv-Download enthalten sind und Mastodon keinen Import-Button für Filter besitzt, ist der Weg über die API (Schnittstelle) mit einem kleinen Python-Skript die beste Lösung.
Voraussetzungen: Du benötigst Python auf deinem Rechner und die installierte Bibliothek requests (Installation im Terminal via pip install requests). Ferner wird noch curl benötigt.
Schritt 1: Filter aus Mastodon exportieren
- Gehe in Mastodon auf alter Instanz auf Einstellungen > Entwicklung > Neue Anwendung.
- Vergib einen Namen, setze bei den Scopes (Berechtigungen) nur den Haken bei
read:filtersund speichere. - Kopiere den generierten Zugriffstoken.
- Öffne dein Terminal und führe folgenden Befehl aus (ersetze
TOKENundURL):curl -H "Authorization: Bearer DEIN_TOKEN" https://deine-alte-mastodon-instanz.tld/api/v2/filters > meine_filter.json
Ergebnis: Du hast nun eine Datei meine_filter.json.
Schritt 2: Token auf neuer Instanz für den Import erstellen
- Gehe auf deiner neuen Instanz auf Einstellungen > Entwicklung > Neue Anwendung.
- Vergib auch hier einen Namen, setze bei den Scopes (Berechtigungen) den Haken bei
read:filterssowiewrite:filtersund speichere. - Kopiere und speichere den generierten Zugriffstoken. Den brauchen wir für das Python Script.
Schritt 3: Das Python-Skript für den Import erstellen
Leider ist das Format von Export und Import der Filterdaten bei Mastodon nicht identisch. Daher muss die importierte Datei über ein Python-Script vorbereitet werden. Dieses Script übernimmt auch den Import zur neuen Instanz. Am besten im gleichen Ordner erstellen wo auch die exportierten Daten der Quellinstanz liegen.
import json
import requests
# === DEINE KONFIGURATION ===
MASTODON_URL = "https://deine-gts-instanz.tld" # Ohne / am Ende!
ACCESS_TOKEN = "Dein-generierter-Access-Token-hier-rein"
EXPORT_FILE = "meine_filter.json"
# ===========================
headers = {
"Authorization": f"Bearer {ACCESS_TOKEN}",
"Content-Type": "application/json"
}
def import_filters():
with open(EXPORT_FILE, "r", encoding="utf-8") as f:
mastodon_filters = json.load(f)
for filter_data in mastodon_filters:
title = filter_data.get('title', 'Unbenannter Filter')
print(f"Importiere: '{title}'...")
payload = {
"title": title,
"context": filter_data.get("context", ["home", "notifications", "public", "thread"]),
"filter_action": filter_data.get("filter_action", "hide"),
"keywords_attributes": [
{"keyword": kw.get("keyword"), "whole_word": kw.get("whole_word", True)}
for kw in filter_data.get("keywords", [])
]
}
response = requests.post(f"{MASTODON_URL}/api/v2/filters", headers=headers, json=payload)
if response.status_code in [200, 201]:
print(" -> Erfolgreich angelegt!")
else:
print(f" -> FEHLER ({response.status_code}): {response.text}")
if __name__ == "__main__":
import_filters()
Trage die URL der neuen Mastodon-Instanz und das Token der neuen Instanz in der Datei oben ein. Führe das Skript aus (python import_filters.py). Die Filter werden nun live in auf der neuen Mastodon Instanz übertragen.
🚨 Typische Fehler und Lösungen
- Fehler 401 (
Unauthorized) bei Schritt 3: Du hast entweder den falschen Token kopiert, oder bei der App-Erstellung vergessen, die Scope-Rechte aufwritezu setzen.