Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

90 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Videasy Decryptor API

FastAPI server that decrypts video streams from Videasy.net (Wingsdatabase providers: Yoru, Neon, Cypher, Breach, Moviebox) and fetches sources from TheMovieBox.xyz (MP4, DASH, HLS streams + CDN subtitles).


Architecture

                              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                         β”Œβ”€β”€β”€β–Άβ”‚  /sources  (Videasy / Wingsdatabase)β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”              β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚         β”‚              β”‚                                         β”‚
β”‚ Client  │───────────────    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚         β”‚              β”œβ”€β”€β”€β–Άβ”‚  /moviebox/sources (TheMovieBox.xyz) β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜              β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚                 β”‚
       β”‚                 β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
       β”‚                 └───▢│  /proxy  (CDN stream proxy)         β”‚
       β”‚                      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚
       β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
       └─▢│  /subtitles  β”‚  /opensubtitles  β”‚
          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Two isolated httpx connection pools prevent proxy streams from starving API requests:

Client Purpose Read Timeout Max Connections
api_client /sources, /moviebox/*, /subtitles, decryption 30s 20
proxy_client /proxy, /dash/* streaming unlimited 100

Seeds and guest tokens are cached in-memory with TTL, minimizing upstream network load and avoiding rate limits.


Quick Start

# Install dependencies
pip install -e .

# Run the server
uvicorn main:app --host 0.0.0.0 --port 8000

Environment Variables

All settings can be overridden via environment variables with the VIDEASY_ prefix:

Variable Default Description
VIDEASY_API_BASE https://api.speedracelight.com Speedracelight API base URL
VIDEASY_DEC_API https://enc-dec.app/api/dec-videasy Decryption endpoint
VIDEASY_ORIGIN https://player.videasy.to Default Origin header
VIDEASY_REFERER https://player.videasy.to/ Default Referer header
VIDEASY_REQUEST_TIMEOUT 30 Global request timeout (seconds)
VIDEASY_SUBSOURCE_API_KEY `` SubSource API key (get from subsource.net β†’ Profile β†’ API Key)
VIDEASY_MOVIEBOX_API_BASE https://h5-api.aoneroom.com Moviebox BFF API base
VIDEASY_MOVIEBOX_SITE_BASE https://themoviebox.xyz Moviebox site base used for referer/origin and URLs
VIDEASY_MOVIEBOX_PLAY_BASE https://themoviebox.xyz Moviebox play endpoint base

API Reference

GET /sources β€” Videasy / Wingsdatabase

Fetch decrypted HLS streams and subtitles for a movie or TV show.

Parameter Type Required Description
tmdbId string yes TMDB numerical ID
mediaType string yes movie or tv
provider string yes Yoru, Neon, Cypher, Breach, or Moviebox
title string Media title (auto-resolved via Cinemeta if omitted)
year string Release year (e.g. 2014)
seasonId string Season number, TV only (default: 1)
episodeId string Episode number, TV only (default: 1)
imdbId string IMDB ID (e.g. tt0816692)
# Movie
curl "http://localhost:8000/sources?tmdbId=157336&mediaType=movie&provider=Yoru"

# TV Show
curl "http://localhost:8000/sources?tmdbId=1396&mediaType=tv&title=Breaking+Bad&year=2008&seasonId=1&episodeId=1&provider=Neon"

GET /moviebox/sources β€” TheMovieBox.xyz

Fetch MP4 / DASH / HLS streams and CDN .srt subtitles. Supports reverse IMDB lookup.

Parameter Type Required Description
imdbId string * IMDB ID (e.g. tt9018736 β€” auto-resolves to Moviebox)
originalTitle string when imdbId Original title (from TMDB/Cinemeta)
englishTitle string English title (secondary title match)
year string Release year (exact match gate β€” mismatch returns empty sources)
mediaType string movie or tv (default: movie)
subjectId string * Moviebox internal numerical ID
url string * Full themoviebox.xyz URL
seasonId string Season number, TV only (default: 0)
episodeId string Episode number, TV only (default: 0)
cookie string Optional user cookie (e.g. mb_token=...; token=...)

* Provide at least one of imdbId, subjectId, or url.

Title matching (backend-enforced): after resolving the Moviebox detail, the resolved title must equal originalTitle or englishTitle (normalized exact match) AND the year must equal the requested year. On a title or year mismatch the response returns empty sources (plus titleMatched / yearMismatch flags in meta) so a different film is never streamed.

# By IMDB ID (original + english title + year for the match gate)
curl "http://localhost:8000/moviebox/sources?imdbId=tt9018736&originalTitle=Ketindihan&englishTitle=Sleep+Paralysis&year=2025&seasonId=1&episodeId=1"

# By subjectId
curl "http://localhost:8000/moviebox/sources?subjectId=8313012068559605176"

GET /moviebox/search β€” Search Moviebox

Search Moviebox catalog by keyword.

Parameter Type Required Description
q string yes Search keyword
page integer Page number (default: 1)
curl "http://localhost:8000/moviebox/search?q=Avatar&page=1"

Unified Response Schema

Both /sources and /moviebox/sources return the same UnifiedMediaResponse:

{
  "meta": {
    "title": "Avatar: The Last Airbender",
    "provider": "Moviebox",
    "mediaType": "tv",
    "tmdbId": "82452",
    "imdbId": "tt9018736",
    "year": "2024",
    "cover": "https://pbcdnw.aoneroom.com/...",
    "requestedTitle": "Avatar: The Last Airbender",
    "titleMatched": true,
    "yearMismatch": false
  },
  "episode": { "season": 1, "episode": 1 },
  "sources": [
    {
      "quality": "1080p",
      "size": "619MB",
      "url": "https://bcdnw.hakunaymatata.com/...",
      "type": "mp4",
      "headers": null,
      "source": "play"
    },
    {
      "quality": "Auto",
      "size": null,
      "url": "http://localhost:8000/proxy?url=https%3A%2F%2F...",
      "type": "dash",
      "headers": { "X-MB-Token": "..." },
      "source": "play"
    }
  ],
  "subtitles": [
    { "lang": "en", "language": "English", "url": "https://cacdn.hakunaymatata.com/..." },
    { "lang": "id", "language": "Indonesian", "url": "https://cacdn.hakunaymatata.com/..." }
  ]
}

episode is null for movies. size is a human-readable string or null.


GET /subtitles β€” List Subtitle Providers

curl "http://localhost:8000/subtitles"
# { "sources": ["yoru", "neon", "cypher", "breach", "moviebox", "opensubtitles", "wyzie", "subsource"] }

GET /subtitles/{provider} β€” Fetch Subtitles

Fetch subtitles from a specific video provider.

Parameter Type Required Description
title string yes Media title
tmdbId string yes TMDB numerical ID
mediaType string movie or tv (default: movie)
seasonId string Season number (default: 1)
episodeId string Episode number (default: 1)
imdbId string IMDB ID

GET /opensubtitles β€” OpenSubtitles

Fetch subtitles from OpenSubtitles by IMDB ID.

Parameter Type Required Description
imdbId string yes IMDB ID (e.g. tt1234567)

GET /subsource β€” SubSource (official REST API)

Fetch subtitles from SubSource grouped by language via the official api.subsource.net/api/v1/* REST API (requires VIDEASY_SUBSOURCE_API_KEY).

Parameter Type Required Description
title string yes Media title (e.g. Interstellar)
year string yes Release year (e.g. 2014)
tmdbId string yes TMDB numerical ID
imdbId string yes IMDB ID (e.g. tt0816692)
season integer Season number (TV only)
episode integer Episode number (TV only β€” selects the right SRT from season packs)
language string Language filter (e.g. indonesian, english)

For TV series each SubSource subtitle is a season pack whose ZIP contains one SRT per episode; the episode param (also forwarded to /subsource/download) selects the matching SRT file.

curl "http://localhost:8000/subsource?title=Kraken&year=2026&tmdbId=1110034&imdbId=tt19838566"
curl "http://localhost:8000/subsource?title=Breaking+Bad&year=2008&tmdbId=1396&imdbId=tt0903747&season=1&episode=5"

Each subtitle item references GET /subsource/download?subtitleId=<id>, which downloads the subtitle ZIP/SRT and returns it as VTT text.

curl "http://localhost:8000/subsource/download?subtitleId=1083935"
# WEBVTT
# ...

GET /proxy β€” CDN Stream Proxy

Proxy HLS manifests, MP4 videos, DASH segments, and subtitle files with Range request forwarding and CORS bypass.

Parameter Type Required Description
url string yes Full URL of the resource to proxy
headers string Optional JSON headers to forward

DASH .mpd manifests are automatically rewritten to route segments through /dash/{token}/....


GET /providers β€” List Providers

{
  "providers": [
    { "name": "Yoru", "endpoint": "cdn" },
    { "name": "Neon", "endpoint": "neon2" },
    { "name": "Cypher", "endpoint": "downloader2" },
    { "name": "Breach", "endpoint": "m4uhd" },
    { "name": "Moviebox", "endpoint": "moviebox" }
  ]
}

GET /health β€” Health Check

{ "status": "ok", "version": "3.0.0" }

Project Structure

main.py                       # Uvicorn entry point
passenger_wsgi.py             # Passenger WSGI entry point
pyproject.toml                # Dependencies & build config
videasy/
  app.py                      # FastAPI factory, lifespan, middleware
  config.py                   # Pydantic settings (env vars)
  deps.py                     # Dependency injection helpers
  core/
    cache.py                  # In-memory TTLCache
    exceptions.py             # Global exception handlers
    http_client.py            # Dual httpx clients (api + proxy)
  models/
    media.py                  # UnifiedMediaResponse schema
    source.py                 # Wingsdatabase source models
    subtitle.py               # Subtitle model
    common.py                 # ProviderInfo, ErrorDetail
  features/
    sources/                  # Videasy / Wingsdatabase
      routes.py               # GET /sources
      service.py              # Seed fetch, decrypt pipeline
      providers.py            # Provider definitions
    moviebox/                 # TheMovieBox.xyz
      routes.py               # GET /moviebox/sources, /moviebox/search
      service.py              # Detail, play streams, IMDB resolution, captions
    subtitles/                # Subtitle fetching
      routes.py               # GET /subtitles, /subtitles/{provider}, /opensubtitles
    info/                     # System endpoints
      routes.py               # GET /providers, /health
    player/                   # Embedded web player
      routes.py               # GET /player, GET /
      templates/
        player.html           # HTML5 video player
        index.html            # Landing page
  integrations/
    decryption.py             # enc-dec.app decryption + M3U8 expansion
    opensubtitles.py          # OpenSubtitles API v1
  proxy/                      # CDN proxy
    routes.py                 # GET /proxy
    stream.py                 # Streaming proxy with Range support
    middleware.py              # DASH segment ASGI middleware
    headers.py                # Domain-specific CDN headers
  utils/
    m3u8.py                   # Master M3U8 expansion
    quality.py                # Quality normalization & sorting
tests/                        # Pytest suite

Testing

.venv/bin/pytest

License

MIT

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages