From 704880dc9818d056f5e3df41d12c1c49ae9ab406 Mon Sep 17 00:00:00 2001 From: Stan Runge Date: Sun, 25 Oct 2026 00:13:30 +0000 Subject: [PATCH] trains: stricter Commons photo matching (category files must name the type; no maps, class interiors, trucks) --- scripts/trains-photos.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/trains-photos.ts b/scripts/trains-photos.ts index 7d214c5..41a8e6c 100644 --- a/scripts/trains-photos.ts +++ b/scripts/trains-photos.ts @@ -71,7 +71,7 @@ type Photo = { // ---------------------------------------------------------------- commons const BAD_FILE = - /\.(svg|gif|tiff?|pdf|djvu|webm|ogv|ogg|stl|png)$|logo|emblem|badge|insignia|wordmark|\bmaps?\b|karte|locator|diagram|chart|graph|schema|schematic|drawing|sketch|blueprint|patent|zeichnung|tekening|plan\b|icon|\bflag\b|coat of arms|wappen|signature|symbol|cutaway|silhouette|commons-|wiki|stub|poster|advert|brochure|stamp|timeline|timetable|dienstregeling|ticket|interior|innenraum|interieur|inside|cab\b|cabin|cockpit|f[uü]hrerstand|machinistenhok|driver'?s|desk|control|console|dashboard|display|screen|seats?\b|seating|toilet|lavatory|wc\b|bistro|restaurant interior|luggage|bogie|draaistel|drehgestell|wheelset|wheel|pantograph|stroomafnemer|coupler|coupling|koppeling|buffer|headlight|lamp|detail|close-?up|closeup|builder'?s plate|works plate|number ?plate|nameplate|plaque|\bplate\b|sign\b|signage|crash|wreck|accident|ongeval|unfall|derail|collision|\bfire\b|burnt|brand\b|scrap|sloop|\btoys?\b|model|modell|scale|märklin|marklin|hornby|bachmann|roco|fleischmann|piko|lionel|\bh0\b|\bho\b|\boo gauge|n gauge|n scale|lego|diecast|layout|miniatur|simulator|mock-?up|render|cgi\b|uniform|portrait|ceremony|memorial|grave|statue|\bvs\b|versus|comparison|livery diagram|motor\b|engine room|transformer|cylinder|valve|boiler|firebox|smokebox|chimney|tender interior|gauge glass|whistle|bell\b/i; + /\.(svg|gif|tiff?|pdf|djvu|webm|ogv|ogg|stl|png)$|logo|emblem|badge|insignia|wordmark|\bmaps?\b|karte|locator|diagram|chart|graph|schema|schematic|drawing|sketch|blueprint|patent|zeichnung|tekening|plan\b|icon|\bflag\b|coat of arms|wappen|signature|symbol|cutaway|silhouette|commons-|wiki|stub|poster|advert|brochure|stamp|timeline|timetable|dienstregeling|ticket|interior|innenraum|\d(?:e|st|nd|rd)? ?klas(?:se)?\b|\bklas\b|first class|second class|1st class|2nd class|balkon|operating area|service area|network|netwerk|lijnennet|route ?map|interieur|inside|cab\b|cabin|cockpit|f[uü]hrerstand|machinistenhok|driver'?s|desk|control|console|dashboard|display|screen|seats?\b|seating|toilet|lavatory|wc\b|bistro|restaurant interior|luggage|bogie|\btrucks?\b|draaistel|drehgestell|wheelset|wheel|pantograph|stroomafnemer|coupler|coupling|koppeling|buffer|headlight|lamp|detail|close-?up|closeup|builder'?s plate|works plate|number ?plate|nameplate|plaque|\bplate\b|sign\b|signage|crash|wreck|accident|ongeval|unfall|derail|collision|\bfire\b|burnt|brand\b|scrap|sloop|\btoys?\b|model|modell|scale|märklin|marklin|hornby|bachmann|roco|fleischmann|piko|lionel|\bh0\b|\bho\b|\boo gauge|n gauge|n scale|lego|diecast|layout|miniatur|simulator|mock-?up|render|cgi\b|uniform|portrait|ceremony|memorial|grave|statue|\bvs\b|versus|comparison|livery diagram|motor\b|engine room|transformer|cylinder|valve|boiler|firebox|smokebox|chimney|tender interior|gauge glass|whistle|bell\b/i; const infoCache = new Map(); async function imageInfo(files: string[], width = THUMB) { @@ -332,9 +332,9 @@ async function photosFor( (n) => n && cmp(n).length >= 4 && cmp(cat).includes(cmp(n)) )); if (photos.length < MAX_PHOTOS && cat && catOk) { - let files = (await categoryMembers(cat, 'file')).filter( - (f) => !BAD_FILE.test(f) && !siblings.some((s) => s.test(f)) - ); + // Strict: a category file must name the type itself ("NS 1700 trains Amsterdam 2019"), + // so platform, station and skyline shots from the same category stay out. + let files = (await categoryMembers(cat, 'file')).filter((f) => ok(f)); if (files.length < MAX_PHOTOS) { // Small category: look into unit subcategories ("NS VIRM 8642", "4468 Mallard"). const subs = (await categoryMembers(cat, 'subcat', 100))