1. Pierwsze kroki

AniRena to indeks torrentów skupiony na anime, mandze, audio i powiązanych mediach. Możesz przeglądać i pobierać torrenty bez konta. Konto jest wymagane do przesyłania torrentów, publikowania w grupach lub korzystania z API.

Pasek nawigacji u góry zapewnia dostęp do głównych obszarów strony:

  • Strona główna — strona listy torrentów i wyszukiwania.
  • Prześlij — prześlij nowy torrent (wymaga logowania).
  • Przewodnik — ta strona.
  • Statystyki — statystyki całej strony (torrenty, peerzy, przesyłania w czasie).
  • Grupy — katalog grup wydań.
  • RSS — kanał RSS ostatnich przesyłań, filtrowalny według kategorii.

Menu konta (górny prawy róg po zalogowaniu) otwiera panel profilu, gdzie możesz dostosować ustawienia, zarządzać opcjami bezpieczeństwa i uzyskać dostęp do klucza API.

2. Przeglądanie i wyszukiwanie

Strona główna wyświetla wszystkie torrenty posortowane według daty przesyłania. Użyj paska wyszukiwania u góry, aby filtrować wyniki.

Podstawowe wyszukiwanie

Wpisz dowolne słowa w pasek wyszukiwania i naciśnij Enter (lub kliknij ikonę wyszukiwania). Wyniki są sortowane według trafności, gdy zapytanie jest aktywne.

Operatory wyszukiwania

Następujące operatory można łączyć z regularnym zapytaniem:

OperatorPrzykładEfekt
user:"name"user:"SubsPlease"Pokaż tylko torrenty przesłane przez tego użytkownika.

Kliknięcie nazwy przesyłającego na liście torrentów automatycznie uruchamia wyszukiwanie użytkownika.

Kategorie i podkategorie

Użyj selektora kategorii (ikona siatki obok paska wyszukiwania), aby ograniczyć wyniki do jednej kategorii. Dostępne kategorie:

  • Anime
  • Manga/Manhwa/Komiks
  • Audio
  • Literatura
  • Live Action
  • Obrazy
  • Oprogramowanie
  • Hentai
  • Inne

Każda kategoria ma podkategorie (np. Anime do RAW, Sub/Audio, Teledysk) dostępne wewnątrz modalnego okna kategorii.

Sortowanie i filtry

Nagłówki kolumn na liście torrentów są klikalne w celu sortowania według tej kolumny (rosnąco lub malejąco). Dostępne kolumny sortowania: data, nazwa, rozmiar, ukończone pobierania. Uwaga: seederzy i leecherzy to wartości pobierane na żywo z Redis i nie można ich używać do sortowania.

Filtr języka

Użyj selektora języka (ikona flagi), aby pokazać tylko torrenty oznaczone określonym językiem.

Kanał RSS

Kanał RSS pod adresem /rss zawiera najnowsze przesyłania. Dodaj ?category=anime (lub inny slug kategorii), aby filtrować kanał. Większość klientów torrentów obsługuje automatyczne pobieranie RSS bezpośrednio z tego adresu URL.

3. Pobieranie torrentów

Kliknij dowolną nazwę torrenta, aby otworzyć panel szczegółów. Stamtąd możesz:

  • Pobierz .torrent — zapisuje plik .torrent bezpośrednio. Bezpośredni adres URL to /torrents/{id}.torrent
  • Link magnet — otwiera się bezpośrednio w kliencie torrentów przez protokół URI magnet. Adres URL to /torrents/{id}/magnet

Panel szczegółów pokazuje również opis torrenta, listę plików, listę trackerów oraz liczby seederów/leecherów.

Starsze linki do pobierania

Stare linki do pobierania AniRena są nadal obsługiwane i automatycznie przekierowują do właściwego pliku .torrent przy użyciu starszego ID: /dl/{old_id}

Polecane klienty BitTorrent

Każdy nowoczesny klient BitTorrent działa. Poniższe klienty są polecane i w pełni obsługują BitTorrent v2 / hybridowe torrenty:

