feat(savetv): erweitere Wunschfilm-Liste

Made-with: Cursor
This commit is contained in:
root 2026-04-25 19:44:06 +02:00
parent 196f36372e
commit 93c601dfa3
2 changed files with 96 additions and 4 deletions

View file

@ -37,10 +37,11 @@ Automatische KI-Anreicherung von Save.TV-Filmarchiv mit Beschreibungen, Darstell
- **Erlaubt automatisch:** internationale Kinofilme aus USA/UK/Kanada/Australien/Japan/Südkorea/Hongkong mit passendem Genre oder klar erkennbarem Kino-Titel. - **Erlaubt automatisch:** internationale Kinofilme aus USA/UK/Kanada/Australien/Japan/Südkorea/Hongkong mit passendem Genre oder klar erkennbarem Kino-Titel.
- **Konsequenz:** Unbekannte RBB/MDR/hr/WDR/BR/SWR/ZDF/ARD/arte/ONE-Titel werden nicht mehr automatisch aufgenommen oder heruntergeladen, bis sie angereichert sind oder eindeutig als Kinofilm erkannt werden. - **Konsequenz:** Unbekannte RBB/MDR/hr/WDR/BR/SWR/ZDF/ARD/arte/ONE-Titel werden nicht mehr automatisch aufgenommen oder heruntergeladen, bis sie angereichert sind oder eindeutig als Kinofilm erkannt werden.
### 5. Wunschfilm: Der Clou ### 5. Wunschfilm-Liste
- **Wunschtitel:** `Der Clou` / `The Sting` (1973) - **Datei:** `tools/savetv.py`, Konstante `WISHLIST_MOVIES`
- **Automatik:** Wird im Save.TV-Scan immer automatisch aufgenommen, wenn der Titel eindeutig `Der Clou` oder `The Sting` ist. - **Ziel:** Hochwertige Klassiker und Reihen automatisch aufnehmen, auch wenn Save.TV-Score oder Qualitätsfilter sie sonst nur vorschlagen würden.
- **Schutz gegen Fehlgriff:** Der einzelne Titel `Sting` wird nur akzeptiert, wenn Beschreibung/Untertitel auf Paul Newman, Robert Redford, Johnny Hooker, Gondorff, Lonnegan oder das 1930er-Setting verweisen. Dadurch wird `Sting` (2024, Spinnen-Horror) nicht erneut als `Der Clou` behandelt. - **Aktive Startliste:** `Der Clou`, `Déjà Vu`, `Die üblichen Verdächtigen`, `L.A. Confidential`, `Chinatown`, `French Connection`, `Bullitt`, `Serpico`, `Der Pate`, `GoodFellas`, `Casino`, `Scarface`, `Departed`, Western-Klassiker, Sci-Fi-Klassiker, starke Kriegs-/Politthriller, Gerichts-/Drama-Klassiker sowie Reihen wie `Jesse Stone`, `Columbo`, `Wallander`, `Jack Reacher`, `Bourne`, `Mission Impossible`, `Indiana Jones` und `James Bond`.
- **Schutz gegen Fehlgriffe:** Mehrdeutige Ein-Wort-Titel laufen nur mit Kontext. `Sting` wird nur mit Paul-Newman/Robert-Redford/1930er-Hinweisen als `Der Clou` akzeptiert; `Heat` braucht De-Niro/Pacino/Mann-Kontext; `Crash` braucht Haggis/Don-Cheadle/Los-Angeles-Kontext.
## Erfahrungen / Gotchas ## Erfahrungen / Gotchas

View file

