WatchSense

TV series recommendations from your own viewing history and an AI model you pick

  • ghcr.io/peppeg/watchsense:1.1.1
  • v1.1.1
  • Updated 29 Oct 2026
  • port 6173
  • amd64 · arm64
  • Media
  • 0 stars

Screenshots

WatchSense screenshot 1: HomeWatchSense screenshot 2: RecommendationsWatchSense screenshot 3: LibraryWatchSense screenshot 4: Series details

Open the app

Web App

http://localhost:6173/

About WatchSense

WatchSense collects what you watched on Netflix, Prime Video, Stremio and Trakt, adds TMDB details and asks an AI model of your choice (cloud or local, like Ollama) what you should watch next. Your thumbs up, thumbs down and taste notes shape the next suggestions.

Features

  • Imports your history from Netflix (automatic sync, bookmarklet or CSV), Prime Video, Stremio and Trakt
  • TMDB details in your language: posters, genres and where each show is streaming in your country
  • Works with any OpenAI-compatible AI service: OpenRouter, OpenAI, Groq, DeepSeek, Mistral, Kilo, Ollama, LM Studio and more
  • Ratings, show status and taste notes feed the next recommendations
  • Export your whole history (CSV) and viewer profile (JSON) any time
  • Everything in one SQLite file

How to use

  1. Open WatchSense from your dashboard.
  2. Follow the Getting started list on the Home page: language and country, your TMDB key, a viewing source and an AI model.
  3. Import or sync your viewing history.
  4. Open For you to get recommendations, and rate them to make the next ones better.

Before you install

Get a free TMDB API key at https://www.themoviedb.org/settings/api and pick an AI service (OpenRouter, OpenAI, a local Ollama...). You type both in Settings after install, so nothing has to be set first. From other devices, open http://[ZIMAOS-IP-ADDRESS]:6173. There is no login unless you add WATCHSENSE_TOKEN, so anyone who can reach the address can use it. For the Trakt import, put your Trakt export in the exports/trakt folder of the app data. Every other setting is optional and listed in the Variables tab; to use one, add it in the app settings. WatchSense is ready a few seconds after install. Back up the data folder with secret.key in it: the API keys you saved can't be read without it.

The settings in the first table are already in the app settings. To use any other one, open the app settings, add the variable with your value, save, and the app restarts with it. A setting you leave out uses its default.

In the app settings

VariableDefault valueDescription
TZ$TZYour time zone. It is filled in from your ZimaOS time zone. Leave it unless you need another.
PUID$PUIDThe user that owns the data folder. It is filled in by ZimaOS. Leave it.
PGID$PGIDThe group that owns the data folder. It is filled in by ZimaOS. Leave it.

TMDB

VariableDefault valueDescription
TMDB_API_KEY—Your free TMDB v3 API key from https://www.themoviedb.org/settings/api. You can also type it in Settings; a key saved there wins.

Language and region

VariableDefault valueDescription
TMDB_LANGUAGEen-USLanguage of titles and summaries from TMDB, like en-GB or it-IT. Only used on the first start; change it later in Settings.
TMDB_REGIONUSYour country as a two-letter code, like GB or IT, for streaming services and charts. Only used on the first start; change it later in Settings.
WATCHSENSE_LOCALEenLanguage of the app and of the AI's answers: en or it. Only used on the first start; change it later in Settings.

AI model

VariableDefault valueDescription
LLM_BASE_URL—Address of an OpenAI-compatible AI service, like https://openrouter.ai/api/v1, or http://[ZIMAOS-IP-ADDRESS]:11434/v1 for Ollama. Values saved in Settings win.
LLM_API_KEY—The API key for that service. Not needed for a local Ollama or LM Studio.
LLM_MODELkilo-auto/freeThe model name, like openai/gpt-4o-mini. The default only exists on Kilo, so set it for any other service.
KILO_API_KEY—Older setting: a Kilo key, used only when LLM_BASE_URL and LLM_API_KEY are empty.
KILO_BASE_URLhttps://api.kilo.ai/api/gatewayOlder setting: the Kilo address used with KILO_API_KEY.
OPENROUTER_API_KEY—Older setting: an OpenRouter key, used only when LLM_BASE_URL and LLM_API_KEY are empty.

Sync

VariableDefault valueDescription
SYNC_INTERVAL_HOURS12How often, in hours, Netflix is synced on its own. A value picked in Settings (6, 12 or 24) wins.

Access and security

VariableDefault valueDescription
WATCHSENSE_TOKEN—A long random password to open WatchSense. Leave it out and anyone who can reach the address can use it. Use https too if it is reachable from the internet.
WATCHSENSE_SECRET_KEY—Your own key for the saved secrets: 64 hex characters or 32 bytes in base64. Leave it out: WatchSense makes secret.key in the data folder on first start. Don't change it after you saved keys in Settings.
docker-compose.yml
name: watchsense

