1. Начало работы

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

Панель навигации вверху обеспечивает доступ к основным разделам сайта:

  • Главная — список торрентов и страница поиска.
  • Загрузить — отправить новый торрент (требуется вход).
  • Руководство — эта страница.
  • Статистика — общесайтовая статистика (торренты, пиры, загрузки со временем).
  • Группы — каталог групп выпуска.
  • RSS — RSS-лента последних загрузок, фильтруемая по категориям.

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

2. Просмотр и поиск

Главная страница показывает все торренты в порядке даты загрузки. Используйте строку поиска вверху для фильтрации результатов.

Базовый поиск

Введите слова в строку поиска и нажмите Enter (или кликните значок поиска). При активном запросе результаты ранжируются по релевантности.

Операторы поиска

Следующие операторы можно комбинировать с обычным запросом:

ОператорПримерЭффект
user:"name"user:"SubsPlease"Показывать только торренты, загруженные этим пользователем.

Клик на имя загрузчика в списке торрентов автоматически выполняет поиск пользователя.

Категории и подкатегории

Используйте селектор категорий (значок сетки рядом со строкой поиска) для ограничения результатов одной категорией.

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

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

Сортировка и фильтры

Заголовки столбцов в списке торрентов кликабельны для сортировки по этому столбцу. Примечание: сидеры и личеры — это живые значения из Redis, их нельзя использовать для сортировки.

Языковой фильтр

Используйте селектор языка (значок флага) для отображения только торрентов с конкретным языком.

RSS-лента

RSS-лента по адресу /rss предоставляет последние загрузки. Добавьте ?category=anime (или другой slug категории) для фильтрации.

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-файлДаЗагружаемый .torrent файл.
НазваниеНетЗаменить отображаемое название торрента.
КатегорияДаКатегория контента (Аниме, Манга, Аудио и т.д.).
ПодкатегорияНетБолее конкретный тип в рамках категории.
ЯзыкиНетОдин или несколько языковых тегов.
ГруппаНетСвязать этот релиз с группой, членом которой вы являетесь.
ОписаниеНетОписание в формате Markdown (макс. 65535 символов).
ПриватныйНетУстановить флаг приватности, отключив DHT/PEX.
URL анонсераНетЗаменить или добавить основной URL анонсера трекера.
Дополнительные трекерыНетСчитывается из файла торрента. Нельзя изменить при загрузке — используйте вкладку «Создать», чтобы настроить список трекеров.
КомментарийНетЗаменить поле комментария торрента.
Требование к трекеру AniRena

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

Вкладка «Создать» — создать новый торрент

Вкладка «Создать» позволяет создать новый .torrent с нуля, указав пути к файлам, URL трекеров и другие параметры прямо в браузере.

Модерация

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

6. Ваш аккаунт

Нажмите на ваше имя пользователя в правом верхнем углу для открытия панели профиля.

Настройки

Изменяйте тему интерфейса, размер шрифта, цветовую схему, язык интерфейса и предпочтения отображения торрентов.

Пароль

Введите текущий пароль и новый пароль дважды. Код подтверждения отправляется на зарегистрированный email.

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

Включите двухфакторную аутентификацию на основе TOTP с помощью любого приложения-аутентификатора. При включении 2FA:

  1. Отсканируйте QR-код (или введите секрет вручную) в приложении-аутентификаторе.
  2. Введите 6-значный код из приложения для подтверждения настройки.
  3. Сохраните показанные коды восстановления — они одноразовые для восстановления доступа.

Для отключения 2FA введите текущий TOTP-код и подтвердите.

Активные сессии

Просматривайте все активные сессии входа. Нажмите «Отозвать» для любой незнакомой сессии.

API-ключ

Создайте персональный API-ключ для программной загрузки торрентов через API AniRena.

Удалить аккаунт

Запрос на удаление аккаунта начинает 30-дневный льготный период. Вы можете отменить удаление в любое время в течение этого периода.

7. API AniRena

AniRena предоставляет JSON 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ДаSlug категории: anime, manga, audio, literature, live, pictures, software, hentai, other.
namestringНетЗаменить отображаемое название торрента.
sub_categorystringНетSlug подкатегории (например, 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 трекеров, разделённых переносами строк.
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 уже существует.
422Torrent-файл не удалось разобрать или он не прошёл проверку.
429Превышен лимит запросов. Повторите после сброса окна.
503Сайт в режиме обслуживания или только для чтения.

Ограничение частоты запросов

Загрузки через API подчиняются настраиваемому лимиту запросов, отдельному от веб-интерфейса. Лимит задаётся на 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НетSlug категории (например, "anime").
sub_categorystringНетSlug подкатегории (например, "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-ключ). Аккаунты сотрудников освобождены от ограничения.

Получить сведения о торренте

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.