@ -43,6 +43,31 @@ DOWNLOAD_FORMAT_SD = 5
AUTO_RECORD_SCORE = 80 AUTO_RECORD_SCORE = 80
SUGGEST_SCORE = 60 SUGGEST_SCORE = 60
def _title_pattern(title):
"""Titel exakt genug matchen, aber Leerzeichen/Interpunktion tolerant halten."""
parts = [re.escape(p) for p in re.findall(r"\w+", title.strip().lower(), re.UNICODE)]
return r"(?<!\w)" + r"[\W_]+".join(parts) + r"(?!\w)"
def _wishlist_title(name, *aliases):
return {
"name": name,
"title_patterns": [_title_pattern(a) for a in aliases],
"ambiguous_title_patterns": [],
"required_context_patterns": [],
}
def _wishlist_ambiguous(name, aliases, context):
return {
"name": name,
"title_patterns": [],
"ambiguous_title_patterns": [_title_pattern(a) for a in aliases],
"required_context_patterns": context,
}
WISHLIST_MOVIES = [ WISHLIST_MOVIES = [
{ {
"name": "Der Clou", "name": "Der Clou",
@ -63,6 +88,72 @@ WISHLIST_MOVIES = [
r"\b1930\b", r"\b1930\b",
], ],
}, },
_wishlist_title("Déjà Vu", "Déjà Vu - Wettlauf gegen die Zeit", "Deja Vu - Wettlauf gegen die Zeit"),
_wishlist_title("Die üblichen Verdächtigen", "Die üblichen Verdächtigen", "The Usual Suspects"),
_wishlist_title("L.A. Confidential", "L.A. Confidential"),
_wishlist_title("Chinatown", "Chinatown"),
_wishlist_title("French Connection", "French Connection", "The French Connection"),
_wishlist_title("Bullitt", "Bullitt"),
_wishlist_title("Serpico", "Serpico"),
_wishlist_title("Dog Day Afternoon", "Dog Day Afternoon", "Hundstage"),
_wishlist_title("Bonnie und Clyde", "Bonnie und Clyde", "Bonnie and Clyde"),
_wishlist_title("Der Pate", "Der Pate", "The Godfather"),
_wishlist_title("GoodFellas", "GoodFellas", "GoodFellas - Drei Jahrzehnte in der Mafia"),
_wishlist_title("Casino", "Casino"),
_wishlist_title("Scarface", "Scarface"),
_wishlist_title("Carlito's Way", "Carlito's Way", "Carlitos Way"),
_wishlist_title("Es war einmal in Amerika", "Es war einmal in Amerika", "Once Upon a Time in America"),
_wishlist_title("Departed", "Departed", "Departed - Unter Feinden"),
_wishlist_title("Spiel mir das Lied vom Tod", "Spiel mir das Lied vom Tod", "Once Upon a Time in the West"),
_wishlist_title("Zwei glorreiche Halunken", "Zwei glorreiche Halunken", "The Good, the Bad and the Ugly"),
_wishlist_title("Der mit dem Wolf tanzt", "Der mit dem Wolf tanzt", "Dances with Wolves"),
_wishlist_title("Open Range", "Open Range"),
_wishlist_title("Erbarmungslos", "Erbarmungslos", "Unforgiven"),
_wishlist_title("True Grit", "True Grit"),
_wishlist_title("Butch Cassidy and the Sundance Kid", "Butch Cassidy and the Sundance Kid", "Zwei Banditen"),
_wishlist_title("Blade Runner", "Blade Runner"),
_wishlist_title("Alien", "Alien - Das unheimliche Wesen aus einer fremden Welt"),
_wishlist_title("Aliens", "Aliens - Die Rückkehr", "Aliens - Die Rueckkehr"),
_wishlist_title("Terminator", "Terminator"),
_wishlist_title("Terminator 2", "Terminator 2", "Terminator 2 - Tag der Abrechnung"),
_wishlist_title("Matrix", "Matrix", "The Matrix"),
_wishlist_title("12 Monkeys", "12 Monkeys", "Twelve Monkeys"),
_wishlist_title("Children of Men", "Children of Men"),
_wishlist_title("Gattaca", "Gattaca"),
_wishlist_title("Minority Report", "Minority Report"),
_wishlist_title("Apocalypse Now", "Apocalypse Now"),
_wishlist_title("Full Metal Jacket", "Full Metal Jacket"),
_wishlist_title("Platoon", "Platoon"),
_wishlist_title("Der Soldat James Ryan", "Der Soldat James Ryan", "Saving Private Ryan"),
_wishlist_title("Black Hawk Down", "Black Hawk Down"),
_wishlist_title("Die Unbestechlichen", "Die Unbestechlichen", "All the President's Men"),
_wishlist_title("JFK", "JFK"),
_wishlist_title("Argo", "Argo"),
_wishlist_title("Zeugin der Anklage", "Zeugin der Anklage", "Witness for the Prosecution"),
_wishlist_title("Die zwölf Geschworenen", "Die zwölf Geschworenen", "12 Angry Men"),
_wishlist_title("Einer flog über das Kuckucksnest", "Einer flog über das Kuckucksnest", "One Flew Over the Cuckoo's Nest"),
_wishlist_title("Die Verurteilten", "Die Verurteilten", "The Shawshank Redemption"),
_wishlist_title("Forrest Gump", "Forrest Gump"),
_wishlist_title("Rain Man", "Rain Man"),
_wishlist_title("Million Dollar Baby", "Million Dollar Baby"),
_wishlist_title("Jesse Stone", "Jesse Stone"),
_wishlist_title("Columbo", "Columbo"),
_wishlist_title("Wallander", "Wallander"),
_wishlist_title("Jack Reacher", "Jack Reacher", "Reacher"),
_wishlist_title("Bourne", "Bourne"),
_wishlist_title("Mission Impossible", "Mission Impossible", "Mission: Impossible"),
_wishlist_title("Indiana Jones", "Indiana Jones"),
_wishlist_title("James Bond", "James Bond 007", "007"),
_wishlist_ambiguous(
"Heat",
["Heat"],
[r"\bdeniro\b", r"\bde\s+niro\b", r"\bal\s+pacino\b", r"\bmann\b", r"\bwaingro\b"],
),
_wishlist_ambiguous(
"Crash",
["Crash"],
[r"\bpaul\s+haggis\b", r"\bdon\s+cheadle\b", r"\bmatt\s+dillon\b", r"\blos\s+angeles\b"],
),
] ]
SPAM_SUBCATEGORIES = { SPAM_SUBCATEGORIES = {