qBittorrent Na stronie pobierania kliknij Dodatkowe opcje pobierania i wybierz build oznaczony lt20 (libtorrent 2.0). Domyślny instalator używa libtorrent 1.2, który nie obsługuje czystych torrentów v2.v2 obsługiwane
PicoTorrent Lekki klient Windows z natywną obsługą BitTorrent v2 od razu po zainstalowaniu.v2 obsługiwane
BiglyBT Bogaty w funkcje klient wieloplatformowy oparty na Azureus/Vuze z pełną obsługą v2.v2 obsługiwane

4. Tworzenie konta

Rejestracja

Kliknij Zarejestruj się na pasku nawigacji. Wybierz nazwę użytkownika, podaj adres e-mail i ustaw hasło (minimalna długość jest wymagana). Musisz przeczytać i zaakceptować warunki strony przed utworzeniem konta.

Aktywacja e-mailem

Po rejestracji na Twój adres zostanie wysłany e-mail weryfikacyjny. Kliknij link w e-mailu, aby aktywować konto. Jeśli go nie otrzymałeś, użyj linku Aktywuj konto na stronie logowania, aby poprosić o nowy kod.

Odzyskiwanie hasła

Jeśli zapomnisz hasła, kliknij Zapomniałem hasła na stronie logowania i wprowadź swój adres e-mail. Zostanie Ci wysłany link odzyskiwania. Link jest jednorazowy i wygasa po krótkim czasie.

5. Przesyłanie torrentów

Przejdź do Prześlij na pasku nawigacji. Musisz być zalogowany z aktywnym, niezbanowanym kontem. Strona przesyłania ma dwie zakładki:

Zakładka Prześlij — prześlij istniejący plik .torrent

Przeciągnij i upuść lub wybierz plik .torrent. Po załadowaniu wypełnij pola:

PoleWymaganeOpis
Plik torrentaTakPlik .torrent do przesłania.
NazwaNieZastąp wyświetlaną nazwę torrenta. Jeśli pozostawione puste, używana jest nazwa osadzona w pliku torrenta.
KategoriaTakKategoria treści (Anime, Manga, Audio itp.).
PodkategoriaNieBardziej konkretny typ w ramach kategorii (np. RAW, Sub/Audio).
JęzykiNieJeden lub więcej tagów języka opisujących język treści.
GrupaNiePowiąż to wydanie z grupą, której jesteś członkiem.
OpisNieOpis w formacie Markdown wyświetlany na stronie szczegółów torrenta (maks. 65535 znaków).
PrywatnyNieUstawia flagę prywatności w torrencie, wyłączając DHT/PEX. Przydatne dla torrentów tylko dla trackerów.
URL ogłoszeniaNieZastąp lub dodaj podstawowy URL ogłoszenia trackera.
Dodatkowe trackeryNieOdczytane z pliku torrent. Nie można modyfikować podczas przesyłania — użyj zakładki Utwórz, jeśli chcesz dostosować listę trackerów.
KomentarzNieZastąp pole komentarza torrenta osadzone w pliku.
Wymaganie trackera AniRena

Twój torrent musi zawierać co najmniej jeden URL trackera AniRena na liście announce (w dowolnym tierze). Strona sprawdza to podczas przesyłania i odrzuci torrenty niezawierające trackera AniRena. Jeśli stworzyłeś torrent bez wcześniejszego dodania trackera AniRena, prześlij go, a następnie pobierz ponownie ze strony — pobrany plik będzie miał automatycznie wstrzyknięte odpowiednie trackery.

Zakładka Utwórz — zbuduj nowy torrent

Zakładka Utwórz pozwala generować nowy .torrent od podstaw przez określenie ścieżek plików, adresów URL trackerów i innych parametrów torrenta bezpośrednio w przeglądarce. Wynikowy torrent jest przesyłany z tymi samymi polami metadanych co powyżej.

Moderacja

Przesyłania są automatycznie sprawdzane pod kątem listy zbanowanych wzorców treści (nazwy, nazwy plików, opisy). Torrenty pasujące do zbanowanego wzorca zostaną odrzucone. Duplikaty torrentów (ten sam info hash) również są odrzucane.

6. Twoje konto

