1. Erste Schritte

AniRena ist ein Torrent-Index mit Fokus auf Anime, Manga, Audio und verwandte Medien. Sie können Torrents ohne Konto durchsuchen und herunterladen. Ein Konto ist erforderlich, um Torrents hochzuladen, in Gruppen zu posten oder die API zu nutzen.

Die Navigationsleiste oben bietet Zugriff auf die Hauptbereiche der Website:

  • Startseite — die Torrent-Auflistung und Suchseite.
  • Hochladen — neuen Torrent einreichen (Login erforderlich).
  • Anleitung — diese Seite.
  • Statistiken — websiteweite Statistiken (Torrents, Peers, Uploads über Zeit).
  • Gruppen — Verzeichnis der Release-Gruppen.
  • RSS — RSS-Feed der neuesten Uploads, nach Kategorie filterbar.

Ihr Kontomenü (rechts oben wenn eingeloggt) öffnet ein Profilpanel, wo Sie Einstellungen anpassen, Sicherheitsoptionen verwalten und auf Ihren API-Schlüssel zugreifen können.

2. Browsen & Suchen

Die Startseite listet alle Torrents nach Upload-Datum auf. Verwenden Sie die Suchleiste oben, um Ergebnisse zu filtern.

Einfache Suche

Geben Sie Wörter in die Suchleiste ein und drücken Sie Enter (oder klicken Sie auf das Suchsymbol). Ergebnisse werden nach Relevanz sortiert, wenn eine Suchanfrage aktiv ist.

Suchoperatoren

Die folgenden Operatoren können mit einer regulären Suchanfrage kombiniert werden:

OperatorBeispielEffekt
user:"name"user:"SubsPlease"Nur Torrents dieses Uploaders anzeigen.

Das Klicken auf einen Uploader-Namen in der Torrent-Liste führt automatisch eine Benutzersuche durch.

Kategorien & Unterkategorien

Verwenden Sie den Kategorie-Selektor (das Raster-Symbol neben der Suchleiste), um Ergebnisse auf eine Kategorie zu beschränken. Verfügbare Kategorien:

  • Anime
  • Manga/Manhwa/Comic
  • Audio
  • Literatur
  • Live-Action
  • Bilder
  • Software
  • Hentai
  • Sonstige

Jede Kategorie hat Unterkategorien (z. B. Anime zu RAW, Sub/Audio, Musikvideo), die im Kategorie-Modal auswählbar sind.

Sortieren & Filtern

Die Spaltenüberschriften in der Torrent-Liste sind klickbar, um nach dieser Spalte zu sortieren (aufsteigend oder absteigend). Verfügbare Sortierspalten: Datum, Name, Größe, abgeschlossene Downloads. Hinweis: Seeder und Leecher sind Echtzeitwerte aus Redis und können nicht zum Sortieren verwendet werden.

Sprachfilter

Verwenden Sie den Sprach-Selektor (Flaggensymbol), um nur Torrents mit einer bestimmten Sprache anzuzeigen.

RSS-Feed

Der RSS-Feed unter /rss liefert die neuesten Uploads. Fügen Sie ?category=anime (oder einen anderen Kategorie-Slug) hinzu, um den Feed zu filtern. Die meisten Torrent-Clients unterstützen RSS-Auto-Download direkt von dieser URL.

3. Torrents herunterladen

Klicken Sie auf einen Torrent-Namen, um das Detailpanel zu öffnen. Von dort aus können Sie:

  • .torrent herunterladen — speichert die .torrent-Datei direkt. Die direkte URL ist /torrents/{id}.torrent
  • Magnet-Link — öffnet direkt in Ihrem Torrent-Client über das Magnet-URI-Protokoll. Die URL ist /torrents/{id}/magnet

Das Detailpanel zeigt auch die Torrent-Beschreibung, Dateiliste, Tracker-Liste sowie Seeder/Leecher-Zahlen.

Legacy-Download-Links

Alte AniRena-Download-Links werden weiterhin unterstützt und leiten automatisch zur richtigen .torrent-Datei über die Legacy-ID weiter: /dl/{old_id}

Empfohlene BitTorrent-Clients

Jeder moderne BitTorrent-Client funktioniert. Die folgenden Clients werden empfohlen und unterstützen BitTorrent v2 / Hybrid-Torrents vollständig:

qBittorrent Klicken Sie auf der Download-Seite auf Weitere Download-Optionen und wählen Sie den Build mit der Bezeichnung lt20 (libtorrent 2.0). Das Standard-Installationsprogramm verwendet libtorrent 1.2, das keine reinen v2-Torrents unterstützt.v2 unterstützt
PicoTorrent Schlanker Windows-Client mit nativer BitTorrent v2-Unterstützung ab Werk.v2 unterstützt
BiglyBT Funktionsreicher plattformübergreifender Client auf Basis von Azureus/Vuze mit voller v2-Unterstützung.v2 unterstützt

4. Konto erstellen

Registrierung

Klicken Sie in der Navigationsleiste auf Registrieren. Wählen Sie einen Benutzernamen, geben Sie eine E-Mail-Adresse an und setzen Sie ein Passwort (Mindestlänge erzwungen). Sie müssen die Website-Nutzungsbedingungen lesen und akzeptieren.

E-Mail-Aktivierung

Nach der Registrierung wird eine Bestätigungs-E-Mail an Ihre Adresse gesendet. Klicken Sie auf den Link in der E-Mail, um Ihr Konto zu aktivieren. Wenn Sie sie nicht erhalten haben, nutzen Sie den Link „Ihr Konto aktivieren" auf der Login-Seite.

Passwort-Wiederherstellung

Wenn Sie Ihr Passwort vergessen haben, klicken Sie auf Passwort vergessen auf der Anmeldeseite und geben Sie Ihre E-Mail-Adresse ein. Ein Wiederherstellungslink wird Ihnen zugesandt. Der Link ist einmalig verwendbar und läuft nach kurzer Zeit ab.

