1. Bắt đầu

AniRena là chỉ mục torrent tập trung vào anime, manga, âm thanh và các phương tiện liên quan. Bạn có thể duyệt và tải torrent mà không cần tài khoản. Cần tài khoản để tải lên torrent, đăng lên nhóm hoặc dùng API.

Thanh điều hướng ở trên cung cấp quyền truy cập vào các khu vực chính của trang:

  • Trang chủ — trang danh sách và tìm kiếm torrent.
  • Tải lên — gửi torrent mới (yêu cầu đăng nhập).
  • Hướng dẫn — trang này.
  • Thống kê — thống kê toàn trang (torrent, peer, lượt tải theo thời gian).
  • Nhóm — thư mục nhóm phát hành.
  • RSS — RSS feed của các tải lên gần đây, có thể lọc theo danh mục.

Menu tài khoản (góc trên phải khi đã đăng nhập) mở bảng hồ sơ để điều chỉnh cài đặt, quản lý bảo mật và truy cập API key.

2. Duyệt & Tìm kiếm

Trang chủ liệt kê tất cả torrent theo thứ tự ngày tải lên. Dùng thanh tìm kiếm ở trên để lọc kết quả.

Tìm kiếm cơ bản

Gõ từ bất kỳ vào thanh tìm kiếm và nhấn Enter (hoặc nhấn biểu tượng tìm kiếm). Kết quả được xếp hạng theo độ liên quan khi có truy vấn.

Toán tử tìm kiếm

Các toán tử sau có thể kết hợp với truy vấn thông thường:

Toán tửVí dụHiệu ứng
user:"name"user:"SubsPlease"Chỉ hiển thị torrent tải lên bởi người dùng đó.

Nhấn tên người tải lên trong danh sách torrent sẽ tự động chạy tìm kiếm người dùng.

Danh mục & danh mục phụ

Dùng bộ chọn danh mục (biểu tượng lưới bên cạnh thanh tìm kiếm) để giới hạn kết quả theo một danh mục. Các danh mục có sẵn:

  • Anime
  • Manga/Manhwa/Comic
  • Âm thanh
  • Văn học
  • Live Action
  • Hình ảnh
  • Phần mềm
  • Hentai
  • Khác

Mỗi danh mục có danh mục phụ (vd. Anime thành RAW, Sub/Audio, Music Video) có thể chọn trong modal danh mục.

Sắp xếp & lọc

Tiêu đề cột trong danh sách torrent có thể nhấn để sắp xếp theo cột đó (tăng hoặc giảm dần). Các cột có thể sắp xếp: ngày, tên, kích thước, lượt tải. Lưu ý: seeder và leecher là giá trị trực tiếp từ Redis và không thể dùng để sắp xếp.

Lọc ngôn ngữ

Dùng bộ chọn ngôn ngữ (biểu tượng cờ) để chỉ hiển thị torrent được gắn thẻ với ngôn ngữ cụ thể.

Nguồn RSS

RSS feed tại /rss cung cấp các tải lên mới nhất. Thêm ?category=anime (hoặc slug danh mục khác) để lọc feed. Hầu hết client torrent hỗ trợ tự động tải từ URL này.

3. Tải Torrent

Nhấn tên bất kỳ torrent để mở bảng chi tiết. Từ đó bạn có thể:

  • Tải .torrent — lưu file .torrent trực tiếp. URL trực tiếp là /torrents/{id}.torrent
  • Liên kết Magnet — mở trực tiếp trong client torrent qua giao thức magnet URI. URL là /torrents/{id}/magnet

Bảng chi tiết cũng hiển thị mô tả torrent, danh sách file, danh sách tracker và số seeder/leecher.

Liên kết tải xuống cũ

Các liên kết tải xuống AniRena cũ vẫn được hỗ trợ và tự động chuyển hướng đến file .torrent đúng bằng ID cũ: /dl/{old_id}

Các client BitTorrent được khuyến nghị

Bất kỳ client BitTorrent hiện đại nào cũng hoạt động được. Các client dưới đây được khuyến nghị và hỗ trợ đầy đủ BitTorrent v2 / torrent lai:

