Episodes

Episodes

Docker app from grtgbln's Repository

Overview

Self-hosted TV show episode tracker allowing you to keep track of your favourite TV shows either continuing or ending.

Episodes

Self-hosted TV show Episode tracker built using django and bootstrap5.
Episodes allows you to keep track of your favourite tv shows either continuing or ending.

Using http://thetvdb.com/ for metadata.

Forked from https://github.com/guptachetan1997/Episodes

Inspired from https://github.com/jamienicol/episodes

Android app

You can download the android app from here. It is a simple webview app and you will enter your url when the app opens (make sure to have a '/' at the end of your url like https://example.com/).

Features

  • add tv shows to track when new episodes come out
  • mark tv show episodes as watched
  • mark shows as "Stopped Watching" or "Watch Later" (these shows will not show up in your Watch Next feed)
  • Watch Next, Upcoming, History, Watch Later, and Stopped Watching
  • Set up a "Watch Delay" for shows that you want to show in your Watch Next feed x days after release (if you watch on streaming and it releases 1 day later, set this to 1)
  • Get show and episode overviews

Install using Docker Compose

  1. Download the docker-compose.yml file to your computer
  2. Edit the docker-compose.yml file to change the SECRET_KEY and CSRF_TRUSTED_ORIGINS variables, and change the port if you want to.
    • SECRET_KEY - this can be generated with python like this:
      python3 -c 'import secrets; print(secrets.token_hex(100))'
      
    • CSRF_TRUSTED_ORIGINS - this needs to be where you will access the server from, multiple origins can be separated by a space like this:
      "http://localhost https://example.com"
      
    • Change the port on the left side only unless you know what you are doing. If you want to access from port 8080, change to "8080:3000"
  3. Run: docker compose pull
  4. Run: docker compose up -d
  5. Access your server from http://localhost:3000

Install Manually

To use clone the production branch, install requirements, run the following terminal commands:

open to the directory you want to install Episodes (change /opt to wherever you want)

cd /opt

clone this Episodes repo

git clone https://github.com/bryangerlach/Episodes.git

open the Episodes directory

cd Episodes

setup a python virtual environment called episodes (or whatever name you want)

python -m venv episodes

activate the python virtual environment on linux

source episodes/bin/activate

or on windows

./episodes/Scripts/activate

install the python dependencies

pip install -r requirements.txt

setup the database

python manage.py migrate

run the server, change 8000 with whatever you want

python manage.py runserver 0.0.0.0:8000

you can now access the webpage from http://localhost:8000, you can use nginx, caddy, or other reverse proxy for better access

You will also want to set up a cron job to update the database with thetvdb api data

The following command will add a cron job to update all continuing shows for new data at 3am and 3pm everyday (this only works on linux):

python manage.py crontab add

to show cron jobs created by this server

python manage.py crontab show

to delete cron jobs created by this server

python manage.py crontab remove

You can also manually update the database in the app by pressing the update button, or from commandline by running:

python manage.py update_db

alt tag alt tag alt tag alt tag

Media gallery

1 / 3

Install Episodes on Unraid in a few clicks.

Find Episodes in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.

Open the Apps tab on your Unraid server Search Community Apps for Episodes Review the template variables and paths Click Install

Download Statistics

2,249
Total Downloads

Details

Repository
bryangerlach/episodes:latest
Last Updated2026-04-02
First Seen2025-01-21

Runtime arguments

Web UI
http://[IP]:[PORT:3000]/
Network
bridge
Privileged
false

Template configuration

Web UI PortPorttcp

Container Port: 3000

Target
3000
Default
3000
Value
3000
Secret KeyVariable

Generate with Python command: python3 -c 'import secrets; print(secrets.token_hex(100))'

Target
SECRET_KEY
CSRF Trusted DomainsVariable

Space-separated list of trusted domains for CSRF protection

Target
CSRF_TRUSTED_ORIGINS
Default
http://localhost:3000 http://IP_ADDRESS:3000 https://example.com
Value
http://localhost:3000 https://example.com
App DataPath

Path to app data

Target
/app/db
Default
/mnt/user/appdata/episodes/db
Value
/mnt/user/appdata/episodes/db
DebugVariable

Enable debug mode

Target
DEBUG
Default
False|True