5. Torrents hochladen

Navigieren Sie zu Hochladen in der Navigationsleiste. Sie müssen mit einem aktiven, nicht gesperrten Konto angemeldet sein. Die Upload-Seite hat zwei Tabs:

Upload-Tab — bestehende .torrent-Datei einreichen

Ziehen Sie eine .torrent-Datei per Drag-and-Drop oder wählen Sie sie aus. Füllen Sie nach dem Laden die Felder aus:

FeldErforderlichBeschreibung
Torrent-DateiJaDie hochzuladende .torrent-Datei.
NameNeinTorrent-Anzeigenamen überschreiben. Wenn leer gelassen, wird der in der Torrent-Datei eingebettete Name verwendet.
KategorieJaDie Inhaltskategorie (Anime, Manga, Audio usw.).
UnterkategorieNeinEin spezifischerer Typ innerhalb der Kategorie (z. B. RAW, Sub/Audio).
SprachenNeinEinen oder mehrere Sprach-Tags, die die Inhaltssprache beschreiben.
GruppeNeinDiesen Release mit einer Gruppe verknüpfen, der Sie angehören.
BeschreibungNeinMarkdown-formatierte Beschreibung auf der Torrent-Detailseite (max. 65535 Zeichen).
PrivatNeinSetzt das Privat-Flag im Torrent und deaktiviert DHT/PEX. Nützlich für Tracker-only-Torrents.
Announce-URLNeinPrimäre Tracker-Announce-URL überschreiben oder hinzufügen.
Weitere TrackerNeinWird aus der Torrent-Datei gelesen. Kann beim Hochladen nicht geändert werden — verwende den Tab „Erstellen", um die Tracker-Liste anzupassen.
KommentarNeinDas in der Datei eingebettete Torrent-Kommentarfeld überschreiben.
AniRena-Tracker-Anforderung

Dein Torrent muss mindestens eine AniRena-Tracker-URL in seiner Announce-Liste enthalten (in beliebigem Tier). Die Seite prüft dies beim Hochladen und lehnt Torrents ab, die keinen AniRena-Tracker enthalten. Wenn du den Torrent ohne den AniRena-Tracker erstellt hast, lade ihn hoch und lade ihn dann erneut von der Seite herunter — die heruntergeladene Datei enthält automatisch die richtigen Tracker.

Erstellen-Tab — neuen Torrent erstellen

Der Erstellen-Tab ermöglicht es Ihnen, eine neue .torrent-Datei von Grund auf zu erstellen, indem Sie Dateipfade, Tracker-URLs und andere Torrent-Parameter direkt im Browser angeben.

Moderation

Uploads werden automatisch gegen eine Liste gesperrter Inhaltsmuster (Namen, Dateinamen, Beschreibungen) geprüft. Torrents, die einem gesperrten Muster entsprechen, werden abgelehnt. Doppelte Torrents (gleicher Info-Hash) werden ebenfalls abgelehnt.

6. Ihr Konto

Klicken Sie auf Ihren Benutzernamen oben rechts, um das Profilpanel zu öffnen. Es ist in einklappbare Abschnitte unterteilt:

Einstellungen

Ändern Sie das UI-Design, die Schriftgröße, das Farbschema, die Oberflächensprache und torrent-bezogene Anzeigeeinstellungen. Änderungen werden automatisch gespeichert.

Passwort

Geben Sie Ihr aktuelles Passwort und das neue Passwort zweimal ein. Ein Verifizierungscode wird an Ihre registrierte E-Mail-Adresse gesendet und muss zur Bestätigung eingegeben werden.

Zwei-Faktor-Authentifizierung (2FA)

Aktivieren Sie TOTP-basierte Zwei-Faktor-Authentifizierung mit einer beliebigen Authenticator-App. Beim Aktivieren von 2FA:

  1. Scannen Sie den QR-Code (oder geben Sie das Geheimnis manuell ein) in Ihrer Authenticator-App.
  2. Geben Sie den 6-stelligen Code in Ihrer App ein, um die Einrichtung zu bestätigen.
  3. Speichern Sie die angezeigten Wiederherstellungscodes — diese sind Einmalcodes, um den Zugang wiederherzustellen.

Um 2FA zu deaktivieren, geben Sie Ihren aktuellen TOTP-Code ein und bestätigen.

Aktive Sitzungen

Zeigen Sie alle aktiven Login-Sitzungen an, einschließlich Browser, OS, IP-Adresse und zuletzt gesehen. Klicken Sie auf Widerrufen bei jeder unbekannten Sitzung.

API-Schlüssel

Generieren Sie einen persönlichen API-Schlüssel zum programmatischen Hochladen von Torrents über die AniRena-API. Klicken Sie auf Schlüssel generieren — der vollständige Schlüssel wird einmalig angezeigt.

Konto löschen

Das Anfordern der Kontolöschung startet eine 30-tägige Schonfrist. Ihr Konto wird sofort deaktiviert und nach 30 Tagen dauerhaft gelöscht. Sie können die Löschung jederzeit innerhalb dieses Zeitraums abbrechen.

7. AniRena API

AniRena bietet eine JSON-API, mit der Sie Torrents programmatisch über einen persönlichen API-Schlüssel hochladen können. Die API wendet dieselben Regeln wie die Weboberfläche an.

Authentifizierung

Die API verwendet einen zweistufigen Authentifizierungsablauf. Tausche zunächst deinen dauerhaften API-Schlüssel gegen ein kurzlebiges Bearer-Token, und übergib dieses Token dann im Authorization-Header jeder API-Anfrage.

Dein API-Schlüssel ist unter Dein Konto > API-Schlüssel verfügbar. Halte ihn geheim — jeder mit dem Schlüssel kann Bearer-Tokens erhalten und in deinem Namen hochladen. Bei Kompromittierung widerrufe ihn sofort und generiere einen neuen.

Schritt 1 — Bearer-Token holen
POST/api/v1/auth/token

