1. Початок роботи

AniRena — це індекс торентів, орієнтований на аніме, мангу, аудіо та пов'язані медіа. Ви можете переглядати та завантажувати торенти без акаунту. Акаунт необхідний для завантаження торентів, публікацій у групах або використання API.

Навігаційна панель у верхній частині надає доступ до основних розділів сайту:

  • Головна — сторінка списку торентів та пошуку.
  • Завантажити — надіслати новий торент (необхідний вхід).
  • Довідка — ця сторінка.
  • Статистика — загальносайтова статистика (торенти, однолітки, завантаження з часом).
  • Групи — каталог груп релізів.
  • RSS — RSS-стрічка останніх завантажень, яку можна фільтрувати за категорією.

Меню вашого акаунту (верхній правий кут при вході) відкриває панель профілю, де можна налаштувати параметри, керувати параметрами безпеки та отримати доступ до вашого API-ключа.

2. Перегляд та пошук

Головна сторінка містить список усіх торентів, упорядкованих за датою завантаження. Використайте рядок пошуку вгорі для фільтрації результатів.

Базовий пошук

Введіть будь-які слова в рядок пошуку та натисніть Enter (або клацніть значок пошуку). Результати впорядковуються за релевантністю, коли запит активний.

Оператори пошуку

Наступні оператори можна поєднувати з регулярним запитом:

ОператорПрикладЕфект
user:"name"user:"SubsPlease"Показувати лише торенти, завантажені цим користувачем.

Натискання на ім'я завантажувача у списку торентів автоматично виконує пошук за користувачем.

Категорії та підкатегорії

Використайте вибір категорії (значок сітки біля рядка пошуку) для обмеження результатів однією категорією. Доступні категорії:

  • Аніме
  • Манга/Манхва/Комікс
  • Аудіо
  • Література
  • Живий екшн
  • Зображення
  • Програмне забезпечення
  • Хентай
  • Інше

Кожна категорія має підкатегорії (напр. Аніме: RAW, Субтитри/Аудіо, Музичне відео), які можна вибрати всередині модального вікна категорії.

Сортування та фільтри

Заголовки стовпців у списку торентів можна натискати для сортування за цим стовпцем (за зростанням або спаданням). Доступні стовпці сортування: дата, назва, розмір, завершені завантаження. Примітка: сідери та лічери — це живі значення з Redis, і їх не можна використовувати для сортування.

Фільтр мови

Використайте вибір мови (значок прапора) для відображення лише торентів із мітками певної мови.

RSS-стрічка

RSS-стрічка за адресою /rss містить останні завантаження. Додайте ?category=anime (або будь-який інший ярлик категорії) для фільтрації стрічки. Більшість торент-клієнтів підтримують автоматичне завантаження RSS безпосередньо з цього URL.

3. Завантаження торентів

Натисніть на будь-яку назву торента для відкриття панелі деталей. Звідси ви можете:

  • Завантажити .torrent — зберігає .torrent файл безпосередньо. Прямий URL: /torrents/{id}.torrent
  • Магнет-посилання — відкривається безпосередньо у вашому торент-клієнті через протокол URI магнету. URL: /torrents/{id}/magnet

Панель деталей також показує опис торента, список файлів, список трекерів та кількість сідерів/лічерів.

Застарілі посилання для завантаження

Старі посилання для завантаження AniRena все ще підтримуються та автоматично перенаправляють до правильного .torrent файлу за застарілим ID: /dl/{old_id}

Рекомендовані клієнти BitTorrent

Підійде будь-який сучасний клієнт BitTorrent. Наведені нижче клієнти рекомендовані і повністю підтримують BitTorrent v2 / гібридні торенти:

qBittorrent На сторінці завантаження натисніть Додаткові параметри завантаження і виберіть збірку з міткою lt20 (libtorrent 2.0). Стандартний інсталятор використовує libtorrent 1.2, який не підтримує чисті торренти v2.v2 підтримується
PicoTorrent Легкий клієнт Windows з вбудованою підтримкою BitTorrent v2 з коробки.v2 підтримується
BiglyBT Багатофункціональний кросплатформний клієнт на основі Azureus/Vuze з повною підтримкою v2.v2 підтримується

