{"id":50257193,"url":"https://github.com/walterwhite-69/kurovexa","last_synced_at":"2026-05-27T07:03:58.508Z","repository":{"id":359966079,"uuid":"1173214383","full_name":"walterwhite-69/Kurovexa","owner":"walterwhite-69","description":"Self-hosted anime streaming site with AniList sync, encrypted API, user accounts, and multi-source episode playback.","archived":false,"fork":false,"pushed_at":"2026-05-24T10:56:59.000Z","size":1995,"stargazers_count":6,"open_issues_count":0,"forks_count":5,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-24T12:14:52.276Z","etag":null,"topics":["anilist","anime","anime-streaming","animepahe","api","flask","hi-anime","miruro","python","self-hosted","vercel"],"latest_commit_sha":null,"homepage":"https://kurovexa.vercel.app/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/walterwhite-69.png","metadata":{"files":{"readme":"README.md","changelog":"changelogs.json","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-05T05:55:30.000Z","updated_at":"2026-05-24T10:57:02.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/walterwhite-69/Kurovexa","commit_stats":null,"previous_names":["walterwhite-69/kurovexa"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/walterwhite-69/Kurovexa","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/walterwhite-69%2FKurovexa","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/walterwhite-69%2FKurovexa/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/walterwhite-69%2FKurovexa/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/walterwhite-69%2FKurovexa/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/walterwhite-69","download_url":"https://codeload.github.com/walterwhite-69/Kurovexa/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/walterwhite-69%2FKurovexa/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33554782,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-27T02:00:06.184Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["anilist","anime","anime-streaming","animepahe","api","flask","hi-anime","miruro","python","self-hosted","vercel"],"created_at":"2026-05-27T07:03:50.196Z","updated_at":"2026-05-27T07:03:58.485Z","avatar_url":"https://github.com/walterwhite-69.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\r\n\r\n\u003cimg src=\"https://raw.githubusercontent.com/walterwhite-69/Kurovexa/main/favicon.svg\" width=\"64\" height=\"64\" alt=\"Kurovexa Logo\" /\u003e\r\n\r\n# Kurovexa\r\n\r\n**A clean, fast, and privacy-focused anime streaming site.**  \r\nBuilt with vanilla HTML/CSS/JS and a Python Flask backend.\r\n\r\n[![Deploy](https://img.shields.io/badge/Deploy-Vercel-black?style=flat-square\u0026logo=vercel)](https://vercel.com)\r\n[![Python](https://img.shields.io/badge/Python-3.10+-3776AB?style=flat-square\u0026logo=python\u0026logoColor=white)](https://python.org)\r\n[![License](https://img.shields.io/badge/License-MIT-purple?style=flat-square)](#license)\r\n\r\n\u003ca href=\"https://discord.gg/zs22ZJttZM\"\u003e\r\n    \u003cimg src=\"https://img.shields.io/badge/Discord-Join%20Community-5865F2?style=for-the-badge\u0026logo=discord\u0026logoColor=white\"/\u003e\r\n  \u003c/a\u003e\r\n\u003c/div\u003e\r\n\r\n---\r\n\r\n## What is this?\r\n\r\nKurovexa is a self-hosted anime streaming platform. No ads, no clutter. Just anime.\r\n\r\nIt 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.\r\n\r\n---\r\n\r\n## Features\r\n\r\n- **Spotlight \u0026 Trending** — dynamically loaded hero section and trending/popular grids\r\n- **Episode Player** — multi-source player with sub/dub toggle\r\n- **Browse \u0026 Search** — filter by genre, format, season, year\r\n- **Airing Schedule** — weekly anime schedule with countdown\r\n- **User Accounts** — register, login, JWT sessions, profile customization\r\n- **AniList Sync** — link your AniList account, track watch progress, sync lists\r\n- **Profile Customization** — Crunchyroll avatar and banner selection\r\n- **End-to-End Encryption** — all API calls go through `/api/secure/pipe` as encrypted payloads\r\n- **Changelog Modal** — shows users what's new on each update\r\n\r\n---\r\n\r\n## Sources\r\n\r\nEpisodes 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.\r\n\r\nSupported providers (via the API):\r\n\r\n| Provider | Type |\r\n|---|---|\r\n| AnimePahe | Sub |\r\n| Zoro / AniWave | Sub + Dub |\r\n| Anime Kai | Sub + Dub |\r\n| Gogoanime | Sub + Dub |\r\n\r\n\u003e Source availability depends on the anime API you configure. See [Setup](#setup).\r\n\r\n---\r\n\r\n## Stack\r\n\r\n| Layer | Tech |\r\n|---|---|\r\n| Frontend | HTML, CSS, JavaScript |\r\n| Backend | Python, Flask |\r\n| Database | Turso (SQLite edge DB) |\r\n| Auth | JWT + bcrypt |\r\n| Anime Data | Your configured anime API |\r\n| AniList | OAuth 2.0 + GraphQL |\r\n| Encryption | AES-256-GCM (Web Crypto API) |\r\n| Hosting | Vercel |\r\n\r\n---\r\n\r\n## Setup\r\n\r\n### 1. Clone the repo\r\n\r\n```bash\r\ngit clone https://github.com/walterwhite-69/Kurovexa.git\r\ncd Kurovexa\r\n```\r\n\r\n### 2. Install dependencies\r\n\r\n```bash\r\npip install -r requirements.txt\r\n```\r\n\r\n### 3. Configure environment\r\n\r\nCopy `.env.example` to `.env` and fill in your values:\r\n\r\n```env\r\nTURSO_URL=YOUR_TURSO_DATABASE_URL\r\nTURSO_TOKEN=YOUR_TURSO_AUTH_TOKEN\r\nJWT_SECRET=YOUR_STRONG_JWT_SECRET_HERE\r\nANILIST_CLIENT_ID=YOUR_ANILIST_CLIENT_ID\r\nANILIST_CLIENT_SECRET=YOUR_ANILIST_CLIENT_SECRET\r\nANILIST_REDIRECT_URI=http://localhost:5500/api/auth/anilist/callback\r\nRECAPTCHA_SECRET=YOUR_RECAPTCHA_V3_SECRET\r\nANIME_API_URL=YOUR_DEPLOYED_ANIME_API_URL\r\n```\r\n\r\n**Where to get these:**\r\n- **Turso** — [turso.tech](https://turso.tech) — free SQLite edge DB, get URL + token from dashboard\r\n- **AniList OAuth** — [anilist.co/settings/developer](https://anilist.co/settings/developer) — create an API client\r\n- **reCAPTCHA v3** — [google.com/recaptcha](https://www.google.com/recaptcha) — v3 site + secret keys\r\n- **Anime API** — deploy your own instance of **[Miruro API](https://github.com/walterwhite-69/Miruro-API)** and use its URL here\r\n\r\n### 4. Run locally\r\n\r\n```bash\r\npython server.py\r\n```\r\n\r\nOpen [http://localhost:5500](http://localhost:5500)\r\n\r\n### 5. Deploy to Vercel\r\n\r\n```bash\r\nvercel --prod\r\n```\r\n\r\nAdd all your `.env` variables to Vercel → Project Settings → Environment Variables.\r\n\r\n---\r\n\r\n## Encryption\r\n\r\nAll anime API calls are encrypted in transit. Here's how it works:\r\n\r\n1. The server generates a session key from your `JWT_SECRET` and injects it as a hidden `\u003cmeta\u003e` tag in the HTML\r\n2. The browser reads the key from the DOM (no network request)\r\n3. Every API call is encrypted with AES-256-GCM and sent to `/api/secure/pipe?e=...`\r\n4. The server decrypts, proxies the real request, compresses + re-encrypts the response\r\n5. The browser decrypts and renders the data\r\n\r\nNobody looking at the network tab sees raw API endpoints or responses.\r\n\r\n---\r\n\r\n## Project Structure\r\n\r\n```\r\nKurovexa/\r\n├── server.py                          # Flask backend\r\n├── vercel.json                        # Vercel deployment config\r\n├── requirements.txt\r\n├── .env.example\r\n├── index.html                         # Home page\r\n├── anime.html                         # Anime details + player\r\n├── browse.html                        # Browse \u0026 search\r\n├── schedule.html                      # Airing schedule\r\n├── profile.html                       # User profile\r\n├── js/\r\n│   ├── api.js                         # API layer + AES-GCM crypto\r\n│   ├── home.js\r\n│   ├── anime.js\r\n│   ├── browse.js\r\n│   └── profile.js\r\n├── css/\r\n│   ├── style.css\r\n│   └── profile.css\r\n└── assets/\r\n```\r\n\r\n---\r\n\r\n## AniList Integration\r\n\r\nConnect your AniList account from the profile page. Once linked:\r\n\r\n- Your watching/completed/planned lists sync with Kurovexa\r\n- Episode progress is tracked and saved back to AniList automatically\r\n- Stats (total episodes watched, mean score, etc.) show on your profile\r\n\r\n---\r\n\r\n## License\r\n\r\nMIT — do whatever you want with it. Credit appreciated but not required.\r\n\r\n---\r\n\r\n\u003cdiv align=\"center\"\u003e\r\n\r\nMade with too much free time and too many anime hours.\r\n\r\n\u003c/div\u003e\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwalterwhite-69%2Fkurovexa","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwalterwhite-69%2Fkurovexa","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwalterwhite-69%2Fkurovexa/lists"}