Sende eine POST-Anfrage an den Token-Endpunkt mit deinem API-Schlüssel im Authorization-Header. Ein Request-Body ist nicht erforderlich.

Authorization: ApiKey <your-api-key>
Token-Antwort
{
  "token":      "<bearer-token>",
  "token_type": "Bearer",
  "expires_in": 3600
}
Token-Lebensdauer

Bearer-Tokens bleiben bis zu 3600 Sekunden nach Ausstellung gültig und können bei jedem Aufruf wiederverwendet werden, bis sie ablaufen. Wenn ein Token abläuft, erstelle einen neuen über POST /api/v1/auth/token. Jede Antwort enthält weiterhin den aktuellen Token im X-New-Token-Header zur Abwärtskompatibilität.

X-New-Token: <next-bearer-token>
Anmeldung in einer Anfrage (mit 2FA)
POST/api/v1/auth/login

Authentifizieren Sie sich mit Benutzername oder E-Mail und Passwort in einer einzigen Anfrage und erhalten Sie direkt ein Bearer-Token. Wenn für Ihr Konto 2FA aktiviert ist, geben Sie Ihren aktuellen Authenticator-Code in totp_code an (oder einen Wiederherstellungscode in recovery_code). Setzen Sie optional new_api_key auf true, um in derselben Antwort zusätzlich einen brandneuen permanenten API-Schlüssel zu erzeugen.

Anfrage-Body
{
  "login":         "username or email",
  "password":      "your-password",
  "totp_code":     "123456",   // erforderlich, wenn 2FA aktiviert ist (6 Ziffern)
  "recovery_code": "",         // Alternative zu totp_code
  "new_api_key":   false       // auf true setzen, um auch einen neuen API-Schlüssel zu erzeugen
}
Token-Antwort
{
  "ok":         true,
  "token":      "<bearer-token>",
  "token_type": "Bearer",
  "expires_in": 3600,
  "api_key":    "<new-api-key>"   // nur vorhanden, wenn new_api_key true war
}

Das Bearer-Token funktioniert genau wie eines von ‎/api/v1/auth/token. Das Feld api_key wird nur zurückgegeben, wenn new_api_key true ist — speichern Sie es sofort, da es nur einmal angezeigt wird und jeden vorherigen Schlüssel ersetzt.

Beispiel — anmelden und (optional) einen neuen API-Schlüssel erhalten
# pip install requests
import requests

BASE_URL = "https://www.anirena.com"

# One request: authenticate (with 2FA if enabled) and get a bearer token.
# Set new_api_key=True to also receive a brand-new permanent API key.
resp = requests.post(
    f"{BASE_URL}/api/v1/auth/login",
    json={
        "login":       "your-username",  # username or email
        "password":    "your-password",
        "totp_code":   "123456",         # omit if 2FA is not enabled
        "new_api_key": True,             # optional
    },
)
resp.raise_for_status()
data  = resp.json()
token = data["token"]  # use as: Authorization: Bearer <token>
if "api_key" in data:
    print("New API key — store it now:", data["api_key"])

Schritt 2 — Torrent hochladen

POST/api/v1/torrents

Sende eine einfache JSON-POST-Anfrage mit dem Bearer-Token im Authorization-Header.

