1. 入门指南

AniRena 是一个专注于动漫、漫画、音频及相关媒体的种子索引网站。无需账户即可浏览和下载种子。上传种子、在团队发帖或使用 API 需要账户。

顶部导航栏提供对网站主要区域的访问:

  • 首页 — 种子列表和搜索页面。
  • 上传 — 提交新种子(需要登录)。
  • 指南 — 此页面。
  • 统计 — 全站统计(种子、节点、随时间变化的上传量)。
  • 团队 — 发布团队目录。
  • RSS — 最新上传的 RSS 订阅,可按分类筛选。

您的账户菜单(登录后位于右上角)会打开个人资料面板,您可以在此调整设置、管理安全选项以及访问 API 密钥。

2. 浏览与搜索

首页按上传日期列出所有种子。使用顶部搜索栏筛选结果。

基本搜索

在搜索栏中输入任意词语并按回车(或点击搜索图标)。查询激活时,结果按相关性排序。

搜索运算符

以下运算符可与普通查询组合使用:

运算符示例效果
user:"name"user:"SubsPlease"仅显示该用户上传的种子。

点击种子列表中的上传者名称会自动为您执行用户搜索。

分类与子分类

使用分类选择器(搜索栏旁边的网格图标)将结果限制在某一分类。可用分类有:

  • 动漫
  • 漫画/韩漫/漫画书
  • 音频
  • 文学
  • 真人影视
  • 图片
  • 软件
  • 成人内容
  • 其他

每个分类都有子分类(例如动漫下有 RAW、字幕/配音、音乐视频),可在分类弹窗中选择。

排序与筛选

种子列表的列标题可点击以按该列排序(升序或降序)。可用排序列:日期、名称、大小、完成下载数。注意:做种数和下载数是从 Redis 实时获取的,不能用于排序。

语言筛选

使用语言选择器(旗帜图标)仅显示标有特定语言的种子。

RSS 订阅

位于 /rss 的 RSS 订阅提供最新上传内容。添加 ?category=anime(或其他分类代号)可筛选订阅。大多数种子客户端支持直接从此 URL 进行 RSS 自动下载。

3. 下载种子

点击任意种子名称打开详情面板。在那里您可以:

  • 下载 .torrent — 直接保存 .torrent 文件。直接 URL 是 /torrents/{id}.torrent
  • 磁力链接 — 通过磁力 URI 协议直接在您的种子客户端中打开。URL 是 /torrents/{id}/magnet

详情面板还显示种子描述、文件列表、Tracker 列表以及做种/下载数量。

旧版下载链接

旧版 AniRena 下载链接仍受支持,并使用旧版 ID 自动重定向到正确的 .torrent 文件: /dl/{old_id}

推荐的 BitTorrent 客户端

任何现代 BitTorrent 客户端都可以使用。以下客户端是推荐的,并完全支持 BitTorrent v2 / 混合 torrent:

qBittorrent 在下载页面,点击额外下载选项并选择标有 lt20(libtorrent 2.0)的版本。默认安装程序使用 libtorrent 1.2,不支持纯 v2 torrent。支持 v2
PicoTorrent 轻量级 Windows 客户端,开箱即用支持 BitTorrent v2。支持 v2
BiglyBT 基于 Azureus/Vuze 的功能丰富的跨平台客户端,完全支持 v2。支持 v2

4. 创建账户

注册

点击导航栏中的「注册」。选择用户名、提供邮箱地址并设置密码(强制最小长度)。您必须阅读并接受网站条款才能创建账户。

邮箱激活

注册后,验证邮件将发送到您的地址。点击邮件中的链接激活您的账户。如果未收到,请使用登录页面上的「激活您的账户」链接申请新代码。

密码找回

如果您忘记密码,请在登录页面点击「忘记密码」并输入您的邮箱地址。找回链接将发送给您。该链接为一次性使用,并在短时间后过期。

5. 上传种子

在导航栏中点击「上传」。您必须以活跃且未被封禁的账户登录。上传页面有两个标签页:

上传标签——提交现有 .torrent 文件

拖放或选择 .torrent 文件。加载后,填写字段:

字段必填描述
种子文件要上传的 .torrent 文件。
名称覆盖种子显示名称。如果留空,则使用种子文件中嵌入的名称。
分类内容分类(动漫、漫画、音频等)。
子分类分类内更具体的类型(例如 RAW、字幕/配音)。
语言描述内容语言的一个或多个语言标签。
团队将此发布关联到您所在的团队。
描述显示在种子详情页面的 Markdown 格式描述(最多 65535 个字符)。
私有在种子中设置私有标志,禁用 DHT/PEX。适用于仅限 Tracker 的种子。
公告URL覆盖或添加主 Tracker Announce URL。
额外 Tracker从种子文件读取。上传时无法修改 — 如需自定义 Tracker 列表,请使用"创建"选项卡。
评论覆盖文件中嵌入的种子评论字段。
AniRena Tracker 要求