Kliknij swoją nazwę użytkownika w górnym prawym rogu, aby otworzyć panel profilu. Jest on zorganizowany w składane sekcje:

Ustawienia

Zmień motyw interfejsu, rozmiar czcionki, schemat kolorów, język interfejsu i preferencje wyświetlania związane z torrentami. Zmiany są zapisywane automatycznie.

Hasło

Wprowadź obecne hasło i nowe hasło dwukrotnie. Kod weryfikacyjny jest wysyłany na zarejestrowany adres e-mail i musi być wprowadzony w celu potwierdzenia zmiany. Jeśli włączone jest uwierzytelnianie dwuskładnikowe, wymagany jest również kod TOTP.

Uwierzytelnianie dwuskładnikowe (2FA)

Włącz uwierzytelnianie dwuskładnikowe oparte na TOTP przy użyciu dowolnej aplikacji uwierzytelniającej (np. Google Authenticator, Aegis, Bitwarden). Przy włączaniu 2FA:

  1. Zeskanuj kod QR (lub wprowadź sekret ręcznie) w swojej aplikacji uwierzytelniającej.
  2. Wprowadź 6-cyfrowy kod wyświetlany w aplikacji, aby potwierdzić konfigurację.
  3. Zapisz wyświetlone kody odzyskiwania — są to jednorazowe kody do odzyskania dostępu w przypadku utraty urządzenia.

Aby wyłączyć 2FA, wprowadź obecny kod TOTP i potwierdź.

Aktywne sesje

Wyświetl wszystkie aktualnie aktywne sesje logowania, w tym przeglądarkę, system operacyjny, adres IP i czas ostatniej aktywności. Kliknij Unieważnij na dowolnej sesji, której nie rozpoznajesz. Możesz również unieważnić wszystkie sesje jednocześnie, aby wylogować się ze wszystkich urządzeń.

Klucz API

Wygeneruj osobisty klucz API używany do programowego przesyłania torrentów przez AniRena API. Kliknij Generuj klucz, aby go utworzyć — pełny klucz jest wyświetlany raz bezpośrednio po wygenerowaniu. Przechowuj go bezpiecznie; nie zostanie pokazany w pełni ponownie. Użyj Unieważnij, aby trwale unieważnić klucz.

Usuń konto

Żądanie usunięcia konta rozpoczyna 30-dniowy okres karencji. Konto jest natychmiast wyłączone i trwale usuwane po 30 dniach. Możesz anulować usunięcie w dowolnym momencie w tym oknie, logując się i klikając Anuluj usunięcie.

7. AniRena API

AniRena udostępnia JSON API, które pozwala programowo przesyłać torrenty przy użyciu osobistego klucza API. API stosuje te same zasady co interfejs sieciowy: sprawdzenia banów, limity żądań i ograniczenia trybu strony — wszystko to ma zastosowanie. Każde przesyłanie przez API jest rejestrowane w dzienniku audytu.

Uwierzytelnianie

API korzysta z dwuetapowego przepływu uwierzytelniania. Najpierw wymień swój stały klucz API na krótkotrwały token nośnika, a następnie przekazuj ten token w nagłówku Authorization każdego żądania API.

Twój klucz API jest dostępny w sekcji Twoje konto > Klucz API. Zachowaj go w tajemnicy — każdy, kto go posiada, może uzyskać tokeny nośnika i przesyłać pliki w Twoim imieniu. W przypadku naruszenia bezpieczeństwa natychmiast go unieważnij i wygeneruj nowy.

Krok 1 — Pobierz token nośnika
POST/api/v1/auth/token

Wyślij żądanie POST do endpointu tokenu z kluczem API w nagłówku Authorization. Treść żądania nie jest wymagana.

Authorization: ApiKey <your-api-key>
Odpowiedź tokenu
{
  "token":      "<bearer-token>",
  "token_type": "Bearer",
  "expires_in": 3600
}
Czas życia tokenu