qBittorrent Trên trang tải xuống, nhấp vào Tùy chọn tải xuống bổ sung và chọn bản dựng có nhãn lt20 (libtorrent 2.0). Trình cài đặt mặc định sử dụng libtorrent 1.2 không hỗ trợ torrent v2 thuần túy.v2 được hỗ trợ
PicoTorrent Client Windows nhẹ với hỗ trợ BitTorrent v2 gốc ngay từ đầu.v2 được hỗ trợ
BiglyBT Client đa nền tảng giàu tính năng dựa trên Azureus/Vuze với hỗ trợ v2 đầy đủ.v2 được hỗ trợ

4. Tạo tài khoản

Đăng ký

Nhấn Đăng ký trong thanh điều hướng. Chọn tên người dùng, cung cấp địa chỉ email và đặt mật khẩu (độ dài tối thiểu được áp dụng). Bạn phải đọc và chấp nhận điều khoản trước khi tạo tài khoản.

Kích hoạt email

Sau khi đăng ký, email xác minh sẽ được gửi đến địa chỉ của bạn. Nhấn liên kết trong email để kích hoạt tài khoản. Nếu không nhận được, dùng liên kết Kích hoạt tài khoản trên trang đăng nhập để yêu cầu mã mới.

Khôi phục mật khẩu

Nếu quên mật khẩu, nhấn Quên mật khẩu trên trang đăng nhập và nhập địa chỉ email. Liên kết khôi phục sẽ được gửi đến bạn. Liên kết chỉ dùng một lần và hết hạn sau thời gian ngắn.

5. Tải lên Torrent

Điều hướng đến Tải lên trong thanh điều hướng. Bạn phải đăng nhập với tài khoản hoạt động, chưa bị cấm. Trang tải lên có hai tab:

Tab Tải lên — gửi file .torrent hiện có

Kéo thả hoặc chọn file .torrent. Sau khi tải, điền các trường:

TrườngBắt buộcMô tả
File TorrentFile .torrent cần tải lên.
TênKhôngGhi đè tên hiển thị torrent. Nếu để trống, tên nhúng trong file torrent được dùng.
Danh mụcDanh mục nội dung (Anime, Manga, Âm thanh, v.v.).
Danh mục phụKhôngLoại cụ thể hơn trong danh mục (vd. RAW, Sub/Audio).
Ngôn ngữKhôngMột hoặc nhiều thẻ ngôn ngữ mô tả ngôn ngữ nội dung.
NhómKhôngLiên kết phát hành này với nhóm bạn là thành viên.
Mô tảKhôngMô tả định dạng Markdown hiển thị trên trang chi tiết torrent (tối đa 65535 ký tự).
Riêng tưKhôngĐặt cờ riêng tư trong torrent, vô hiệu hóa DHT/PEX. Hữu ích cho torrent chỉ dùng tracker.
URL AnnounceKhôngGhi đè hoặc thêm URL announce tracker chính.
Tracker bổ sungKhôngĐọc từ file torrent. Không thể chỉnh sửa trong khi tải lên — dùng tab Tạo nếu bạn muốn tùy chỉnh danh sách tracker.
Bình luậnKhôngGhi đè trường bình luận nhúng trong file torrent.
Yêu cầu tracker AniRena

Torrent của bạn phải có ít nhất một URL tracker AniRena trong danh sách announce (bất kỳ tier nào). Trang web kiểm tra điều này khi tải lên và sẽ từ chối torrent không có tracker AniRena. Nếu bạn tạo torrent mà không thêm tracker AniRena trước, hãy tải lên và tải lại từ trang web — file đã tải sẽ tự động có các tracker đúng.

Tab Tạo — xây dựng torrent mới

Tab Tạo cho phép tạo .torrent mới từ đầu bằng cách chỉ định đường dẫn file, URL tracker và các tham số torrent khác trực tiếp trong trình duyệt. Torrent kết quả được gửi với các trường metadata giống như trên.

Kiểm duyệt

Các tải lên được tự động kiểm tra dựa trên danh sách mẫu nội dung cấm (tên, tên file, mô tả). Torrent khớp với mẫu cấm sẽ bị từ chối. Torrent trùng lặp (cùng info hash) cũng bị từ chối.

6. Tài khoản của bạn

Nhấn tên người dùng ở góc trên phải để mở bảng hồ sơ. Được tổ chức thành các phần có thể thu gọn:

Cài đặt

Thay đổi giao diện, cỡ chữ, bảng màu, ngôn ngữ giao diện và tùy chọn hiển thị liên quan đến torrent. Thay đổi được lưu tự động.

Mật khẩu