4. Створення акаунту

Реєстрація

Натисніть «Реєстрація» у навігаційній панелі. Виберіть ім'я користувача, вкажіть email-адресу та встановіть пароль (мінімальна довжина обов'язкова). Ви повинні прочитати та прийняти умови сайту перед створенням акаунту.

Активація email

Після реєстрації на вашу адресу надсилається лист підтвердження. Натисніть посилання в листі для активації акаунту. Якщо ви його не отримали, використайте посилання «Активувати акаунт» на сторінці входу для запиту нового коду.

Відновлення пароля

Якщо ви забули пароль, натисніть «Забули пароль» на сторінці входу та введіть вашу email-адресу. Вам буде надіслано посилання для відновлення. Посилання є одноразовим та дійсним протягом короткого часу.

5. Завантаження торентів

Перейдіть до «Завантажити» у навігаційній панелі. Ви повинні бути авторизовані з активним незаблокованим акаунтом. Сторінка завантаження має дві вкладки:

Вкладка Завантажити — надіслати існуючий .torrent файл

Перетягніть або виберіть .torrent файл. Після завантаження заповніть поля:

ПолеОбов'язковеОпис
Файл торентаТакФайл .torrent для завантаження.
НазваНіЗамінити відображувану назву торента. Якщо залишити порожнім, використовується назва, вбудована у файл торента.
КатегоріяТакКатегорія вмісту (Аніме, Манга, Аудіо тощо).
ПідкатегоріяНіБільш конкретний тип в межах категорії (напр. RAW, Субтитри/Аудіо).
МовиНіОдин або більше мовних тегів, що описують мову вмісту.
ГрупаНіПов'язати цей реліз з групою, учасником якої ви є.
ОписНіОпис у форматі Markdown, що відображається на сторінці деталей торента (максимум 65535 символів).
ПриватнийНіВстановлює прапор приватності в торенті, вимикаючи DHT/PEX. Корисно для торентів лише для трекерів.
URL оголошенняНіЗамінити або додати первинний URL оголошення трекера.
Додаткові трекериНіЗчитується з файлу торента. Не можна змінити під час завантаження — використовуйте вкладку «Створити», щоб налаштувати список трекерів.
КоментарНіЗамінити поле коментаря торента, вбудоване у файл.
Вимога до трекера AniRena

Ваш торент повинен містити принаймні одну URL-адресу трекера AniRena у списку announce (на будь-якому рівні). Сайт перевіряє це при завантаженні і відхилить торенти, які не містять трекера AniRena. Якщо ви створили торент без додавання трекера AniRena, завантажте його, а потім повторно завантажте з сайту — завантажений файл автоматично міститиме правильні трекери.

Вкладка Створити — побудувати новий торент

Вкладка «Створити» дозволяє створити новий .torrent з нуля, вказавши шляхи до файлів, URL трекерів та інші параметри торента безпосередньо в браузері. Отриманий торент надсилається з тими самими полями метаданих, що й вище.

Модерація

Завантаження автоматично перевіряються за списком шаблонів забороненого вмісту (назви, імена файлів, описи). Торенти, що відповідають забороненому шаблону, будуть відхилені. Дублікати торентів (той самий info hash) також відхиляються.

6. Ваш акаунт

Натисніть ваше ім'я користувача у верхньому правому куті для відкриття панелі профілю. Вона організована у складні розділи:

Налаштування

Змінюйте тему інтерфейсу, розмір шрифту, колірну схему, мову інтерфейсу та налаштування відображення, пов'язані з торентами. Зміни зберігаються автоматично.

Пароль

Введіть ваш поточний пароль та новий пароль двічі. Код підтвердження надсилається на вашу зареєстровану email-адресу та повинен бути введений для підтвердження зміни. Якщо увімкнено двофакторну автентифікацію, також потрібен ваш TOTP-код.