Tokeny Bearer pozostają ważne do 3600 sekund od momentu ich wydania i można je używać wielokrotnie w każdym wywołaniu, aż wygasną. Po wygaśnięciu tokenu wygeneruj nowy przez POST /api/v1/auth/token. Każda odpowiedź nadal zwraca bieżący token w nagłówku X-New-Token w celu zachowania zgodności wstecznej.

X-New-Token: <next-bearer-token>
Logowanie jednym żądaniem (z 2FA)
POST/api/v1/auth/login

Uwierzytelnij się nazwą użytkownika lub adresem e-mail i hasłem w jednym żądaniu i otrzymaj token bearer bezpośrednio. Jeśli na koncie masz włączone 2FA, dołącz bieżący kod z aplikacji uwierzytelniającej w polu totp_code (lub kod odzyskiwania w recovery_code). Opcjonalnie ustaw new_api_key na true, aby w tej samej odpowiedzi wygenerować również zupełnie nowy stały klucz API.

Treść żądania
{
  "login":         "username or email",
  "password":      "your-password",
  "totp_code":     "123456",   // wymagane, jeśli 2FA jest włączone (6 cyfr)
  "recovery_code": "",         // alternatywa dla totp_code
  "new_api_key":   false       // ustaw true, aby wygenerować też nowy klucz API
}
Odpowiedź tokenu
{
  "ok":         true,
  "token":      "<bearer-token>",
  "token_type": "Bearer",
  "expires_in": 3600,
  "api_key":    "<new-api-key>"   // obecne tylko, gdy new_api_key było true
}

Token bearer działa dokładnie tak samo jak ten z ‎/api/v1/auth/token. Pole api_key jest zwracane tylko wtedy, gdy new_api_key ma wartość true — zapisz je natychmiast, ponieważ wyświetlane jest tylko raz i zastępuje wszelkie poprzednie klucze.

Przykład — zaloguj się i (opcjonalnie) uzyskaj nowy klucz API
# 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"])

Krok 2 — Prześlij torrent

POST/api/v1/torrents

Wyślij proste żądanie POST JSON z tokenem nośnika w nagłówku Authorization.

Treść żądania
PoleTypWymaganeOpis
torrentstringTakZawartość pliku .torrent zakodowana w Base64.
categorystringTakSlug kategorii: anime, manga, audio, literature, live, pictures, software, hentai, other.
namestringNieZastąp wyświetlaną nazwę torrenta.
sub_categorystringNieSlug podkategorii (np. raw, sub-audio). Musi należeć do wybranej kategorii.
languagesstring[]NieTablica kodów języków BCP 47 (np. en, ja).
group_idstringNieUUID grupy, której jesteś członkiem, aby powiązać z tym wydaniem.
descriptionstringNieOpis wydania w formacie Markdown (maks. 65535 znaków).
commentstringNieZastąp osadzone pole komentarza torrenta.
is_privatebooleanNieUstaw na true, aby włączyć flagę prywatności w torrencie.
comments_enabledbooleanNieZezwól na komentarze do tego torrenta. Domyślna wartość to true (włączone).
anime_idstringNieUUID wpisu anime do powiązania z tym torrentem. UUID można uzyskać przez GET /api/v1/anime/search. Zwraca 400, jeśli UUID nie pasuje do żadnego znanego wpisu.
announcestringNieZastąp lub dodaj podstawowy URL ogłoszenia.
trackersstringNieRozdzielona znakiem nowej linii lista dodatkowych adresów URL trackerów. Pusta linia między adresami URL tworzy nową warstwę trackerów.
testbooleanNieUstaw na true, aby wykonać suche uruchomienie: żądanie jest w pełni weryfikowane, ale torrent nie jest zapisywany. Użyj tego, aby sprawdzić poprawność danych przed rzeczywistym przesłaniem.
Suche uruchomienie / tryb testowy Dodaj "test": true do dowolnego żądania przesyłania, aby sprawdzić, czy zakończyłoby się sukcesem bez faktycznego dodawania torrenta. Obowiązują wszystkie reguły walidacji — uwierzytelnianie, wyszukiwanie kategorii, wykrywanie duplikatów, zakazane wzorce, wymagania dotyczące trackera — więc odpowiedź dokładnie odzwierciedla to, co zwróciłoby prawdziwe przesłanie. Token jest nadal rotowany po sukcesie.
Odpowiedź sukcesu suchego uruchomienia — 200 OK
{
  "ok":           true,
  "test":         true,
  "name":         "My Torrent Title",
  "info_hash_v1": "aabbccddeeff...",
  "info_hash_v2": null
}
Dostępne kody języków
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
Przykładowe żądanie
# 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
Odpowiedź sukcesu — 200 OK
{
  "ok":           true,
  "id":           "550e8400-e29b-41d4-a716-446655440000",
  "name":         "My Torrent Title",
  "info_hash_v1": "aabbccddeeff...",
  "info_hash_v2": null
}
Odpowiedzi błędów
Status HTTPZnaczenie
400Nieprawidłowa treść żądania lub brakujące wymagane pole.
401Brakujący, wygasły lub już zrotowany token nośnika. Uwierzytelnij się ponownie przez POST /api/v1/auth/token.
403Konto zbanowane, wyłączone lub IP zablokowane.
409Duplikat torrenta — torrent z tym samym info hash już istnieje.
422Nie udało się przetworzyć pliku torrenta lub nie przeszedł weryfikacji (zbanowany wzorzec, nieprawidłowa struktura).
429Przekroczono limit żądań. Spróbuj ponownie po zresetowaniu okna.
503Strona jest w trybie konserwacji lub tylko do odczytu.