您的种子必须在公告列表中包含至少一个 AniRena Tracker URL(任意层级均可)。网站会在上传时检查此项,并拒绝不包含 AniRena Tracker 的种子。如果您在创建种子时忘记添加 AniRena Tracker,请先上传,然后从网站重新下载——下载的文件将自动包含正确的 Tracker。

创建标签——构建新种子

「创建」标签让您通过在浏览器中直接指定文件路径、Tracker URL 和其他种子参数,从头生成新的 .torrent。生成的种子提交时使用与上方相同的元数据字段。

内容审核

上传会自动检查封禁内容模式列表(名称、文件名、描述)。与封禁模式匹配的种子将被拒绝。重复种子(相同 info hash)也会被拒绝。

6. 您的账户

点击右上角您的用户名打开个人资料面板。它分为可折叠的部分:

设置

更改界面主题、字体大小、配色方案、界面语言和种子相关显示偏好。更改会自动保存。

密码

输入当前密码和新密码两次。验证码将发送到您的注册邮箱,必须输入以确认更改。如果启用了双重验证,还需要您的 TOTP 代码。

双重验证(2FA)

使用任意验证器应用(例如 Google Authenticator、Aegis、Bitwarden)启用基于 TOTP 的双重验证。启用 2FA 时:

  1. 在您的验证器应用中扫描二维码(或手动输入密钥)。
  2. 输入应用中显示的 6 位数代码以确认设置。
  3. 保存显示的恢复代码——这些是一次性代码,在您丢失设备时用于恢复访问。

要禁用 2FA,请输入您当前的 TOTP 代码并确认。

活跃会话

查看所有当前活跃的登录会话,包括浏览器、操作系统、IP 地址和最后活跃时间。点击任何不认识的会话上的「撤销」。您也可以一次撤销所有会话以从所有设备退出登录。

API 密钥

生成个人 API 密钥,用于通过 AniRena API 以编程方式上传种子。点击「生成密钥」创建一个——完整密钥在生成后立即显示一次。请安全存储;之后将不再完整显示。使用「撤销」永久使密钥失效。

删除账户

申请账户删除将启动 30 天宽限期。您的账户将立即禁用,30 天后永久删除。您可以在该窗口期内随时通过登录并点击「取消删除」来取消删除。

7. AniRena API

AniRena 提供了一个 JSON API,让您可以使用个人 API 密钥以编程方式上传种子。API 与网页界面应用相同的规则:封禁检查、速率限制和站点模式限制均适用。每次 API 上传都会记录在审计日志中。

认证

API 采用两步认证流程。首先将永久 API 密钥换取一个短期 Bearer Token,然后在每次 API 请求的 Authorization 请求头中传入该 Token。

您的 API 密钥可在「您的账户 > API 密钥」中找到。请妥善保密 — 任何持有密钥的人都可以获取 Bearer Token 并代您上传。如有泄露,请立即撤销并重新生成。

第一步 — 获取 Bearer Token
POST/api/v1/auth/token

向 Token 端点发送 POST 请求,在 Authorization 请求头中传入您的 API 密钥。无需请求体。