Двофакторна автентифікація (2FA)

Увімкніть двофакторну автентифікацію на основі TOTP за допомогою будь-якого додатку автентифікатора (напр. Google Authenticator, Aegis, Bitwarden). При увімкненні 2FA:

  1. Відскануйте QR-код (або введіть секрет вручну) у вашому додатку автентифікатора.
  2. Введіть 6-значний код, показаний у вашому додатку, для підтвердження налаштування.
  3. Збережіть показані коди відновлення — це одноразові коди для відновлення доступу, якщо ви втратите ваш пристрій.

Для вимкнення 2FA введіть ваш поточний TOTP-код та підтвердіть.

Активні сесії

Переглядайте всі поточні активні сесії входу, включаючи браузер, ОС, IP-адресу та час останньої активності. Натисніть «Відкликати» на будь-якій сесії, яку ви не впізнаєте. Ви також можете відкликати всі сесії одночасно для виходу з усіх пристроїв.

API-ключ

Згенеруйте особистий API-ключ для програмного завантаження торентів через AniRena API. Натисніть «Згенерувати ключ» для створення — повний ключ відображається один раз безпосередньо після генерації. Зберігайте його в безпечному місці; він не буде показаний повністю знову. Використайте «Відкликати» для постійного анулювання ключа.

Видалення акаунту

Запит на видалення акаунту починає 30-денний пільговий термін. Ваш акаунт негайно вимикається та остаточно видаляється через 30 днів. Ви можете скасувати видалення в будь-який час в цей термін, увійшовши та натиснувши «Скасувати видалення».

7. AniRena API

AniRena надає JSON API, що дозволяє програмно завантажувати торенти за допомогою особистого API-ключа. API застосовує ті самі правила, що й веб-інтерфейс: перевірки заборон, ліміти запитів та обмеження режиму сайту — все це діє. Кожне завантаження через API реєструється в журналі аудиту.

Автентифікація

API використовує двоетапний процес автентифікації. Спочатку обміняйте свій постійний ключ API на короткочасний bearer-токен, а потім передавайте цей токен у заголовку Authorization кожного запиту API.

Ваш ключ API доступний у розділі Ваш обліковий запис > Ключ API. Тримайте його в таємниці — будь-хто з ключем може отримувати bearer-токени і завантажувати від вашого імені. У разі компрометації негайно відкличте його і створіть новий.

Крок 1 — Отримати bearer-токен
POST/api/v1/auth/token

Надішліть POST-запит на кінцеву точку токена з вашим ключем API у заголовку Authorization. Тіло запиту не потрібне.

Authorization: ApiKey <your-api-key>
Відповідь із токеном
{
  "token":      "<bearer-token>",
  "token_type": "Bearer",
  "expires_in": 3600
}
Час життя токена

Bearer-токени залишаються дійсними до 3600 секунд з моменту видачі і можуть повторно використовуватися в кожному виклику до закінчення терміну дії. Коли токен закінчується, створіть новий через POST /api/v1/auth/token. Кожна відповідь все ще повертає поточний токен у заголовку X-New-Token для зворотної сумісності.

X-New-Token: <next-bearer-token>
Вхід одним запитом (з 2FA)
POST/api/v1/auth/login

Пройдіть автентифікацію за іменем користувача або електронною поштою та паролем в одному запиті й отримайте bearer-токен напряму. Якщо у вашому обліковому записі ввімкнено 2FA, додайте поточний код з застосунку-автентифікатора в totp_code (або код відновлення в recovery_code). За бажанням установіть new_api_key у true, щоб у тій самій відповіді також створити абсолютно новий постійний ключ API.

Тіло запиту
{
  "login":         "username or email",
  "password":      "your-password",
  "totp_code":     "123456",   // обов’язково, якщо ввімкнено 2FA (6 цифр)
  "recovery_code": "",         // альтернатива totp_code
  "new_api_key":   false       // установіть true, щоб також створити новий ключ API
}
Відповідь із токеном
{
  "ok":         true,
  "token":      "<bearer-token>",
  "token_type": "Bearer",
  "expires_in": 3600,
  "api_key":    "<new-api-key>"   // присутнє лише коли new_api_key було true
}