Nhập mật khẩu hiện tại và mật khẩu mới hai lần. Mã xác minh được gửi đến email đã đăng ký và phải nhập để xác nhận. Nếu xác thực hai yếu tố đã bật, mã TOTP cũng cần thiết.

Xác thực hai yếu tố (2FA)

Bật xác thực hai yếu tố dựa trên TOTP bằng ứng dụng xác thực bất kỳ (vd. Google Authenticator, Aegis, Bitwarden). Khi bật 2FA:

  1. Quét mã QR (hoặc nhập thủ công bí mật) trong ứng dụng xác thực.
  2. Nhập mã 6 chữ số hiển thị trong ứng dụng để xác nhận thiết lập.
  3. Lưu mã khôi phục được hiển thị — đây là mã một lần để lấy lại quyền truy cập nếu mất thiết bị.

Để tắt 2FA, nhập mã TOTP hiện tại và xác nhận.

Phiên đăng nhập

Xem tất cả phiên đăng nhập đang hoạt động bao gồm trình duyệt, hệ điều hành, địa chỉ IP và thời gian hoạt động cuối. Nhấn Thu hồi trên phiên bạn không nhận ra. Bạn cũng có thể thu hồi tất cả phiên cùng lúc để đăng xuất mọi thiết bị.

Khóa API

Tạo khóa API cá nhân để tải lên torrent theo chương trình qua AniRena API. Nhấn Tạo khóa để tạo — khóa đầy đủ được hiển thị ngay sau khi tạo. Lưu trữ an toàn; sẽ không hiển thị đầy đủ nữa. Dùng Thu hồi để hủy khóa vĩnh viễn.

Xóa tài khoản

Yêu cầu xóa tài khoản bắt đầu thời gian ân hạn 30 ngày. Tài khoản bị vô hiệu hóa ngay lập tức và xóa vĩnh viễn sau 30 ngày. Bạn có thể hủy xóa bất cứ lúc nào trong khoảng thời gian đó.

7. AniRena API

AniRena cung cấp JSON API cho phép tải lên torrent theo chương trình bằng khóa API cá nhân. API áp dụng các quy tắc giống giao diện web: kiểm tra cấm, giới hạn tốc độ và hạn chế chế độ trang đều áp dụng. Mọi tải lên qua API đều được ghi vào nhật ký kiểm tra.

Xác thực

API sử dụng quy trình xác thực hai bước. Đầu tiên đổi API key vĩnh viễn của bạn lấy bearer token ngắn hạn, sau đó truyền token đó vào header Authorization của mọi yêu cầu API.

API key của bạn có tại Tài khoản của bạn > API key. Giữ bí mật — bất kỳ ai có key đều có thể lấy bearer token và tải lên thay mặt bạn. Nếu bị lộ, hãy thu hồi ngay và tạo cái mới.

Bước 1 — Lấy bearer token
POST/api/v1/auth/token

Gửi yêu cầu POST đến endpoint token với API key trong header Authorization. Không cần request body.

Authorization: ApiKey <your-api-key>
Phản hồi token
{
  "token":      "<bearer-token>",
  "token_type": "Bearer",
  "expires_in": 3600
}
Thời gian sống của token

Token Bearer vẫn có hiệu lực trong tối đa 3600 giây kể từ khi được cấp và có thể tái sử dụng cho mọi lệnh gọi cho đến khi hết hạn. Khi một token hết hạn, hãy tạo mới qua POST /api/v1/auth/token. Mỗi phản hồi vẫn trả về token hiện tại trong tiêu đề X-New-Token để tương thích ngược.

X-New-Token: <next-bearer-token>
Đăng nhập một yêu cầu (có 2FA)
POST/api/v1/auth/login

Xác thực bằng tên người dùng hoặc email và mật khẩu trong một yêu cầu và nhận token bearer trực tiếp. Nếu tài khoản của bạn đã bật 2FA, hãy đưa mã hiện tại từ ứng dụng xác thực vào totp_code (hoặc mã khôi phục vào recovery_code). Tùy chọn đặt new_api_key thành true để đồng thời tạo một khóa API vĩnh viễn mới trong cùng phản hồi.

