An open API service indexing awesome lists of open source software.

https://github.com/walterwhite-69/kurovexa

Self-hosted anime streaming site with AniList sync, encrypted API, user accounts, and multi-source episode playback.
https://github.com/walterwhite-69/kurovexa

anilist anime anime-streaming animepahe api flask hi-anime miruro python self-hosted vercel

Last synced: 28 days ago
JSON representation

Self-hosted anime streaming site with AniList sync, encrypted API, user accounts, and multi-source episode playback.

Awesome Lists containing this project

README

          

Kurovexa Logo

# Kurovexa

**A clean, fast, and privacy-focused anime streaming site.**
Built with vanilla HTML/CSS/JS and a Python Flask backend.

[![Deploy](https://img.shields.io/badge/Deploy-Vercel-black?style=flat-square&logo=vercel)](https://vercel.com)
[![Python](https://img.shields.io/badge/Python-3.10+-3776AB?style=flat-square&logo=python&logoColor=white)](https://python.org)
[![License](https://img.shields.io/badge/License-MIT-purple?style=flat-square)](#license)




---

## What is this?

Kurovexa is a self-hosted anime streaming platform. No ads, no clutter. Just anime.

It proxies episode data through your own backend so nothing leaks your API source. All API traffic is encrypted end-to-end using AES-256-GCM — requests and responses are both encrypted blobs, unreadable in the network tab.

---

## Features

- **Spotlight & Trending** — dynamically loaded hero section and trending/popular grids
- **Episode Player** — multi-source player with sub/dub toggle
- **Browse & Search** — filter by genre, format, season, year
- **Airing Schedule** — weekly anime schedule with countdown
- **User Accounts** — register, login, JWT sessions, profile customization
- **AniList Sync** — link your AniList account, track watch progress, sync lists
- **Profile Customization** — Crunchyroll avatar and banner selection
- **End-to-End Encryption** — all API calls go through `/api/secure/pipe` as encrypted payloads
- **Changelog Modal** — shows users what's new on each update

---

## Sources

Episodes are sourced through the connected anime API. Kurovexa is built to work with the **[Miruro API](https://github.com/walterwhite-69/Miruro-API)** — a self-hostable anime data + streaming API. Deploy your own instance and point `ANIME_API_URL` at it.

Supported providers (via the API):

| Provider | Type |
|---|---|
| AnimePahe | Sub |
| Zoro / AniWave | Sub + Dub |
| Anime Kai | Sub + Dub |
| Gogoanime | Sub + Dub |

> Source availability depends on the anime API you configure. See [Setup](#setup).

---

## Stack

| Layer | Tech |
|---|---|
| Frontend | HTML, CSS, JavaScript |
| Backend | Python, Flask |
| Database | Turso (SQLite edge DB) |
| Auth | JWT + bcrypt |
| Anime Data | Your configured anime API |
| AniList | OAuth 2.0 + GraphQL |
| Encryption | AES-256-GCM (Web Crypto API) |
| Hosting | Vercel |

---

## Setup

### 1. Clone the repo

```bash
git clone https://github.com/walterwhite-69/Kurovexa.git
cd Kurovexa
```

### 2. Install dependencies

```bash
pip install -r requirements.txt
```

### 3. Configure environment

Copy `.env.example` to `.env` and fill in your values:

```env
TURSO_URL=YOUR_TURSO_DATABASE_URL
TURSO_TOKEN=YOUR_TURSO_AUTH_TOKEN
JWT_SECRET=YOUR_STRONG_JWT_SECRET_HERE
ANILIST_CLIENT_ID=YOUR_ANILIST_CLIENT_ID
ANILIST_CLIENT_SECRET=YOUR_ANILIST_CLIENT_SECRET
ANILIST_REDIRECT_URI=http://localhost:5500/api/auth/anilist/callback
RECAPTCHA_SECRET=YOUR_RECAPTCHA_V3_SECRET
ANIME_API_URL=YOUR_DEPLOYED_ANIME_API_URL
```

**Where to get these:**
- **Turso** — [turso.tech](https://turso.tech) — free SQLite edge DB, get URL + token from dashboard
- **AniList OAuth** — [anilist.co/settings/developer](https://anilist.co/settings/developer) — create an API client
- **reCAPTCHA v3** — [google.com/recaptcha](https://www.google.com/recaptcha) — v3 site + secret keys
- **Anime API** — deploy your own instance of **[Miruro API](https://github.com/walterwhite-69/Miruro-API)** and use its URL here

### 4. Run locally

```bash
python server.py
```

Open [http://localhost:5500](http://localhost:5500)

### 5. Deploy to Vercel

```bash
vercel --prod
```

Add all your `.env` variables to Vercel → Project Settings → Environment Variables.

---

## Encryption

All anime API calls are encrypted in transit. Here's how it works:

1. The server generates a session key from your `JWT_SECRET` and injects it as a hidden `` tag in the HTML
2. The browser reads the key from the DOM (no network request)
3. Every API call is encrypted with AES-256-GCM and sent to `/api/secure/pipe?e=...`
4. The server decrypts, proxies the real request, compresses + re-encrypts the response
5. The browser decrypts and renders the data

Nobody looking at the network tab sees raw API endpoints or responses.

---

## Project Structure

```
Kurovexa/
├── server.py # Flask backend
├── vercel.json # Vercel deployment config
├── requirements.txt
├── .env.example
├── index.html # Home page
├── anime.html # Anime details + player
├── browse.html # Browse & search
├── schedule.html # Airing schedule
├── profile.html # User profile
├── js/
│ ├── api.js # API layer + AES-GCM crypto
│ ├── home.js
│ ├── anime.js
│ ├── browse.js
│ └── profile.js
├── css/
│ ├── style.css
│ └── profile.css
└── assets/
```

---

## AniList Integration

Connect your AniList account from the profile page. Once linked:

- Your watching/completed/planned lists sync with Kurovexa
- Episode progress is tracked and saved back to AniList automatically
- Stats (total episodes watched, mean score, etc.) show on your profile

---

## License

MIT — do whatever you want with it. Credit appreciated but not required.

---

Made with too much free time and too many anime hours.