├── .gitattributes ├── .github ├── CODEOWNERS ├── CONTRIBUTING.md ├── CODE_OF_CONDUCT.md └── workflows │ ├── linting.yml │ └── github_pages.yml ├── .prettierrc ├── README.md ├── public ├── cover.png ├── favicon.ico ├── icon-dark.png ├── icon-light.png └── assets │ └── proxy-url-example.gif ├── .prettierignore ├── pages ├── 404.tsx ├── extra │ ├── index.tsx │ ├── streaming.mdx │ └── selfhost.mdx ├── client │ ├── index.tsx │ ├── tmdb.mdx │ ├── introduction.mdx │ ├── upgrade.mdx │ ├── deploy.mdx │ ├── configuration.mdx │ └── changelog.mdx ├── proxy │ ├── index.tsx │ ├── introduction.mdx │ ├── configuration.mdx │ ├── changelog.mdx │ └── deploy.mdx ├── _app.tsx ├── backend │ ├── index.tsx │ ├── upgrade.mdx │ ├── changelog.mdx │ ├── introduction.mdx │ ├── deploy.mdx │ └── configuration.mdx ├── self-hosting │ ├── index.tsx │ ├── use-backend.mdx │ ├── hosting-intro.mdx │ ├── about-pwa.mdx │ └── troubleshooting.mdx ├── index.tsx └── instances.mdx ├── .editorconfig ├── .eslintignore ├── .gitignore ├── .eslintrc.cjs ├── next-env.d.ts ├── next.config.mjs ├── components ├── Logo.tsx └── Logo.module.css ├── tsconfig.json ├── package.json ├── LICENSE └── theme.config.tsx /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto eol=lf 2 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @movie-web/project-leads 2 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "all", 3 | "singleQuote": true 4 | } 5 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # movie-web docs 2 | 3 | Find it at https://movie-web.github.io/docs 4 | 5 | -------------------------------------------------------------------------------- /public/cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ligmajohn/mw-docs/HEAD/public/cover.png -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ligmajohn/mw-docs/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /public/icon-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ligmajohn/mw-docs/HEAD/public/icon-dark.png -------------------------------------------------------------------------------- /public/icon-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ligmajohn/mw-docs/HEAD/public/icon-light.png -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # Ignore index due to prettier removing setext headers 2 | *.index.md 3 | .github/CODEOWNERS 4 | -------------------------------------------------------------------------------- /pages/404.tsx: -------------------------------------------------------------------------------- 1 | import { createNotFoundPage } from '@neato/guider/client'; 2 | 3 | export default createNotFoundPage(); 4 | -------------------------------------------------------------------------------- /public/assets/proxy-url-example.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ligmajohn/mw-docs/HEAD/public/assets/proxy-url-example.gif -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | end_of_line = lf 5 | insert_final_newline = true 6 | indent_size = 2 7 | indent_style = space -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | .output 4 | public 5 | # Ignore index due to prettier removing setext headers 6 | *.index.md 7 | -------------------------------------------------------------------------------- /pages/extra/index.tsx: -------------------------------------------------------------------------------- 1 | import { createRedirect } from '@neato/guider/client'; 2 | 3 | export default createRedirect({ to: '/extra/streaming' }); 4 | -------------------------------------------------------------------------------- /pages/client/index.tsx: -------------------------------------------------------------------------------- 1 | import { createRedirect } from '@neato/guider/client'; 2 | 3 | export default createRedirect({ to: '/client/introduction' }); 4 | -------------------------------------------------------------------------------- /pages/proxy/index.tsx: -------------------------------------------------------------------------------- 1 | import { createRedirect } from '@neato/guider/client'; 2 | 3 | export default createRedirect({ to: '/proxy/introduction' }); 4 | -------------------------------------------------------------------------------- /.github/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | Please visit the [main document at primary repository](https://github.com/movie-web/movie-web/blob/dev/.github/CONTRIBUTING.md). 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | *.iml 3 | .idea 4 | *.log* 5 | .vscode 6 | .DS_Store 7 | coverage 8 | dist 9 | sw.* 10 | .env 11 | out 12 | .next 13 | -------------------------------------------------------------------------------- /pages/_app.tsx: -------------------------------------------------------------------------------- 1 | import '@neato/guider/style.css'; 2 | import { createGuiderApp } from '@neato/guider/client'; 3 | 4 | export default createGuiderApp(); 5 | -------------------------------------------------------------------------------- /pages/backend/index.tsx: -------------------------------------------------------------------------------- 1 | import { createRedirect } from '@neato/guider/client'; 2 | 3 | export default createRedirect({ to: '/backend/introduction' }); 4 | -------------------------------------------------------------------------------- /.github/CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | Please visit the [main document at primary repository](https://github.com/movie-web/movie-web/blob/dev/.github/CODE_OF_CONDUCT.md). 2 | -------------------------------------------------------------------------------- /.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: ['next', 'plugin:prettier/recommended'], 3 | rules: { 4 | '@next/next/no-img-element': 'off', 5 | }, 6 | }; 7 | -------------------------------------------------------------------------------- /pages/self-hosting/index.tsx: -------------------------------------------------------------------------------- 1 | import { createRedirect } from '@neato/guider/client'; 2 | 3 | export default createRedirect({ to: '/self-hosting/hosting-intro' }); 4 | -------------------------------------------------------------------------------- /pages/backend/upgrade.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Upgrade guide' 3 | --- 4 | 5 | # Upgrade guide 6 | 7 | There is only one major version, there is nothing to write here yet. 8 | -------------------------------------------------------------------------------- /next-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | // NOTE: This file should not be edited 5 | // see https://nextjs.org/docs/basic-features/typescript for more information. 6 | -------------------------------------------------------------------------------- /next.config.mjs: -------------------------------------------------------------------------------- 1 | import { guider } from '@neato/guider'; 2 | 3 | const withGuider = guider({ 4 | themeConfig: './theme.config.tsx', 5 | }); 6 | 7 | export default withGuider({ 8 | output: 'export', 9 | basePath: '/docs', 10 | }); 11 | -------------------------------------------------------------------------------- /components/Logo.tsx: -------------------------------------------------------------------------------- 1 | import Link from 'next/link'; 2 | import classes from './Logo.module.css'; 3 | import logoUrl from '../public/icon-light.png'; 4 | 5 | export function Logo() { 6 | return ( 7 | 8 | Logo of movie-web 9 | 10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /components/Logo.module.css: -------------------------------------------------------------------------------- 1 | .logo { 2 | border-radius: 5px; 3 | margin-left: -0.5rem; 4 | padding: 0.5rem; 5 | transition: transform 100ms ease-in-out, background-color 100ms ease-in-out; 6 | } 7 | 8 | .logo > img { 9 | height: 1.5rem; 10 | } 11 | 12 | .logo:hover { 13 | background-color: rgba(var(--colors-bgLightest)); 14 | } 15 | 16 | .logo:active { 17 | transform: scale(1.05); 18 | } 19 | -------------------------------------------------------------------------------- /pages/proxy/introduction.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Introduction' 3 | --- 4 | 5 | # Introduction to the proxy 6 | 7 | Our proxy is used to bypass CORS-protected URLs on the client side, allowing users to make requests to CORS protected endpoints without a backend server. 8 | 9 | The proxy is made using [Nitro by UnJS](https://nitro.unjs.io/) which supports building the proxy to work on multiple providers including Cloudflare Workers, AWS Lambda and [more...](https://nitro.unjs.io/deploy) 10 | 11 | Our recommended provider is Netlify due to its [generous free plan](https://www.netlify.com/pricing/#core-pricing-table). 12 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "lib": [ 4 | "dom", 5 | "dom.iterable", 6 | "esnext" 7 | ], 8 | "allowJs": true, 9 | "skipLibCheck": true, 10 | "strict": false, 11 | "noEmit": true, 12 | "incremental": true, 13 | "esModuleInterop": true, 14 | "module": "esnext", 15 | "moduleResolution": "Bundler", 16 | "resolveJsonModule": true, 17 | "isolatedModules": true, 18 | "jsx": "preserve" 19 | }, 20 | "include": [ 21 | "next-env.d.ts", 22 | "**/*.ts", 23 | "**/*.tsx" 24 | ], 25 | "exclude": [ 26 | "node_modules" 27 | ] 28 | } 29 | -------------------------------------------------------------------------------- /.github/workflows/linting.yml: -------------------------------------------------------------------------------- 1 | name: Linting and Testing 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | pull_request: 8 | 9 | jobs: 10 | linting: 11 | name: Run Linters 12 | runs-on: ubuntu-latest 13 | 14 | steps: 15 | - name: Checkout code 16 | uses: actions/checkout@v4 17 | 18 | - uses: pnpm/action-setup@v3 19 | with: 20 | version: 8 21 | 22 | - name: Install Node.js 23 | uses: actions/setup-node@v4 24 | with: 25 | node-version: 20 26 | cache: 'pnpm' 27 | 28 | - name: Install pnpm packages 29 | run: pnpm install 30 | 31 | - name: Run ESLint 32 | run: pnpm run lint 33 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "movie-web-docs", 3 | "version": "0.2.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "start": "next start", 9 | "lint": "next lint", 10 | "lint:fix": "next lint --fix" 11 | }, 12 | "devDependencies": { 13 | "@types/react": "18.2.73", 14 | "eslint": "^8.56.0", 15 | "eslint-config-next": "^14.1.4", 16 | "eslint-config-prettier": "^9.1.0", 17 | "eslint-plugin-prettier": "^5.1.2", 18 | "prettier": "^3.1.1", 19 | "typescript": "5.4.3" 20 | }, 21 | "dependencies": { 22 | "@neato/guider": "^0.1.5", 23 | "next": "^14.1.4", 24 | "next-seo": "^6.5.0", 25 | "react": "^18.2.0", 26 | "react-dom": "^18.2.0" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /pages/self-hosting/use-backend.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Configure backend' 3 | --- 4 | 5 | # Configure your client with the backend 6 | 7 | If you would like to use an alternative backend server (the server responsible for saving user data across devices) then you can specify your own URL **without needing to host your own movie-web frontend!** 8 | 9 | 10 | Changing your backend server will log you out of your account - make sure you have a copy of your 12-word passphrase saved in case you need to go back! 11 | 12 | 13 | 1. On movie-web, click the menu icon at the top right and then `Settings`. 14 | 1. Scroll down the page to the `Connections` section. 15 | 1. Enable the `Custom server` toggle and enter your backend URL in the input box that appears. 16 | 1. Click `Save` at the bottom right corner of your screen. 17 | -------------------------------------------------------------------------------- /pages/client/tmdb.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'TMDB API Key' 3 | --- 4 | 5 | # Getting an API Key 6 | 7 | In order to search for movies and TV shows, we use an API called ["The Movie Database" (TMDB)](https://www.themoviedb.org/). For your client to be able to search, you need to generate an API key for yourself. 8 | 9 | 10 | The API key is **free**, you just need to create an account. 11 | 12 | 13 | 1. Create an account at https://www.themoviedb.org/signup 14 | 1. You will be required to verify your email; click the link that you get sent to verify your account. 15 | 1. Go to https://www.themoviedb.org/settings/api/request to create a developer account. 16 | 1. Read the terms and conditions and accept them. 17 | 1. Fill out your details: 18 | - Select "Website" as type of use. 19 | - For the other details can put any values; they are not important. 20 | 1. Copy the "API Read Access Token" - **DO NOT COPY THE API Key - IT WILL NOT WORK** 21 | -------------------------------------------------------------------------------- /pages/proxy/configuration.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Configuration' 3 | --- 4 | 5 | # Proxy Config Reference 6 | 7 | Adding environment variables is different for every platform, [here's a guide on how to add environment variables on Cloudflare](https://developers.cloudflare.com/workers/configuration/environment-variables/#add-environment-variables-via-the-dashboard). You'll have to do some research on your own if you aren't hosting the proxy on Cloudflare. 8 | 9 | # Reference 10 | 11 | ### `TURNSTILE_SECRET` 12 | 13 | - Type: `string` 14 | - Default: `""` 15 | 16 | Turnstile secret key from the [Cloudflare dashboard](https://dash.cloudflare.com/sign-up?to=/:account/turnstile). 17 | 18 | 19 | Keep in mind that you will also need to [configure the Turnstile key on the client](../client/configuration.mdx#vite-turnstile-key) and **configure the [`JWT_SECRET`](#jwt-secret) below.** 20 | 21 | 22 | ### `JWT_SECRET` 23 | 24 | - Type: `string` 25 | - Default: `""` 26 | 27 | A [JWT](https://jwt.io/) secret key. This can be any random secret, but **must be 32 characters long.** 28 | -------------------------------------------------------------------------------- /pages/backend/changelog.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Changelog' 3 | --- 4 | 5 | # Version 1.3.1 6 | 7 | - Fixed bug where "false" env variables weren't treated as false for booleans 8 | - Added ARM support for hosted docker container 9 | - Stopped using JSON for recaptcha verifications. 10 | 11 | # Version 1.3.0 12 | 13 | For this update, you will need to run migrations. 14 | 15 | - proxy url syncing 16 | - remove npm usage, replace with pnpm 17 | - add postgresql ssl support 18 | 19 | # Version 1.2.0 20 | 21 | 22 | For this update, you will need to run migrations. 23 | 24 | 25 | - [Added option to trust Cloudflare IP headers for ratelimits](./configuration.mdx#server-trust-cloudflare) 26 | - Removed unused table 27 | - Optimized prometheus metrics, should make less indexes 28 | 29 | # Version 1.1.5 30 | 31 | - Prometheus metrics endpoint 32 | - Account creation/deletion endpoints 33 | - Endpoints for importing old account data 34 | - Endpoints for syncing data 35 | - [Ratelimit system](./configuration.mdx#ratelimits) 36 | - [Captcha system](./configuration.mdx#captcha) 37 | -------------------------------------------------------------------------------- /pages/proxy/changelog.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Changelog' 3 | --- 4 | 5 | # Version 2.1.3 6 | - Upgrade nitro, which fixes issues on AWS lambda 7 | 8 | # Version 2.1.2 9 | - Block more headers, be more anonymous (only works on non-cloudflare platforms) 10 | - Add package version to route `/` for debugging purposes 11 | - Add REQ_DEBUG=true variable to allow for logging all requests made. 12 | - Remove old console.log 13 | 14 | # Version 2.1.1 15 | - Fix support for JWT on non-Cloudflare platforms 16 | - Fix header copying logic so User-Agent, Referer and Origin work properly 17 | - Upgrade h3 18 | 19 | # Version 2.1.0 20 | 21 | - [Added Turnstile integration](./configuration.mdx#turnstile-secret) to secure your workers from abuse. 22 | 23 | # Version 2.0.1 24 | 25 | - Bugfix where sometimes body would double read 26 | - Bugfix where sometimes no response would be given at all due to race condition 27 | 28 | # Version 2.0.0 29 | 30 | - Full rewrite, now supports multiple platforms: nodejs, Cloudflare, AWS lambda 31 | - Standard proxy headers are no longer sent through. Which now doesn't send a client ip through anymore. 32 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 movie-web 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /.github/workflows/github_pages.yml: -------------------------------------------------------------------------------- 1 | name: "docs-deploy" 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | 8 | jobs: 9 | build: 10 | name: Build 11 | runs-on: ubuntu-latest 12 | steps: 13 | - name: Checkout 14 | uses: actions/checkout@v4 15 | 16 | - uses: pnpm/action-setup@v2 17 | with: 18 | version: 8 19 | 20 | - name: Setup Node 21 | uses: actions/setup-node@v4 22 | with: 23 | node-version: "20" 24 | cache: pnpm 25 | 26 | - name: Install dependencies 27 | run: pnpm install --frozen-lockfile 28 | 29 | - name: Build 30 | run: pnpm build 31 | 32 | - name: Upload 33 | uses: actions/upload-pages-artifact@v3 34 | with: 35 | path: ./out 36 | 37 | deploy: 38 | needs: build 39 | permissions: 40 | pages: write 41 | id-token: write 42 | environment: 43 | name: github-pages 44 | url: ${{ steps.deployment.outputs.page_url }} 45 | runs-on: ubuntu-latest 46 | steps: 47 | - name: Deploy to GitHub Pages 48 | id: deployment 49 | uses: actions/deploy-pages@v4 50 | -------------------------------------------------------------------------------- /pages/client/introduction.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Introduction' 3 | --- 4 | 5 | # Introduction to the client 6 | 7 | The client is what users sees when navigating to your domain, it's the main part of the application and houses the interface and all of the scraping logic. 8 | 9 | ## Progressive Web App 10 | 11 | The client can be optionally ran as a [PWA](https://web.dev/explore/progressive-web-apps), which allows it to be installed on a mobile device. **This can be hard to do correctly and really hard if not almost impossible to reverse**, so it's generally not recommended to do so if you don't have experience hosting PWAs. If you understand the risks and still want to continue, then read more about it [here](../self-hosting/about-pwa.mdx). 12 | 13 | ## Configuration 14 | 15 | The client features various configuration options, some of which are required for the client to function. [If you are using Vercel to host the client](./deploy.mdx#method-1-vercel-recommended), then the required variables are a necessary part of creating the site, if you're using another host, or hosting it for yourself, you'll need to set them up yourself. 16 | 17 | You can view all of the configuration options on the [configurations page](./configuration.mdx). 18 | -------------------------------------------------------------------------------- /pages/self-hosting/hosting-intro.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Start self-hosting' 3 | --- 4 | 5 | # How to self-host 6 | 7 | 8 | We provide support on a case-by-case basis. If you have any questions, feel free to ask in our [Discord server](https://movie-web.github.io/links/discord). 9 | 10 | 11 | Since movie-web has many different components, there are a few configurations of how you can host it. Each of these configurations has their own benefits, whether that be having complete control over your data or customizing your experience. 12 | **If you don't know what to choose, go with [method 1.](#method-1-only-host-the-frontend)** 13 | 14 | ## Method 1 - Only host the frontend 15 | 16 | With this method, you only host the essential parts that make movie-web work. But keep using the account server from official movie-web. 17 | This method is the easiest to self-host and is recommended for most users. 18 | 19 | 1. [Set up the Proxy!](../proxy/deploy.mdx) 20 | 2. [Set up the Client!](../client/deploy.mdx) 21 | 22 | ## Method 2 - Only host the account server 23 | 24 | If you want to own your own data, it's possible to self-host just the account server and nothing else. 25 | This method is only recommended if you have experience hosting databases or other similar stateful applications. 26 | 27 | 1. [Set up the Backend!](../backend/deploy.mdx) 28 | 2. [Configure the Client!](../client/deploy.mdx) 29 | 30 | ## Method 3 - Host everything 31 | 32 | If you want an instance that's completely isolated from the official movie-web. You can self-host all of the parts yourself, though this method is not recommended for inexperienced hosters. 33 | 34 | 1. [Set up the Proxy!](../proxy/deploy.mdx) 35 | 2. [Set up the Backend!](../backend/deploy.mdx) 36 | 3. [Set up the Client!](../client/deploy.mdx) 37 | -------------------------------------------------------------------------------- /pages/backend/introduction.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Introduction' 3 | --- 4 | 5 | # Introduction to the backend 6 | 7 | The backend is essentially just an account server. It handles user accounts, syncing, and other account related features. 8 | 9 | ## Recommended Community Backend 10 | 11 | To keep consistency and compatibility between different instances our partner, [lonelil](https://github.com/lonelil), has kindly offered to host a movie-web backend with a copy of the original data from the now unavailable movie-web.app backend. You can access this backend at: `https://mw-backend.lonelil.com` and `https://mw-backend.lonelil.ru` 12 | Meaning users **do not** have to set up a new account; you can use your previous passphrase from movie-web, and all of your data will be there! 13 | 14 | ## Metrics 15 | 16 | The backend exposes an endpoint for [Prometheus metrics](https://prometheus.io/) which allows you to keep track of the backend more easily, it can be accessed on `/metrics`. 17 | To view these metrics properly, you'll need to use an analytics program like [Grafana](https://grafana.com/), [which can visualize logs from Prometheus](https://prometheus.io/docs/visualization/grafana/). 18 | 19 | ## Security 20 | 21 | Optionally, there are a few security settings: 22 | 23 | - [Recaptcha support](./configuration.mdx#captcha), the server can verify Recaptcha v3 tokens on register and login. 24 | - [Ratelimits](./configuration.mdx#ratelimits), some expensive endpoints have ratelimits, but only when enabled. This requires an additional redis connection. 25 | 26 | ## Migrations 27 | 28 | Migrations help keep your database schema in sync with everyone else. To run migrations, you can use the `pnpm migration:up` command inside the docker container or in your command-line if you're not using docker. 29 | 30 | Alternatively, you can enable the [`postgres.migrateOnBoot`](./configuration.mdx#postgres-migrate-on-boot) variable and it will be automatically migrated on boot. 31 | -------------------------------------------------------------------------------- /pages/self-hosting/about-pwa.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'PWA vs no-PWA' 3 | --- 4 | 5 | # About Self-hosting PWA 6 | 7 | So that clients can have a more native app-like experience on mobile, movie-web has a function to support Progressive Web Apps (PWA). You can learn more about what a PWA is [here](https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps/Guides/What_is_a_progressive_web_app). 8 | 9 | In movie-web version 3, PWAs were enabled by default. Unfortunately, PWAs tend to come with caching complications that can be tricky to resolve. That's why we have **disabled** PWAs by default in movie-web version 4. If you are upgrading from version 3, please [read our upgrade guide](../client/upgrade.mdx) for more information. 10 | 11 | 12 | Enabling PWAs means that you cannot disable it again - Please only proceed if you know what you are doing! 13 | 14 | 15 | ## If you are running movie-web on a hosting platform such as Vercel 16 | 17 | If your hosting is building movie-web from the source, you can enable PWAs using the [`VITE_PWA_ENABLED`](../client/configuration.mdx#vite-pwa-enabled) environment variable. 18 | 19 | Setting [`VITE_PWA_ENABLED`](../client/configuration.mdx#vite-pwa-enabled) to `true` will generate a [service worker file](https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps/Guides/Making_PWAs_installable#service_worker) and a [web app manifest](https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps/Guides/Making_PWAs_installable#the_web_app_manifest) which enable the website to be installed from a [web browser both on Desktop and on Mobile](https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps/Guides/Making_PWAs_installable#installation_from_the_web). 20 | 21 | ## If you are running movie-web using the .zip files 22 | 23 | If you are downloading the movie-web `zip` files from our GitHub and installing them on a static website host, then all you need to do is to make sure to download the [`movie-web.pwa.zip`](https://github.com/movie-web/movie-web/releases/latest/download/movie-web.pwa.zip) file instead of the `movie-web.zip` file! 24 | -------------------------------------------------------------------------------- /pages/self-hosting/troubleshooting.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Troubleshooting' 3 | --- 4 | 5 | # Troubleshooting 6 | 7 | There is always a possibility for something to go wrong while trying to deploy your own instance of movie-web. This page will contain common issues people have come across while self-hosting and their solutions. 8 | 9 | ## "Failed to find media, try again!" while searching 10 | 11 | **This is likely a misconfigured TMDB API key.** To verify that TMDB is the issue, visit `/admin` or `/#/admin` and click on the `Test TMDB` button. 12 | 13 | If the test succeeds, then your TMDB configuration is correct and the issue is with something else. 14 | 15 | If the test fails, then you should recheck your credentials. [**Make sure you're using the Read Access Token, not the normal API Key.**](https://www.themoviedb.org/settings/api#v4_auth_key) 16 | 17 | ## Everything I try to watch fails 18 | 19 | **This is likely a misconfigured Worker.** To make sure that the Workers are the issue, visit `/admin` or `/#/admin`, then click on the `Test workers` button. 20 | 21 | You should have at least 1 Worker registered, if you don't, you should [deploy a worker](../proxy/deploy.mdx) and [set it up in the client](../client/configuration.mdx#vite-cors-proxy-url). 22 | 23 | If any Worker fails the test, you should double check its URL and see if its up to date with the latest updates. 24 | 25 | ## I can't make an account or login 26 | 27 | **This is likely misconfigured or broken backend.** To verify that the backend is the issue, visit `/admin` or `/#/admin`, then click on the `Test backend` button. 28 | 29 | If the backend is online and properly configured it should display the name and version of the backend. If the name and description of the test don't match your own instance, [make sure you have your backend URL set correctly.](../client/configuration.mdx#vite-backend-url) 30 | 31 | If the test gives you an error, your [backend URL configuration option](../client/configuration.mdx#vite-backend-url) likely has a typo. 32 | 33 | If the version that shows up on your backend is not the latest version, you should update your backend to keep up with the latest changes. 34 | 35 | ## I updated from version 3 to version 4 but I still see the old version 36 | 37 | It is likely that you haven't installed the PWA version of movie-web. Please read the [upgrade guide](../client/upgrade.mdx) for more details on the matter. 38 | 39 | ## I'm getting SSL issues when using a hosted postgres database 40 | 41 | You are most likely missing the [`postgres.ssl`](../backend/configuration.mdx#postgres-ssl) variable on your backend, enable it and the connection should work. 42 | 43 | ## Permission denied to set parameter "session_replication_role" 44 | 45 | Set the `MIKRO_ORM_MIGRATIONS_DISABLE_FOREIGN_KEYS` option to `false` in either your `.env` or your Docker command. 46 | -------------------------------------------------------------------------------- /pages/extra/streaming.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Streaming' 3 | --- 4 | 5 | # Streaming 6 | 7 | This page explains all the different ways you can enable movie-web to stream your favorite movies & TV shows, each with their own pros and cons. 8 | 9 | {/* ## Method 1 - Browser extension 10 | 11 | The movie-web browser extension is the easiest way to be able to watch media with fast streaming speeds, it is available for both [Chrome] and [Firefox]. 12 | 13 | This method is great if you only use movie-web on your computer. If you use a mobile device or smart TV, you'll unfortunately have to stick to using a proxy since these devices don't usually support browser extensions. 14 | 15 | Since this method uses your own IP, it is undetectable by streaming services, so you can use it to watch your favorite shows without worrying about getting blocked by their servers. 16 | */} 17 | 18 | ## Method 1 - Self-hosted proxy 19 | 20 | Self-hosting a proxy is an easy way to get faster streaming speeds, [we have a guide](../proxy/deploy.mdx) that explains how to set up one for **free**. 21 | 22 | This method is recommended if you want to host a proxy for your friends and or family to use, as it is the faster than using the public proxy and the most reliable way to stream media at the moment. 23 | 24 | {/* This method is recommended if you want to host a proxy for your friends and family to use, or if you want to use movie-web on a device that doesn't support the [browser extension](#method-1---browser-extension), such as a smart TV or mobile device.*/} 25 | 26 | 1. Set up a proxy using one of our [guides](../proxy/deploy.mdx), [though we recommend Netlify](../proxy/deploy.mdx#method-1-netlify-easy). 27 | 2. Once that's done, go to the **Connections** section of the **Settings page** on your movie-web instance of chocie. 28 | 3. Enable `Use custom proxy workers` if it's not already enabled. 29 | 4. Add a new custom proxy by clicking `Add new worker`. 30 | 5. Copy the URL of the proxy you deployed before, and paste it into the empty text box. 31 | ![Example of settings page](/assets/proxy-url-example.gif) 32 | 33 | 34 | If you're self-hosting the client, you can use the [`VITE_CORS_PROXY_URL`](../client/configuration.mdx#vite-cors-proxy-url) variable to set the proxy URL for everyone who uses your client. 35 | 36 | 37 | ## Method 2 - Public proxy 38 | 39 | The public proxy is the easiest way to get started with movie-web as it is the default, it is hosted by us and is completely free to use. 40 | 41 | If you are using the main website, then you are most likely already using the public proxy. Unfortunately you will most likely be getting slower speeds and your video might be buffering more often, which is why we recommend using a self-hosted proxy if you can. 42 | 43 | This is not the case with self-hosted clients, there is no proxy set up by default on self-hosted clients and you will need to [set up one yourself](../proxy/deploy.mdx). 44 | -------------------------------------------------------------------------------- /pages/index.tsx: -------------------------------------------------------------------------------- 1 | import { 2 | Button, 3 | Card, 4 | CardGrid, 5 | GuiderLayout, 6 | Hero, 7 | } from '@neato/guider/client'; 8 | 9 | export default function LandingPage() { 10 | return ( 11 | 12 | 13 | movie-web 14 | 15 | A simple and no-BS app for watching movies and TV shows. Totally free 16 | and open source, forever. 17 | 18 | 19 | 20 | 23 | 24 | 25 | 26 | 27 | Can be easily hosted on any static website host. 28 | 29 | 30 | movie-web will never show ads, enjoy watching without interruptions. 31 | 32 | 33 | Enjoy a fully custom video player including streaming integration, 34 | subtitle customization and easy TV season navigation. 35 | 36 | 37 | Will remember your progress in movies and TV shows, so you can easily 38 | continue where you left off. 39 | 40 | 41 | Allows you to bookmark your favorite movies and TV shows, so you can 42 | easily find them again. 43 | 44 | 45 | Enjoy uninterrupted streaming as your progress, proxies, and bookmarks 46 | sync effortlessly across all your devices. 47 | 48 | 49 | Mix and match different parts of the movie-web service, host your 50 | backend or use ours, it'll work either way. 51 | 52 | 53 | Supports over 25 languages, including English, German, French, 54 | Spanish, Italian, Czech, Hindi, Arabic, Hebrew and more. 55 | 56 | 57 | Supports various themes, subtitle colors and subtitle sizes so you can 58 | make it look however you want. 59 | 60 | 61 | Supports PWA, so you can install it on your phone and use it just like 62 | a native app. 63 | 64 | 65 | 66 | ); 67 | } 68 | -------------------------------------------------------------------------------- /pages/client/upgrade.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Update guide' 3 | --- 4 | 5 | # Keeping your instance synced 6 | 7 | Keeping your instance up-to-date with the latest features and bug fixes can enhance your instance's functionality and ensure it stays current. When updates are released, you have the option to adopt them using either one of the guides. Below is a automatic and an manual guide on updating your instance. 8 | 9 | ## Automatic update 10 | 11 | You can also setup a scheduled workflow to automatically update your instance. This will allow you to keep your instance up to date without manual intervention. 12 | 13 | To do this, you will need to follow the guide below... 14 | 15 | This upgrade method will only work if your repository is a fork! 16 | 17 | 18 | 19 | If you have not already, click [here](https://github.com/movie-web/movie-web/fork) to fork the movie-web Github repository. 20 | 21 | 22 | Paste the below file into your repository's root `/.github/workflows` directory 23 | 24 | ```yaml 25 | # File: .github/workflows/sync.yml 26 | name: Sync fork 27 | 28 | permissions: 29 | contents: write 30 | 31 | on: 32 | schedule: 33 | - cron: "0 0 * * *" 34 | workflow_dispatch: 35 | 36 | jobs: 37 | sync: 38 | name: Sync fork 39 | runs-on: ubuntu-latest 40 | if: ${{ github.event.repository.fork }} 41 | 42 | steps: 43 | - name: Checkout code 44 | uses: actions/checkout@v4 45 | 46 | - name: Sync fork 47 | run: gh repo sync ${{ github.repository }} 48 | env: 49 | GH_TOKEN: ${{ github.token }} 50 | 51 | - uses: gautamkrishnar/keepalive-workflow@v1 52 | ``` 53 | 54 | 55 | Commit and push the changes to your repository. 56 | 57 | 58 | 59 | Your instance should now be automatically updated to the latest version. 60 | 61 | ## Manual update 62 | 63 | You can manually update by executing the following commands in the root directory of the repository you have created, you would have to do this every time a push occurs to stay up-to-date: 64 | 65 | ```bash 66 | git remote add movie-web https://github.com/movie-web/movie-web.git 67 | git fetch movie-web 68 | # Change `dev` to `master` if you want a stable experience 69 | git merge movie-web/dev --allow-unrelated-histories 70 | git push -f # Force push to your origin main branch 71 | ``` 72 | 73 | # Upgrade version 74 | 75 | ## From `3.X` to `4.X` 76 | 77 | You will need the latest version of the proxy worker. Redeploy a new worker using [our self-hosting guide](../proxy/deploy.md). 78 | 79 | After you have the new worker, you will need to [get the new movie-web deployment files](https://github.com/movie-web/movie-web/releases/latest). **You CANNOT use the non-PWA version**. To upgrade safely without any complications, you need to update with `movie-web.pwa.zip`, Not the non-PWA version. 80 | 81 | In the future, you will **ALWAYS** need to go with the PWA option. You cannot downgrade to non-PWA version without facing many caching complications. 82 | -------------------------------------------------------------------------------- /theme.config.tsx: -------------------------------------------------------------------------------- 1 | import { defineTheme, directory, group, link, social } from '@neato/guider/theme'; 2 | import { Logo } from './components/Logo'; 3 | import { NextSeo } from 'next-seo'; 4 | import coverUrl from "./public/cover.png"; 5 | import faviconUrl from "./public/favicon.ico"; 6 | 7 | export default defineTheme({ 8 | github: "movie-web/movie-web", 9 | contentFooter: { 10 | text: "Made with 💜", 11 | editRepositoryBase: "https://github.com/movie-web/docs/blob/master", 12 | socials: [ 13 | social.github("https://github.com/movie-web"), 14 | social.discord("https://movie-web.github.io/links/discord"), 15 | ] 16 | }, 17 | meta: (pageMeta) => ( 18 | 39 | ), 40 | settings: { 41 | logo: () => , 42 | colors: { 43 | "primary": "#A476D9", 44 | "primaryLighter": "#C4ADDE", 45 | "primaryDarker": "#6E23C3", 46 | "background": "#0C0B13", 47 | "backgroundLighter": "#1A1726", 48 | "backgroundLightest": "#282438", 49 | "backgroundDarker": "#000000", 50 | "line": "#37334C", 51 | "text": "#8C899A", 52 | "textLighter": "#A6A4AE", 53 | "textHighlight": "#fff" 54 | } 55 | }, 56 | directories: [ 57 | directory("main", { 58 | sidebar: [ 59 | link("Instances", "/instances", { icon: 'mdi:web' }), 60 | group("Self-Hosting", [ 61 | link("Start self-hosting", "/self-hosting/hosting-intro"), 62 | link("Configure backend", "/self-hosting/use-backend"), 63 | link("PWA vs no-PWA", "/self-hosting/about-pwa"), 64 | link("Troubleshooting", "/self-hosting/troubleshooting"), 65 | ]), 66 | group("Proxy", [ 67 | link("Introduction", "/proxy/introduction"), 68 | link("Deploy", "/proxy/deploy"), 69 | link("Configuration", "/proxy/configuration"), 70 | link("Changelog", "/proxy/changelog"), 71 | ]), 72 | group("Client", [ 73 | link("Introduction", "/client/introduction"), 74 | link("Deploy", "/client/deploy"), 75 | link("TMDB API Key", "/client/tmdb"), 76 | link("Configuration", "/client/configuration"), 77 | link("Changelog", "/client/changelog"), 78 | link("Update guide", "/client/upgrade"), 79 | ]), 80 | group("Backend", [ 81 | link("Introduction", "/backend/introduction"), 82 | link("Deploy", "/backend/deploy"), 83 | link("Configuration", "/backend/configuration"), 84 | link("Changelog", "/backend/changelog"), 85 | link("Update guide", "/backend/upgrade"), 86 | ]), 87 | group("Extra", [ 88 | link("Streaming", "/extra/streaming"), 89 | link("Selfhost", "/extra/selfhost"), 90 | ]) 91 | ] 92 | }) 93 | ], 94 | }); 95 | -------------------------------------------------------------------------------- /pages/instances.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Instances' 3 | --- 4 | 5 | # Instances 6 | 7 | This page showcases movie-web instances hosted by the community and other alternative sites. 8 | 9 | ## Community Instances 10 | 11 | The community maintains these trusted instances, which are likely to be up-to-date. Remember that since these are volunteer instances, they might be down or stop working anytime. If you want to be sure you have access to movie-web, consider [hosting your own instance](../self-hosting/hosting-intro.mdx). 12 | 13 | **Instances marked with a 💾 have set up a backend, making it possible to sync your data across multiple devices.** 14 | 15 | **Additionally, instances with a 🌐 use the community backend hosted by Lonelil, which has all the original movie-web.app data!** 16 | 17 | **Moreover, instances marked with a 📱 have full PWA compatibility, enabling usage on your mobile device as if it were a native application.** 18 | 19 | | Instance | Host | Status | 20 | | :------------------------------------------------ | :---------------------------------------------------------------------------------- | :------- | 21 | | [mw.lonelil.ru](https://mw.lonelil.ru) | [lonelil - Partner](https://github.com/lonelil) | 💾🌐📱 | 22 | | [watch.qtchaos.de](https://watch.qtchaos.de) | [chaos - Project Lead](https://github.com/qtchaos) | 💾📱 | 23 | | [bmov](https://bmov.vercel.app) | [TheScreechingBagel - Mod](https://github.com/TheScreechingBagel) | 💾🌐 | 24 | | [stream.thehairy.me](https://stream.thehairy.me) | [thehairy - Mod](https://github.com/thehairy) | 💾🌐📱 | 25 | | [movie-web-me](https://movie-web-me.vercel.app) | [Isra - Contributor](https://github.com/zisra) | 💾🌐 | 26 | | [scootydooter](https://scootydooter.vercel.app) | [Toon - Contributor](https://github.com/Toon-arch) | 💾🌐📱 | 27 | | [sudo-flix.lol](https://sudo-flix.lol) | [itzCozi - Contributor](https://github.com/sussy-code) | 💾📱 | 28 | | [movie-web.x](https://movie-web.x) | [Unstoppable Domains](https://unstoppabledomains.com) and [IPFS](https://ipfs.tech) | 💾 | 29 | 30 | 31 | [movie-web.x](https://movie-web.x) is only accessible using Brave, Opera or installing an [extension](https://unstoppabledomains.com/extension) to resolve unstoppable domains. 32 | If you cannot access [movie-web.x](https://movie-web.x) try using a gateway: [Cloudflare](https://cloudflare-ipfs.com/ipns/k51qzi5uqu5diql6nkzokwdvz9511dp9itillc7xhixptq14tk1oz8agh3wrjd), [dweb.link](https://k51qzi5uqu5diql6nkzokwdvz9511dp9itillc7xhixptq14tk1oz8agh3wrjd.ipns.dweb.link), or [cf-ipfs](https://k51qzi5uqu5diql6nkzokwdvz9511dp9itillc7xhixptq14tk1oz8agh3wrjd.ipns.cf-ipfs.com) 33 | 34 | 35 | ## Community Backend 36 | 37 | Our partner, Lonelil, has kindly offered to host a movie-web backend with a copy of the original data from the movie-web.app. You can access this backend at: `https://mw-backend.lonelil.ru` 38 | 39 | You **do not** have to set up a new account; you can use your previous passphrase from movie-web, and all of your data will be there! 40 | 41 | ## Alternatives 42 | 43 | These sites are not related to movie-web but are good enough to switch to if the official instances are down. You can also use [FMHY](https://fmhy.pages.dev/videopiracyguide) to find even more options. 44 | 45 | - [watch.lonelil.ru](https://watch.lonelil.ru) 46 | - [themoviearchive.site](https://themoviearchive.site) 47 | - [braflix.video](https://braflix.video) 48 | - [watch.streamflix.one](https://watch.streamflix.one) 49 | -------------------------------------------------------------------------------- /pages/extra/selfhost.mdx: -------------------------------------------------------------------------------- 1 | ### Guide to full Self-Deployment of movie-web with Docker Compose 2 | 3 | 1. **Install Docker and Docker Compose:** 4 | 5 | Ensure that Docker and Docker Compose are installed on your system. You can follow the official Docker documentation for installation instructions: 6 | - [Install Docker](https://docs.docker.com/get-docker/) 7 | 8 | 2. **Create a Docker Compose file:** 9 | 10 | Create a new file named `docker-compose.yml` in your project directory and paste the following content into it: 11 | 12 | ```yaml 13 | version: '3.8' 14 | 15 | services: 16 | postgres: 17 | image: postgres 18 | restart: unless-stopped 19 | environment: 20 | POSTGRES_USER: movie_web_user 21 | POSTGRES_DB: movie_web_backend 22 | POSTGRES_PASSWORD: YourPasswordHere 23 | networks: 24 | - movie-web-network 25 | 26 | movie-web-backend: 27 | image: ghcr.io/movie-web/backend:latest 28 | restart: unless-stopped 29 | environment: 30 | MWB_SERVER__CORS: "https://movie-backend.example.tld https://movie.example.tld" 31 | MWB_SERVER__PORT: 8080 32 | MWB_POSTGRES__CONNECTION: postgresql://movie_web_user:YourPasswordHere@postgres:5432/movie_web_backend 33 | MWB_CRYPTO__SESSION_SECRET: 32CHARACTERLONGSECRET 34 | MWB_META__NAME: Server name 35 | MWB_META__DESCRIPTION: Server Description 36 | MWB_POSTGRES__MIGRATE_ON_BOOT: "true" 37 | MWB_SERVER__TRUSTPROXY: "true" 38 | MWB_SERVER__TRUSTCLOUDFLARE: "true" 39 | # This is needed to resolve errors running migrations on some platforms - does not affect the application 40 | MIKRO_ORM_MIGRATIONS_DISABLE_FOREIGN_KEYS: "false" 41 | ports: 42 | - "8080:8080" 43 | depends_on: 44 | - postgres 45 | networks: 46 | - movie-web-network 47 | 48 | movie-web-frontend: 49 | build: 50 | context: https://github.com/movie-web/movie-web.git 51 | args: 52 | TMDB_READ_API_KEY: "YourTMDBReadAPIKeyHere" 53 | CORS_PROXY_URL: "https://cors.example.tld https://second.cors.example.tld" 54 | BACKEND_URL: "https://backend.example.tld" 55 | DMCA_EMAIL: "YourEmail" 56 | PWA_ENABLED: "true" 57 | APP_DOMAIN: "YourDomainHere" 58 | OPENSEARCH_ENABLED: "true" 59 | GA_ID: "Google ID Here" 60 | ports: 61 | - "80:80" 62 | networks: 63 | - movie-web-network 64 | restart: unless-stopped 65 | 66 | movie-web-proxy: 67 | image: ghcr.io/movie-web/simple-proxy:latest 68 | ports: 69 | - "3000:3000" 70 | networks: 71 | - movie-web-network 72 | restart: unless-stopped 73 | 74 | networks: 75 | movie-web-network: 76 | driver: bridge 77 | ``` 78 | **Important:** 79 | * Replace `YourPasswordHere` with your secure database password. 80 | * Generate a strong session secret and replace `32CharacterLongStringHere`. 81 | * Replace `TMDBReadAPIKey` with your api key learn more [here](../client/tmdb.mdx). 82 | * replace `yourDomainHere` with whatever you'll be using to access your main site, like movie-web.app 83 | * replace `meta__name` and `meta__description` 84 | 2. **Start the Backend:** Open a terminal in the directory containing `docker-compose.yml` and execute: 85 | 86 | ```bash 87 | docker compose up --detach 88 | ``` 89 | **Accessing Your Backend** 90 | 91 | Your services should be accessible on `(YourPrivateIP):port`. To share it outside your local network, you'll need to configure port forwarding or cloudflared tunnel. 92 | 93 | **Optional: Implementing a Reverse Proxy** 94 | 95 | To enhance your SSL and domain configuration, it's advisable to establish a reverse proxy, such as Nginx. For an optimal choice in this regard, Cloudflare Zero Trust Tunnel is recommended. You can find more information [here](https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/get-started/create-remote-tunnel/). 96 | -------------------------------------------------------------------------------- /pages/backend/deploy.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Deploy' 3 | --- 4 | 5 | # Deploying the backend 6 | 7 | The only officially recognized hosting method is through Docker (or similar container runtimes). It can be scaled horizontally to all your heart's content and is the safest way to host the backend. 8 | 9 | For configuration, check out the [configuration reference](./configuration.mdx). 10 | 11 | 12 | The postgres database will need to be populated with [migrations](./introduction.mdx#migrations) if `postgres.migrateOnBoot` isn't enabled. 13 | 14 | 15 | ## Method 1 - Docker Deployment 16 | 17 | This method provides a straightforward setup with minimal configuration. For more extensive customization, see the [Configuration Reference](./configuration.mdx). 18 | 19 | **Prerequisites** 20 | 21 | * **Docker:** If you don't have Docker installed, download it from the official website: [Docker installation](https://www.docker.com/get-started) 22 | * **Docker Compose:** Install Docker Compose following the instructions for your operating system: [Docker-Compose installation](https://docs.docker.com/compose/install/) 23 | 24 | **Setup** 25 | 1. **Create `docker-compose.yml`:** 26 | 27 | ```yaml 28 | version: '3.8' 29 | 30 | services: 31 | postgres: 32 | image: postgres 33 | environment: 34 | POSTGRES_USER: movie_web_user 35 | POSTGRES_DB: movie_web_backend 36 | POSTGRES_PASSWORD: YourPasswordHere 37 | ports: 38 | - "5432:5432" 39 | networks: 40 | - movie-web-network 41 | 42 | movie-web: 43 | image: ghcr.io/movie-web/backend:latest 44 | environment: 45 | MWB_POSTGRES__CONNECTION: postgresql://movie_web_user:YourPasswordHere@postgres:5432/movie_web_backend 46 | MWB_CRYPTO__SESSION_SECRET: 32CharacterLongStringHere 47 | MWB_META__NAME: unofficial-movie-web 48 | MWB_POSTGRES__MIGRATE_ON_BOOT: "true" 49 | MIKRO_ORM_MIGRATIONS_DISABLE_FOREIGN_KEYS: "true" 50 | ports: 51 | - "80:80" 52 | depends_on: 53 | - postgres 54 | networks: 55 | - movie-web-network 56 | 57 | networks: 58 | movie-web-network: 59 | driver: bridge 60 | ``` 61 | 62 | **Important:** 63 | * Replace `YourPasswordHere` with your secure database password. 64 | * Generate a strong session secret and replace `32CharacterLongStringHere`. 65 | 2. **Start the Backend:** Open a terminal in the directory containing `docker-compose.yml` and execute: 66 | 67 | ```bash 68 | docker-compose up -d 69 | ``` 70 | 71 | **Accessing Your Backend** 72 | 73 | Your backend should be accessible on `(YourPrivateIP):80`. To share it outside your local network, you'll need to configure port forwarding or cloudflared tunnel. 74 | 75 | **Optional: Implementing a Reverse Proxy** 76 | 77 | To enhance your SSL and domain configuration, it's advisable to establish a reverse proxy, such as Nginx. For an optimal choice in this regard, Cloudflare Zero Trust Tunnel is recommended. You can find more information [here](https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/get-started/create-remote-tunnel/). 78 | 79 | - If you decide to utilize a reverse proxy, it's important to include `MWB_SERVER__CORS: "https://movie.example.com"` in your configuration. 80 | - `MWB_SERVER__CORS` must contain a **space-separated** list of origins (Protocol + Hostname) for the client to be able to access the backend. 81 | - Depending on your specific setup, you may also require the addition of `MWB_SERVER__TRUST_PROXY: true` and `MWB_SERVER__TRUST_CLOUDFLARE: true`. 82 | 83 | ## Method 2 - Railway (Easy) 84 | 85 | Railway offers you $5 of credit once you verify your account, which is enough to run the backend for around 5 months (~$0.90 per month). 86 | 87 | [![Deploy on Railway](https://railway.app/button.svg)](https://railway.app/template/TS4mw5) 88 | 89 | 1. Login to your [Railway](https://railway.app) account if you have one, otherwise create one [here](https://railway.app/login). 90 | 1. If you are signing up, then verify your account by clicking the link in the email Railway sends you. 91 | 1. If you created your account with an email, then to verify your account further, go to your account, then plans and verify your account with a GitHub account. 92 | 1. Click the [`Deploy on Railway`](https://railway.app/template/TS4mw5) button above. 93 | 1. If a `Configure` button is displayed, click on it and allow Railway to access your GitHub account. 94 | 1. Fill in the required variables or change the default values. 95 | 1. The `Deploy` button at the bottom of the template should be active, click on it. 96 | 1. Once the `Backend` service has deployed, copy the URL from the `Deployments` page. (Might take a second for it to be available after the service has deployed) 97 | 1. Congratulations! You have deployed the backend, you can now [set up the client](../self-hosting/use-backend.mdx). 98 | -------------------------------------------------------------------------------- /pages/client/deploy.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Deploy' 3 | --- 4 | 5 | # Deploying the client 6 | 7 | ## Method 1 - Vercel - Recommended 8 | 9 | 1. Click [here](https://github.com/movie-web/movie-web/fork) to fork the movie-web Github repository 10 | 1. Click [here](https://vercel.com/) to go to Vercel 11 | 1. Sign in using either a GitHub, GitLab, or Bitbucket. 12 | 1. Clicking the "New Project" button on the top right of your dashboard and following the steps to create a new project for your self hosted version of movie web. 13 | 1. After clicking it, you'll be presented with a list of Git repositories that the Git account you've signed up with has write access to. 14 | ![image](https://github.com/movie-web/docs/assets/115524074/f0186018-4499-4c29-9d04-f6c421811704) 15 | 1. Select your own fork of the movie-web Github repository. 16 | 1. Configure the environment variables: 17 | 18 | - `VITE_CORS_PROXY_URL`: Enter your proxy URL here. Make sure to not have a slash at the end of your URL. 19 | 20 | Example (THIS IS AN EXAMPLE, IT WON'T WORK FOR YOU): `https://test-proxy.test.workers.dev` 21 | 22 | - `VITE_TMDB_READ_API_KEY`: Enter your TMDB Read Access Token here. Please read [the TMDB page](./tmdb.mdx) on how to get an API key. 23 | 24 | - `VITE_BACKEND_URL`: Only set if you have a self-hosted backend. Put in your backend URL. Check out [configuration reference](../client/configuration.mdx) for details. Make sure to not have a slash at the end of the URL. 25 | ![Screenshot 2024-04-07 at 14-55-24 New Project – Vercel](https://github.com/movie-web/docs/assets/115524074/a584ac1d-6e15-4618-8bb2-988985def3e0) 26 | 1. Click "Deploy" 27 | 1. Congrats! You have your own version of movie-web hosted. 28 | 1. You may wish to configure a custom domain - Please consult [the Vercel docs for how to do this](https://vercel.com/docs/getting-started-with-vercel/domains). 29 | 30 | ## Method 2 - Static Web Host 31 | 32 | 1. Download the file `movie-web.zip` from the latest release: https://github.com/movie-web/movie-web/releases/latest. 33 | 2. Extract the ZIP file so you can edit the files. 34 | 3. Open `config.js` in an editor such as Notepad, Visual Studio Code or similar. 35 | 4. Put your proxy URL in-between the double quotes of `VITE_CORS_PROXY_URL: ""`. Make sure to not have a slash at the end of your URL. 36 | 37 | Example (THIS IS AN EXAMPLE, IT WON'T WORK FOR YOU): `VITE_CORS_PROXY_URL: "https://test-proxy.test.workers.dev"` 38 | 39 | 5. Put your TMDB Read Access Token inside the quotes of `VITE_TMDB_READ_API_KEY: ""`. Please read [the TMDB page](./tmdb.mdx) on how to get an API key. 40 | 6. If you have a self-hosted backend server, enter your URL in the `VITE_BACKEND_URL` variable. Check out [configuration reference](../client/configuration.mdx) for details. Make sure to not have a slash at the end of the URL. 41 | 7. Save the file. 42 | 8. Upload **all** of the files to a static website hosting such as: 43 | - GitHub Pages 44 | - Netlify 45 | - Vercel 46 | - Etc, [there are lots of options](https://www.staticwebsitehosting.org/). 47 | 9. Congrats! You have your own version of movie-web hosted. 48 | 49 | ## Method 3 - Docker Compose - Home Network 50 | 51 | This method is meant for those using a desktop device or single board computer with a minimum of 4GB of RAM such as a [Raspberry Pi](https://www.raspberrypi.com/) to run movie-web on there home network for network connected devices. 52 | 53 | 1. Ensure you have [docker](https://docs.docker.com/get-docker/) installed. In a newly created directory called `movie-web` create a file called `docker-compose.yaml`. Paste the contents of the code block below into this file. 54 | 55 | ```yaml 56 | version: "3.8" 57 | 58 | services: 59 | 60 | movieweb: 61 | build: 62 | context: https://github.com/movie-web/movie-web.git 63 | # args: 64 | # TMDB_READ_API_KEY: "" 65 | # CORS_PROXY_URL: "" 66 | # BACKEND_URL: "" 67 | ports: 68 | - "80:80" 69 | restart: unless-stopped 70 | ``` 71 | 72 | 2. Within the `docker-compose.yaml` file uncomment `args`, `TMDB_READ_API_KEY`, `CORS_PROXY_URL`. 73 | - Make sure `args` is in-line with `context` 74 | - Make sure `TMDB_READ_API_KEY` and `CORS_PROXY_URL` are tabbed once to the right of `args`. 75 | 3. Put your proxy URL in-between the double quotes of `CORS_PROXY_URL: ""`. Make sure to not have a slash at the end of your URL. 76 | 77 | Example (THIS IS AN EXAMPLE, IT WON'T WORK FOR YOU): `CORS_PROXY_URL: "https://test-proxy.test.workers.dev"` 78 | 79 | 4. Put your TMDB Read Access Token inside the quotes of `TMDB_READ_API_KEY: ""`. Please read [the TMDB page](./tmdb.mdx) on how to get an API key. 80 | 5. Uncomment and add any [additional environment variables](configuration.mdx) you may need. Remove the `VITE_` prefix when adding an environment variable to `args`. 81 | 6. Save the file! 82 | 7. Now use [docker](https://docs.docker.com/get-docker/) to run `movieweb` as background service. 83 | 84 | ```bash 85 | # movie-web is the current working directory 86 | $ docker compose up --detach 87 | ``` 88 | 89 | 8. Verify that setup was successful 90 | - Navigate to `http://localhost`. You should see the UI for `movie-web`. Find something to watch and make sure that it plays. 91 | - View logs with 92 | 93 | ```bash 94 | $ docker compose logs --follow movieweb 95 | ``` 96 | 97 | 9. Set a static IP address for your device. 98 | - For Raspberry Pi: [guide](https://www.makeuseof.com/raspberry-pi-set-static-ip/) 99 | - For Mac: [guide](https://www.macinstruct.com/tutorials/how-to-set-a-static-ip-address-on-a-mac/) 100 | - For Windows: [guide](https://www.pcmag.com/how-to/how-to-set-up-a-static-ip-address) 101 | 102 | 10. Navigate to movie web at `http:// 16 | With any of these configurations, you have to have atleast three variables set for the server to function: 17 | [`postgres.connection`](#postgres-connection-⚠), [`crypto.sessionSecret`](#crypto-session-secret-⚠) and [`meta.name`](#meta-name-⚠) 18 | 19 | 20 | ### Method 1 - `config.json` 21 | 22 | This method uses nesting, so the key `server.basePath` with the value of `"/backend"` will result in a file that looks like this: 23 | 24 | ```json 25 | { 26 | "server": { 27 | "basePath": "/backend" 28 | } 29 | } 30 | ``` 31 | 32 | ### Method 2 - `.env` 33 | 34 | The environment variable names use double underscores as separators and `MWB_` as the prefix. So the key `server.basePath` will result in the .env file like this: 35 | 36 | ```sh 37 | MWB_SERVER__BASE_PATH=/backend 38 | ``` 39 | 40 | ### Method 3 - Environment 41 | 42 | This method is identical to the `.env` method listed above, but you add the variables to the environment instead of writing it in a file. 43 | 44 | # Reference 45 | 46 | ## Server 47 | 48 | All configurations related to the HTTP server. 49 | 50 | ### `server.port` 51 | 52 | - Type: `number` 53 | - Default: `8080` 54 | 55 | Port number that the HTTP server listens on. 56 | 57 | ### `server.cors` 58 | 59 | - Type: `string` 60 | - Default: `""` 61 | - Example: `"https://movie-web.app https://testing.movie-web.app"` 62 | 63 | Space separated list of allowed origins. 64 | 65 | ### `server.allowAnySite` 66 | 67 | - Type: `boolean` 68 | - Default: `false` 69 | 70 | If set to true, it allows any origin to access the site. This overwrites the [`server.cors`](#server-cors) setting. 71 | 72 | ### `server.trustProxy` 73 | 74 | - Type: `boolean` 75 | - Default: `false` 76 | 77 | Controls whether the server should trust reverse proxy headers. This is used to identify users for ratelimiting. 78 | 79 | ### `server.trustCloudflare` 80 | 81 | - Type: `boolean` 82 | - Default: `false` 83 | 84 | Controls whether the server should trust Cloudflare IP headers. This is used to identify users for ratelimiting. 85 | 86 | ### `server.basePath` 87 | 88 | - Type: `string` 89 | - Default: `"/"` 90 | 91 | Prefix for which path is being listened on. Useful if you're hosting on `example.com/backend` for example. 92 | 93 | 94 | If this is set, you shouldn't apply URL rewriting before proxying. 95 | 96 | 97 | ## Logging 98 | 99 | All configurations related to how the HTTP server will log. This is not related to the [metrics](./introduction.mdx#metrics) endpoint. 100 | 101 | ### `logging.format` 102 | 103 | - Type: `string` | `"pretty"` | `"json"` 104 | - Default: `"pretty"` 105 | 106 | Logging format to use, should be either `pretty` or `json`, most users should probably use the default. 107 | 108 | ## Postgres 109 | 110 | All configurations related to how postgres functions. 111 | 112 | ### `postgres.connection` ⚠ 113 | 114 | - Type: `string` 115 | - Example: `"postgresql://localhost:5432"` 116 | 117 | Connection URL for postgres instance, should contain the database in the URL. 118 | 119 | 120 | **Required. The backend will not start if this is not configured.** 121 | 122 | 123 | ### `postgres.migrateOnBoot` 124 | 125 | - Type: `boolean` 126 | - Default: `false` 127 | 128 | Run all [migrations](./introduction.mdx#migrations) that haven't ran yet on boot. 129 | 130 | 131 | If you have multiple replicas running, this can cause a lot of issues. We recommend only using this if you run only one replica. 132 | 133 | 134 | ### `postgres.debugLogging` 135 | 136 | - Type: `boolean` 137 | - Default: `false` 138 | 139 | Log all postgres queries in the console. Useful for debugging issues with the database. 140 | 141 | 142 | This outputs sensitive, **DO NOT** run it in production. 143 | 144 | 145 | ### `postgres.ssl` 146 | 147 | - Type: `boolean` 148 | - Default: `false` 149 | 150 | Enable SSL for postgres connections. Useful if you're using a hosted postgres database. 151 | 152 | ## Cryptography 153 | 154 | All configurations related to cryptography. 155 | 156 | ### `crypto.sessionSecret` ⚠ 157 | 158 | - Type: `string` 159 | 160 | The secret used to sign sessions. **Must be at least 32 characters long.** 161 | 162 | 163 | **Required. The backend will not start if this is not configured.** 164 | 165 | 166 | ## Meta 167 | 168 | These options configure how the server will display itself to the frontend. 169 | 170 | ### `meta.name` ⚠ 171 | 172 | - Type: `string` 173 | - Example: `"Unofficial movie-web"` 174 | 175 | The name of the backend instance, this will be displayed to users who try to create an account. 176 | 177 | 178 | **Required. The backend will not start if this is not configured.** 179 | 180 | 181 | ### `meta.description` 182 | 183 | - Type: `string` 184 | - Default: `""` 185 | - Example: `"This is not an official instance of movie-web"` 186 | 187 | The description of the backend instance, this will be displayed to users who try to create an account. 188 | 189 | ## Captcha 190 | 191 | All configurations related to adding captcha functionality. Captchas' help to protect your server from bot attacks. 192 | 193 | ### `captcha.enabled` 194 | 195 | - Type: `boolean` 196 | - Default: `false` 197 | 198 | Enables [Recaptcha](https://www.google.com/recaptcha/about/) support for user registration and login. [You can follow this guide to create a Recaptcha key](https://cloud.google.com/recaptcha-enterprise/docs/create-key-website#create-key). 199 | 200 | 201 | If this is enabled, all other captcha related settings are required. 202 | 203 | 204 | ### `captcha.secret` 205 | 206 | - Type: `string` 207 | - Default: `""` 208 | - Example: `"sjgaJ@3djasFVx"` 209 | 210 | [Google Recaptcha](https://www.google.com/recaptcha/about/) secret key. 211 | 212 | ### `captcha.clientKey` 213 | 214 | - Type: `string` 215 | - Default: `""` 216 | - Example: `"2jf853z5bc63bvDb2323FAda"` 217 | 218 | [Google Recaptcha](https://www.google.com/recaptcha/about/) site key. 219 | 220 | ## Ratelimits 221 | 222 | All configuration options related to adding ratelimiting functionality. Helps to protect against bot attacks or spammy users. 223 | 224 | 225 | Make sure your IP headers are properly forwarded if you're using a reverse proxy. Also see [`server.trustProxy`](#server-trust-proxy). 226 | 227 | 228 | ### `ratelimits.enabled` 229 | 230 | - Type: `boolean` 231 | - Default: `false` 232 | 233 | Enables ratelimiting some more expensive endpoints. 234 | 235 | 236 | If this is enabled, all other ratelimit related settings are required. 237 | 238 | 239 | ### `ratelimits.redisUrl` 240 | 241 | - Type: `string` 242 | - Default: `""` 243 | - Example: `"redis://localhost:6379"` 244 | 245 | Redis connection URL for storing ratelimit data. You can use a plain redis instance for this, no modules are required. 246 | -------------------------------------------------------------------------------- /pages/proxy/deploy.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Deploy' 3 | --- 4 | 5 | # Deploying the proxy 6 | 7 | ## Method 1 - Netlify (Easy) 8 | 9 | Netlify has a very generous free plan, so you'll be able to host your proxy for free unless you get hundreds of users. 10 | 11 | [![Deploy to Netlify](https://www.netlify.com/img/deploy/button.svg)](https://app.netlify.com/start/deploy?repository=https://github.com/movie-web/simple-proxy) 12 | 13 | 1. Create a GitHub account at https://github.com/signup if you don't have one already. 14 | 1. Click on the `Deploy to Netlify` button above. 15 | 1. Authorize Netlify to connect with GitHub by clicking the `Connect to GitHub` button. 16 | 1. There should now be a `Save & Deploy` button, click it. 17 | 1. Once the deployment is complete, click on the `Get Started` button that pops up, this will redirect you to the dashboard of your site. 18 | 1. Click on the only site in the `Sites` section of your dashboard. 19 | 1. Find the link of your site near the top of the page, it should look something like `https://.netlify.app`. Right click the link, click `Copy link address`. [Now you'll just have to set up the client](../extra/streaming.mdx#method-1-self-hosted-proxy)! 20 | 21 | ## Method 2 - Cloudflare (Easy) 22 | 23 | 24 | The sources showbox and febbox do NOT work with cloudflare. Use a different host if you want those to work. 25 | 26 | 27 | Cloudflare has a generous free plan, so you don't need to pay anything unless you get hundreds of users. 28 | 29 | [![Deploy to Cloudflare Workers](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/movie-web/simple-proxy) 30 | 31 | 1. Create a GitHub account at https://github.com if you don't have one. 32 | 1. Click the `Deploy with workers` button above. 33 | 1. Click the `Authorize Workers` button to authorize Cloudflare to talk to GitHub. 34 | 1. Authorize Cloudflare Workers in the GitHub page that pops up. 35 | 1. Follow the instructions to configure your Cloudflare account. Select `I have an account` if you have a Cloudflare account already, otherwise follow the link to create one. 36 | 1. Click the link to [`Workers Dashboard`](https://dash.cloudflare.com/sign-up?to=/:account/workers-and-pages) to find your account ID. 37 | 1. You can copy your account ID from the URL e.g. https://dash.cloudflare.com/ab7cb454c93987b6343350d4e84c16c7/workers-and-pages/create where `ab7cb454c93987b6343350d4e84c16c7` is the account ID. 38 | 1. Paste the account ID into the text box on the original Cloudflare workers page. 39 | 1. Click the link to [`My Profile`](https://dash.cloudflare.com/profile/api-tokens), to create an API token. 40 | 1. Click `Create Token`. 41 | 1. Select `Use template` next to `Edit Cloudflare Workers`. 42 | 1. Under `Account Resources`, select `Include` and your account under the dropdown. 43 | 1. Under `Zone Resources`, select `All zones` (You can select a more specific zone if you have the zones available). 44 | 1. At the bottom of the page, click `Continue to summary`. 45 | 1. On the next screen, click `Create token`. 46 | 1. Copy the API token and **save it in a safe place, it won't be shown again**. 47 | 1. Paste the API token into the Cloudflare Workers API Token text box. 48 | 1. Click `Fork the Repository` and follow the instructions to enable workflows. 49 | 1. Click `Deploy` to deploy to Cloudflare Workers. 50 | 1. Congratulations! Your worker is now deploying. Please wait for the GitHub Action to build and publish your worker. 51 | 1. You can click the [`Worker dash`](https://dash.cloudflare.com/sign-up?to=/:account/workers-and-pages) and `GitHub repo` buttons to see the status of the deploy. 52 | 1. When the worker has deployed, you will need to take note of the URL. This can be found on Cloudflare under [Workers and Pages -> Overview](https://dash.cloudflare.com/sign-up?to=/:account/workers-and-pages) -> Proxy. 53 | 1. Use the URL you took note of and [set up a custom proxy in the client](../extra/streaming.mdx#method-1-self-hosted-proxy). 54 | 55 | ## Method 2 - Cloudflare (Manual) 56 | 57 | 58 | The sources showbox and febbox do NOT work with cloudflare. Use a different host if you want those to work. 59 | 60 | 61 | 1. Login to your Cloudflare account if you have one, otherwise create one [here](https://dash.cloudflare.com/sign-up?to=/:account/workers-and-pages) 62 | 1. If you are signing up for an account, make sure to verify your email before going further! 63 | 1. Download the latest version of the Cloudflare [`simple-proxy-cloudflare.mjs` script from here](https://github.com/movie-web/simple-proxy/releases/latest/download/simple-proxy-cloudflare.mjs). 64 | 1. Go to `Workers & Pages` and then `Overview` in the left-hand navigation bar. 65 | 1. Click the `Create Worker` button 66 | 1. If you've made a worker or pages application before, you will need to click `Create Application` first 67 | 1. Give your worker a name and click `Deploy`. This can be anything you would like! 68 | 1. On the `Congratulations` web page, click the `Edit code` button to edit the code in the worker you have just created. 69 | 1. There should now be a code editor on the left hand side on the web page. 70 | 1. Select all of the existing template code and delete it. **You must make sure all of the code is deleted for this to work!** 71 | 1. Go to your downloads folder and open up the `simple-proxy-cloudflare.mjs` file you downloaded earlier in a text editor, and **copy** the contents. 72 | 1. Back in your browser, paste the contents of the file into the code editor. 73 | 1. The `Save and deploy` button in the top right corner should now be active, click it to deploy your proxy! 74 | 1. A confirmation dialog will appear, click `Save and deploy` once more. 75 | 1. Your worker is now deployed! You can click the back button in the top left to take you back to the summary screen. 76 | 1. On the summary screen, your worker link will be displayed under `Preview`. Right click the link, click `Copy link address` and save the link somewhere - [you will need it to set up the client](../5.extra/1.streaming.md#method-1---self-hosted-proxy)! 77 | 78 | ## Method 3 - Railway (Easy) 79 | 80 | Railway offers you $5 of credit once you verify your account, which is enough to run the proxy for around 5-7 months. 81 | 82 | [![Deploy on Railway](https://railway.app/button.svg)](https://railway.app/template/dyYHq1) 83 | 84 | 1. Login to your [Railway](https://railway.app) account if you have one, otherwise create one [here](https://railway.app/login). 85 | 1. If you are signing up, then verify your account by clicking the link in the email Railway sends you. 86 | 1. If you created your account with an email, then to verify your account further, go to your account, then plans and verify your account with a GitHub account. 87 | 1. Click the [`Deploy on Railway`](https://railway.app/template/dyYHq1) button above. 88 | 1. If a `Configure` button is displayed, click on it and allow Railway to access your GitHub account. 89 | 1. The `Deploy` button at the bottom of the template should be active, click on it. 90 | 1. Once the proxy has deployed, copy the URL from the `Deployments` page. 91 | 1. Congratulations! You have deployed the proxy, [you can now set up the client](../extra/streaming.mdx#method-1-self-hosted-proxy). 92 | 93 | ## Method 4 - Docker 94 | 95 | 96 | Experience with Docker, domains and web hosting is **highly recommended** for this method.
97 | [Deploying with Netlify](#method-1-netlify-easy) is easier and safer to do! You are exposing your server at your own risk! 98 |
99 | 100 | Our `simple-proxy` application is available from the GitHub Container Registry under the image [`ghcr.io/movie-web/simple-proxy:latest`](https://ghcr.io/movie-web/simple-proxy:latest) 101 | 102 | The container exposes the HTTP port (Without TLS/SSL) as `3000/TCP`. 103 | 104 | If you know what you are doing, you should know what to do with this information. If you don't, then please follow our Cloudflare guides. 105 | -------------------------------------------------------------------------------- /pages/client/configuration.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Configuration' 3 | --- 4 | 5 | # Client Config Reference 6 | 7 | The config for the movie-web can be provided in 2 different ways, depending on how you are hosting movie-web: 8 | 9 | - If you are using a static web hoster (such as Vercel, Netlify or Cloudflare Pages), you can use [environment variables](#method-1-environment-variables). 10 | - If you are hosting movie-web using shared hosting (such as cPanel or FTP), please use [the config file](#method-2-config-file). 11 | 12 | Both methods can specify any of the keys listed in the [Shared Config](#config-reference-shared-config) section. 13 | 14 | ## Method 1 - Environment Variables 15 | 16 | The movie-web client can be configured using environment variables **at build time**. You cannot use this method if hosting the pre-built `movie-web.zip` files! 17 | 18 | Using environment variables to configure movie-web also allows configuration of some [environment variable specific keys](#config-reference-environment-variables-only). 19 | 20 | ## Method 2 - Config File 21 | 22 | When using the pre-built `movie-web.zip`, you can set the configuration in the `config.js` file. 23 | 24 | The `config.js` file contains a JavaScript object which must be set to the correct values: 25 | 26 | ```js 27 | window.__CONFIG__ = { 28 | // ... Config variables go here ... 29 | }; 30 | ``` 31 | 32 | ## Config Reference - Shared Config 33 | 34 | ### `VITE_TMDB_READ_API_KEY` ⚠ 35 | 36 | - Type: `string` 37 | - Default: `""` 38 | 39 | This is the **read** API key from TMDB to allow movie-web to search for media. [Get one by following our guide](./tmdb.mdx). 40 | 41 | 42 | **Required. The client will not work properly if this is not configured.** 43 | 44 | 45 | ### `VITE_CORS_PROXY_URL` 46 | 47 | - Type: `string` 48 | - Default: `""` 49 | - Example: `"https://example1.example.com,https://example2.example.com"` 50 | 51 | This is where you put proxy URLs. [Get some by following our guides](../proxy/deploy.mdx). 52 | 53 | If left empty, the client onboarding will not provide a "default setup" and the user will have to manually configure their own proxy or use the extension. 54 | 55 | You can add multiple Workers by separating them with a comma, they will be load balanced using round robin method on the client. 56 | **Worker URL entries must not end with a slash.** 57 | 58 | 59 | **Required. The client will not work properly if this is not configured.** 60 | 61 | 62 | ### `VITE_DMCA_EMAIL` 63 | 64 | - Type: `string` 65 | - Default: `""` 66 | - Example: `"dmca@example.com"` 67 | 68 | This is the DMCA email for on the DMCA page. If this config value is present, a new page will be made and linked in the footer, where it will mention how to handle DMCA take-down requests. If the configuration value is left empty, the page will not exist. 69 | 70 | ### `VITE_NORMAL_ROUTER` 71 | 72 | - Type: `boolean` 73 | - Default: `false` 74 | 75 | The application has two routing modes: hash-router and history-router. 76 | Hash router means that every page is linked with a hash like so: `https://example.com/#/browse`. 77 | 78 | History router does routing without a hash like so: `https://example.com/browse`, this looks a lot nicer, but it requires that your hosting environment supports Single-Page-Application (SPA) redirects (Vercel supports this feature). If you don't know what that means, don't enable this. 79 | 80 | Setting this configuration value to `true` will enable the history-router. 81 | 82 | ### `VITE_BACKEND_URL` 83 | 84 | - Type: `string` 85 | - Default: `""` 86 | - Example: `"https://backend.example.com"` 87 | 88 | This is the URL for the movie-web backend server which handles cross-device syncing. 89 | 90 | The backend server can be found at https://github.com/movie-web/backend and is offered as a [Docker](https://docs.docker.com/get-started/overview/) image for deployment. 91 | 92 | Backend URL must **not** end with a slash. 93 | 94 | ### `VITE_HAS_ONBOARDING` 95 | 96 | - Type: `boolean` 97 | - Default: `true` 98 | 99 | If you want your users to be prompted with an onboarding screen before they start watching, enable this. 100 | 101 | ### `VITE_ONBOARDING_CHROME_EXTENSION_INSTALL_LINK` 102 | 103 | - Type: `string` 104 | - Default: `"https://chromewebstore.google.com/detail/movie-web-extension/hoffoikpiofojilgpofjhnkkamfnnhmm"` 105 | - Example: `"https://google.com"` 106 | 107 | When onboarding is enabled using `VITE_HAS_ONBOARDING`. This link will be used to link the proper Chrome extension to install. 108 | 109 | If omitted, this will still show the extension onboarding screen, just without an install link for the extension. 110 | 111 | ### `VITE_ONBOARDING_FIREFOX_EXTENSION_INSTALL_LINK` 112 | 113 | - Type: `string` 114 | - Default: `"https://addons.mozilla.org/en-GB/firefox/addon/movie-web-extension"` 115 | - Example: `"https://google.com"` 116 | 117 | When onboarding is enabled using `VITE_HAS_ONBOARDING`. This link will be used to link the proper Firefox extension to install. 118 | 119 | If omitted, this will still show the extension onboarding screen, just without an install link for the extension. 120 | 121 | ### `VITE_ONBOARDING_PROXY_INSTALL_LINK` 122 | 123 | - Type: `string` 124 | - Default: `""` 125 | - Example: `"https://google.com"` 126 | 127 | When onboarding is enabled using `VITE_HAS_ONBOARDING`. This link will be used to link the user to resources to host a custom proxy. 128 | 129 | If omitted, this will still show the proxy onboarding screen, just without an documentation link for the proxy. 130 | 131 | ### `VITE_ALLOW_AUTOPLAY` 132 | 133 | - Type: `boolean` 134 | - Default: `false` 135 | 136 | Whether to allow autoplay for users that use the host provided proxies. 137 | 138 | ### `VITE_DISALLOWED_IDS` 139 | 140 | - Type: `string` 141 | - Default: `""` 142 | - Example: `"series-123,movie-456"` 143 | 144 | In the unfortunate event that you've been sent a DMCA take down notice, you'll need to disable some pages. This configuration key will allow you to disable specific ids. 145 | 146 | For shows, it needs to be in this format: `series-`. For movies the format is this: `movie-`. 147 | 148 | The list is comma separated, you can add as many as needed. 149 | 150 | ### `VITE_CDN_REPLACEMENTS` 151 | 152 | - Type: `string` 153 | - Default: `""` 154 | - Example: `"google.com:example.com,123movies.com:flixhq.to"` 155 | 156 | Sometimes you want to proxy a CDN. This is how you can easily replace a CDN URL with your own. 157 | 158 | The format is `:,:,...` 159 | 160 | ### `VITE_TURNSTILE_KEY` 161 | 162 | - Type: `string` 163 | - Default: `""` 164 | 165 | The [Turnstile key](https://dash.cloudflare.com/sign-up?to=/:account/turnstile) for Cloudflare captchas. It's used to authenticate requests to proxy workers (or providers API). 166 | 167 | [The proxy workers will need to be configured to accept these captcha tokens](../proxy/configuration.mdx#turnstile-secret), otherwise it has no effect for security. 168 | 169 | ## Config reference - Environment Variables Only 170 | 171 | 172 | These configuration keys are specific to environment variables, they **only** 173 | work as environment variables **set at build time**. 174 | 175 | 176 | ### `VITE_PWA_ENABLED` 177 | 178 | - Type: `boolean` 179 | - Default: `false` 180 | 181 | Set to `true` if you want to output a PWA application. Set to `false` or omit to get a normal web application. 182 | A PWA web application can be installed as an application to your phone or desktop computer, but can be tricky to manage and comes with a few footguns. 183 | 184 | 185 | Make sure you know what you're doing before enabling this, it **cannot be 186 | disabled** after you've set it up once. 187 | 188 | 189 | ### `VITE_GA_ID` 190 | 191 | - Type: `string` 192 | - Default: `""` 193 | - Example: `"G-1234567890"` 194 | 195 | The Google Analytics ID for tracking user behavior. If omitted, no tracking will be done. 196 | 197 | ### `VITE_APP_DOMAIN` 198 | 199 | - Type: `string` 200 | - Default: `""` 201 | - Example: `"https://movie-web.app"` 202 | 203 | The domain where the app lives. Only required when having the [`VITE_OPENSEARCH_ENABLED`](#vite-opensearch-enabled) option enabled. 204 | 205 | The value must include the protocol (HTTP/HTTPS) but must **not** end with a slash. 206 | 207 | ### `VITE_OPENSEARCH_ENABLED` 208 | 209 | - Type: `boolean` 210 | - Default: `false` 211 | 212 | Whether to enable [OpenSearch](https://developer.mozilla.org/en-US/docs/Web/OpenSearch), this allows a user to add a search engine to their browser. When enabling you **must** also set [`VITE_APP_DOMAIN`](#vite-app-domain). 213 | 214 | 215 | This field is case sensitive, make sure you use the correct casing. 216 | 217 | -------------------------------------------------------------------------------- /pages/client/changelog.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Changelog' 3 | --- 4 | 5 | # Version 4.7.0 6 | - Updated providers to 2.3.0 7 | - Keyboard shortcuts now also work with uppercase keys 8 | - Audio language now defaults to your language preference 9 | - The "Back to home" button in the video player can now be opened in a new tab using middle click 10 | - The "Next episode" button now turns into a "Next season" button if you are on the last episode 11 | - Added a fallback TMDB API if the first one cannot be reached. This should fix an issue for some users that are not able to search. 12 | - Added autoplay. This can be turned on for extension users, users with a custom proxy, or can be turned on for all users for self-hosters using a environment variable. 13 | - Improved translations: Persion (Mehdi), French (Erwann) 14 | 15 | # Version 4.6.6 16 | - Updated providers to 2.2.9 17 | - Fixes for VidSrcTo and RidoMovies 18 | - Improved translations: German, Persian, Hindi, Korean, Nepali (macrolanguage), Dutch, Chinese (Han (Simplified variant)) 19 | 20 | # Version 4.6.5 21 | - Updated providers to 2.2.7 22 | 23 | # Version 4.6.4 24 | - Updated providers to 2.2.6 25 | - Fixed Ridomovies not playing for extension users 26 | - Added a default workflow for syncing forks 27 | - Improved translations: Persian, Indonesian, Portuguese (Brazil), Russian 28 | 29 | # Version 4.6.3 30 | - Updated providers to 2.2.5 31 | - Fixed vercel routing 32 | - Fixed TV browsers crashing because of MediaSession 33 | - Fixed Chinese (traditional) translation 34 | - Optimized all images 35 | - Fixed page scrolling when adjusting the volume using the scroll wheel 36 | - Added support for HLS audio tracks (You now have the option to change the audio language for RidoMovies) 37 | - Admin page no longer leaks the worker url. 38 | - Added the ability to drag and drop your subtitle files. 39 | - Improved the error message when the extension has not whitelisted the domain. It should now ask you to grant permission. 40 | - Fixed an issue where the episode progression would not save after clicking the 'Next episode' button 41 | - Improved translations: Catalan, Czech, German, Spanish, Estonian, Persian, French, Galician, Indonesian, Italian, Dutch, Polish, Portuguese (Brazil), Romanian, Russian, Turkish, Chinese (Han (Traditional variant)) 42 | 43 | # Version 4.6.2 44 | - Updated providers to 2.2.3 45 | - Added defaults for extension store links 46 | - Onboarding now defaults to true for self-hosters. 47 | - Support for embedded HLS subtitles (This fixes Ridomovies having default subtitles that could not be changed). 48 | - Improved translations: Polish, Toki Pona 49 | 50 | # Version 4.6.1 51 | - Fixed subtitle blur settings loading as NaN 52 | - Improved translations: Czech, German, Persian, French, Italian, Dutch, Russian, Slovenian, Ukrainian, Chinese (Han (Simplified variant)) 53 | 54 | # Version 4.6.0 55 | 56 | - Implemented media session support! 57 | - Added option to blur background in subtitles 58 | - Added vercel config to properly support using non-hash routing 59 | - Fixed a bug in config that treated empty environment variables as being set, causing config.js to be ignored 60 | - Fixed a bug in the button component that meant our own pages opened in a new tab 61 | - Added new translations: Catalan 62 | - Improved translations: Catalan, Spanish, Persian, French, Hindi, Icelandic, Italian, Nepali (macrolanguage), Dutch, Panjabi, Slovenian, Chinese (Han (Simplified variant)), Russian, Estonian, Korean 63 | 64 | # Version 4.5.1 65 | 66 | - Improved translations: Catalan, Czech, Spanish, Persian, French, Italian, Portuguese (Brazil), Russian, Tamil, Vietnamese, Chinese (Han (Simplified variant)) 67 | - Update providers to 2.2.2 68 | - Update Dockerfile to have build-time arguments and add a Docker compose file 69 | - Allow banners to be dismissible 70 | - Update extension logic to process all URLs in a HLS playlist 71 | - Automatically prefix backend URL with https:// if not provided 72 | 73 | # Version 4.5.0 74 | 75 | - Improved translations: Estonian, Persian, Toki Pona, Vietnamese. 76 | - Route subtitles through extension if installed. 77 | - Fix Docker build failing when PWA is enabled. 78 | - Add randomised placeholders for search bar. 79 | - Add preview to the theme selector. 80 | - Remove references to the official domain. 81 | - Update admin page to run worker tests in parallel. 82 | - Disable creating account when backend server isn't set. 83 | - Remove default setup option if no default proxy set. 84 | - Remove extension help text when extension succeeded. 85 | - Allow configuration of Google Analytics - removed our default one. 86 | - Fix media download button redirection to incorrect URL on main tab. 87 | - Allow users to change volume with scroll wheel. 88 | 89 | # Version 4.4.0 90 | 91 | - Changed behaviour of HLS playlists to have a copy button instead of a download button for more compatibility. 92 | - Improve the appearance of the "active" pill under theme settings - it now has better padding and matches the theme it represents. 93 | - If a user selects a proxy during onboarding, it is now saved to the backend if the user is signed in. 94 | - Fixed sorting of shows that caused the "continue watching" to not update properly when syncing with the backend. 95 | - Added an "x" button to clear the search query. 96 | - Improve mobile layout for setup component. 97 | - Fix HLS issue with throwing 403 error. 98 | - Improved translations: Arabic, German, Persian, Finnish, Galician, Italian, Japanese, Korean, Panjabi, Russian, Turkish, Ukrainian, Chinese (Han (Simplified variant)). 99 | - Update providers package to 2.2. 100 | 101 | # Version 4.3.3 102 | 103 | - Fixed body not being transferred properly to the extension (needs latest version of extension) 104 | - Added new translations: Finnish 105 | - Improved translations: Czech, German, English, Spanish, Persian, French, Galician, Gujarati, Hebrew, Hindi, Icelandic, Navajo, Portuguese (Brazil), Russian, Ukrainian, Chinese (Han (Simplified variant)) 106 | 107 | # Version 4.3.2 108 | 109 | - Run account server data fetching in parallel. 110 | - Added specific text per browser for extension setup screen 111 | - Fix bug where first load the page couldn't talk to extension 112 | - Fix too short of a timeout when checking for proxy response 113 | - Move start of bolding for HLS disclaimer 114 | - Fix app crash when opening download screen on lower RAM browsers 115 | - Make onboarding start screen more mobile friendly 116 | - Separate extension install links into two settings (firefox & chrome) 117 | - Added new translations: Icelandic 118 | - Improved translations: German, Spanish, Persian, French, Hebrew, Italian, Nepali (macrolanguage), Dutch, Polish, Portuguese (Brazil), Romanian, Chinese (Han (Simplified variant)) 119 | 120 | # Version 4.3.1 121 | 122 | - Fix provider API interaction with extension. 123 | 124 | # Version 4.3.0 125 | 126 | - Add onboarding process to movie-web, triggable manually through settings. This needs to be turned when selfhosting. 127 | - Added settings to toggle generated thumbnails, disabled by default 128 | - Fix multiple subtitles with same language all showing as selected 129 | - Add docker support, a hosted container image included (with ARM support) 130 | - Added extension support, run movie-web without setting up a custom proxy 131 | - Add disabled cursor for disabled buttons 132 | - Add instruction link to custom proxy and custom server settings 133 | - Added backdrop blur to navigation buttons 134 | - Updated provider package (Re-enabled showbox/febbox subtitles) 135 | - Added new translations: Catalan 136 | - Improved translations: Bengali, Czech, German, Spanish, Persian, French, Galician, Italian, Nepali, Dutch, Polish, Portuguese, Portuguese, Russian, Turkish, Ukrainian, Vietnamese, Chinese 137 | 138 | # Version 4.2.5 139 | 140 | 141 | This release requires a new version of simple-proxy: 2.1.3 142 | 143 | 144 | - Update provider package, with fixes for febbox-mp4 145 | 146 | # Version 4.2.4 147 | 148 | 149 | This release requires a new version of simple-proxy: 2.1.1 150 | 151 | 152 | - Add meta tag for PWA's for apple devices 153 | - Add galician flag 154 | - Fix language fallback, this fixes weird dot notation instead of english language fallback 155 | - Add Docker image for frontend 156 | - Fix Brazilian portuguese flag in language selector 157 | - Add profile picture preview in register and update 158 | - Update Provider package to 2.0.4 159 | - Added new translations: Catalan 160 | - Improved translations: Czech, Greek, French, Gujarati, Hebrew, Hindi, Italian, Khmer (Central), Nepali, Dutch, Punjabi, Polish, Portuguese (Brazil), Romanian, Russian, Ukrainian, Vietnamese, Chinese (Simplified), pirate (generated), minion (generated) 161 | 162 | # Version 4.2.3 163 | 164 | - Fix player UI not disappearing 165 | - Implement new locale system to support regional and alternative languages 166 | - Add Turnstile interactive challenge and Turnstile loading screen 167 | - Added new translations: Galician, Punjabi, Romanian 168 | - Improved translations: Arabic, Czech, German, Spanish, Estonian, Gujarati, Hindi, Russian, Chinese (Simplified) 169 | 170 | # Version 4.2.2 171 | 172 | - Add worker URL syncing for accounts 173 | - Fix broken hero title during the day 174 | - Move search items with no poster to the end of the search results 175 | - disable episodes if they have not been aired yet 176 | - update provider package: disable febbox HLS, irreparable 177 | - Added new translations: Bulgarian, Bengali, Greek, Persian, Gujarati, Indonesian, Japanese, Korean, Slovenian, Tamil, Chinese (Traditional) 178 | - Improved translations: Arabic, Czech, German, Spanish, Estonian, French, Hebrew, Hindi, Italian, Nepali, Dutch, Polish, Portuguese (Brazil), Russian, Thai, Toki Pona, Turkish, Ukrainian, Chinese (Simplified), pirate (generated), minion (generated) 179 | 180 | # Version 4.2.1 181 | 182 | - Fix the scrape screen showing success when it shouldn't 183 | - Fix some more [Object object] showing in the error dialogue 184 | - Updated translations: Czech, German, French, Polish, Italian, Thai, Hebrew, Nepali, Estonian, Toki Pona, Portuguese, Pirate 185 | - Fix Ukrainian, Hindi and Toki Pona flags 186 | 187 | # Version 4.2.0 188 | 189 | - Add splashscreens for PWA 190 | - Renamed captions to subtitles in translations 191 | - Add youtube-esque shortcuts for navigating video 192 | - Fix error dialogue not showing actual error message but instead shows [Object object] 193 | - Gray subtitle color 194 | - Hide settings button on mobile when it shouldnt have shown 195 | - Fix Estonia and Nepal flag 196 | - Update provider package to 2.0.1 197 | - Superstream now split into showbox and febbox. 198 | - Fixed sidebar not highlighting last item on high screens 199 | - New translations: Hindi, Polish, Portuguese - Brazillian, Ukrainian 200 | - Updates to translations: Czech, Estonian, German, Hebrew, Cambodian, Nepali, Swedish, Thai, Chinese, Minion 201 | 202 | # Version 4.1.3 203 | 204 | - Add support for downloading HLS playlists 205 | - Added cdn replacements configuration option 206 | - new translations: estonian, toki pona, spanish 207 | - Translation improvements: german, turkish, nepali, chinese 208 | 209 | # Version 4.1.2 210 | 211 | - Improve bundle chunking 212 | - Add millionjs for faster react 213 | - Update all dependency versions 214 | - Translation improvements: czech, hebrew, german 215 | - Fix mobile controls not going away after some time 216 | - Improve poster quality 217 | - Fix "media not found" error not being shown 218 | - Add more information to the error details modal 219 | 220 | # Version 4.1.1 221 | 222 | - Fixed bug where settings toggles sometimes weren't usable 223 | - Fixed bug where captions were permanently enabled 224 | - Fixed some missing translations 225 | - Translation improvements: arabic, french, nepali, chinese 226 | 227 | # Version 4.1.0 228 | 229 | - Added new translations: arabic, chinese, latvian, thai, nepali, dutch 230 | - Translation improvements: turkish, hebrew 231 | - Fixed text directions for captions 232 | - Anti-tamper script has been removed and replaced with turnstile (this is the devtools blocked, you can use devtools again) 233 | - Added way to add the providers-API instead of proxies 234 | 235 | # Version 4.0.2 236 | 237 | - Added new translations: Hebrew, French, German, Swedish, Turkish. 238 | - Added minion joke language. Blame @jip\_. 239 | - Thumbnail preview no longer goes under the next episode button. 240 | - Passphrase inputs are now actual password fields, so they may act nicer with password managers. 241 | - The player now remembers what your subtitle settings were, so no longer you need to keep selecting english every time you watch. 242 | - Fix home link not working with /s/:term shortcut. 243 | - Swedish flag is now an actual Swedish flag. 244 | - Fix for various layout issues with small width mobile screens. 245 | 246 | # Version 4.0.0 247 | 248 | 249 | If you are upgrading from a previous version, make sure to read [the upgrade guide](./upgrade.mdx). 250 | 251 | 252 | ### Bug fixes 253 | 254 | - Fixed bug where video player overlays the controls on IOS. 255 | - Fixed bug where you are kicked out of the fullscreen when switching episode. 256 | - Fixed bug where you cannot select a different episode if first episode fails to load. 257 | 258 | ### Enhancements 259 | 260 | - Completely redesigned look and feel for the entire website. 261 | - Added FAQ and DMCA pages. 262 | - Source loading page is more detailed. 263 | - Video player has been remade from scratch, all internal workings are brand new. 264 | - You can now input numbers manually into the subtitle customization menu. 265 | - Subtitle delay can now be increased outside of the slider range by inputting manual numbers. 266 | - Movie and show URL's now include the name of the media in the link, makes it easier at a glance to see what a link is about. 267 | - Instructions on how to download are now given inside the app. 268 | - Chromecasting no longer shows captions on the web player (still doesnt show on cast receiver) 269 | - Chromecasting now supports HLS 270 | 271 | ### New features 272 | 273 | - Quality selector! You can now switch qualities. 274 | - Search bar no longer requires you to choose between shows or movies. 275 | - Visit `/s/:term` to quickly watch something. For example `https://movie-web.app/s/hamilton`. 276 | - You can now add movie-web as a search provider in your browser. 277 | - Safari now has subtitles when fullscreening. 278 | - A next episode button will appear when close to the end of an episode, allowing quick switching to next episode. 279 | - When seeking and hovering over progress bar, you will now see a thumbnail for the place you're hovering. 280 | - Subtitles now have language flag next to them. 281 | - Your subtitle preference gets saved. 282 | - Turn on subtitles using keyboard shortcut `C`. 283 | - Self-hosters can now test their configurations at the `/admin` page. 284 | - Subtitles can now be downloaded. 285 | - Sync your data through online accounts (using passphrases for maximum privacy) 286 | - You can now choose your own worker URL set in the settings page. 287 | - A custom backend server URL can be set on the settings page. 288 | - On the settings page, you can now choose between multiple themes. 289 | --------------------------------------------------------------------------------