Phần thân yêu cầu
{
  "login":         "username or email",
  "password":      "your-password",
  "totp_code":     "123456",   // bắt buộc nếu đã bật 2FA (6 chữ số)
  "recovery_code": "",         // thay thế cho totp_code
  "new_api_key":   false       // đặt true để tạo thêm khóa API mới
}
Phản hồi token
{
  "ok":         true,
  "token":      "<bearer-token>",
  "token_type": "Bearer",
  "expires_in": 3600,
  "api_key":    "<new-api-key>"   // chỉ có khi new_api_key là true
}

Token bearer hoạt động giống hệt token lấy từ ‎/api/v1/auth/token. Trường api_key chỉ được trả về khi new_api_key là true — hãy lưu ngay vì nó chỉ hiển thị một lần và thay thế mọi khóa trước đó.

Ví dụ — đăng nhập và (tùy chọn) lấy khóa API mới
# 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"])

Bước 2 — Tải lên torrent

POST/api/v1/torrents

Gửi yêu cầu POST JSON đơn giản với bearer token trong header Authorization.

Phần thân yêu cầu
TrườngLoạiBắt buộcMô tả
torrentstringNội dung file .torrent được mã hóa Base64.
categorystringSlug danh mục: anime, manga, audio, literature, live, pictures, software, hentai, other.
namestringKhôngGhi đè tên hiển thị torrent.
sub_categorystringKhôngSlug danh mục phụ (vd. raw, sub-audio). Phải thuộc danh mục đã chọn.
languagesstring[]KhôngMảng mã ngôn ngữ BCP 47 (vd. en, ja).
group_idstringKhôngUUID của nhóm bạn là thành viên để liên kết phát hành này.
descriptionstringKhôngMô tả phát hành định dạng Markdown (tối đa 65535 ký tự).
commentstringKhôngGhi đè trường bình luận nhúng trong torrent.
is_privatebooleanKhôngĐặt true để bật cờ riêng tư trong torrent.
comments_enabledbooleanKhôngCho phép bình luận trên torrent này. Mặc định là true (được bật).
anime_idstringKhôngUUID của một mục anime để liên kết với torrent này. Lấy UUID qua GET /api/v1/anime/search. Trả về 400 nếu UUID không khớp với bất kỳ mục nào đã biết.
announcestringKhôngGhi đè hoặc thêm URL announce chính.
trackersstringKhôngDanh sách URL tracker bổ sung phân tách bằng dòng mới. Dòng trống giữa các URL tạo tầng tracker mới.
testbooleanKhôngĐặt thành true để thực hiện chạy thử: yêu cầu được xác thực đầy đủ nhưng torrent không được lưu. Sử dụng điều này để xác minh payload của bạn là chính xác trước khi gửi thực sự.
Chạy thử / chế độ kiểm tra Thêm "test": true vào bất kỳ yêu cầu tải lên nào để kiểm tra xem nó có thành công mà không thực sự thêm torrent hay không. Tất cả các quy tắc xác thực đều áp dụng — xác thực danh tính, tra cứu danh mục, phát hiện trùng lặp, mẫu bị cấm, yêu cầu trình theo dõi — vì vậy phản hồi phản ánh chính xác những gì một lần gửi thực sự sẽ trả về. Token vẫn được xoay khi thành công.
Phản hồi thành công chạy thử — 200 OK
{
  "ok":           true,
  "test":         true,
  "name":         "My Torrent Title",
  "info_hash_v1": "aabbccddeeff...",
  "info_hash_v2": null
}
Mã ngôn ngữ có sẵn
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
Ví dụ yêu cầu
# 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
Phản hồi thành công — 200 OK
{
  "ok":           true,
  "id":           "550e8400-e29b-41d4-a716-446655440000",
  "name":         "My Torrent Title",
  "info_hash_v1": "aabbccddeeff...",
  "info_hash_v2": null
}
Phản hồi lỗi
Trạng thái HTTPÝ nghĩa
400Phần thân yêu cầu không hợp lệ hoặc thiếu trường bắt buộc.
401Bearer token bị thiếu, hết hạn hoặc đã được xoay. Xác thực lại qua POST /api/v1/auth/token.
403Tài khoản bị cấm, tắt hoặc IP bị chặn.
409Torrent trùng lặp — cùng info hash đã tồn tại.
422File torrent không thể phân tích hoặc không qua xác thực (mẫu cấm, cấu trúc không hợp lệ).
429Đã vượt quá giới hạn tốc độ. Thử lại sau khi cửa sổ đặt lại.
503Trang web đang bảo trì hoặc chế độ chỉ đọc.