Bearer-токен працює точно так само, як отриманий через ‎/api/v1/auth/token. Поле api_key повертається лише коли new_api_key дорівнює true — збережіть його одразу, оскільки воно показується лише один раз і замінює будь-який попередній ключ.

Приклад — вхід і (за бажанням) отримання нового ключа 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"])

Крок 2 — Завантажити торент

POST/api/v1/torrents

Надішліть простий JSON POST-запит із bearer-токеном у заголовку Authorization.

Тіло запиту
ПолеТипОбов'язковеОпис
torrentstringТакВміст .torrent файлу, закодований в Base64.
categorystringТакЯрлик категорії: anime, manga, audio, literature, live, pictures, software, hentai, other.
namestringНіЗамінити відображувану назву торента.
sub_categorystringНіЯрлик підкатегорії (напр. raw, sub-audio). Повинен належати вибраній категорії.
languagesstring[]НіМасив мовних кодів BCP 47 (напр. en, ja).
group_idstringНіUUID групи, учасником якої ви є, для пов'язання з цим релізом.
descriptionstringНіОпис релізу у форматі Markdown (максимум 65535 символів).
commentstringНіЗамінити вбудоване поле коментаря торента.
is_privatebooleanНіВстановити значення true для увімкнення прапора приватності в торенті.
comments_enabledbooleanНіДозволити коментарі до цього торента. За замовчуванням true (увімкнено).
anime_idstringНіUUID запису аніме для прив'язки до цього торента. Отримайте UUID через GET /api/v1/anime/search. Повертає 400, якщо UUID не відповідає жодному відомому запису.
announcestringНіЗамінити або додати первинний URL оголошення.
trackersstringНіРозділений символом нового рядка список додаткових URL трекерів. Порожній рядок між URL створює новий рівень трекерів.
testbooleanНіВстановіть на true для пробного запуску: запит повністю перевіряється, але торент не зберігається. Використовуйте це для перевірки коректності даних перед реальним надсиланням.
Пробний запуск / тестовий режим Додайте "test": true до будь-якого запиту завантаження, щоб перевірити, чи він буде успішним без фактичного додавання торента. Застосовуються всі правила перевірки — автентифікація, пошук категорії, виявлення дублікатів, заборонені шаблони, вимоги до трекера — тому відповідь точно відображає те, що поверне реальне надсилання. Токен все одно ротується при успіху.
Відповідь на успішний пробний запуск — 200 OK
{
  "ok":           true,
  "test":         true,
  "name":         "My Torrent Title",
  "info_hash_v1": "aabbccddeeff...",
  "info_hash_v2": null
}
Доступні коди мов
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
Приклад запиту
# 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
Успішна відповідь — 200 OK
{
  "ok":           true,
  "id":           "550e8400-e29b-41d4-a716-446655440000",
  "name":         "My Torrent Title",
  "info_hash_v1": "aabbccddeeff...",
  "info_hash_v2": null
}
Відповіді про помилки
HTTP статусЗначення
400Невірне тіло запиту або відсутнє обов'язкове поле.
401Відсутній, прострочений або вже ротований bearer-токен. Повторно автентифікуйтесь через POST /api/v1/auth/token.
403Акаунт заблокований, вимкнений або IP заблоковано.
409Дублікат торента — торент з тим самим info hash вже існує.
422Файл торента не вдалося розібрати або він не пройшов перевірку (заборонений шаблон, невірна структура).
429Перевищено ліміт запитів. Повторіть після скидання вікна.
503Сайт у режимі обслуговування або лише для читання.

Обмеження запитів

Завантаження через API підпадають під окремий налаштовуваний ліміт запитів, відмінний від веб-інтерфейсу. Ліміт та вікно встановлюються адміністратором сайту. При перевищенні ліміту API повертає 429 Too Many Requests. Ліміт є на API-ключ.

