diff --git a/README.md b/README.md
index e9572e4..fd66a43 100644
--- a/README.md
+++ b/README.md
@@ -12,7 +12,7 @@ Why? Because if the cast list and IMDb/RT rating show up in the first minute, my
## Features
- Insert plot summaries into existing .srt files without shifting timings
-- Fetch metadata (plot, runtime, director, cast, IMDb/RT ratings) using OMDb, TMDb, and TVMaze — add these integrations under Settings before scanning
+- Fetch metadata (plot, runtime, director, cast, IMDb/RT ratings) using OMDb, TMDb, TVMaze and Wikipedia — add these integrations under Settings before scanning
- Preserve original dialogue and timing with safe insertion logic
- Folder Rules to have seperate logic for different folders (for example TV shows could have runtime but not actors, etc)
- Clean, fast web UI for scanning and batch processing built with Svelte + Python/Flask
diff --git a/frontend/src/components/AppSidebar.svelte b/frontend/src/components/AppSidebar.svelte
index c048eef..0073dc9 100644
--- a/frontend/src/components/AppSidebar.svelte
+++ b/frontend/src/components/AppSidebar.svelte
@@ -154,7 +154,7 @@
>
{#if !collapsed}
v1.0.9 Release Candiatev1.0.10 Release Candiate
{:else}
v
diff --git a/frontend/src/components/scan/ResultsList.svelte b/frontend/src/components/scan/ResultsList.svelte
index 59ff50d..85a0485 100644
--- a/frontend/src/components/scan/ResultsList.svelte
+++ b/frontend/src/components/scan/ResultsList.svelte
@@ -24,7 +24,12 @@
export let disabled = false;
export let metadataProvider = "omdb";
export let metadataLanguage = "";
- export let activeIntegrations = { omdb: true, tmdb: true, tvmaze: true };
+ export let activeIntegrations = {
+ omdb: true,
+ tmdb: true,
+ tvmaze: true,
+ wikipedia: true,
+ };
export let loading = false;
// Pagination
@@ -797,13 +802,15 @@
if (!metadataProvider) return "Select source";
if (metadataProvider === "both") return "OMDb + TMDb";
if (metadataProvider === "tvmaze") return "TVmaze";
+ if (metadataProvider === "wikipedia") return "Wikipedia";
return metadataProvider.toUpperCase();
}
$: omdbActive = activeIntegrations?.omdb ?? false;
$: tmdbActive = activeIntegrations?.tmdb ?? false;
$: tvmazeActive = activeIntegrations?.tvmaze ?? false;
- $: hasActiveIntegrations = omdbActive || tmdbActive || tvmazeActive;
+ $: wikipediaActive = activeIntegrations?.wikipedia ?? false;
+ $: hasActiveIntegrations = omdbActive || tmdbActive || tvmazeActive || wikipediaActive;
$: if (!hasActiveIntegrations && showMetadataDropup) {
showMetadataDropup = false;
}
@@ -826,6 +833,12 @@
description: "TV metadata without an API key",
enabled: tvmazeActive,
},
+ {
+ value: "wikipedia",
+ label: "Wikipedia",
+ description: "Strict encyclopedia summaries",
+ enabled: wikipediaActive,
+ },
{
value: "both",
label: "Both",
diff --git a/frontend/src/components/scan/ScanPanel.svelte b/frontend/src/components/scan/ScanPanel.svelte
index b0a61bd..a918457 100644
--- a/frontend/src/components/scan/ScanPanel.svelte
+++ b/frontend/src/components/scan/ScanPanel.svelte
@@ -69,6 +69,7 @@
let omdbEnabled = false;
let tmdbEnabled = false;
let tvmazeEnabled = false;
+ let wikipediaEnabled = false;
let settingsLoaded = false;
let defaultDirectory = "";
let showSaveDirectoryPrompt = false;
@@ -105,6 +106,12 @@
description: "TV metadata without an API key",
disabled: !tvmazeEnabled,
},
+ {
+ value: "wikipedia",
+ label: "Wikipedia",
+ description: "Strict encyclopedia summaries",
+ disabled: !wikipediaEnabled,
+ },
{
value: "both",
label: "Both",
@@ -150,6 +157,7 @@
omdbEnabled = settings.omdb_enabled ?? false;
tmdbEnabled = settings.tmdb_enabled ?? false;
tvmazeEnabled = settings.tvmaze_enabled ?? false;
+ wikipediaEnabled = settings.wikipedia_enabled ?? false;
settingsLoaded = true;
// Load previous scan results from store if available
@@ -573,6 +581,7 @@
function formatMetadataLabel(source) {
if (source === "both") return "OMDb + TMDb";
if (source === "tvmaze") return "TVmaze";
+ if (source === "wikipedia") return "Wikipedia";
return source.toUpperCase();
}
@@ -858,6 +867,7 @@
omdb: omdbEnabled,
tmdb: tmdbEnabled,
tvmaze: tvmazeEnabled,
+ wikipedia: wikipediaEnabled,
}}
loading={processing}
on:processSingle={handleProcessSingle}
diff --git a/frontend/src/components/settings/FolderRulesSettings.svelte b/frontend/src/components/settings/FolderRulesSettings.svelte
index e2ea734..e2f465c 100644
--- a/frontend/src/components/settings/FolderRulesSettings.svelte
+++ b/frontend/src/components/settings/FolderRulesSettings.svelte
@@ -25,6 +25,7 @@
{ value: 'omdb', label: 'OMDb' },
{ value: 'tmdb', label: 'TMDb' },
{ value: 'tvmaze', label: 'TVmaze' },
+ { value: 'wikipedia', label: 'Wikipedia' },
{ value: 'both', label: 'OMDb + TMDb' }
]
diff --git a/frontend/src/components/settings/IntegrationsSettings.svelte b/frontend/src/components/settings/IntegrationsSettings.svelte
index 5d1507a..3b39c7a 100644
--- a/frontend/src/components/settings/IntegrationsSettings.svelte
+++ b/frontend/src/components/settings/IntegrationsSettings.svelte
@@ -12,11 +12,13 @@
let omdbEnabled = settings.omdb_enabled ?? false;
let tmdbEnabled = settings.tmdb_enabled ?? false;
let tvmazeEnabled = settings.tvmaze_enabled ?? false;
+ let wikipediaEnabled = settings.wikipedia_enabled ?? false;
let usage = null;
let loadingUsage = false;
let showOmdbHelp = false;
let showTmdbHelp = false;
let showTvmazeHelp = false;
+ let showWikipediaHelp = false;
/* ===============================
Lifecycle
@@ -48,6 +50,15 @@
}
}
+ function toggleWikipediaHelp() {
+ showWikipediaHelp = !showWikipediaHelp;
+ if (showWikipediaHelp) {
+ showOmdbHelp = false;
+ showTmdbHelp = false;
+ showTvmazeHelp = false;
+ }
+ }
+
function clickOutside(node, handler) {
if (typeof handler !== "function") return { destroy() {} };
const onPointerDown = (event) => {
@@ -82,6 +93,7 @@
omdb_enabled: omdbEnabled,
tmdb_enabled: tmdbEnabled,
tvmaze_enabled: tvmazeEnabled,
+ wikipedia_enabled: wikipediaEnabled,
});
}
@@ -133,6 +145,7 @@
$: omdbUsage = usage?.omdb;
$: tmdbUsage = usage?.tmdb;
$: tvmazeUsage = usage?.tvmaze;
+ $: wikipediaUsage = usage?.wikipedia;
$: omdbPercent = omdbUsage
? usagePercent(omdbUsage.total_calls_24h, omdbUsage.limit)
@@ -144,12 +157,19 @@
$: tvmazePercent = tvmazeUsage
? usagePercent(tvmazeUsage.total_calls_24h, tvmazeUsage.limit)
: 0;
+ $: wikipediaPercent = wikipediaUsage
+ ? usagePercent(wikipediaUsage.total_calls_24h, wikipediaUsage.limit)
+ : 0;
$: omdbState = usageState(omdbPercent);
$: tmdbState = usageState(tmdbPercent);
$: tvmazeState = usageState(tvmazePercent);
+ $: wikipediaState = usageState(wikipediaPercent);
$: enabledCount =
- (omdbEnabled ? 1 : 0) + (tmdbEnabled ? 1 : 0) + (tvmazeEnabled ? 1 : 0);
+ (omdbEnabled ? 1 : 0) +
+ (tmdbEnabled ? 1 : 0) +
+ (tvmazeEnabled ? 1 : 0) +
+ (wikipediaEnabled ? 1 : 0);