Authorization: ApiKey <your-api-key>
Token 响应
{
  "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>
单次请求登录(支持双重验证)
POST/api/v1/auth/login

在一次请求中使用用户名或邮箱和密码进行身份验证,并直接获取 bearer 令牌。如果你的账户已启用双重验证,请在 totp_code 中提供当前验证器代码(或在 recovery_code 中提供恢复代码)。可选地将 new_api_key 设为 true,以在同一响应中同时生成一个全新的永久 API 密钥。

请求正文
{
  "login":         "username or email",
  "password":      "your-password",
  "totp_code":     "123456",   // 若已启用双重验证则必填(6 位数字)
  "recovery_code": "",         // totp_code 的替代项
  "new_api_key":   false       // 设为 true 可同时生成新的 API 密钥
}
Token 响应
{
  "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 获取的完全相同。仅当 new_api_key 为 true 时才返回 api_key 字段——请立即保存,因为它只显示一次并会替换任何先前的密钥。

示例 — 登录并(可选)获取新的 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"])

第二步 — 上传种子

POST/api/v1/torrents

发送一个包含 Bearer Token 的普通 JSON POST 请求,Token 放在 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,用于关联此发布。
descriptionstringMarkdown 格式的发布描述(最多 65535 个字符)。
commentstring覆盖种子嵌入的评论字段。
is_privateboolean设置为 true 以在种子中启用私有标志。
comments_enabledboolean允许对此种子发表评论。默认为 true(已启用)。
anime_idstring要关联到此种子的动画条目的UUID。通过 GET /api/v1/anime/search 获取UUID。如果UUID与任何已知条目不匹配,则返回400。
announcestring覆盖或添加主 Announce URL。
trackersstring额外 Tracker URL 的换行分隔列表。URL 之间空行创建新的 Tracker 层级。
testboolean设置为 true 进行干运行:请求会被完整验证,但不会保存种子文件。在正式提交前,用它来验证您的数据是否正确。
干运行 / 测试模式 在任意上传请求中添加 "test": true,以检查请求是否会成功,而无需实际添加种子。所有验证规则均适用——身份验证、分类查找、重复检测、禁止模式、Tracker 要求——因此响应将准确反映实际提交的结果。成功时令牌仍会轮换。
干运行成功响应 — 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无效的请求正文或缺少必填字段。
401Bearer Token 缺失、已过期或已被轮换。请通过 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 是一个基于 libtorrent-rasterbar 构建的开源 CLI 工具,可让您从命令行创建 BitTorrent v1、v2 和 hybrid .torrent 文件。它与 AniRena upload API 完美配合 — 在本地生成文件,然后直接 POST 到 tracker。 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 文件名(必填)。
--versionBitTorrent 格式 — 1 = v1,2 = v2,3 = hybrid(默认:3)。
--tracker添加 tracker announce URL。重复该参数可添加多个 tracker。
--comment在种子中嵌入元数据注释字符串。
--private设置私有标志,将分发限制为仅限列出的 tracker。
--piece-size分片大小,单位 KB(16-32768)。留空则自动选择。
-i启动逐步交互式配置模式。
端到端工作流程:构建 -> 上传

以下示例使用 torrent-builder 构建 hybrid 种子,然后通过 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 — 此种子文件中未删除评论的数量。

搜索速率限制

搜索请求受独立的可配置速率限制约束(默认每个 API 密钥每 60 秒 60 次请求)。超出限制返回 429 Too Many Requests。工作人员账户不受限制。

获取种子详情

GET/api/v1/torrent/{id}

获取单个种子的完整元数据——包括搜索端点未返回的字段,例如 Markdown 描述、嵌入的 .torrent 注释、带每个文件大小的文件列表,以及完整的 Tracker 层级布局。可用时,从 Tracker 实时读取做种和下载者数量。

响应
{
  "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 — 来自内部 Tracker 的实时计数;当 Tracker 存储中没有此 info hash 的条目或无法访问时,两者均报告为 0。

ext_seeders, ext_leechers — 为此种子抓取的任何一个外部 Tracker 报告的最高做种者和下载者数量。跟踪同一群体的 Tracker 会重叠,因此使用最大值而非总和;当没有 Tracker 拥有该 info hash 的抓取数据时,两者均报告为 0。

错误响应
HTTP 状态码含义
400种子 ID 必须是 36 个字符的带连字符 UUID 或 32 个字符的纯十六进制字符串。
401Bearer Token 缺失、已过期或已被轮换。请通过 POST /api/v1/auth/token 重新认证。
404未找到种子。
429超出速率限制。请在窗口重置后重试。
503网站处于维护或只读模式。

获取种子评论

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

获取种子的分页评论。每页评论数由服务器 .env 文件中的 COMMENT_PER_PAGE 设置控制(默认 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 状态码含义
401Bearer Token 缺失、已过期或已被轮换。请通过 POST /api/v1/auth/token 重新认证。
403此种子的评论已被禁用。
404未找到种子。
503网站处于维护或只读模式。

搜索动漫条目

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

通过标题查找动画条目以获取其UUID。UUID可作为anime_id传入上传请求体,以在上传时将种子与动画条目关联,也可在上传后与 PUT /api/torrents/{id}/anime 配合使用。无需身份验证。受与种子搜索相同的速率限制约束(默认每IP每60秒60次请求)。

# 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 令牌身份验证。

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 状态码含义
401Bearer Token 缺失、已过期或已被轮换。请通过 POST /api/v1/auth/token 重新认证。
404群组未找到或无法公开访问。
429超出速率限制。请在窗口重置后重试。
503网站处于维护或只读模式。

8. 捐款

如果您希望支持AniRena并帮助支付我们服务器和服务的托管费用,欢迎向以下任一加密货币钱包发送捐款:

Bitcoinbc1qy2h3ddq6ak5damvnf4r5vu3ydehhxrcq8gllwn
Ethereum0xCbaFe03832F95F86AF2536d52710e78C63b62Cd3
Solana3ucetj2XDGHQg9PVRPMxerNi7c6kX7GJkjQNg9yjwGeg
LitecoinLbpt61yX3RjGtB1Ef8vgVz6Hr6baQsTjVk

任何捐款,无论大小,都深受感激,并直接用于维持AniRena的运营。感谢您的支持!

9. 软件

AniRena Player 是一款免费桌面应用,可让您直接从本站索引的种子中流式播放视频,无需等待完整下载完成。只需粘贴磁力链接或打开 .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 自动更新

磁盘映像 (.dmg),适用于 Apple Silicon Mac(M1 及更新机型)。在应用内自我更新。

macOS · Intel 自动更新

磁盘映像 (.dmg),适用于 Intel Mac。在应用内自我更新。

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.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.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.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.1 AniRena-Player_0.3.1_arm7.apk · 97.8 MB (15 次下载)

在 32 位 ARM Android 设备(较旧的手机/平板电脑)上侧载。通过下载新的 APK 进行更新。

Android · x86_64
旧版本
  • 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 进行更新。