Тримайте ваш API-ключ у секреті. Він надає повний доступ до завантаження під вашим акаунтом. Негайно відкличте та перегенеруйте його, якщо підозрюєте, що він був розкритий.

Створення файлів торента за допомогою torrent-builder

torrent-builder — це CLI-інструмент з відкритим вихідним кодом, побудований на libtorrent-rasterbar, що дозволяє створювати файли .torrent у форматах BitTorrent v1, v2 та hybrid з командного рядка. Він ідеально поєднується з AniRena upload API — створіть файл локально, а потім надішліть його через POST безпосередньо на трекер. cantalupo555/torrent-builder.

Збирання з вихідного коду

Вимагає CMake >= 3.28.3 та libtorrent-rasterbar >= 2.0.11. Клонуйте репозиторій та зберіть за допомогою 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 .
Основні прапори
ПолеОпис
--pathШлях до файлу або каталогу для пакування (обов'язково).
--outputІм'я вихідного файлу .torrent (обов'язково).
--versionФормат BitTorrent — 1 = v1, 2 = v2, 3 = hybrid (за замовчуванням: 3).
--trackerДодати URL оголошення трекера. Повторіть прапор для додавання кількох трекерів.
--commentВбудувати рядок коментаря метаданих у торент.
--privateВстановити прапор конфіденційності для обмеження розповсюдження лише переліченими трекерами.
--piece-sizeРозмір частини в КБ (16-32768). Залиште без значення для автоматичного вибору.
-iЗапустити покроковий інтерактивний режим конфігурації.
Наскрізний робочий процес: збирання -> завантаження

Наведені нижче приклади створюють hybrid-торент за допомогою torrent-builder, потім виконують автентифікацію через AniRena API та завантажують результат в одному скрипті.

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

Пошук метаданих торентів

POST/api/v1/torrents/search

Надішліть простий JSON POST-запит для отримання списків торентів із тими самими параметрами пошуку та фільтрації, доступними на сайті. Сам файл .torrent не повертається — для цього використовуйте звичайний маршрут завантаження.