Giới hạn tốc độ

Tải lên qua API chịu giới hạn tốc độ có thể cấu hình riêng với giao diện web. Giới hạn và cửa sổ được đặt bởi quản trị viên. Khi vượt quá giới hạn, API trả về 429 Too Many Requests. Giới hạn tính theo khóa API.

Giữ bí mật khóa API. Nó cấp quyền tải lên đầy đủ dưới tài khoản của bạn. Thu hồi và tạo lại ngay nếu bạn nghi ngờ đã bị lộ.

Tạo file torrent với torrent-builder

torrent-builder là công cụ CLI mã nguồn mở xây dựng trên libtorrent-rasterbar cho phép tạo file .torrent BitTorrent v1, v2 và hybrid từ dòng lệnh. Nó kết hợp hoàn hảo với AniRena upload API — tạo file cục bộ rồi POST trực tiếp lên tracker. cantalupo555/torrent-builder.

Biên dịch từ mã nguồn

Yêu cầu CMake >= 3.28.3 và libtorrent-rasterbar >= 2.0.11. Clone repository và biên dịch với 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 .
Các cờ chính
TrườngMô tả
--pathĐường dẫn đến file hoặc thư mục cần đóng gói (bắt buộc).
--outputTên file .torrent đầu ra (bắt buộc).
--versionĐịnh dạng BitTorrent — 1 = v1, 2 = v2, 3 = hybrid (mặc định: 3).
--trackerThêm URL announce của tracker. Lặp lại cờ để thêm nhiều tracker.
--commentNhúng chuỗi chú thích metadata vào torrent.
--privateĐặt cờ private để giới hạn phân phối chỉ cho các tracker được liệt kê.
--piece-sizeKích thước mảnh tính bằng KB (16-32768). Để trống để tự động chọn.
-iKhởi chạy chế độ cấu hình tương tác từng bước.
Quy trình làm việc đầu cuối: build -> upload

Các ví dụ dưới đây tạo torrent hybrid với torrent-builder, sau đó xác thực với AniRena API và tải kết quả lên trong một script.

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

Tìm kiếm metadata torrent

POST/api/v1/torrents/search

Gửi yêu cầu POST JSON đơn giản để lấy danh sách torrent với các tùy chọn tìm kiếm và lọc tương tự trên website. File .torrent không được trả về — dùng route tải xuống thông thường cho điều đó.