services:
  watchsense:
    image: ghcr.io/peppeg/watchsense:1.1.1
    container_name: watchsense
    restart: unless-stopped
    stop_grace_period: 30s
    network_mode: bridge
    environment:
      - TZ=$TZ
      - PUID=$PUID
      - PGID=$PGID
    ports:
      - target: 3000
        published: "6173"
        protocol: tcp
    volumes:
      - type: bind
        source: /DATA/AppData/$AppID/data
        target: /app/data
        bind:
          create_host_path: true
      - type: bind
        source: /DATA/AppData/$AppID/exports
        target: /app/exports
        bind:
          create_host_path: true
    healthcheck:
      test: ["CMD", "node", "-e", "fetch('http://127.0.0.1:3000/api/health').then(r => process.exit(r.ok ? 0 : 1)).catch(() => process.exit(1))"]
      interval: 30s
      timeout: 5s
      retries: 3
      start_period: 30s
    deploy:
      resources:
        limits:
          cpus: "1.00"
          memory: 512M
        reservations:
          cpus: "0.00"
          memory: 96M
    labels:
      icon: https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/watchsense/icon.png
    x-casaos:
      id: com.icestore.watchsense
      envs:
        - container: TZ
          description:
            en_US: >-
              Your time zone. It is filled in from your ZimaOS time zone.
              Leave it unless you need another.
        - container: PUID
          description:
            en_US: >-
              The user that owns the data folder. It is filled in by ZimaOS.
              Leave it.
        - container: PGID
          description:
            en_US: >-
              The group that owns the data folder. It is filled in by ZimaOS.
              Leave it.
      ports:
        - container: "3000"
          description:
            en_US: WatchSense web app, published on host as 6173
      volumes:
        - container: /app/data
          description:
            en_US: >-
              The SQLite database (watchsense.db) and secret.key, the key made
              on first start that encrypts the API keys and logins you save
              in Settings. Back up both together.
        - container: /app/exports
          description:
            en_US: >-
              Only for the Trakt import: put your Trakt data export in the
              trakt folder inside it. WatchSense only reads this folder.

x-casaos:
  id: com.icestore.watchsense
  architectures:
    - amd64
    - arm64
  main: watchsense
  author: HSinghHira
  category: Media
  developer: peppeg
  icon: https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/watchsense/icon.png
  thumbnail: https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/watchsense/screenshot-1.webp
  screenshot_link:
    - https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/watchsense/screenshot-1.webp
    - https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/watchsense/screenshot-2.webp
    - https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/watchsense/screenshot-3.webp
    - https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/watchsense/screenshot-4.webp
  title:
    en_US: WatchSense
  tagline:
    en_US: TV series recommendations from your own viewing history and an AI model you pick
  description:
    en_US: >-
      Visit: [https://icestore.hsinghhira.me/app/watchsense/](https://icestore.hsinghhira.me/app/watchsense/) for full details


      WatchSense collects what you watched on Netflix, Prime Video, Stremio
      and Trakt, adds TMDB details and asks an AI model of your choice (cloud
      or local, like Ollama) what you should watch next. Your thumbs up, thumbs
      down and taste notes shape the next suggestions.


      **Features**


      - Imports your history from Netflix (automatic sync, bookmarklet or
        CSV), Prime Video, Stremio and Trakt

      - TMDB details in your language: posters, genres and where each show
        is streaming in your country

      - Works with any OpenAI-compatible AI service: OpenRouter, OpenAI,
        Groq, DeepSeek, Mistral, Kilo, Ollama, LM Studio and more

      - Ratings, show status and taste notes feed the next recommendations

      - Export your whole history (CSV) and viewer profile (JSON) any time

      - Everything in one SQLite file


      **How to use?**


      1. Open WatchSense from the Zima OS dashboard.


      2. Follow the Getting started list on the Home page: language and
         country, your TMDB key, a viewing source and an AI model.


      3. Import or sync your viewing history.


      4. Open For you to get recommendations, and rate them to make the next
         ones better.
  tips:
    before_install:
      en_US: >-
        1. Get a free TMDB API key at https://www.themoviedb.org/settings/api.
           You type it in later, in Settings.


        2. Pick an AI service, like OpenRouter or a local Ollama. Have its
           address, key and model name ready.


        3. Start the installation. It is ready in a few seconds.


        4. Open WatchSense from the Zima OS dashboard, or go to
           http://[ZIMAOS-IP-ADDRESS]:6173 from another device.


        5. Follow the Getting started list on the Home page.


        6. Anyone who can open the address can use WatchSense. To ask for a
           password, add WATCHSENSE_TOKEN in the app settings.


        7. More settings, like the language, the country and the AI model,
           are listed on the WatchSense page at
           https://icestore.hsinghhira.me/app/watchsense/ (Variables tab). You
           can add them now or later in the app settings.
  index: /
  port_map: "6173"
  scheme: http
  is_uncontrolled: false
  version: "1.1.1"
  update_at: "2026-10-29"
  release_notes:
    en_US: |-
      - First version in IceStore, on port 6173
      - Uses ghcr.io/peppeg/watchsense 1.1.1 as upstream ships it
      - The encryption key for saved secrets is made by WatchSense on first start and kept in the data folder
  repo: "https://github.com/peppeg/watchsense"
  support: "https://github.com/peppeg/watchsense/issues"
  docs: "https://github.com/peppeg/watchsense/blob/main/docs/CONFIGURATION.md"

Install WatchSense

Something not working with WatchSense? Report a problem or request another app.

More Media apps

See all