Anfrage-Body
FeldTypErforderlichBeschreibung
torrentstringJaBase64-kodierter Inhalt der .torrent-Datei.
categorystringJaKategorie-Slug: anime, manga, audio, literature, live, pictures, software, hentai, other.
namestringNeinTorrent-Anzeigenamen überschreiben.
sub_categorystringNeinUnterkategorie-Slug (z. B. raw, sub-audio). Muss zur gewählten Kategorie gehören.
languagesstring[]NeinArray von BCP-47-Sprachcodes (z. B. en, ja).
group_idstringNeinUUID einer Gruppe, der Sie angehören, um diesen Release zuzuordnen.
descriptionstringNeinMarkdown-formatierte Release-Beschreibung (max. 65535 Zeichen).
commentstringNeinDas eingebettete Torrent-Kommentarfeld überschreiben.
is_privatebooleanNeinAuf true setzen, um das Privat-Flag im Torrent zu aktivieren.
comments_enabledbooleanNeinKommentare für diesen Torrent zulassen. Standard ist true (aktiviert).
anime_idstringNeinUUID eines Anime-Eintrags, der mit diesem Torrent verknüpft werden soll. Die UUID erhalten Sie über GET /api/v1/anime/search. Gibt 400 zurück, wenn die UUID keinem bekannten Eintrag entspricht.
announcestringNeinPrimäre Announce-URL überschreiben oder hinzufügen.
trackersstringNeinZeilengetrennte Liste zusätzlicher Tracker-URLs. Eine Leerzeile erstellt eine neue Tracker-Ebene.
testbooleanNeinAuf true setzen, um einen Probelauf durchzuführen: Die Anfrage wird vollständig validiert, aber der Torrent wird nicht gespeichert. Damit können Sie Ihre Daten vor der eigentlichen Einreichung überprüfen.
Probelauf / Testmodus Fügen Sie "test": true zu einer Upload-Anfrage hinzu, um zu prüfen, ob sie erfolgreich wäre, ohne den Torrent tatsächlich hinzuzufügen. Alle Validierungsregeln gelten — Authentifizierung, Kategoriesuche, Duplikaterkennung, verbotene Muster, Tracker-Anforderungen — daher spiegelt die Antwort genau das wider, was eine echte Einreichung zurückgeben würde. Das Token wird bei Erfolg trotzdem rotiert.
Probelauf-Erfolgsantwort — 200 OK
{
  "ok":           true,
  "test":         true,
  "name":         "My Torrent Title",
  "info_hash_v1": "aabbccddeeff...",
  "info_hash_v2": null
}
Verfügbare Sprachcodes
ababAbkhazian
aaaaAfar
afafAfrikaans
akakAkan
sqsqAlbanian
amamAmharic
ararArabic
ar-001ar-001Arabic (Modern Standard)
ananAragonese
hyhyArmenian
asasAssamese
avavAvaric
aeaeAvestan
ayayAymara
azazAzerbaijani
bmbmBambara
babaBashkir
eueuBasque
bebeBelarusian
bnbnBengali
bhbhBihari
bibiBislama
bsbsBosnian
brbrBreton
bgbgBulgarian
mymyBurmese
yueyueCantonese
cacaCatalan
chchChamorro
ceceChechen
nynyChichewa
zhzhChinese
zh-HKzh-HKChinese (Hong Kong)
zh-Hanszh-HansChinese (Simplified)
zh-SGzh-SGChinese (Singapore)
zh-TWzh-TWChinese Traditional
cucuChurch Slavic
cvcvChuvash
kwkwCornish
cocoCorsican
crcrCree
hrhrCroatian
cscsCzech
dadaDanish
dvdvDivehi
nlnlDutch
nl-BEnl-BEDutch (Belgian)
dzdzDzongkha
enenEnglish
en-USen-USEnglish (US)
eoeoEsperanto
etetEstonian
eeeeEwe
fofoFaroese
fjfjFijian
filfilFilipino
fifiFinnish
frfrFrench
fr-CAfr-CAFrench (Canadian)
ffffFula
glglGalician
lglgGanda
kakaGeorgian
dedeGerman
de-ATde-ATGerman (Austrian)
elelGreek
gngnGuarani
guguGujarati
hthtHaitian Creole
hahaHausa
heheHebrew
hzhzHerero
hihiHindi
hohoHiri Motu
huhuHungarian
isisIcelandic
ioioIdo
igigIgbo
ididIndonesian
iaiaInterlingua
ieieInterlingue
iuiuInuktitut
ikikInupiaq
gagaIrish
ititItalian
jajaJapanese
jvjvJavanese
klklKalaallisut
knknKannada
krkrKanuri
ksksKashmiri
kkkkKazakh
kmkmKhmer
kikiKikuyu
rwrwKinyarwanda
rnrnKirundi
kvkvKomi
kgkgKongo
kokoKorean
kjkjKuanyama
kukuKurdish
kykyKyrgyz
loloLao
lalaLatin
lvlvLatvian
liliLimburgish
lnlnLingala
ltltLithuanian
luluLuba-Katanga
lblbLuxembourgish
mkmkMacedonian
mgmgMalagasy
msmsMalay
mlmlMalayalam
mtmtMaltese
gvgvManx
mimiMaori
mrmrMarathi
mhmhMarshallese
mnmnMongolian
nanaNauru
nvnvNavajo
ngngNdonga
neneNepali
ndndNorth Ndebele
seseNorthern Sami
nonoNorwegian
nbnbNorwegian Bokmål
nnnnNorwegian Nynorsk
ococOccitan
ororOdia
ojojOjibwe
omomOromo
ososOssetic
pipiPali
pspsPashto
fafaPersian
plplPolish
ptptPortuguese
pt-BRpt-BRPortuguese (Brazil)
papaPunjabi
ququQuechua
roroRomanian
rmrmRomansh
ruruRussian
smsmSamoan
sgsgSango
sasaSanskrit
scscSardinian
gdgdScottish Gaelic
srsrSerbian
sr-Latnsr-LatnSerbian (Latin)
snsnShona
iiiiSichuan Yi
sdsdSindhi
sisiSinhala
skskSlovak
slslSlovenian
sosoSomali
nrnrSouth Ndebele
ststSouthern Sotho
esesSpanish
es-419es-419Spanish (Latin America)
es-MXes-MXSpanish (Mexico)
susuSundanese
swswSwahili
ssssSwati
svsvSwedish
tltlTagalog
tytyTahitian
tgtgTajik
tataTamil
ttttTatar
teteTelugu
ththThai
boboTibetan
titiTigrinya
totoTongan
tstsTsonga
tntnTswana
trtrTurkish
tktkTurkmen
twtwTwi
ukukUkrainian
ururUrdu
ugugUyghur
uzuzUzbek
veveVenda
viviVietnamese
vovoVolapük
wawaWalloon
cycyWelsh
fyfyWestern Frisian
wowoWolof
xhxhXhosa
yiyiYiddish
yoyoYoruba
zazaZhuang
zuzuZulu
Beispielanfrage
# pip install requests
import base64, pathlib, requests

API_KEY  = "YOUR_API_KEY"
BASE_URL = "https://www.anirena.com"

# Step 1: exchange API key for a short-lived bearer token
auth = requests.post(
    f"{BASE_URL}/api/v1/auth/token",
    headers={"Authorization": f"ApiKey {API_KEY}"},
)
auth.raise_for_status()
token = auth.json()["token"]

# Step 2: upload — plain JSON with the bearer token
torrent_b64 = base64.b64encode(pathlib.Path("file.torrent").read_bytes()).decode()
resp = requests.post(
    f"{BASE_URL}/api/v1/torrents",
    json={
        "torrent":      torrent_b64,
        "category":     "anime",
        "sub_category": "raw",
        "languages":    ["ja"],
        "description":  "# My Release\n\nRelease notes here.",
        "is_private":   False,
    },
    headers={"Authorization": f"Bearer {token}"},
)
resp.raise_for_status()
data  = resp.json()
token = resp.headers.get("X-New-Token", token)  # save for next request
print(data["id"], data["name"])  # torrent UUID and title
Erfolgsantwort — 200 OK
{
  "ok":           true,
  "id":           "550e8400-e29b-41d4-a716-446655440000",
  "name":         "My Torrent Title",
  "info_hash_v1": "aabbccddeeff...",
  "info_hash_v2": null
}
Fehlerantworten
HTTP-StatusBedeutung
400Ungültiger Anfrage-Body oder fehlendes Pflichtfeld.
401Fehlender, abgelaufener oder bereits rotierter Bearer-Token. Authentifiziere dich erneut über POST /api/v1/auth/token.
403Konto gesperrt, deaktiviert oder IP blockiert.
409Doppelter Torrent — gleicher Info-Hash existiert bereits.
422Torrent-Datei konnte nicht geparst werden oder hat die Validierung nicht bestanden.
429Rate-Limit überschritten. Nach dem Reset des Fensters erneut versuchen.
503Website befindet sich im Wartungs- oder Nur-Lesen-Modus.