# 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"])
Tham số tìm kiếm
TrườngLoạiBắt buộcMô tả
qstringKhôngTìm kiếm văn bản tự do. Hỗ trợ tiền tố group:slug, group:"Tên", user:tên.
categorystringKhôngSlug danh mục (vd. "anime").
sub_categorystringKhôngSlug danh mục phụ (vd. "raw").
languagesstring[]KhôngMảng mã ngôn ngữ BCP 47 (vd. en, ja).
sortstringKhôngTrường sắp xếp: date (mặc định), size, seeders, leechers, completed, title.
orderstringKhôngHướng sắp xếp: desc (mặc định) hoặc asc.
pageintegerKhôngSố trang, bắt đầu từ 1 (mặc định 1).
per_pageintegerKhôngKết quả mỗi trang, 1–250 (mặc định 50).
hide_adultbooleanKhôngLoại trừ torrent danh mục người lớn. Mặc định true cho người dùng thông thường.
show_deadbooleanKhôngKhi false (mặc định), các torrent cũ hơn khoảng thời gian gia hạn cho torrent chết và không có seeder hoạt động sẽ bị loại trừ. Đặt thành true để bao gồm chúng.
Phản hồi
{
  "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 — Số lượng bình luận chưa bị xóa trên torrent này.

Giới hạn tốc độ tìm kiếm

Yêu cầu tìm kiếm chịu giới hạn tốc độ có thể cấu hình riêng (mặc định 60 yêu cầu mỗi 60 giây mỗi khóa API). Vượt quá giới hạn trả về 429 Too Many Requests. Tài khoản nhân viên được miễn.

Lấy chi tiết torrent

GET/api/v1/torrent/{id}

Lấy đầy đủ metadata cho một torrent đơn lẻ — bao gồm cả các trường mà endpoint tìm kiếm bỏ qua như mô tả Markdown, bình luận .torrent được nhúng, danh sách tệp với kích thước từng tệp, và toàn bộ bố cục tầng tracker. Khi có sẵn, số lượng seeder và leecher trực tiếp được đọc từ tracker.

Phản hồi
{
  "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 — Số lượng trực tiếp từ tracker nội bộ; cả hai trả về 0 khi kho tracker không có mục cho info hash này hoặc không thể truy cập.

ext_seeders, ext_leechers — Số seeder và leecher cao nhất được báo cáo bởi bất kỳ tracker bên ngoài đơn lẻ nào đã scrape cho torrent này. Các tracker theo dõi cùng một swarm chồng chéo, vì vậy sử dụng giá trị tối đa thay vì tổng; cả hai trả về 0 khi không có tracker nào có dữ liệu scrape cho info hash này.

Phản hồi lỗi
Trạng thái HTTPÝ nghĩa
400Id torrent phải là UUID 36 ký tự có dấu gạch ngang hoặc một chuỗi hex thuần 32 ký tự.
401Bearer token bị thiếu, hết hạn hoặc đã được xoay. Xác thực lại qua POST /api/v1/auth/token.
404Không tìm thấy torrent.
429Đã vượt quá giới hạn tốc độ. Thử lại sau khi cửa sổ đặt lại.
503Trang web đang bảo trì hoặc chế độ chỉ đọc.

Lấy bình luận torrent

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

Lấy bình luận phân trang cho một torrent. Số bình luận mỗi trang được kiểm soát bởi cài đặt COMMENT_PER_PAGE trong file .env của máy chủ (mặc định 20). Chỉ các torrent có bình luận được bật mới trả về kết quả — tất cả các torrent khác trả về 403.

Tham số truy vấn
TrườngLoạiBắt buộcMô tả
pageintegerKhôngSố trang, bắt đầu từ 1 (mặc định 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"])
Phản hồi
{
  "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
    }
  ]
}

Trường body là chuỗi rỗng khi tác giả bình luận bị cấm hoặc bình luận đã bị xóa. Cờ author_banned cho biết trường hợp nào áp dụng.

Phản hồi lỗi
Trạng thái HTTPÝ nghĩa
401Bearer token bị thiếu, hết hạn hoặc đã được xoay. Xác thực lại qua POST /api/v1/auth/token.
403Bình luận bị tắt cho torrent này.
404Không tìm thấy torrent.
503Trang web đang bảo trì hoặc chế độ chỉ đọc.

Tìm kiếm mục anime

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

Tìm kiếm các mục anime theo tiêu đề để lấy UUID của chúng. UUID có thể được truyền dưới dạng anime_id trong nội dung tải lên để liên kết torrent với mục anime tại thời điểm tải lên, hoặc sử dụng với PUT /api/torrents/{id}/anime sau khi tải lên. Không cần xác thực. Chịu giới hạn tốc độ tương tự như tìm kiếm torrent (mặc định 60 yêu cầu mỗi 60 giây mỗi 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"])
Tham số truy vấn
TrườngLoạiBắt buộcMô tả
qstringChuỗi tìm kiếm tiêu đề (bắt buộc). Khớp với tiêu đề và từ đồng nghĩa.
pageintegerKhôngSố trang, bắt đầu từ 1 (mặc định 1).
per_pageintegerKhôngKết quả mỗi trang, 1–50 (mặc định 10).
Phản hồi
{
  "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
    }
  ]
}

Liệt kê và lấy thông tin nhóm

GET/api/v1/groups

Trả về danh sách phân trang các nhóm công khai (đã bật và không bị khóa). Yêu cầu xác thực Bearer token.

GET/api/v1/groups/{id_or_slug}

Trả về một nhóm công khai theo ID số hoặc slug. Trả về 404 nếu nhóm bị tắt hoặc bị khóa.

Tham số truy vấn (chỉ danh sách)
TrườngLoạiBắt buộcMô tả
qstringKhôngLọc theo tên nhóm (tùy chọn, khớp chuỗi con).
pageintegerKhôngSố trang (mặc định 1).
per_pageintegerKhôngKết quả mỗi trang, 1–100 (mặc định 20).
sortstringKhôngCột sắp xếp: name | slug | members | torrents | created (mặc định name).
orderstringKhôngHướng sắp xếp: asc hoặc desc (mặc định asc).
Phản hồi (danh sách)
{
  "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"
    }
  ]
}
Phản hồi (đơn lẻ)
{
  "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"
}
Phản hồi lỗi
Trạng thái HTTPÝ nghĩa
401Bearer token bị thiếu, hết hạn hoặc đã được xoay. Xác thực lại qua POST /api/v1/auth/token.
404Không tìm thấy nhóm hoặc không thể truy cập công khai.
429Đã vượt quá giới hạn tốc độ. Thử lại sau khi cửa sổ đặt lại.
503Trang web đang bảo trì hoặc chế độ chỉ đọc.