Ograniczenie żądań

Przesyłania przez API podlegają oddzielnemu, konfigurowalnym limitowi żądań oddzielnemu od interfejsu sieciowego. Limit i okno są ustawiane przez administratora strony. Gdy limit jest przekroczony, API zwraca 429 Too Many Requests. Limit jest na klucz API.

Trzymaj klucz API w tajemnicy. Daje pełny dostęp do przesyłania w ramach Twojego konta. Natychmiast go unieważnij i zregeneruj, jeśli podejrzewasz, że został ujawniony.

Generowanie plików torrent za pomocą torrent-builder

torrent-builder to narzędzie CLI o otwartym kodzie źródłowym zbudowane na libtorrent-rasterbar, które umożliwia tworzenie plików .torrent BitTorrent v1, v2 i hybrid z wiersza poleceń. Doskonale współpracuje z AniRena upload API — wygeneruj plik lokalnie, a następnie wyślij POST bezpośrednio do trackera. cantalupo555/torrent-builder.

Budowanie ze źródeł

Wymaga CMake >= 3.28.3 i libtorrent-rasterbar >= 2.0.11. Sklonuj repozytorium i zbuduj z CMake:

# 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 .
Kluczowe flagi
PoleOpis
--pathŚcieżka do pliku lub katalogu do spakowania (wymagane).
--outputNazwa pliku wyjściowego .torrent (wymagane).
--versionFormat BitTorrent — 1 = v1, 2 = v2, 3 = hybrid (domyślnie: 3).
--trackerDodaj URL announce trackera. Powtórz flagę, aby dodać wiele trackerów.
--commentOsadź ciąg komentarza metadanych w torrencie.
--privateUstaw flagę prywatną, aby ograniczyć dystrybucję tylko do wymienionych trackerów.
--piece-sizeRozmiar kawałka w KB (16-32768). Pozostaw nieustawione dla automatycznego wyboru.
-iUruchom krokowy interaktywny tryb konfiguracji.
Kompletny przepływ pracy: budowanie -> przesyłanie

Poniższe przykłady budują torrent hybrid za pomocą torrent-builder, następnie uwierzytelniają się w AniRena API i przesyłają wynik w jednym skrypcie.

# 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"])

Wyszukiwanie metadanych torrentów

POST/api/v1/torrents/search

Wyślij proste żądanie POST JSON, aby pobrać listingi torrentów z tymi samymi opcjami wyszukiwania i filtrowania dostępnymi na stronie internetowej. Sam plik .torrent nie jest zwracany — użyj normalnej trasy pobierania w tym celu.

