2025-02-28 18:23:31 +01:00
2025-02-05 11:49:43 +01:00
2025-02-05 11:49:43 +01:00
2024-02-11 22:38:29 +01:00

Yamtrack

App Tests Docker Image CodeFactor Codecov GitHub

Yamtrack is a self hosted media tracker for movies, tv shows, anime, manga, video games and books.

🚀 Demo

You can try the app at yamtrack.fuzzygrim.com using the username demo and password demo.

Features

  • 🎬 Track movies, tv shows, anime, manga, games, books and comics.
  • 📺 Track each season of a tv show individually and episodes watched.
  • Save score, status, progress, repeats (rewatches, rereads...), start and end dates, or write a note.
  • 📈 Keep a tracking history with each action with a media, such as when you added it, when you started it, when you started watching it again, etc.
  • ✏️ Create custom media entries, for niche media that cannot be found by the supported APIs.
  • 📂 Create personal lists to organize your media for any purpose, add other members to collaborate on your lists.
  • 📅 Keep up with your upcoming media with a calendar, which can be subscribed to in external applications using a iCalendar (.ics) URL.
  • 🔔 Receive notifications of upcoming releases via Apprise (supports Discord, Telegram, ntfy, Slack, email, and many more).
  • 🐳 Easy deployment with Docker via docker-compose with SQLite or PostgreSQL.
  • 👥 Multi-users functionality allowing individual accounts with personalized tracking.
  • 🔑 Flexible authentication options including OIDC and 100+ social providers (Google, GitHub, Discord, etc.) via django-allauth.
  • 🦀 Integration with Jellyfin, to automatically track new media watched.
  • 📥 Import from Trakt, Simkl, MyAnimeList, AniList and Kitsu.
  • 📊 Export all your tracked media to a CSV file and import it back.

📱 Screenshots

Homepage Calendar
Homepage calendar
Media List Grid Media List Table
List Grid List Table
Media Details Tracking
Media Details Tracking
Season Details Tracking Episodes
Season Details Tracking Episodes
Lists Statistics
Lists Statistics
Create Manual Entries Import Data
Create Manual Entries Import Data

🐳 Installing with Docker

Copy the default docker-compose.yml file from the repository and set the environment variables. This would use a SQlite database, which is enough for most use cases.

To start the containers run:

docker-compose up -d

Alternatively, if you need a PostgreSQL database, you can use the docker-compose.postgres.yml file.

🌊 Reverse Proxy Setup

When using a reverse proxy, if you see a 403 - Forbidden error, you need to set the URLS environment variable to the URL you are using for the app.

services:
  yamtrack:
    ...
    environment:
      - URLS=https://yamtrack.mydomain.com
    ...

Note that the setting must include the correct protocol (https or http), and must not include the application / context path. Multiple origins can be specified by separating them with a comma (,).

⚙️ Environment variables