8. Quyên góp

Nếu bạn muốn hỗ trợ AniRena và giúp trang trải chi phí lưu trữ máy chủ và dịch vụ của chúng tôi, bạn có thể gửi quyên góp đến một trong những ví tiền điện tử sau:

Bitcoinbc1qy2h3ddq6ak5damvnf4r5vu3ydehhxrcq8gllwn
Ethereum0xCbaFe03832F95F86AF2536d52710e78C63b62Cd3
Solana3ucetj2XDGHQg9PVRPMxerNi7c6kX7GJkjQNg9yjwGeg
LitecoinLbpt61yX3RjGtB1Ef8vgVz6Hr6baQsTjVk

Bất kỳ khoản quyên góp nào, dù lớn hay nhỏ, đều được đánh giá cao và đi trực tiếp vào việc duy trì hoạt động của AniRena. Cảm ơn sự ủng hộ của bạn!

9. Phần mềm

AniRena Player là một ứng dụng máy tính miễn phí cho phép bạn phát trực tiếp video từ các torrent được lập chỉ mục trên trang này — không cần đợi tải xuống hoàn tất. Chỉ cần dán liên kết magnet hoặc mở tệp .torrent, và quá trình phát sẽ bắt đầu ngay khi có đủ dữ liệu.

Cả hai bản đều hoàn toàn độc lập — mọi phụ thuộc đều được đóng gói bên trong tệp thực thi. Không cần trình cài đặt, không cần môi trường thực thi — chỉ cần tải xuống và chạy.

Windows tự động cập nhật
  • v0.3.2 latest AniRena-Player_0.3.2_x64-setup.exe · 43.4 MB (33 lượt tải)
Phiên bản cũ
  • v0.3.1 AniRena-Player_0.3.1_x64-setup.exe · 43.9 MB (64 lượt tải)
  • v0.3.0 AniRena-Player_0.3.0_x64-setup.exe · 43.7 MB (8 lượt tải)
  • v0.2.9 AniRena-Player_0.2.9_x64-setup.exe · 43.5 MB (6 lượt tải)
  • v0.2.8 AniRena-Player_0.2.8_x64-setup.exe · 43.5 MB (17 lượt tải)
  • v0.2.7 AniRena-Player_0.2.7_x64-setup.exe · 43.5 MB (19 lượt tải)
  • v0.2.6 AniRena-Player_0.2.6_x64-setup.exe · 43.4 MB (3 lượt tải)
  • v0.2.5 AniRena-Player_0.2.5_x64-setup.exe · 43.4 MB (8 lượt tải)

Trình cài đặt (.exe). Tự cập nhật trong ứng dụng.

macOS · Apple Silicon tự động cập nhật
  • v0.3.2 latest AniRena-Player_0.3.2_aarch64.dmg · 45.7 MB (2 lượt tải)

Ảnh đĩa (.dmg) cho máy Mac Apple Silicon (M1 trở lên). Tự cập nhật trong ứng dụng.

macOS · Intel tự động cập nhật

Ảnh đĩa (.dmg) cho máy Mac Intel. Tự cập nhật trong ứng dụng.

Linux · AppImage tự động cập nhật
  • v0.3.2 latest AniRena-Player_0.3.2_amd64.AppImage · 95.1 MB (8 lượt tải)
Phiên bản cũ
  • v0.3.1 AniRena-Player_0.3.1_amd64.AppImage · 138.1 MB (19 lượt tải)
  • v0.3.0 AniRena-Player_0.3.0_amd64.AppImage · 138.0 MB (4 lượt tải)
  • v0.2.9 AniRena-Player_0.2.9_amd64.AppImage · 137.7 MB (35 lượt tải)
  • v0.2.8 AniRena-Player_0.2.8_amd64.AppImage · 137.6 MB (23 lượt tải)
  • v0.2.7 AniRena-Player_0.2.7_amd64.AppImage · 137.6 MB (20 lượt tải)
  • v0.2.5 AniRena-Player_0.2.5_amd64.AppImage · 137.6 MB (18 lượt tải)