# 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"])
Parametry wyszukiwania
PoleTypWymaganeOpis
qstringNieWyszukiwanie pełnotekstowe. Obsługuje prefiksy group:slug, group:"Name", user:name.
categorystringNieSlug kategorii (np. "anime").
sub_categorystringNieSlug podkategorii (np. "raw").
languagesstring[]NieTablica kodów języków BCP 47 (np. en, ja).
sortstringNiePole sortowania: date (domyślnie), size, seeders, leechers, completed, title.
orderstringNieKierunek sortowania: desc (domyślnie) lub asc.
pageintegerNieNumer strony, zaczynając od 1 (domyślnie 1).
per_pageintegerNieWyników na stronę, 1–250 (domyślnie 50).
hide_adultbooleanNieWyklucz torrenty kategorii dla dorosłych. Domyślnie true dla zwykłych użytkowników.
show_deadbooleanNieGdy false (domyślnie), torrenty starsze niż okres karencji dla martwych torrentów i bez aktywnych seedów są wykluczane. Ustaw na true, aby je uwzględnić.
Odpowiedź
{
  "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 — Liczba nieusuniętych komentarzy do tego torrenta.

Ograniczenie żądań wyszukiwania

Żądania wyszukiwania podlegają oddzielnemu konfigurowalnemu limitowi żądań (domyślnie 60 żądań na 60 sekund na klucz API). Przekroczenie limitu zwraca 429 Too Many Requests. Konta personelu są zwolnione.

Pobierz szczegóły torrenta

GET/api/v1/torrent/{id}

Pobierz pełne metadane pojedynczego torrenta — w tym pola, które endpoint wyszukiwania pomija, takie jak opis w Markdown, osadzony komentarz pliku .torrent, listę plików z rozmiarem każdego z nich oraz pełny układ warstw trackerów. Gdy są dostępne, liczniki seedów i leechów na żywo są odczytywane z trackera.

Odpowiedź
{
  "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 — Liczniki na żywo z wewnętrznego trackera; oba zwracają 0, gdy magazyn trackera nie zawiera wpisu dla tego info hash lub jest nieosiągalny.

ext_seeders, ext_leechers — Najwyższa liczba seedów i leecherów zgłoszona przez dowolny pojedynczy zewnętrzny tracker, który był scrape'owany dla tego torrenta. Trackery śledzące ten sam swarm pokrywają się, więc używane jest maksimum zamiast sumy; oba zwracają 0, gdy żaden tracker nie posiada danych scrape dla tego info hash.

Odpowiedzi błędów
Status HTTPZnaczenie
400Identyfikator torrenta musi być 36-znakowym UUID z myślnikami lub 32-znakowym surowym ciągiem szesnastkowym.
401Brakujący, wygasły lub już zrotowany token nośnika. Uwierzytelnij się ponownie przez POST /api/v1/auth/token.
404Nie znaleziono torrenta.
429Przekroczono limit żądań. Spróbuj ponownie po zresetowaniu okna.
503Strona jest w trybie konserwacji lub tylko do odczytu.

Pobieranie komentarzy do torrenta

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

Pobierz paginowane komentarze dla torrenta. Liczba komentarzy na stronę jest kontrolowana przez ustawienie COMMENT_PER_PAGE w pliku .env serwera (domyślnie 20). Tylko torrenty z włączonymi komentarzami zwrócą wyniki — wszystkie inne zwracają 403.

Parametry zapytania
PoleTypWymaganeOpis
pageintegerNieNumer strony, zaczynając od 1 (domyślnie 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"])
Odpowiedź
{
  "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
    }
  ]
}

Pole body jest pustym ciągiem, gdy autor komentarza jest zbanowany lub komentarz został usunięty. Flaga author_banned wskazuje, który przypadek ma zastosowanie.

Odpowiedzi błędów
Status HTTPZnaczenie
401Brakujący, wygasły lub już zrotowany token nośnika. Uwierzytelnij się ponownie przez POST /api/v1/auth/token.
403Komentarze są wyłączone dla tego torrenta.
404Torrent nie został znaleziony.
503Strona jest w trybie konserwacji lub tylko do odczytu.

Wyszukiwanie wpisów anime

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

Wyszukuj wpisy anime według tytułu, aby uzyskać ich UUID. UUID można przekazać jako anime_id w treści przesyłania, aby powiązać torrent z wpisem anime podczas przesyłania, lub użyć z PUT /api/torrents/{id}/anime po przesłaniu. Uwierzytelnianie nie jest wymagane. Podlega tym samym ograniczeniom szybkości co wyszukiwanie torrentów (domyślnie 60 żądań na 60 sekund na 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"])
Parametry zapytania
PoleTypWymaganeOpis
qstringTakCiąg wyszukiwania tytułu (wymagany). Dopasowywany do tytułu i synonimów.
pageintegerNieNumer strony, zaczynając od 1 (domyślnie 1).
per_pageintegerNieWyników na stronę, 1–50 (domyślnie 10).
Odpowiedź
{
  "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
    }
  ]
}