Rate-Limiting

API-Uploads unterliegen einem konfigurierbaren Rate-Limit getrennt von der Weboberfläche. Bei Überschreitung gibt die API 429 Too Many Requests zurück. Das Limit gilt pro API-Schlüssel.

Halten Sie Ihren API-Schlüssel privat. Er gewährt vollständigen Upload-Zugriff unter Ihrem Konto. Widerrufen und neu generieren Sie ihn sofort, wenn Sie vermuten, dass er kompromittiert wurde.

Torrent-Dateien mit torrent-builder erstellen

torrent-builder ist ein Open-Source-CLI-Tool, das auf libtorrent-rasterbar aufbaut und es ermöglicht, BitTorrent v1, v2 und hybrid .torrent-Dateien über die Kommandozeile zu erstellen. Es ergänzt die AniRena-Upload-API perfekt — Datei lokal erstellen und dann direkt per POST an den Tracker senden. cantalupo555/torrent-builder.

Aus dem Quellcode bauen

Erfordert CMake >= 3.28.3 und libtorrent-rasterbar >= 2.0.11. Repository klonen und mit CMake bauen:

# Install system dependencies
sudo apt-get install build-essential cmake libtorrent-rasterbar-dev

# Clone & build
git clone https://github.com/cantalupo555/torrent-builder.git
cd torrent-builder
mkdir build && cd build
cmake .. && cmake --build .
Wichtige Flags
FeldBeschreibung
--pathPfad zur Datei oder zum Verzeichnis, das verpackt werden soll (erforderlich).
--outputAusgabe-.torrent-Dateiname (erforderlich).
--versionBitTorrent-Format — 1 = v1, 2 = v2, 3 = hybrid (Standard: 3).
--trackerEine Tracker-Announce-URL hinzufügen. Flag wiederholen, um mehrere Tracker hinzuzufügen.
--commentEinen Metadaten-Kommentarstring in den Torrent einbetten.
--privateDas Privat-Flag setzen, um die Verteilung auf die aufgeführten Tracker zu beschränken.
--piece-sizeStückgröße in KB (16-32768). Nicht setzen für automatische Auswahl.
-iSchrittweisen interaktiven Konfigurationsmodus starten.
End-to-End-Workflow: Erstellen -> Hochladen

Die folgenden Beispiele erstellen einen hybrid-Torrent mit torrent-builder, authentifizieren sich dann bei der AniRena API und laden das Ergebnis in einem einzigen Skript hoch.

# pip install requests
import base64, subprocess, requests

API_KEY  = "YOUR_API_KEY"
BASE_URL = "https://www.anirena.com"

# Step 1: build the torrent with torrent-builder
# --version 1=v1  2=v2  3=hybrid (default)
subprocess.run([
    "./torrent-builder/build/torrent_builder",
    "--path",    "/data/my_release",
    "--output",  "my_release.torrent",
    "--version", "3",                      # hybrid
    "--tracker", "udp://open.tracker.gg:6969/announce",
    "--comment", "My Release",
    "--creator", "--creation-date",
], check=True)

# Step 2: authenticate
token = requests.post(
    f"{BASE_URL}/api/v1/auth/token",
    headers={"Authorization": f"ApiKey {API_KEY}"},
).json()["token"]

# Step 3: upload
torrent_b64 = base64.b64encode(open("my_release.torrent", "rb").read()).decode()
resp = requests.post(
    f"{BASE_URL}/api/v1/torrents",
    json={
        "torrent":          torrent_b64,
        "category":         "anime",
        "sub_category":     "raw",
        "languages":        ["ja"],
        "comments_enabled": True,
    },
    headers={"Authorization": f"Bearer {token}"},
)
resp.raise_for_status()
data = resp.json()
print(data["id"], data["name"])

Torrent-Metadaten durchsuchen

POST/api/v1/torrents/search

Sende eine einfache JSON-POST-Anfrage, um Torrent-Einträge mit denselben Such- und Filteroptionen wie auf der Website abzurufen. Die .torrent-Datei selbst wird nicht zurückgegeben — verwende dafür die normale Download-Route.

# pip install requests  (token already obtained — see upload example)
resp = requests.post(
    f"{BASE_URL}/api/v1/torrents/search",
    json={"q": "Sword Art Online", "category": "anime", "per_page": 25},
    headers={"Authorization": f"Bearer {token}"},
)
resp.raise_for_status()
data  = resp.json()
token = resp.headers.get("X-New-Token", token)  # save for next request
for t in data["torrents"]:
    print(t["title"], "-", t["magnet"])
