Semantische Filmsuche für deine Jellyfin-Sammlung. Durchsuche deine Filme mit natürlicher Sprache – „ein netter Familienfilm mit Pferden" – und erhalte passende Ergebnisse mit direktem Jellyfin-Link.
Find a file
2026-02-22 01:32:57 +01:00
app model-prefixe hinzugefügt - deutlich bessere suche 2026-02-22 01:11:55 +01:00
.env.example model-prefixe hinzugefügt - deutlich bessere suche 2026-02-22 01:11:55 +01:00
.gitignore Erster Versuch 2026-02-21 22:47:54 +01:00
copy_random.sh Erster Versuch 2026-02-21 22:47:54 +01:00
docker-compose.yml updated image name 2026-02-22 01:32:57 +01:00
Dockerfile updated image name 2026-02-22 01:31:59 +01:00
README.md Erster Versuch 2026-02-21 22:47:54 +01:00
requirements.txt Indizierung geht technisch - suche bringt unbefriedigendes ergebnis 2026-02-22 00:30:15 +01:00

🎬 Filmsuche

Semantische Filmsuche für deine Jellyfin-Sammlung. Durchsuche deine Filme mit natürlicher Sprache „ein netter Familienfilm mit Pferden" und erhalte passende Ergebnisse mit direktem Jellyfin-Link.

Features

  • Natürlichsprachliche Suche beschreibe was du sehen willst
  • Stimmungs-Filter optional die gewünschte Stimmung angeben
  • Benutzerprofile mit FSK Kinder sehen nur altersgerechte Filme
  • PIN-Schutz für Profile mit höherer Altersfreigabe
  • Ähnliche Filme klicke einen Film an für Empfehlungen
  • Jellyfin-Integration direkter "In Jellyfin öffnen"-Link
  • Dark Mode schickes dunkles Design
  • Responsive funktioniert auf Handy, Tablet & Desktop

Architektur

ollama-net                         db-net
├── ollama-server:11434    ←→    ├── chromadb:8000
│   (LLM + Embeddings)          │   (Vektordatenbank)
│                                │
└── filmsuche:42000 ─────────────┘
    (Python/FastAPI)
    ├── liest /media/filme/*.nfo
    └── verlinkt auf Jellyfin (HTTPS)

Voraussetzungen

  1. Ollama läuft im Docker-Netzwerk ollama-net
  2. ChromaDB läuft im Docker-Netzwerk db-net
  3. Jellyfin ist via HTTPS erreichbar
  4. Embedding-Modell in Ollama geladen:
    docker exec ollama-server ollama pull nomic-embed-text
    

ChromaDB (falls noch nicht vorhanden)

# chromadb/docker-compose.yml
version: "3.8"
services:
  chromadb:
    image: chromadb/chroma
    container_name: chromadb
    restart: unless-stopped
    ports:
      - "42010:8000"
    volumes:
      - CHANGE_TO_COMPOSE_DATA_PATH/42_chromadb/data:/chroma/chroma
    networks:
      - db-net

networks:
  db-net:
    external: true

Setup

1. docker-compose.yml anpassen

Drei Stellen in docker-compose.yml müssen angepasst werden:

volumes:
  - CHANGE_TO_COMPOSE_DATA_PATH/42_filmsuche/data:/app/data
  - /pfad/zu/jellyfin/filme:/media/filme:ro  # ← Pfad zu deinen NFO-Dateien
environment:
  - JELLYFIN_URL=https://dein-jellyfin.example.com  # ← Deine Jellyfin-URL
  - JELLYFIN_API_KEY=DEIN_API_KEY_HIER               # ← Dein API-Key

2. Jellyfin API-Key erstellen

  1. Jellyfin → Dashboard → API-Schlüssel
  2. Neuen Schlüssel erstellen (Name: "Filmsuche")
  3. Den Key in docker-compose.yml eintragen

3. Netzwerke erstellen (falls noch nicht vorhanden)

docker network create ollama-net
docker network create db-net

4. Starten

cd filmsuche
docker compose up -d --build

5. Filme indexieren

  1. Öffne http://dein-server:42000
  2. Klicke unten auf ⚙️ Verwaltung
  3. Prüfe ob Ollama (🟢) und ChromaDB (🟢) verbunden sind
  4. Klicke 🔄 Filme neu indexieren
  5. Warte bis alle Filme verarbeitet sind (~2-5 Min. für 1500 Filme)

6. Suchen!

Wähle ein Profil, optional eine Stimmung, und beschreibe deinen Wunschfilm.

Umgebungsvariablen

Variable Standard Beschreibung
OLLAMA_URL http://ollama-server:11434 Ollama API
CHROMA_URL http://chromadb:8000 ChromaDB API
JELLYFIN_URL http://localhost:8096 Jellyfin URL (wie du sie im Browser öffnest)
JELLYFIN_API_KEY Jellyfin API-Schlüssel
COLLECTION_NAME filmsuche ChromaDB Collection-Name
EMBEDDING_MODEL nomic-embed-text Ollama Embedding-Modell
NFO_PATH /media/filme Pfad zu den NFO-Dateien im Container

Profile

Beim ersten Start werden drei Standard-Profile erstellt:

Profil FSK PIN
👨‍👩‍👧‍👦 Familie 6
🎓 Jugendliche 12
🎬 Erwachsene 18 1234

Profile können über die Verwaltung angepasst werden. Die Standard-PIN für "Erwachsene" sollte geändert werden.

Tipps

  • Suchanfragen funktionieren am besten auf Deutsch (weil die NFO-Plots oft deutsch sind)
  • Ähnliche Filme: Klicke auf eine Filmkarte, um ähnliche Filme zu finden
  • Neu-Indexierung bei neuen Filmen die alten bleiben erhalten (Upsert)
  • Die ChromaDB-Collection filmsuche kann unabhängig von anderen Projekten genutzt werden