Wyświetlanie i pobieranie grup

GET/api/v1/groups

Zwraca paginowaną listę publicznych grup (aktywnych i niezablokowanych). Wymaga uwierzytelniania tokenem Bearer.

GET/api/v1/groups/{id_or_slug}

Zwraca pojedynczą publiczną grupę na podstawie numerycznego ID lub sluga. Zwraca 404, jeśli grupa jest wyłączona lub zablokowana.

Parametry zapytania (tylko lista)
PoleTypWymaganeOpis
qstringNieFiltruj według nazwy grupy (opcjonalnie, dopasowanie podciągu).
pageintegerNieNumer strony (domyślnie 1).
per_pageintegerNieWyniki na stronę, 1–100 (domyślnie 20).
sortstringNieKolumna sortowania: name | slug | members | torrents | created (domyślnie name).
orderstringNieKierunek sortowania: asc lub desc (domyślnie asc).
Odpowiedź (lista)
{
  "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"
    }
  ]
}
Odpowiedź (pojedyncza)
{
  "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"
}
Odpowiedzi błędów
Status HTTPZnaczenie
401Brakujący, wygasły lub już zrotowany token nośnika. Uwierzytelnij się ponownie przez POST /api/v1/auth/token.
404Grupa nie została znaleziona lub jest niedostępna publicznie.
429Przekroczono limit żądań. Spróbuj ponownie po zresetowaniu okna.
503Strona jest w trybie konserwacji lub tylko do odczytu.

8. Darowizny

Jeśli chcesz wesprzeć AniRena i pomóc pokryć koszty hostingu naszych serwerów i usług, zapraszamy do wysłania darowizny na jeden z poniższych portfeli kryptowalut:

Bitcoinbc1qy2h3ddq6ak5damvnf4r5vu3ydehhxrcq8gllwn
Ethereum0xCbaFe03832F95F86AF2536d52710e78C63b62Cd3
Solana3ucetj2XDGHQg9PVRPMxerNi7c6kX7GJkjQNg9yjwGeg
LitecoinLbpt61yX3RjGtB1Ef8vgVz6Hr6baQsTjVk

Każda darowizna, duża czy mała, jest bardzo ceniona i trafia bezpośrednio na utrzymanie AniRena. Dziękujemy za wsparcie!

9. Oprogramowanie

AniRena Player to bezpłatna aplikacja na komputery, która umożliwia strumieniowanie wideo bezpośrednio z torrentów indeksowanych w tym serwisie — bez konieczności czekania na zakończenie pełnego pobierania. Wystarczy wkleić link magnet lub otworzyć plik .torrent, a odtwarzanie rozpocznie się, gdy tylko będzie dostępna wystarczająca ilość danych.

Obie wersje są w pełni samodzielne — wszystkie zależności są zawarte wewnątrz pliku wykonywalnego. Bez instalatora i bez konieczności konfigurowania środowiska — wystarczy pobrać i uruchomić.