Name Notes
TMDB_API The Movie Database API key for movies and tv shows, a default key is provided
TMDB_NSFW Default to False, set to True to include adult content in tv and movie searches
TMDB_LANG TMDB metadata language, uses a Language code in ISO 639-1 e.g en, for more specific results a country code in ISO 3166-1 can be added e.g en-US
MAL_API MyAnimeList API key, for anime and manga, a default key is provided
MAL_NSFW Default to False, set to True to include adult content in anime and manga searches from MyAnimeList
MU_NSFW Default to False, set to True to include adult content in manga searches from MangaUpdates
IGDB_ID IGDB API key for games, a default key is provided but it's recommended to get your own as it has a low rate limit
IGDB_SECRET IGDB API secret for games, a default value is provided but it's recommended to get your own as it has a low rate limit
IGDB_NSFW Default to False, set to True to include adult content in game searches
SIMKL_ID Simkl API key only needed for importing media from Simkl, a default key is provided but you can get one at Simkl Developer if needed
SIMKL_SECRET Simkl API secret for importing media from Simkl, a default secret is provided but you can get one at Simkl Developer if needed
REDIS_URL Default to redis://localhost:6379, Redis is needed for processing background tasks, set this to your redis server url
SECRET Secret key used for cryptographic signing, should be a random string
URLS Shortcut to set both the CSRF and ALLOWED_HOSTS settings, comma separated list of URLs, e.g. https://yamtrack.mydomain.com or https://yamtrack.mydomain.com, https://yamtrack.mydomain2.com
ALLOWED_HOSTS Comma separated list of host/domain names that this Django site can serve, e.g. yamtrack.mydomain.com or yamtrack.mydomain.com, 192.168.1.1. Default to * for all hosts
CSRF Comma separated list of trusted origins for POST requests when using reverse proxies, e.g. https://yamtrack.mydomain.com or https://yamtrack.mydomain.com, https://yamtrack.mydomain2.com
REGISTRATION Default to True, set to False to disable user registration
DEBUG Default to False, set to True for debugging
ADMIN_ENABLED Default to False, set to True to enable the Django admin interface
PUID User ID for the app, default to 1000
PGID Group ID for the app, default to 1000
TZ Timezone, like Europe/Berlin. Default to UTC
WEB_CONCURRENCY Number of webserver processes, default to 1 but it's recommended to have a value of (2 x num cores) + 1
SOCIAL_PROVIDERS Comma-separated list of social authentication providers to enable, e.g. allauth.socialaccount.providers.openid_connect,allauth.socialaccount.providers.github
SOCIALACCOUNT_PROVIDERS JSON configuration for social providers, see the Wiki for a OIDC configuration example.
ACCOUNT_DEFAULT_HTTP_PROTOCOL Protocol for social providers, if your redirect_uri in OIDC config is https set this to https, default is determined based on your CSRF settings
SOCIALACCOUNT_ONLY Default to False, set to True to disable local authentication when using social authentication only
REDIRECT_LOGIN_TO_SSO Default to False, set to True to automatically redirect (using javascript) to the SSO provider when there's only one available. Useful for single sign-on setups.
HEALTHCHECK_CELERY_PING_TIMEOUT Default to 1, increases the timeout for the healthcheck ping to Celery. This is useful for slow connections.

🗄️ Environment variables for PostgreSQL

Name Notes
DB_HOST When not set, sqlite is used
DB_PORT
DB_NAME
DB_USER
DB_PASSWORD

💻 Local development

Clone the repository and change directory to it.

git clone https://github.com/FuzzyGrim/Yamtrack.git
cd Yamtrack

Install Redis or spin up a bare redis container:

docker run -d --name redis -p 6379:6379 --restart unless-stopped redis:7-alpine

Create a .env file in the root directory and add the following variables.

TMDB_API=API_KEY
MAL_API=API_KEY
IGDB_ID=IGDB_ID
IGDB_SECRET=IGDB_SECRET
SECRET=SECRET
DEBUG=True

Then run the following commands.

python -m pip install -U -r requirements-dev.txt
cd src
python manage.py migrate
python manage.py runserver & celery -A config worker --beat --scheduler django --loglevel DEBUG & tailwindcss -i ./static/css/input.css -o ./static/css/tailwind.css --watch

Go to: http://localhost:8000

💪 Support the Project

There are many ways you can support Yamtrack's development:

Star the Project

The simplest way to show your support is to star the repository on GitHub. It helps increase visibility and shows appreciation for the work.

🐛 Bug Reports

Found a bug? Open an issue on GitHub with detailed steps to reproduce it. Quality bug reports are incredibly valuable for improving stability.

💡 Feature Suggestions

Have ideas for new features? Share them through GitHub issues. Your feedback helps shape the future of Yamtrack.

🧪 Contributing

Pull requests are welcome! Whether it's fixing typos, improving documentation, or adding new features, your contributions help make Yamtrack better for everyone.

Donate

If you'd like to support the project financially:

ko-fi

Languages
Python 76.4%
HTML 16.8%
CSS 5%
JavaScript 1.7%