# 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"])
Параметри пошуку
ПолеТипОбов'язковеОпис
qstringНіПовнотекстовий пошук. Підтримує префікси group:slug, group:"Name", user:name.
categorystringНіЯрлик категорії (напр. "anime").
sub_categorystringНіЯрлик підкатегорії (напр. "raw").
languagesstring[]НіМасив мовних кодів BCP 47 (напр. en, ja).
sortstringНіПоле сортування: date (за замовчуванням), size, seeders, leechers, completed, title.
orderstringНіНапрямок сортування: desc (за замовчуванням) або asc.
pageintegerНіНомер сторінки, починаючи з 1 (за замовчуванням 1).
per_pageintegerНіРезультатів на сторінці, 1–250 (за замовчуванням 50).
hide_adultbooleanНіВиключити торенти категорії для дорослих. За замовчуванням true для звичайних користувачів.
show_deadbooleanНіКоли false (за замовчуванням), торенти, старіші за пільговий період для мертвих торентів і без активних сидерів, виключаються. Установіть true, щоб їх включити.
Відповідь
{
  "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 — Кількість незвидалених коментарів до цього торента.

Обмеження запитів для пошуку

Пошукові запити підпадають під окремий налаштовуваний ліміт запитів (за замовчуванням 60 запитів за 60 секунд на API-ключ). При перевищенні ліміту повертається 429 Too Many Requests. Акаунти персоналу звільнені від ліміту.

Отримати деталі торента

GET/api/v1/torrent/{id}

Отримує повні метадані одного торента — включаючи поля, які кінцева точка пошуку пропускає, такі як опис у Markdown, вбудований коментар .torrent, список файлів із розміром кожного та повний макет рівнів трекерів. Коли доступно, живі лічильники сидерів і лічерів читаються з трекера.

Відповідь
{
  "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 — Живі лічильники з внутрішнього трекера; обидва повертають 0, коли сховище трекера не має запису для цього info hash або недоступне.

ext_seeders, ext_leechers — Найбільша кількість сидерів і лічерів, повідомлена будь-яким окремим зовнішнім трекером, який було scrape для цього торента. Трекери, що відстежують той самий рій, перетинаються, тому використовується максимум, а не сума; обидва повертають 0, коли жоден трекер не має даних scrape для цього info hash.

Відповіді про помилки
HTTP статусЗначення
400Ідентифікатор торента має бути UUID із 36 символів із дефісами або 32-символьним шістнадцятковим рядком.
401Відсутній, прострочений або вже ротований bearer-токен. Повторно автентифікуйтесь через POST /api/v1/auth/token.
404Торент не знайдено.
429Перевищено ліміт запитів. Повторіть після скидання вікна.
503Сайт у режимі обслуговування або лише для читання.

Отримання коментарів до торента

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

Отримати сторінкові коментарі для торента. Кількість коментарів на сторінку контролюється налаштуванням COMMENT_PER_PAGE у файлі .env сервера (за замовчуванням 20). Лише торенти з увімкненими коментарями повертатимуть результати — усі інші повертають 403.

Параметри запиту
ПолеТипОбов'язковеОпис
pageintegerНіНомер сторінки, починаючи з 1 (за замовчуванням 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"])
Відповідь
{
  "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
    }
  ]
}

Поле body є порожнім рядком, коли автора коментаря заблоковано або коментар видалено. Прапор author_banned вказує, який випадок застосовується.

Відповіді про помилки
HTTP статусЗначення
401Відсутній, прострочений або вже ротований bearer-токен. Повторно автентифікуйтесь через POST /api/v1/auth/token.
403Коментарі вимкнено для цього торента.
404Торент не знайдено.
503Сайт у режимі обслуговування або лише для читання.

Пошук записів аніме

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

Шукайте записи аніме за назвою, щоб отримати їх UUID. UUID можна передати як anime_id у тілі завантаження, щоб прив'язати торент до запису аніме під час завантаження, або використати з PUT /api/torrents/{id}/anime після завантаження. Автентифікація не потрібна. Підпорядковується тому самому обмеженню швидкості, що й пошук торентів (за замовчуванням 60 запитів за 60 секунд на 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"])
Параметри запиту
ПолеТипОбов'язковеОпис
qstringТакРядок пошуку заголовку (обов'язково). Зіставляється з заголовком та синонімами.
pageintegerНіНомер сторінки, починаючи з 1 (за замовчуванням 1).
per_pageintegerНіРезультатів на сторінці, 1–50 (за замовчуванням 10).
Відповідь
{
  "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
    }
  ]
}

Перегляд і отримання груп

GET/api/v1/groups

Повертає пагіновий список публічних груп (активних та незаблокованих). Потрібна автентифікація Bearer token.

GET/api/v1/groups/{id_or_slug}

Повертає одну публічну групу за числовим ID або slug. Повертає 404, якщо групу вимкнено або заблоковано.

Параметри запиту (лише список)
ПолеТипОбов'язковеОпис
qstringНіФільтр за назвою групи (необов'язково, часткове збіг).
pageintegerНіНомер сторінки (за замовчуванням 1).
per_pageintegerНіРезультатів на сторінку, 1–100 (за замовчуванням 20).
sortstringНіСтовпець сортування: name | slug | members | torrents | created (за замовчуванням name).
orderstringНіНапрямок сортування: asc або desc (за замовчуванням asc).
Відповідь (список)
{
  "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"
    }
  ]
}
Відповідь (одна)
{
  "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"
}
Відповіді про помилки
HTTP статусЗначення
401Відсутній, прострочений або вже ротований bearer-токен. Повторно автентифікуйтесь через POST /api/v1/auth/token.
404Групу не знайдено або вона не є публічно доступною.
429Перевищено ліміт запитів. Повторіть після скидання вікна.
503Сайт у режимі обслуговування або лише для читання.

8. Пожертви