Windows auto-aktualizacja
Starsze wersje
  • v0.3.1 AniRena-Player_0.3.1_x64-setup.exe · 43.9 MB (64 pobrania)
  • v0.3.0 AniRena-Player_0.3.0_x64-setup.exe · 43.7 MB (8 pobrania)
  • v0.2.9 AniRena-Player_0.2.9_x64-setup.exe · 43.5 MB (6 pobrania)
  • v0.2.8 AniRena-Player_0.2.8_x64-setup.exe · 43.5 MB (17 pobrania)
  • v0.2.7 AniRena-Player_0.2.7_x64-setup.exe · 43.5 MB (19 pobrania)
  • v0.2.6 AniRena-Player_0.2.6_x64-setup.exe · 43.4 MB (3 pobrania)
  • v0.2.5 AniRena-Player_0.2.5_x64-setup.exe · 43.4 MB (8 pobrania)

Instalator (.exe). Aktualizuje się sam w aplikacji.

macOS · Apple Silicon auto-aktualizacja

Obraz dysku (.dmg) dla Maców z Apple Silicon (M1 i nowsze). Aktualizuje się sam w aplikacji.

macOS · Intel auto-aktualizacja

Obraz dysku (.dmg) dla Maców z Intel. Aktualizuje się sam w aplikacji.

Linux · AppImage auto-aktualizacja
Starsze wersje
  • v0.3.1 AniRena-Player_0.3.1_amd64.AppImage · 138.1 MB (19 pobrania)
  • v0.3.0 AniRena-Player_0.3.0_amd64.AppImage · 138.0 MB (4 pobrania)
  • v0.2.9 AniRena-Player_0.2.9_amd64.AppImage · 137.7 MB (35 pobrania)
  • v0.2.8 AniRena-Player_0.2.8_amd64.AppImage · 137.6 MB (23 pobrania)
  • v0.2.7 AniRena-Player_0.2.7_amd64.AppImage · 137.6 MB (20 pobrania)
  • v0.2.5 AniRena-Player_0.2.5_amd64.AppImage · 137.6 MB (18 pobrania)

Przenośny pojedynczy plik, instalacja nie jest wymagana. Jedyny format Linux z automatyczną aktualizacją w aplikacji.

Debian / Ubuntu
Starsze wersje
  • v0.3.1 AniRena-Player_0.3.1_amd64.deb · 62.5 MB (4 pobrania)
  • v0.3.0 AniRena-Player_0.3.0_amd64.deb · 62.4 MB (3 pobrania)
  • v0.2.9 AniRena-Player_0.2.9_amd64.deb · 62.1 MB (4 pobrania)
  • v0.2.8 AniRena-Player_0.2.8_amd64.deb · 62.0 MB (26 pobrania)
  • v0.2.7 AniRena-Player_0.2.7_amd64.deb · 62.0 MB (12 pobrania)
  • v0.2.5 AniRena-Player_0.2.5_amd64.deb · 62.0 MB (11 pobrania)

Instalacja: sudo apt install ./<file>.deb — aktualizacje przez apt lub nowe pobranie, nie w aplikacji.

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

Instalacja: sudo dnf install ./<file>.rpm — aktualizacje przez dnf lub nowe pobranie, nie w aplikacji.

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

Sideload na 64-bitowych urządzeniach Android ARM (większość nowoczesnych telefonów / tabletów). Aktualizacja przez pobranie nowego APK.

Android · arm7
Starsze wersje
  • v0.3.1 AniRena-Player_0.3.1_arm7.apk · 97.8 MB (15 pobrania)

Zainstaluj ręcznie na 32-bitowych urządzeniach Android ARM (starsze telefony / tablety). Aktualizacja przez pobranie nowego pliku APK.

Android · x86_64
Starsze wersje
  • v0.3.1 AniRena-Player_0.3.1_x86_64.apk · 114.3 MB (12 pobrania)
  • v0.3.0 AniRena-Player_0.3.0_x86_64.apk · 114.1 MB (4 pobrania)
  • v0.2.9 AniRena-Player_0.2.9_x86_64.apk · 113.1 MB (4 pobrania)
  • v0.2.8 AniRena-Player_0.2.8_x86_64.apk · 113.0 MB (9 pobrania)
  • v0.2.7 AniRena-Player_0.2.7_x86_64.apk · 113.0 MB (11 pobrania)

Sideload na 64-bitowych urządzeniach Android x86 lub emulatorach. Aktualizacja przez pobranie nowego APK.