notion-movies

Installation
SKILL.md

🎬 Notion Movies Skill

This skill transforms a Notion movie database into an intelligent, searchable, and self-enriching system.

It combines:

  • Notion (data storage)
  • TMDB (movie metadata)
  • Ollama (embeddings)
  • Qdrant (semantic search)

🧠 Why this skill exists

This is not just about saving and searching movies.

It turns Notion into a semantic knowledge system for movies, allowing agents to:

  • understand meaning (not just keywords)
  • enrich data automatically
  • avoid duplicates
  • recommend content intelligently

🔥 What you can actually do with it

🎬 1. Smart movie ingestion

Instead of manually filling fields:

"add Interstellar"

The agent will:

  • create the page
  • fetch poster
  • fetch plot
  • fetch director
  • fetch genres
  • fetch actors, runtime, year
  • format everything properly

🧬 2. Automatic duplicate detection

Prevents:

  • Interstellar
  • Interstellar (2014)
  • Interestellar ❌

Agent behavior:

"This movie already exists. Enriching instead of duplicating."

Detection uses:

  • fuzzy matching (typos)
  • normalized titles (removes year)
  • semantic similarity (vector-based)

🔎 3. Human-like search (semantic + explainable)

Instead of exact filters, you can ask:

"movies about time travel"
"romantic movies in Europe"
"movies like Nolan"
"movies that make you think"

The system understands intent, not just words.


🧠 Explainable results

Each result includes:

  • similarity score
  • reasoning

Example:

{
  "title": "Interstellar",
  "score": 0.92,
  "explanation": "Similar because: genre similarity, plot similarity"
}

This makes results transparent and debuggable.


🤖 4. Personal recommendation engine

Example:

"recommend something like Fight Club"

→ returns semantically similar movies


🧠 5. Turn Notion into a knowledge system

From:

Static database

To:

Living, searchable, intelligent system

⚡ 6. Agent workflows (OpenClaw)

Example flow:

User → "I want something like Interstellar"

→ searchMovies
→ rank results
→ explain results
→ suggest options
→ user selects one
→ addMovie
→ enrichMovie
→ index vector

⚙️ Environment Variables

Required:

  • NOTION_KEY
  • TMDB_API_KEY

Optional:


🧩 Actions


➕ addMovie

Creates a movie page (basic structure)

{
  "title": "Interstellar",
  "databaseQuery": "Movies"
}

Behavior:

  • checks duplicates before creating
  • prevents near-identical entries

🎬 enrichMovie

Enriches a movie with:

  • Poster (property + cover)
  • Plot (Notion blocks)
  • Director
  • Genres
  • Actors (top 5)
  • Year
  • Runtime
  • Emoji 🎬
  • Embedding (vector index)
{
  "title": "Interstellar",
  "databaseQuery": "Movies"
}

🔎 searchMovies

Semantic search with explainability

{
  "query": "movies about space exploration"
}

Returns:

  • top matches
  • similarity score
  • explanation

🧬 detectDuplicate

Detects duplicates using:

  • embeddings similarity
  • fuzzy matching
  • normalized titles
{
  "title": "Interstellar",
  "databaseQuery": "Movies"
}

🔁 syncDatabase

Sync Notion → Qdrant (vector DB)

{
  "databaseQuery": "Movies"
}

🧠 Embedding Strategy

Embeddings are built from enriched semantic content:

Title
Genres
Director
Plot
Themes (inferred)

✨ Example embedding input

Title: Interstellar
Genres: Science Fiction, Drama
Director: Christopher Nolan
Plot: A team travels through a wormhole in space...

Themes: space, time, futuristic

⚡ Optimization

  • important fields are repeated (weighting)
  • themes inferred automatically from plot
  • improves semantic recall and ranking

🧠 Data Enrichment Logic

🎥 Director

  • Source: TMDB /credits
  • Stored in: Director/es

🏷️ Genres

  • Source: TMDB /movie/{id}
  • Stored in: Género

🧠 Plot

  • Source: TMDB overview

  • Stored as Notion blocks:

    • Callout
    • Quote

🖼️ Poster

  • Source: TMDB

  • Stored as:

    • Portada
    • Notion cover

🎭 Actors

  • Source: TMDB /credits
  • Top 5 stored in Actores

📅 Year

  • Source: release date
  • Stored in Año

⏱️ Runtime

  • Source: TMDB details
  • Stored in Duración

🔐 Edge Case Handling

❌ Movie not found

{
  "error": "Movie not found in TMDB"
}

⚠️ Ambiguous results

{
  "error": "Multiple matches found",
  "options": [
    { "title": "Dune", "year": "2021" },
    { "title": "Dune", "year": "1984" }
  ]
}

🧠 Embedding fallback

If embedding fails:

  • returns zero vector
  • prevents system crashes
  • keeps pipeline running

🧬 Duplicate handling

System prevents:

  • typos
  • alternate titles
  • same movie with year variations

⚠️ Notion Schema Requirements

Property Type
Nombre title
Director/es rich_text
Género multi_select
Portada files
Rating select
Estado status

🧩 Extended Schema (Recommended)

Property Type Description
Año number Release year
Actores rich_text Main cast
Duración number Runtime

🤖 Agent Guidelines

Agents should:

  • ALWAYS use databaseQuery
  • ALWAYS check duplicates before adding
  • prefer semantic search over filters
  • explain recommendations when possible
  • enrich instead of duplicating
  • only fill missing data
  • handle ambiguity before proceeding
  • gracefully handle API failures

⚡ Performance Notes

  • embeddings generated via Ollama (nomic-embed-text:v1.5)
  • vectors stored in Qdrant
  • each movie indexed as semantic document
  • payload includes metadata for explainability

🚀 Advanced Capabilities

  • Semantic search (embedding-based)
  • Explainable recommendations
  • Hybrid duplicate detection (semantic + fuzzy)
  • Automatic enrichment pipeline
  • Robust error handling
  • Agent-ready design (OpenClaw compatible)
Related skills
Installs
10
First Seen
Mar 17, 2026