Якщо ви бажаєте підтримати AniRena та допомогти покрити витрати на хостинг наших серверів і сервісів, ви можете надіслати пожертву на один із наступних криптовалютних гаманців:

Bitcoinbc1qy2h3ddq6ak5damvnf4r5vu3ydehhxrcq8gllwn
Ethereum0xCbaFe03832F95F86AF2536d52710e78C63b62Cd3
Solana3ucetj2XDGHQg9PVRPMxerNi7c6kX7GJkjQNg9yjwGeg
LitecoinLbpt61yX3RjGtB1Ef8vgVz6Hr6baQsTjVk

Будь-яке пожертвування, велике чи мале, дуже цінується та йде безпосередньо на підтримку роботи AniRena. Дякуємо за вашу підтримку!

9. Програмне забезпечення

AniRena Player — це безкоштовний десктопний застосунок, який дозволяє транслювати відео безпосередньо з торрентів, проіндексованих на цьому сайті, не чекаючи завершення повного завантаження. Просто вставте magnet-посилання або відкрийте файл .torrent — відтворення розпочнеться, щойно буде достатньо даних.

Обидві збірки повністю автономні — усі залежності упаковано всередині виконуваного файлу. Не потрібен інсталятор чи середовище виконання — просто завантажте та запустіть.

Windows автооновлення
  • v0.3.2 latest AniRena-Player_0.3.2_x64-setup.exe · 43.4 MB (33 завантажень)
Старіші версії
  • v0.3.1 AniRena-Player_0.3.1_x64-setup.exe · 43.9 MB (64 завантажень)
  • v0.3.0 AniRena-Player_0.3.0_x64-setup.exe · 43.7 MB (8 завантажень)
  • v0.2.9 AniRena-Player_0.2.9_x64-setup.exe · 43.5 MB (6 завантажень)
  • v0.2.8 AniRena-Player_0.2.8_x64-setup.exe · 43.5 MB (17 завантажень)
  • v0.2.7 AniRena-Player_0.2.7_x64-setup.exe · 43.5 MB (19 завантажень)
  • v0.2.6 AniRena-Player_0.2.6_x64-setup.exe · 43.4 MB (3 завантажень)
  • v0.2.5 AniRena-Player_0.2.5_x64-setup.exe · 43.4 MB (8 завантажень)

Інсталятор (.exe). Оновлюється сам у застосунку.

macOS · Apple Silicon автооновлення
  • v0.3.2 latest AniRena-Player_0.3.2_aarch64.dmg · 45.7 MB (2 завантажень)

Образ диска (.dmg) для Mac з Apple Silicon (M1 і новіші). Оновлюється сам у застосунку.

macOS · Intel автооновлення
  • v0.3.2 latest AniRena-Player_0.3.2_x64.dmg · 45.8 MB (2 завантажень)

Образ диска (.dmg) для Mac з Intel. Оновлюється сам у застосунку.

Linux · AppImage автооновлення
  • v0.3.2 latest AniRena-Player_0.3.2_amd64.AppImage · 95.1 MB (8 завантажень)
Старіші версії
  • v0.3.1 AniRena-Player_0.3.1_amd64.AppImage · 138.1 MB (19 завантажень)
  • v0.3.0 AniRena-Player_0.3.0_amd64.AppImage · 138.0 MB (4 завантажень)
  • v0.2.9 AniRena-Player_0.2.9_amd64.AppImage · 137.7 MB (35 завантажень)
  • v0.2.8 AniRena-Player_0.2.8_amd64.AppImage · 137.6 MB (23 завантажень)
  • v0.2.7 AniRena-Player_0.2.7_amd64.AppImage · 137.6 MB (20 завантажень)
  • v0.2.5 AniRena-Player_0.2.5_amd64.AppImage · 137.6 MB (18 завантажень)

Портативний єдиний файл, інсталяція не потрібна. Єдиний формат Linux із оновленням у застосунку.

Debian / Ubuntu
  • v0.3.2 latest AniRena-Player_0.3.2_amd64.deb · 14.2 MB (2 завантажень)
