Cinephage tackles a common pain point in the self-hosted media space: managing a dozen different apps for movies, TV shows, downloads, subtitles, and requests. Traditionally, tools like Radarr, Sonarr, Overseerr, Bazarr, and Prowlarr run as separate services, each with its own UI, database, and setup complexity. Cinephage throws all that into one bucket — a unified media management application built on a modern TypeScript stack.
what cinephage does and how it works
Under the hood, Cinephage is a Node.js 22+ backend paired with a Svelte 5 frontend, all written in TypeScript. It uses SQLite as its database, which fits the single-process monolith approach and keeps the footprint light for self-hosted environments.
The design goal is clear: replace six or more distinct media tools with one cohesive codebase, one database, and one UI. This consolidation reduces the overhead of running and maintaining multiple services, syncing data, and dealing with inconsistent user experiences.
Functionality-wise, Cinephage covers:
- Movie and TV show management (like Radarr and Sonarr)
- Indexer management (akin to Prowlarr)
- Subtitle fetching (like Bazarr)
- Media requests and approvals (akin to Overseerr)
- Cloudflare bypassing for scraping (via Camoufox integration)
- Live TV and IPTV discovery (Stalker portal support)
A notable architectural choice is the integration of Cloudflare bypass capabilities directly in the app, removing the need for separate proxy tools like FlareSolverr.
Cinephage supports popular download clients such as qBittorrent, SABnzbd, and NZBGet, but it also offers a streaming mode that bypasses the need for a download client entirely.
technical strengths and tradeoffs
What distinguishes Cinephage technically is its consolidation strategy and domain-specific streaming innovations.
First, the monolithic TypeScript approach contrasts with the typical microservices pattern in this space. While microservices offer separation of concerns and independent scaling, they introduce complexity in communication, data consistency, and deployment. Cinephage opts for a single codebase and unified database, simplifying deployment and data integrity but potentially limiting scalability and fault isolation. For most homelab or small-scale setups, this tradeoff favors simplicity and ease of use.
Second, Cinephage incorporates a built-in Cloudflare bypass using Camoufox. This is crucial for scraping media metadata from sites protected by Cloudflare’s anti-bot measures. Having this integrated avoids the common pitfall of managing external proxies or browser automation tools separately.
Third, the app generates .strm files that enable instant streaming of content without first downloading it fully. This is a neat feature for users who want to start watching right away without waiting. Additionally, Cinephage supports direct Usenet/NZB streaming with adaptive prefetching, optimizing buffer management to provide smooth playback.
The quality scoring system is sophisticated, with over 50 factors and customizable format rules. This system helps prioritize which releases to download or stream based on quality, format, and other metadata, improving the user experience by automating what would otherwise be manual filtering.
Code quality is generally solid given the complex domain it covers. Using TypeScript end-to-end improves maintainability and developer experience. The UI built with Svelte 5 is responsive and modern, making the user journey less fragmented than juggling multiple tools.
quick start
Cinephage can be deployed using Docker Compose or on bare metal with Node.js.
Docker (Recommended)
mkdir cinephage && cd cinephage
curl -O https://raw.githubusercontent.com/MoldyTaint/Cinephage/main/docker-compose.yaml
curl -O https://raw.githubusercontent.com/MoldyTaint/Cinephage/main/.env.example
cp .env.example .env
Edit .env to set at least BETTER_AUTH_SECRET (you can generate one with openssl rand -base64 32). Update volume mounts in docker-compose.yaml to point to your media and download directories.
Start the app:
docker compose up -d
By default, it runs on port 3000. Open http://localhost:3000 and follow the setup wizard.
Bare metal
Prerequisites: Node.js 22+, npm, git, and optionally ffmpeg (for media info).
git clone https://github.com/MoldyTaint/Cinephage.git
cd Cinephage
npm ci
npm run build
cp .env.example .env
Edit .env to set:
BETTER_AUTH_SECRET=<your-secret>
ORIGIN=http://localhost:3000
BETTER_AUTH_URL=http://localhost:3000
Start the app:
npm start
You can run Cinephage as a systemd service for production use.
verdict
Cinephage is well suited for self-hosters and homelab enthusiasts who want to simplify media management by consolidating multiple tools into a single app. The monolithic TypeScript stack offers a modern developer experience and reduces operational complexity.
The tradeoff is that Cinephage might not scale or isolate faults as well as a microservices-based approach. Also, some specialized features from dedicated tools could be less mature here due to the all-in-one design.
That said, the integration of Cloudflare bypass, direct streaming innovations, and a robust quality scoring system make it a practical choice for users who prefer an integrated, streamlined media stack without the headache of managing many separate services.
Related Articles
- Crawlee: a TypeScript library for stealthy web scraping and browser automation — Crawlee is a TypeScript library for web scraping and browser automation with human-like stealth. Supports Playwright, Pu
- SiYuan: A modular, privacy-first self-hosted knowledge management system with a TypeScript and Go hybrid stack — SiYuan is a self-hosted personal knowledge system blending TypeScript frontend and Go backend, offering block-level refe
→ GitHub Repo: MoldyTaint/Cinephage ⭐ 738 · TypeScript