{"id":47100067,"url":"https://github.com/c-kick/vpro-cinema-plex","last_synced_at":"2026-03-12T15:15:56.309Z","repository":{"id":332541724,"uuid":"1129014654","full_name":"c-kick/vpro-cinema-plex","owner":"c-kick","description":"Plex Metadata Provider that fetches Dutch movie descriptions from VPRO Cinema. Uses NPO POMS API and TMDB alternate title lookup.","archived":false,"fork":false,"pushed_at":"2026-02-11T07:18:05.000Z","size":335,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-11T14:56:17.364Z","etag":null,"topics":["dutch","metadata","metadata-agent","metadata-api","metadata-extraction","plex","plex-agent"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/c-kick.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-06T13:38:45.000Z","updated_at":"2026-02-11T07:18:05.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/c-kick/vpro-cinema-plex","commit_stats":null,"previous_names":["c-kick/vpro-cinema-plex"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/c-kick/vpro-cinema-plex","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/c-kick%2Fvpro-cinema-plex","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/c-kick%2Fvpro-cinema-plex/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/c-kick%2Fvpro-cinema-plex/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/c-kick%2Fvpro-cinema-plex/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/c-kick","download_url":"https://codeload.github.com/c-kick/vpro-cinema-plex/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/c-kick%2Fvpro-cinema-plex/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30429794,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-12T14:34:45.044Z","status":"ssl_error","status_checked_at":"2026-03-12T14:09:33.793Z","response_time":114,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dutch","metadata","metadata-agent","metadata-api","metadata-extraction","plex","plex-agent"],"created_at":"2026-03-12T15:15:55.185Z","updated_at":"2026-03-12T15:15:56.290Z","avatar_url":"https://github.com/c-kick.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# VPRO Cinema Metadata Provider for Plex\n\nA custom metadata provider that supplies Dutch film descriptions\nfrom [VPRO Cinema](https://www.cinema.nl/) to Plex Media Server.\n\n\u003e **Note:** As of v4.0.0, this provider only supports **movies**. TV series support has been removed because VPRO's data sources don't provide complete series metadata (seasons, episodes, episode descriptions), which caused Plex scanning failures.\n\nSee [how it works](#how-it-works).\n\n![Example of the Metadata Provider in action!](https://github.com/user-attachments/assets/002b61b3-c05c-4888-a1c6-c34bf38d6dd1)\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n[![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/)\n[![Docker](https://img.shields.io/badge/docker-ready-blue.svg)](https://www.docker.com/)\n[![Plex 1.40+](https://img.shields.io/badge/Plex-1.40%2B-E5A00D.svg?logo=plex\u0026logoColor=white)](https://www.plex.tv/)\n\n## Features\n\n- 🇳🇱 Dutch film reviews/descriptions from VPRO Cinema's database\n- 🎬 Movies only (TV series not supported — see note above)\n- 🔞 Kijkwijzer content ratings (Dutch age classification: AL, 6, 9, 12, 14, 16, 18)\n- 🔍 Direct NPO POMS API access\n- 🌍 Smart title matching via TMDB — works in both directions (Translated → Original and Original → Translated)\n- 🔎 Cinema.nl fallback with IMDB verification when POMS API returns no results\n- 📦 TMDB fallback metadata — movies not in VPRO can still be added to Plex with basic info\n- 💾 Persistent caching (with short 1-hour TTL for not-found entries)\n- 🐳 Docker-ready with health checks\n- 🔗 Combines with other providers (returns description + content rating by default)\n- ⚙️ Configurable: optionally return VPRO images and/or ratings\n\n## Background\n\nFor years I wanted to automatically pull the excellent Dutch film reviews\nfrom [VPRO Cinema](https://www.cinema.nl) (formerly vprogids.nl/cinema) into Plex. I made several\nattempts over the years, but without an official NPO API, I never got it to work. After getting tired of manually\ncopying descriptions into Plex — only to have them overwritten by the next metadata refresh — I teamed up with Claude to\nbuild a proper solution. After some experimentation (first with scraping, then reverse-engineering the NPO's internal\nPOMS API), I finally got a working Plex agent! I decided to share it with the community, hoping it can help others too.\n\nFeel free to use, fork, and contribute, but note that the API is not officially supported by NPO, so the approach is\ntechnically a bit dodgy and may break at any time. Though it has been working excellently for me, so far!\n\n## Prerequisites\n\n**Required:**\n\n- **Docker** and **Docker Compose** — [Install Docker](https://docs.docker.com/get-docker/)\n- **Plex Media Server 1.40+** — Uses the new [Custom Metadata Providers API](https://developer.plex.tv/pms/)\n\n**Recommended:**\n\n- **TMDB API Key** — Enables smart alternate title lookup. Many films are indexed in VPRO Cinema under their original (\n  often French, German, or Dutch) title rather than the English title. With a TMDB API key, the provider automatically\n  discovers and tries alternate titles in both directions:\n    - **English → Original**: \"Downfall\" → \"Der Untergang\" (via IMDB ID from Plex)\n    - **Original → English**: \"Der Untergang\" → \"Downfall\" (via TMDB title search)\n\n  Get your free API key at: https://www.themoviedb.org/settings/api\n\n## Quick Start\n\n### 1. Clone and configure\n\n```bash\ngit clone https://github.com/c-kick/vpro-cinema-plex.git\ncd vpro-cinema-plex\ncp env.example .env\n```\n\nEdit `.env` to add your TMDB API key (optional but recommended):\n\n```bash\nTMDB_API_KEY=your_tmdb_api_key_here\n```\n\n### 2. Build and run\n\n```bash\ndocker-compose up -d\n```\n\n### 3. Verify\n\n```bash\ncurl \"http://localhost:5100/health\"\ncurl \"http://localhost:5100/test?title=Apocalypse+Now\u0026year=1979\"\n```\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eAlternative: Add to existing Docker stack (Portainer)\u003c/strong\u003e\u003c/summary\u003e\n\nPortainer often can't access local build contexts. Build the image on your server first:\n\n```bash\ncd /path/to/vpro-cinema-plex\ndocker build -t vpro-plex-provider:latest .\n```\n\nAdd to your stack:\n\n```yaml\nvpro-plex-provider:\n  image: vpro-plex-provider:latest\n  pull_policy: never\n  container_name: vpro-plex-provider\n  restart: unless-stopped\n  ports:\n    - \"5100:5100\"\n  environment:\n    - TZ=Europe/Amsterdam\n    - LOG_LEVEL=INFO\n    - TMDB_API_KEY=your_tmdb_api_key_here  # Optional but recommended\n    - CACHE_DIR=/app/cache\n    - POMS_CACHE_FILE=/app/cache/credentials.json\n    - VPRO_RETURN_SUMMARY=true        # Dutch descriptions (main feature)\n    - VPRO_RETURN_CONTENT_RATING=true # Kijkwijzer age ratings\n    - VPRO_RETURN_IMAGES=false        # Set to true to use VPRO posters\n    - VPRO_RETURN_RATING=false        # Experimental: VPRO ratings (see limitations)\n  volumes:\n    - /path/to/vpro-cinema-plex/cache:/app/cache\n  networks:\n    - your-plex-network  # Must be on same network as Plex\n```\nNote: if you use the plex network, you can use 'vpro-plex-provider' (instead of `localhost`, as in the examples below)\nto directly reference the agent in the provider URL in Plex: `http://vpro-plex-provider:5100/movies`\n\n\u003c/details\u003e\n\n## Plex Configuration\n\n\u003e **Important:** Replace `localhost` with your server's IP if Plex runs on a different host.\n\n| Endpoint                       | Provider Name                   | Use For  |\n|--------------------------------|---------------------------------|----------|\n| `http://localhost:5100/movies` | VPRO Cinema (Dutch Summaries)   | Movies   |\n\n### Register the provider\n\n1. In Plex, go to **Settings** → **Metadata Agents** → **Metadata Providers**\n2. Click **+ Add Provider**, paste `http://localhost:5100/movies`, save\n\n\u003cimg width=\"1017\" height=\"475\" alt=\"image\" src=\"https://github.com/user-attachments/assets/a0b4fbd4-ef0f-4ad7-a12b-15b724fa7faa\" /\u003e\n\n### Create the agent\n\n**Movie Agent:**\n\n1. Under **Metadata Agents**, click **+ Add Agent**\n2. Title: \"VPRO + Plex Movie\"\n3. Primary provider: `VPRO Cinema (Dutch Summaries)`\n4. Add \"Plex Movie\" as additional provider (click **+**)\n5. Optionally add \"Plex Local Media\"\n6. Save\n\n\u003cimg width=\"485\" height=\"658\" alt=\"image\" src=\"https://github.com/user-attachments/assets/06040d4c-2d8a-41a2-95a1-1ac9a9aa25c4\" /\u003e\n\n### Configure your libraries\n\n1. **Settings** → **Manage Libraries** → click `...` next to library → **Edit Library**\n2. **Advanced** tab → **Agent** → select your new agent\n3. Save and repeat for other movie libraries\n\n### Refresh metadata\n\nFor existing content: Select items → `...` → **Refresh Metadata**\n\nNew content will automatically use the provider on scan.\n\n## How It Works\n\nWhen configured as a Metadata Provider alongside Plex Movie (see [Plex Configuration](#plex-configuration)), the VPRO agent runs a lookup cascade while Plex Movie fetches its metadata in parallel. Results are merged with VPRO as primary — meaning Dutch summaries and Kijkwijzer ratings take precedence. Everything VPRO doesn't return (posters, cast, genres, etc.) is filled in by Plex Movie automatically.\n\n\u003cimg width=\"1063\" height=\"1072\" alt=\"vpro-how-it-works drawio (2) drawio (2)\" src=\"https://github.com/user-attachments/assets/e7b526e9-b467-46eb-ac38-eaf1fb1ba544\" /\u003e\n\n## Testing \u0026 Debugging\n\n### CLI search (no caching)\n\n```bash\n# Basic search\ndocker exec vpro-plex-provider python vpro_lookup.py \"Apocalypse Now\" --year 1979\n\n# With IMDB ID + verbose output\ndocker exec vpro-plex-provider python vpro_lookup.py \"Downfall\" --year 2004 --imdb tt0363163 -v\n\n# Test cinema.nl fallback directly (bypass POMS API)\ndocker exec vpro-plex-provider python vpro_lookup.py \"Der Untergang\" --year 2004 --skip-poms -v\n```\n\n### HTTP endpoints (with caching)\n\n```bash\n# Test search\ncurl \"http://localhost:5100/test?title=Le+dernier+métro\u0026year=1980\"\n\n# Test cinema.nl fallback directly (bypass POMS API)\ncurl \"http://localhost:5100/test?title=Der+Untergang\u0026year=2004\u0026skip_poms=1\"\n\n# Plex metadata endpoint\ncurl \"http://localhost:5100/movies/library/metadata/vpro-apocalypse-now-1979-tt0078788-m\"\n\n# Cache operations\ncurl \"http://localhost:5100/cache\"\ncurl \"http://localhost:5100/cache?key=vpro-apocalypse-now-1979-tt0078788-m\"\ncurl -X POST \"http://localhost:5100/cache/clear\"\ncurl -X POST \"http://localhost:5100/cache/delete?key=vpro-apocalypse-now-1979-tt0078788-m\"\ncurl -X POST \"http://localhost:5100/cache/delete?pattern=apocalypse\"\n```\n\n### Credential management\n\nThe POMS API uses hardcoded default credentials that have been working reliably.\n\n```bash\n# View cached credentials\ndocker exec vpro-plex-provider cat cache/credentials.json\n```\n\n\u003e **Note:** Credential auto-refresh from vprogids.nl is no longer functional since the migration to cinema.nl, but the default credentials continue to work with the POMS API.\n\n### Logs\n\n```bash\ndocker-compose logs -f\n```\n\n## Environment Variables\n\n| Variable                    | Default            | Description                                                 |\n|-----------------------------|--------------------|-------------------------------------------------------------|\n| `PORT`                      | 5100               | Server port                                                 |\n| `LOG_LEVEL`                 | INFO               | DEBUG, INFO, WARNING, ERROR                                 |\n| `CACHE_DIR`                 | ./cache            | Cache directory path                                        |\n| `TMDB_API_KEY`              | *(none)*           | TMDB API key for alternate title lookup                     |\n| `POMS_CACHE_FILE`           | ./credentials.json | Path to cached POMS credentials                             |\n| `VPRO_RETURN_SUMMARY`       | true               | Return VPRO Dutch summary/description                       |\n| `VPRO_RETURN_CONTENT_RATING`| true               | Return Kijkwijzer content rating (AL, 6, 9, 12, 14, 16, 18) |\n| `VPRO_RETURN_IMAGES`        | false              | Return VPRO images (recommended for Dutch films — better poster coverage than TMDB) |\n| `VPRO_RETURN_RATING`        | false              | Return VPRO rating (experimental, see [Limitations](#limitations)) |\n\n## API Reference\n\n| Endpoint                                | Method | Description                                      |\n|-----------------------------------------|--------|--------------------------------------------------|\n| `/movies`                               | GET    | Movie provider info (type 1)                     |\n| `/movies/library/metadata/\u003ckey\u003e`        | GET    | Plex metadata lookup for movies                  |\n| `/movies/library/metadata/matches`      | POST   | Plex match endpoint for movies                   |\n| `/movies/library/metadata/\u003ckey\u003e/images` | GET    | Returns VPRO images if enabled, otherwise empty  |\n| `/movies/library/metadata/\u003ckey\u003e/extras` | GET    | Returns empty (no extras)                        |\n| `/health`                               | GET    | Simple health check (version only)               |\n| `/health/ready`                         | GET    | Detailed health with checks, cache stats, config |\n| `/health/live`                          | GET    | Liveness probe (always returns ok)               |\n| `/test`                                 | GET    | Test search: `?title=X\u0026year=Y\u0026imdb=ttZ\u0026skip_poms=1\u0026skip_tmdb=1` |\n| `/cache`                                | GET    | List cached entries or view specific: `?key=X`   |\n| `/cache/clear`                          | POST   | Clear all cached entries (preserves credentials) |\n| `/cache/delete`                         | POST   | Delete specific entries: `?key=X` or `?pattern=X`|\n\n## File Structure\n\n```\nvpro-cinema-plex/\n├── docker-compose.yml          # Docker Compose config\n├── Dockerfile                  # Container definition\n├── env.example                 # Environment template (copy to .env)\n├── requirements.txt            # Python dependencies\n│\n├── vpro_metadata_provider.py   # Flask HTTP server for Plex\n├── vpro_lookup.py              # Search orchestrator + CLI\n├── poms_client.py              # NPO POMS API + TMDB clients\n├── vpro_scraper.py             # Cinema.nl fallback + page scraper\n├── models.py                   # Shared data models (VPROFilm)\n│\n├── cache.py                    # Disk cache with sharding\n├── credentials.py              # POMS credential management\n├── http_client.py              # HTTP session factory\n├── text_utils.py               # Title matching utilities\n├── logging_config.py           # Logging configuration\n├── metrics.py                  # Simple metrics collection\n├── constants.py                # Shared constants\n│\n├── LICENSE                     # MIT License\n└── README.md                   # This file\n```\n\n## Troubleshooting\n\n| Problem                                 | Solution                                                                                                                                                              |\n|-----------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| Provider not in Plex                    | Verify running: `curl http://localhost:5100/health`. Check network from Plex to provider.                                                                             |\n| No Dutch descriptions                   | Test film exists: `docker exec vpro-plex-provider python vpro_lookup.py \"TITLE\" --year YEAR -v`. Check logs: `docker-compose logs --tail=100`. Clear cache and retry. |\n| Metadata not updating after port change | Restart Plex server (known Plex bug with URL changes).                                                                                                                |\n| POMS auth errors                        | Default credentials should work. If issues persist, check NPO API availability                                                                                         |\n| Film not found                          | Try original title: `\"Der Untergang\"` instead of `\"Downfall\"`. Or provide IMDB ID: `--imdb tt0363163`                                                                 |\n| TMDB alternate titles not working       | Verify `\"configured\": true` and `\"status\": \"ok\"` under `tmdb` in `/health/ready` response.                                                                            |\n| Still it's not working                  | Restart your Plex server.                                                                                                                                             |\n\n## Updating\n\n**Standalone docker-compose:**\n```bash\ngit pull \u0026\u0026 docker-compose down \u0026\u0026 docker-compose build --no-cache \u0026\u0026 docker-compose up -d\n```\n\n**Portainer stack:**\n```bash\ncd /path/to/vpro-cinema-plex\ngit pull\ndocker build -t vpro-plex-provider:latest .\n# Then redeploy the stack in Portainer\n```\n\nVerify: `curl http://localhost:5100/health`\n\nCache and `.env` are preserved during updates.\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eUpgrade notes for specific versions\u003c/strong\u003e\u003c/summary\u003e\n\n### v4.0.0 — TV series support removed (breaking change)\n\nTV series support has been removed. Only movies are now supported.\n\n**Migration:**\n1. Remove the series provider from Plex (`http://localhost:5100/series`)\n2. Remove any TV Show agents that used VPRO as primary provider\n3. For TV libraries, switch to standard Plex Series agent\n4. Clear cache: `curl -X POST \"http://localhost:5100/cache/clear\"`\n\n### v3.1.0 — Breaking URL changes\n\n| Old                        | New                            |\n|----------------------------|--------------------------------|\n| `http://localhost:5100/`   | `http://localhost:5100/movies` |\n| `http://localhost:5100/tv` | `http://localhost:5100/series` |\n\nProvider names also changed (added `- Movies` / `- Series` suffix).\n\n**Migration:** Remove old providers in Plex, add new URLs, update agents, restart Plex.\n\n### v3.0.0 — series support (two-provider architecture)\n\nSingle provider → two providers (`/movies` and `/series`). Required by Plex API for proper secondary provider combining.\n\n**Migration:** Remove old provider, add both new URLs, create separate TV Show agent.\n\n\u003c/details\u003e\n\n## Changelog\n\n### v4.1.0 — Improved poster and image handling\n\n- **Poster extraction from Cinema.nl** — Now extracts the main movie poster from the top of Cinema.nl pages (marked as PROMO_PORTRAIT), in addition to stills from the Afbeeldingen section. Uses alt-text matching and URL heuristics to identify posters reliably.\n- **Fixed dead vprogids.nl image URLs** — POMS API returns old vprogids.nl URLs that now return HTTP 410 Gone. The provider now converts these to cinema.nl URLs and scrapes for fresh images.vpro.nl URLs.\n- **Proper image embedding in metadata** — Images are now embedded directly in the metadata response (thumb, art, Image array) per the Plex TMDB example, not just via the /images endpoint.\n- **Conditional images feature** — The provider only declares the \"images\" feature when `VPRO_RETURN_IMAGES=true`. When disabled, Plex correctly falls back to secondary agents (Plex Movie) for artwork.\n- **Rating array support** — VPRO ratings are now returned in the Rating array format with `cinemanl://image.rating` scheme. Note: Plex UI only displays ratings with recognized schemes (imdb://, rottentomatoes://), so the rating is stored but won't show an icon.\n- **WebP to JPEG conversion** — Image URLs are converted from .webp to .jpg for better Plex compatibility.\n- **Correct Plex image types** — Fixed image type mapping to use Plex's expected values (`coverPoster`, `background`) instead of incorrect ones (`poster`, `art`).\n\n### v4.0.0 — Movies only (breaking change)\n- **⚠️ TV series support removed** — VPRO's data sources don't provide complete series metadata (seasons, episodes, episode descriptions), which caused Plex scanning failures. This provider now only supports movies.\n- **TMDB fallback metadata** — When a movie isn't found in VPRO sources, the provider now returns basic metadata from TMDB (title, year, IMDB ID) so Plex can still add the movie. The description is omitted to let secondary providers (Plex Movie) fill it in.\n- **Reduced not-found cache TTL** — Changed from 7 days to 1 hour to allow quicker retries for newly indexed content\n- **Simplified API** — Removed `/series` endpoint and all TV-related routes\n\n**Migration from v3.x:**\n1. Remove the series provider from Plex (`http://localhost:5100/series`)\n2. Remove any TV Show agents that used VPRO as primary provider\n3. For TV libraries, switch to standard Plex Series agent\n4. Clear cache: `curl -X POST \"http://localhost:5100/cache/clear\"`\n\n### v3.4.0\n- **Cinema.nl direct scraper** — Replaced DuckDuckGo/Startpage web search with direct cinema.nl scraping\n- **IMDB verification** — Cinema.nl fallback now verifies matches using IMDB IDs for reliable matching\n- **Image extraction** — Cinema.nl fallback extracts high-resolution images from the Afbeeldingen section\n- **Migration complete** — vprogids.nl/cinema has fully migrated to cinema.nl\n- **Search optimizations** — Year-in-query and model=cinema parameter for better search ranking\n- **Circuit breaker** — Prevents hammering cinema.nl after repeated failures\n- **Credential refresh deprecated** — Auto-refresh from vprogids.nl no longer works (site returns 404)\n\n### v3.3.0\n- **Kijkwijzer content ratings** — Dutch age classification (AL, 6, 9, 12, 14, 16, 18) now extracted from POMS API\n- **Configurable metadata fields** — New environment variables to control what metadata is returned:\n  - `VPRO_RETURN_SUMMARY` (default: true) — Dutch descriptions\n  - `VPRO_RETURN_CONTENT_RATING` (default: true) — Kijkwijzer ratings\n  - `VPRO_RETURN_IMAGES` (default: false) — VPRO poster images\n  - `VPRO_RETURN_RATING` (default: false) — VPRO appreciation ratings (experimental, see [Limitations](#limitations))\n- **Fix Match thumbnails** — Images now display in Plex's Fix Match dialog when `VPRO_RETURN_IMAGES=true`\n- **Health endpoint improvements** — `/health/ready` now shows configured feature flags\n- **Selective cache deletion** — New `/cache/delete` endpoint for targeted cache management\n\n### v3.2.0\n- Added debug logging for troubleshooting\n- Docker environment variable passthrough improvements\n\n### v3.1.0\n- Breaking URL changes: `/` → `/movies`, `/tv` → `/series`\n- Provider name suffix changes (`- Movies` / `- Series`)\n\n### v3.0.0\n- Two-provider architecture for proper Plex secondary agent combining\n- Added series/TV show support (removed in v4.0.0)\n\n## Limitations\n\n- **Movies only** — TV series support was removed in v4.0.0 because VPRO's data sources don't provide complete series metadata\n- **POMS API is undocumented** — Not officially supported by NPO; may change without notice\n- **Not all content covered** — Only films reviewed by VPRO Cinema; movies not found get basic TMDB fallback metadata\n- **Artwork optional** — Disabled by default; enable `VPRO_RETURN_IMAGES` or use Plex Movie fallback\n- **Ratings display limited** — Plex's Custom Metadata Provider API may store `audienceRating` values, but the rating *icon* displayed in the UI is controlled by the library's \"Ratings Source\" setting (Rotten Tomatoes, IMDb, or TMDb), not by the provider. Custom `ratingImage` URI schemes are not supported. This is a Plex architectural limitation — see the [Plex Dev/API Forum](https://forums.plex.tv/c/dev-api-corner/) for updates\n- **Credential refresh broken** — vprogids.nl/cinema has migrated to cinema.nl; auto-refresh no longer works but default credentials still function\n- **Cinema.nl fallback** — Direct scraping; may break if site structure changes\n\n## License\n\nMIT — Do whatever you want with it.\n\n## Credits\n\n- [VPRO Cinema](https://www.cinema.nl) for the Dutch film reviews\n- [TMDB](https://www.themoviedb.org/) for alternate title data\n- Klaas (c_kick/hnldesign) — Original idea and development\n- Claude (Anthropic) — Implementation assistance\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fc-kick%2Fvpro-cinema-plex","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fc-kick%2Fvpro-cinema-plex","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fc-kick%2Fvpro-cinema-plex/lists"}