Tệp đơn lẻ di động, không cần cài đặt. Định dạng Linux duy nhất có tự động cập nhật trong ứng dụng.

Debian / Ubuntu
Phiên bản cũ
  • v0.3.1 AniRena-Player_0.3.1_amd64.deb · 62.5 MB (4 lượt tải)
  • v0.3.0 AniRena-Player_0.3.0_amd64.deb · 62.4 MB (3 lượt tải)
  • v0.2.9 AniRena-Player_0.2.9_amd64.deb · 62.1 MB (4 lượt tải)
  • v0.2.8 AniRena-Player_0.2.8_amd64.deb · 62.0 MB (26 lượt tải)
  • v0.2.7 AniRena-Player_0.2.7_amd64.deb · 62.0 MB (12 lượt tải)
  • v0.2.5 AniRena-Player_0.2.5_amd64.deb · 62.0 MB (11 lượt tải)

Cài đặt: sudo apt install ./<file>.deb — cập nhật qua apt hoặc tải xuống mới, không phải trong ứng dụng.

Fedora / RHEL
  • v0.3.2 latest AniRena-Player_0.3.2-1_x86_64.rpm · 14.2 MB (1 lượt tải)
Phiên bản cũ
  • v0.3.1 AniRena-Player_0.3.1-1_x86_64.rpm · 62.5 MB (3 lượt tải)
  • v0.3.0 AniRena-Player_0.3.0-1_x86_64.rpm · 62.4 MB (2 lượt tải)
  • v0.2.9 AniRena-Player_0.2.9-1_x86_64.rpm · 62.1 MB (23 lượt tải)
  • v0.2.8 AniRena-Player_0.2.8-1_x86_64.rpm · 62.0 MB (5 lượt tải)
  • v0.2.7 AniRena-Player_0.2.7-1_x86_64.rpm · 62.0 MB (8 lượt tải)
  • v0.2.5 AniRena-Player_0.2.5-1_x86_64.rpm · 62.0 MB (7 lượt tải)

Cài đặt: sudo dnf install ./<file>.rpm — cập nhật qua dnf hoặc tải xuống mới, không phải trong ứng dụng.

Android · arm64
  • v0.3.2 latest AniRena-Player_0.3.2_arm64.apk · 110.3 MB (71 lượt tải)
Phiên bản cũ
  • v0.3.1 AniRena-Player_0.3.1_arm64.apk · 110.3 MB (62 lượt tải)
  • v0.3.0 AniRena-Player_0.3.0_arm64.apk · 110.1 MB (8 lượt tải)
  • v0.2.9 AniRena-Player_0.2.9_arm64.apk · 109.1 MB (12 lượt tải)
  • v0.2.8 AniRena-Player_0.2.8_arm64.apk · 109.1 MB (22 lượt tải)
  • v0.2.7 AniRena-Player_0.2.7_arm64.apk · 109.0 MB (17 lượt tải)

Sideload trên thiết bị Android ARM 64-bit (hầu hết điện thoại / máy tính bảng hiện đại). Cập nhật bằng cách tải APK mới.

Android · arm7
Phiên bản cũ
  • v0.3.1 AniRena-Player_0.3.1_arm7.apk · 97.8 MB (15 lượt tải)

Cài đặt thủ công trên thiết bị Android ARM 32-bit (điện thoại / máy tính bảng cũ hơn). Cập nhật bằng cách tải xuống APK mới.

Android · x86_64
  • v0.3.2 latest AniRena-Player_0.3.2_x86_64.apk · 114.3 MB (7 lượt tải)
Phiên bản cũ
  • v0.3.1 AniRena-Player_0.3.1_x86_64.apk · 114.3 MB (12 lượt tải)
  • v0.3.0 AniRena-Player_0.3.0_x86_64.apk · 114.1 MB (4 lượt tải)
  • v0.2.9 AniRena-Player_0.2.9_x86_64.apk · 113.1 MB (4 lượt tải)
  • v0.2.8 AniRena-Player_0.2.8_x86_64.apk · 113.0 MB (9 lượt tải)
  • v0.2.7 AniRena-Player_0.2.7_x86_64.apk · 113.0 MB (11 lượt tải)

Sideload trên thiết bị Android x86 64-bit hoặc trình giả lập. Cập nhật bằng cách tải APK mới.