Старіші версії
  • v0.3.1 AniRena-Player_0.3.1_amd64.deb · 62.5 MB (4 завантажень)
  • v0.3.0 AniRena-Player_0.3.0_amd64.deb · 62.4 MB (3 завантажень)
  • v0.2.9 AniRena-Player_0.2.9_amd64.deb · 62.1 MB (4 завантажень)
  • v0.2.8 AniRena-Player_0.2.8_amd64.deb · 62.0 MB (26 завантажень)
  • v0.2.7 AniRena-Player_0.2.7_amd64.deb · 62.0 MB (12 завантажень)
  • v0.2.5 AniRena-Player_0.2.5_amd64.deb · 62.0 MB (11 завантажень)

Інсталяція: sudo apt install ./<file>.deb — оновлення через apt або нове завантаження, не у застосунку.

Fedora / RHEL
  • v0.3.2 latest AniRena-Player_0.3.2-1_x86_64.rpm · 14.2 MB (1 завантажень)
Старіші версії
  • v0.3.1 AniRena-Player_0.3.1-1_x86_64.rpm · 62.5 MB (3 завантажень)
  • v0.3.0 AniRena-Player_0.3.0-1_x86_64.rpm · 62.4 MB (2 завантажень)
  • v0.2.9 AniRena-Player_0.2.9-1_x86_64.rpm · 62.1 MB (23 завантажень)
  • v0.2.8 AniRena-Player_0.2.8-1_x86_64.rpm · 62.0 MB (5 завантажень)
  • v0.2.7 AniRena-Player_0.2.7-1_x86_64.rpm · 62.0 MB (8 завантажень)
  • v0.2.5 AniRena-Player_0.2.5-1_x86_64.rpm · 62.0 MB (7 завантажень)

Інсталяція: sudo dnf install ./<file>.rpm — оновлення через dnf або нове завантаження, не у застосунку.

Android · arm64
  • v0.3.2 latest AniRena-Player_0.3.2_arm64.apk · 110.3 MB (71 завантажень)
Старіші версії
  • v0.3.1 AniRena-Player_0.3.1_arm64.apk · 110.3 MB (62 завантажень)
  • v0.3.0 AniRena-Player_0.3.0_arm64.apk · 110.1 MB (8 завантажень)
  • v0.2.9 AniRena-Player_0.2.9_arm64.apk · 109.1 MB (12 завантажень)
  • v0.2.8 AniRena-Player_0.2.8_arm64.apk · 109.1 MB (22 завантажень)
  • v0.2.7 AniRena-Player_0.2.7_arm64.apk · 109.0 MB (17 завантажень)

Встановіть вручну на 64-бітних ARM-пристроях Android (більшість сучасних телефонів / планшетів). Оновлюється завантаженням нового APK.

Android · arm7
  • v0.3.2 latest AniRena-Player_0.3.2_arm7.apk · 97.9 MB (4 завантажень)
Старіші версії
  • v0.3.1 AniRena-Player_0.3.1_arm7.apk · 97.8 MB (15 завантажень)

Встановіть вручну на 32-бітні ARM-пристрої Android (старіші телефони / планшети). Оновлюється завантаженням нового APK.

Android · x86_64
  • v0.3.2 latest AniRena-Player_0.3.2_x86_64.apk · 114.3 MB (7 завантажень)
Старіші версії
  • v0.3.1 AniRena-Player_0.3.1_x86_64.apk · 114.3 MB (12 завантажень)
  • v0.3.0 AniRena-Player_0.3.0_x86_64.apk · 114.1 MB (4 завантажень)
  • v0.2.9 AniRena-Player_0.2.9_x86_64.apk · 113.1 MB (4 завантажень)
  • v0.2.8 AniRena-Player_0.2.8_x86_64.apk · 113.0 MB (9 завантажень)
  • v0.2.7 AniRena-Player_0.2.7_x86_64.apk · 113.0 MB (11 завантажень)

Встановіть вручну на 64-бітних x86-пристроях Android або емуляторах. Оновлюється завантаженням нового APK.