This is the self-hosted media tracker app I always wanted to have. From now on I will use it and keep it maintained. I will never ask for donations or try to monetize the app in any form. People using it is more than enough!
Note: I added the open source AGPL license to make contributing easier, hoping nobody would try to monetize the app with the "commercial use" clause. I personally disapprove of that.
- Separate lists for movies, tv shows, games, anime, manga, books and music.
- Track progress, ratings, status, and notes.
- Home page shows stats, recent activity and favorites (including actors and characters).
- Multiple rating systems (3 faces, 5 stars, 1-10, 1-100).
- You can play your saved songs through a YouTube music player while navigating the site.
- Automated check for sequels and new seasons (tv shows, anime, manga).
- Get status for planned movies, tv shows, anime, manga.
Demo - Youtube Demo
![]() |
![]() |
|---|---|
| Home | Movies |
![]() |
![]() |
|---|---|
| History | Discover |
![]() |
![]() |
|---|---|
| Details | Edit |
-
Clone the repository:
git clone https://github.com/mihail-pop/media-journal
-
Open a terminal in the project folder and start the app with:
docker-compose up -d
The application will be available at http://localhost:8090.
- Inside the app, navigate to Settings → API Keys.
You will need to add your own API keys. In that section there are instructions on how to obtain them.
The application can be configured using environment variables.
-
CSRF_TRUSTED_ORIGINS: A comma-separated list of trusted origins for POST requests. This is necessary if you are accessing the application from a different domain.For example, in
docker-compose.yml:environment: - CSRF_TRUSTED_ORIGINS=https://your-domain.com,https://another-domain.com
Setup for Windows - Youtube Tutorial
-
Download Python 3.13.0.
During installation check the option: “Add Python to PATH”.
-
Open a terminal inside the folder where you want the app installed:
Right-click inside your folder → Select Open in Terminal.
-
Clone the repository (download GIT):
git clone https://github.com/mihail-pop/media-journal
Then open a terminal in the newly created folder.
-
Install the dependencies:
pip install -r requirements.txt
-
Create the database:
python manage.py migrate
-
Generate static files (required after every update):
python manage.py collectstatic --noinput
-
Start the app:
python manage.py runserver --noreload
-
Open the app in your browser at: http://localhost:8000
-
Inside the app navigate to Settings → API Keys. You will need to add your own API keys. In that section there are instructions on how to obtain them.
-
To access the app from your phone or other devices on the same network, run the server using this command:
python manage.py runserver 0.0.0.0:8000 --noreload
Then on your other devices you can access it using your machine's IPv4 address. You can find your IPv4 address by running
ipconfigin the terminal. -
For windows, to automatically start the app, you can create a
.batfile that runs therunservercommand and a.vbsfile in the shell:startup folder to start that bat file at startup.
Example .bat file:
@echo off
cd /d "C:\***path to your folder***\media-journal"
set PY="C:\***path to your python***\Python\Python313\python.exe"
%PY% manage.py migrate
%PY% manage.py collectstatic --noinput
%PY% manage.py runserver 0.0.0.0:8000 --noreloadExample .vbs file:
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run """C:\***path to your bat file***\run_journal.bat""", 0
Set WshShell = Nothing- Some YouTube videos (especially music) may show “Video unavailable, watch on YouTube” if you use a numeric URL (e.g.,
http://127.0.0.1:8000). Those videos work onhttp://localhost:8000or a custom URL (e.g.,http://myapp.mediajournal:8000). To use a custom URL across devices, you need local DNS, which many routers don’t support. The other option is hosting a local DNS app on your machine, but it would always have to be turned on.