Suchparameter
FeldTypErforderlichBeschreibung
qstringNeinFreitextsuche. Unterstützt group:slug, group:"Name", user:name-Präfixe.
categorystringNeinKategorie-Slug (z. B. „anime").
sub_categorystringNeinUnterkategorie-Slug (z. B. „raw").
languagesstring[]NeinArray von BCP-47-Sprachcodes (z. B. en, ja).
sortstringNeinSortierfeld: date (Standard), size, seeders, leechers, completed, title.
orderstringNeinSortierrichtung: desc (Standard) oder asc.
pageintegerNeinSeitennummer, beginnend bei 1 (Standard 1).
per_pageintegerNeinErgebnisse pro Seite, 1–250 (Standard 50).
hide_adultbooleanNeinErwachsenenkategorie-Torrents ausschließen. Standard ist true für reguläre Benutzer.
show_deadbooleanNeinWenn false (Standard), werden Torrents, die älter als die Dead-Torrent-Gnadenfrist sind und keine aktiven Seeder haben, ausgeschlossen. Auf true setzen, um sie einzuschließen.
Antwort
{
  "total":       1234,
  "page":        1,
  "per_page":    50,
  "total_pages": 25,
  "from":        1,
  "to":          50,
  "torrents": [
    {
      "id":            "550e8400-e29b-41d4-a716-446655440000",
      "title":         "My Release Title",
      "info_hash_v1":  "aabbccddeeff...",
      "info_hash_v2":  null,
      "size_fmt":      "1.4 GB",
      "completed":     42,
      "seeders":       10,
      "leechers":      3,
      "languages":     ["ja", "en"],
      "comment_count": 7,
      "created_at":    "2024-01-15 12:34",
      "cat_slug":      "anime",
      "sub_slug":      "raw",
      "group_name":    null,
      "uploader":      "username",
      "magnet":        "magnet:?xt=urn:btih:..."
    }
  ]
}

comment_count — Anzahl der nicht gelöschten Kommentare zu diesem Torrent.

Such-Rate-Limiting

Suchanfragen unterliegen einem separaten konfigurierbaren Rate-Limit (Standard 60 Anfragen pro 60 Sekunden pro API-Schlüssel). Überschreitung gibt 429 Too Many Requests zurück. Staff-Konten sind ausgenommen.

Torrent-Details abrufen

GET/api/v1/torrent/{id}

Ruft die vollständigen Metadaten eines einzelnen Torrents ab — einschließlich Feldern, die der Such-Endpunkt auslässt, wie die Markdown-Beschreibung, den eingebetteten .torrent-Kommentar, die Dateiliste mit Dateigrößen und das vollständige Tracker-Tier-Layout. Live-Seeder- und Leecher-Zählungen werden aus dem Tracker gelesen, sofern verfügbar.

Antwort
{
  "id":                "550e8400-e29b-41d4-a716-446655440000",
  "title":             "My Release Title",
  "info_hash_v1":      "aabbccddeeff...",
  "info_hash_v2":      null,
  "size_fmt":          "1.4 GB",
  "completed":         42,
  "seeders":           10,
  "leechers":          3,
  "ext_seeders":       128,
  "ext_leechers":      14,
  "created_at":        "2024-01-15 12:34",
  "torrent_created":   "2024-01-15 12:30",
  "created_by_client": "mktorrent 1.1",
  "cat_name":          "Anime",
  "cat_slug":          "anime",
  "sub_name":          "Raw",
  "sub_slug":          "raw",
  "group_name":        null,
  "group_slug":        null,
  "uploader":          "username",
  "uploader_id":       "...",
  "description":       "# My Release\n\nRelease notes here.",
  "comment":           "",
  "is_private":        false,
  "magnet":            "magnet:?xt=urn:btih:...",
  "languages": [
    { "code": "ja", "name": "Japanese", "country_code": "jp" }
  ],
  "tracker_tiers": [
    { "tier": 0, "urls": ["udp://tracker.example.org:6969/announce"] }
  ],
  "files": [
    { "path": "My Release/episode-01.mkv", "size": 1503238553 }
  ],
  "comments_enabled":  true,
  "comments_locked":   false,
  "comment_count":     7
}

seeders, leechers — Live-Werte aus dem hauseigenen Tracker; beide melden 0, wenn der Tracker-Speicher keinen Eintrag für diesen Info-Hash hat oder nicht erreichbar ist.

ext_seeders, ext_leechers — Höchste Seeder- und Leecher-Anzahl, die von einem einzelnen externen Tracker für diesen Torrent gescrapt wurde. Tracker, die denselben Schwarm verfolgen, überlappen sich, daher wird das Maximum statt der Summe verwendet; beide melden 0, wenn kein Tracker Scrape-Daten für diesen Info-Hash hat.

Fehlerantworten
HTTP-StatusBedeutung
400Die Torrent-ID muss entweder ein 36-Zeichen-UUID mit Bindestrichen oder eine 32-Zeichen-reine-Hex-Zeichenkette sein.
401Fehlender, abgelaufener oder bereits rotierter Bearer-Token. Authentifiziere dich erneut über POST /api/v1/auth/token.
404Torrent nicht gefunden.
429Rate-Limit überschritten. Nach dem Reset des Fensters erneut versuchen.
503Website befindet sich im Wartungs- oder Nur-Lesen-Modus.

Torrent-Kommentare abrufen

GET/api/v1/torrents/{id}/comments

Seitenweise Kommentare für einen Torrent abrufen. Die Anzahl der Kommentare pro Seite wird durch die COMMENT_PER_PAGE-Einstellung in der .env-Datei des Servers gesteuert (Standard 20). Nur Torrents mit aktivierten Kommentaren liefern Ergebnisse — alle anderen geben 403 zurück.

Abfrageparameter
FeldTypErforderlichBeschreibung
pageintegerNeinSeitennummer, beginnend bei 1 (Standard 1).
# pip install requests  (token already obtained — see upload example)
TORRENT_ID = "550e8400-e29b-41d4-a716-446655440000"
resp = requests.get(
    f"{BASE_URL}/api/v1/torrents/{TORRENT_ID}/comments",
    params={"page": 1},
    headers={"Authorization": f"Bearer {token}"},
)
resp.raise_for_status()
data  = resp.json()
token = resp.headers.get("X-New-Token", token)  # save for next request
for c in data["comments"]:
    print(c["username"], "-", c["body"])
Antwort
{
  "torrent_id":  "550e8400-e29b-41d4-a716-446655440000",
  "page":        1,
  "per_page":    20,
  "total":       45,
  "total_pages": 3,
  "comments": [
    {
      "id":                 "...",
      "user_id":            "...",
      "username":           "uploader",
      "role":               "user",
      "author_banned":      false,
      "body":               "Great release!",
      "created_at":         "2024-01-15 12:34:00",
      "edited_at":          null,
      "edited_by_username": null,
      "deleted_at":         null
    }
  ]
}

Das body-Feld ist ein leerer String, wenn der Kommentar-Autor gesperrt ist oder der Kommentar gelöscht wurde. Das author_banned-Flag gibt an, welcher Fall zutrifft.

Fehlerantworten
HTTP-StatusBedeutung
401Fehlender, abgelaufener oder bereits rotierter Bearer-Token. Authentifiziere dich erneut über POST /api/v1/auth/token.
403Kommentare sind für diesen Torrent deaktiviert.
404Torrent nicht gefunden.
503Website befindet sich im Wartungs- oder Nur-Lesen-Modus.

Anime-Einträge suchen

GET/api/v1/anime/search?q=<query>

Suchen Sie Anime-Einträge nach Titel, um deren UUID zu erhalten. Die UUID kann als anime_id im Upload-Body übergeben werden, um einen Torrent beim Hochladen mit einem Anime-Eintrag zu verknüpfen, oder nach dem Upload mit PUT /api/torrents/{id}/anime verwendet werden. Keine Authentifizierung erforderlich. Unterliegt demselben Ratenlimit wie die Torrent-Suche (Standard 60 Anfragen pro 60 Sekunden pro IP).

# pip install requests  (no authentication required)
resp = requests.get(
    f"{BASE_URL}/api/v1/anime/search",
    params={"q": "Sword Art Online", "page": 1, "per_page": 10},
)
resp.raise_for_status()
for item in resp.json()["results"]:
    print(item["id"], "-", item["title"])
Abfrageparameter
FeldTypErforderlichBeschreibung
qstringJaTitelsuche (erforderlich). Wird gegen Titel und Synonyme geprüft.
pageintegerNeinSeitennummer, beginnend bei 1 (Standard 1).
per_pageintegerNeinErgebnisse pro Seite, 1–50 (Standard 10).
Antwort
{
  "total":       42,
  "page":        1,
  "per_page":    10,
  "total_pages": 5,
  "results": [
    {
      "id":           "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "title":        "Sword Art Online",
      "anime_type":   "TV",
      "episodes":     25,
      "status":       "FINISHED",
      "season":       "FALL",
      "season_year":  2012,
      "picture":      "https://cdn.myanimelist.net/images/anime/...",
      "thumbnail":    "https://cdn.myanimelist.net/images/anime/...",
      "duration_secs": 1440
    }
  ]
}

Gruppen auflisten und abrufen

GET/api/v1/groups

Gibt eine paginierte Liste öffentlicher Gruppen zurück (aktiviert und nicht gesperrt). Erfordert Bearer-Token-Authentifizierung.

GET/api/v1/groups/{id_or_slug}

Gibt eine einzelne öffentliche Gruppe anhand der numerischen ID oder des Slugs zurück. Gibt 404 zurück, wenn die Gruppe deaktiviert oder gesperrt ist.

Abfrageparameter (nur Liste)
FeldTypErforderlichBeschreibung
qstringNeinNach Gruppenname filtern (optional, Teilstring-Übereinstimmung).
pageintegerNeinSeitenzahl (Standard 1).
per_pageintegerNeinErgebnisse pro Seite, 1–100 (Standard 20).
sortstringNeinSortierspalte: name | slug | members | torrents | created (Standard name).
orderstringNeinSortierrichtung: asc oder desc (Standard asc).
Antwort (Liste)
{
  "total":       12,
  "page":        1,
  "per_page":    20,
  "total_pages": 1,
  "groups": [
    {
      "id":             1,
      "name":           "SubsPlease",
      "slug":           "subsplease",
      "subdomain_slug": "subsplease",
      "description":    "Weekly simulcast batches.",
      "owner":          "admin",
      "member_count":   42,
      "torrent_count":  1337,
      "created_at":     "2024-01-15 12:34"
    }
  ]
}
Antwort (einzeln)
{
  "id":             1,
  "name":           "SubsPlease",
  "slug":           "subsplease",
  "subdomain_slug": "subsplease",
  "description":    "Weekly simulcast batches.",
  "owner":          "admin",
  "member_count":   42,
  "torrent_count":  1337,
  "created_at":     "2024-01-15 12:34"
}
Fehlerantworten
HTTP-StatusBedeutung
401Fehlender, abgelaufener oder bereits rotierter Bearer-Token. Authentifiziere dich erneut über POST /api/v1/auth/token.
404Gruppe nicht gefunden oder nicht öffentlich zugänglich.
429Rate-Limit überschritten. Nach dem Reset des Fensters erneut versuchen.
503Website befindet sich im Wartungs- oder Nur-Lesen-Modus.

8. Spenden

Wenn Sie AniRena unterstützen und bei den Kosten für unsere Server und Dienste helfen möchten, können Sie gerne eine Spende an eine der folgenden Kryptowährungs-Wallets senden:

Bitcoinbc1qy2h3ddq6ak5damvnf4r5vu3ydehhxrcq8gllwn
Ethereum0xCbaFe03832F95F86AF2536d52710e78C63b62Cd3
Solana3ucetj2XDGHQg9PVRPMxerNi7c6kX7GJkjQNg9yjwGeg
LitecoinLbpt61yX3RjGtB1Ef8vgVz6Hr6baQsTjVk

Jede Spende, groß oder klein, wird sehr geschätzt und fließt direkt in den Betrieb von AniRena. Vielen Dank für Ihre Unterstützung!

9. Software

AniRena Player ist eine kostenlose Desktop-App, mit der du Videos direkt aus den auf dieser Seite indizierten Torrents streamen kannst — ohne auf das vollständige Herunterladen warten zu müssen. Füge einfach einen Magnet-Link ein oder öffne eine .torrent-Datei, und die Wiedergabe beginnt, sobald genügend Daten verfügbar sind.

Beide Builds sind vollständig eigenständig — alle Abhängigkeiten sind in der ausführbaren Datei enthalten. Kein Installer, keine Laufzeitumgebung — einfach herunterladen und ausführen.

Windows Auto-Update
  • v0.3.2 latest AniRena-Player_0.3.2_x64-setup.exe · 43.4 MB (35 Downloads)
Ältere Versionen
  • v0.3.1 AniRena-Player_0.3.1_x64-setup.exe · 43.9 MB (64 Downloads)
  • v0.3.0 AniRena-Player_0.3.0_x64-setup.exe · 43.7 MB (8 Downloads)
  • v0.2.9 AniRena-Player_0.2.9_x64-setup.exe · 43.5 MB (6 Downloads)
  • v0.2.8 AniRena-Player_0.2.8_x64-setup.exe · 43.5 MB (17 Downloads)
  • v0.2.7 AniRena-Player_0.2.7_x64-setup.exe · 43.5 MB (20 Downloads)
  • v0.2.6 AniRena-Player_0.2.6_x64-setup.exe · 43.4 MB (3 Downloads)
  • v0.2.5 AniRena-Player_0.2.5_x64-setup.exe · 43.4 MB (8 Downloads)

Installer (.exe). Aktualisiert sich in der App selbst.

macOS · Apple Silicon Auto-Update

Disk-Image (.dmg) für Macs mit Apple Silicon (M1 und neuer). Aktualisiert sich in der App selbst.

macOS · Intel Auto-Update

Disk-Image (.dmg) für Macs mit Intel. Aktualisiert sich in der App selbst.

Linux · AppImage Auto-Update
  • v0.3.2 latest AniRena-Player_0.3.2_amd64.AppImage · 95.1 MB (8 Downloads)
Ältere Versionen
  • v0.3.1 AniRena-Player_0.3.1_amd64.AppImage · 138.1 MB (20 Downloads)
  • v0.3.0 AniRena-Player_0.3.0_amd64.AppImage · 138.0 MB (4 Downloads)
  • v0.2.9 AniRena-Player_0.2.9_amd64.AppImage · 137.7 MB (35 Downloads)
  • v0.2.8 AniRena-Player_0.2.8_amd64.AppImage · 137.6 MB (23 Downloads)
  • v0.2.7 AniRena-Player_0.2.7_amd64.AppImage · 137.6 MB (20 Downloads)
  • v0.2.5 AniRena-Player_0.2.5_amd64.AppImage · 137.6 MB (18 Downloads)

Portable Einzeldatei, keine Installation nötig. Das einzige Linux-Format mit In-App-Auto-Update.

Debian / Ubuntu
Ältere Versionen
  • v0.3.1 AniRena-Player_0.3.1_amd64.deb · 62.5 MB (4 Downloads)
  • v0.3.0 AniRena-Player_0.3.0_amd64.deb · 62.4 MB (3 Downloads)
  • v0.2.9 AniRena-Player_0.2.9_amd64.deb · 62.1 MB (4 Downloads)
  • v0.2.8 AniRena-Player_0.2.8_amd64.deb · 62.0 MB (27 Downloads)
  • v0.2.7 AniRena-Player_0.2.7_amd64.deb · 62.0 MB (13 Downloads)
  • v0.2.5 AniRena-Player_0.2.5_amd64.deb · 62.0 MB (11 Downloads)

Installation: sudo apt install ./<file>.deb — Updates über apt oder einen frischen Download, nicht in der App.

Fedora / RHEL
Ältere Versionen
  • v0.3.1 AniRena-Player_0.3.1-1_x86_64.rpm · 62.5 MB (3 Downloads)
  • v0.3.0 AniRena-Player_0.3.0-1_x86_64.rpm · 62.4 MB (2 Downloads)
  • v0.2.9 AniRena-Player_0.2.9-1_x86_64.rpm · 62.1 MB (23 Downloads)
  • v0.2.8 AniRena-Player_0.2.8-1_x86_64.rpm · 62.0 MB (5 Downloads)
  • v0.2.7 AniRena-Player_0.2.7-1_x86_64.rpm · 62.0 MB (8 Downloads)
  • v0.2.5 AniRena-Player_0.2.5-1_x86_64.rpm · 62.0 MB (7 Downloads)

Installation: sudo dnf install ./<file>.rpm — Updates über dnf oder einen frischen Download, nicht in der App.

Android · arm64
Ältere Versionen
  • v0.3.1 AniRena-Player_0.3.1_arm64.apk · 110.3 MB (62 Downloads)
  • v0.3.0 AniRena-Player_0.3.0_arm64.apk · 110.1 MB (8 Downloads)
  • v0.2.9 AniRena-Player_0.2.9_arm64.apk · 109.1 MB (12 Downloads)
  • v0.2.8 AniRena-Player_0.2.8_arm64.apk · 109.1 MB (22 Downloads)
  • v0.2.7 AniRena-Player_0.2.7_arm64.apk · 109.0 MB (17 Downloads)

Sideload auf 64-Bit ARM-Android-Geräte (die meisten modernen Smartphones / Tablets). Update durch das Herunterladen einer neuen APK.

Android · arm7
Ältere Versionen
  • v0.3.1 AniRena-Player_0.3.1_arm7.apk · 97.8 MB (15 Downloads)

Sideload auf 32-Bit ARM-Android-Geräte (ältere Smartphones / Tablets). Update durch das Herunterladen einer neuen APK.

Android · x86_64
Ältere Versionen
  • v0.3.1 AniRena-Player_0.3.1_x86_64.apk · 114.3 MB (12 Downloads)
  • v0.3.0 AniRena-Player_0.3.0_x86_64.apk · 114.1 MB (4 Downloads)
  • v0.2.9 AniRena-Player_0.2.9_x86_64.apk · 113.1 MB (4 Downloads)
  • v0.2.8 AniRena-Player_0.2.8_x86_64.apk · 113.0 MB (9 Downloads)
  • v0.2.7 AniRena-Player_0.2.7_x86_64.apk · 113.0 MB (11 Downloads)

Sideload auf 64-Bit x86-Android-Geräte oder Emulatoren. Update durch das Herunterladen einer neuen APK.