Files
web_marszalekarchitekten/download-gallery-images.js
cgasser 7a66ba3244 Major redesign: white nav, project lightbox with gallery + before/after slider
- Nav: white background, logo image (MarszalekLogoGrau.jpg) replaces text
- Projekte: removed filter bar (Alle/Wohnen/etc.), plain grid
- Lightbox: click any project to open modal with full image gallery,
  thumbnail strip, description, keyboard/touch navigation
- Before/after drag slider for 5 renovation projects:
  Sanierung, Landhaus, Winzerhaus Neusiedlersee, Dachausbau,
  Winzerhaus 14. Jhdt.
- Downloaded 108 extra gallery images locally (no CDN dependency)
- Über uns: removed Herbert Marszalek, Florian more prominent
- CLAUDE.md updated to reflect all changes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 16:21:01 +02:00

242 lines
20 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* Downloads all extra gallery images for project lightbox.
* Images are saved to images/ with the base filename (size suffix stripped).
*/
const https = require('https');
const http = require('http');
const fs = require('fs');
const path = require('path');
const DEST = path.join(__dirname, 'images');
// [localFilename, primaryURL, fallbackURL]
const images = [
// ── Urbane Gartenoase (2021/12) ─────────────────────────────────────────
['ArminKueche.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2021/12/ArminKueche.jpg',
'https://old.marszalekarchitekten.at/wp-content/uploads/2021/12/ArminKueche-1024x685.jpg'],
['ArminGartenBeton.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2021/12/ArminGartenBeton.jpg',
'https://old.marszalekarchitekten.at/wp-content/uploads/2021/12/ArminGartenBeton-1024x684.jpg'],
['Klavier.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2021/12/Klavier.jpg',
'https://old.marszalekarchitekten.at/wp-content/uploads/2021/12/Klavier-1024x681.jpg'],
['ArminEinfahrt.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2021/12/ArminEinfahrt.jpg',
'https://old.marszalekarchitekten.at/wp-content/uploads/2021/12/ArminEinfahrt-1024x684.jpg'],
['Parkplatz.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2021/12/Parkplatz.jpg',
'https://old.marszalekarchitekten.at/wp-content/uploads/2021/12/Parkplatz-1024x684.jpg'],
['RminStiege.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2021/12/RminStiege.jpg',
'https://old.marszalekarchitekten.at/wp-content/uploads/2021/12/RminStiege-1024x683.jpg'],
// ── Kleinwohnhaus (2019/01) ──────────────────────────────────────────────
['DSF5433-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2019/01/DSF5433-HDR.jpg', null],
['DSF5084-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2019/01/DSF5084-HDR.jpg', null],
['DSF5524-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2019/01/DSF5524-HDR.jpg', null],
['DSF5447-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2019/01/DSF5447-HDR.jpg', null],
['DSF5475-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2019/01/DSF5475-HDR.jpg', null],
['DSF5154-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2019/01/DSF5154-HDR.jpg', null],
['DSF4895.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2019/01/DSF4895.jpg', null],
['DSF5231-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2019/01/DSF5231-HDR.jpg', null],
['DSF5424-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2019/01/DSF5424-HDR.jpg', null],
['DSF5212.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2019/01/DSF5212.jpg', null],
['DSF5417-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2019/01/DSF5417-HDR.jpg', null],
['DSF5319.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2019/01/DSF5319.jpg', null],
['DSF5406-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2019/01/DSF5406-HDR.jpg', null],
['DSF5112-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2019/01/DSF5112-HDR.jpg', null],
// ── Gründerzeitwohnung (2018/01) ─────────────────────────────────────────
['DSF4058-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2018/01/DSF4058-HDR.jpg',
'https://old.marszalekarchitekten.at/wp-content/uploads/2018/01/DSF4058-HDR-1024x683.jpg'],
['DSF4083-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2018/01/DSF4083-HDR.jpg',
'https://old.marszalekarchitekten.at/wp-content/uploads/2018/01/DSF4083-HDR-1024x683.jpg'],
['DSF4034-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2018/01/DSF4034-HDR.jpg',
'https://old.marszalekarchitekten.at/wp-content/uploads/2018/01/DSF4034-HDR-1024x683.jpg'],
['DSF4048-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2018/01/DSF4048-HDR.jpg',
'https://old.marszalekarchitekten.at/wp-content/uploads/2018/01/DSF4048-HDR-1024x683.jpg'],
['DSF4135-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2018/01/DSF4135-HDR.jpg',
'https://old.marszalekarchitekten.at/wp-content/uploads/2018/01/DSF4135-HDR-1024x683.jpg'],
['DSF4051-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2018/01/DSF4051-HDR.jpg',
'https://old.marszalekarchitekten.at/wp-content/uploads/2018/01/DSF4051-HDR-1024x683.jpg'],
['DSF4019-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2018/01/DSF4019-HDR.jpg',
'https://old.marszalekarchitekten.at/wp-content/uploads/2018/01/DSF4019-HDR-1024x683.jpg'],
['DSF4066-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2018/01/DSF4066-HDR.jpg',
'https://old.marszalekarchitekten.at/wp-content/uploads/2018/01/DSF4066-HDR-1024x683.jpg'],
// ── Ordination Innere Medizin (2018/01) ──────────────────────────────────
['DSF3689.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2018/01/DSF3689.jpg', null],
['DSF3702.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2018/01/DSF3702.jpg', null],
['DSF3680.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2018/01/DSF3680.jpg', null],
['DSF3790-2.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2018/01/DSF3790-2.jpg', null],
['DSF3719.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2018/01/DSF3719.jpg', null],
['DSF3800.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2018/01/DSF3800.jpg', null],
['DSF3770.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2018/01/DSF3770.jpg', null],
['DSF3722.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2018/01/DSF3722.jpg', null],
['276_vh_2.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2018/01/276_vh_2.jpg', null],
['DSF3731.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2018/01/DSF3731.jpg', null],
// ── Villa mit Aussicht (2017/05) ──────────────────────────────────────────
['DSF7950-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/05/DSF7950-HDR.jpg',
'https://old.marszalekarchitekten.at/wp-content/uploads/2017/05/DSF7950-HDR-1024x683.jpg'],
['DSF7926-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/05/DSF7926-HDR.jpg',
'https://old.marszalekarchitekten.at/wp-content/uploads/2017/05/DSF7926-HDR-1024x742.jpg'],
['DSF7887-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/05/DSF7887-HDR.jpg',
'https://old.marszalekarchitekten.at/wp-content/uploads/2017/05/DSF7887-HDR-1024x825.jpg'],
['DSF8103-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/05/DSF8103-HDR.jpg',
'https://old.marszalekarchitekten.at/wp-content/uploads/2017/05/DSF8103-HDR-1024x742.jpg'],
['DSF8096.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/05/DSF8096.jpg',
'https://old.marszalekarchitekten.at/wp-content/uploads/2017/05/DSF8096-1024x690.jpg'],
['DSF8091-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/05/DSF8091-HDR.jpg',
'https://old.marszalekarchitekten.at/wp-content/uploads/2017/05/DSF8091-HDR-1024x709.jpg'],
['DSF8086-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/05/DSF8086-HDR.jpg',
'https://old.marszalekarchitekten.at/wp-content/uploads/2017/05/DSF8086-HDR-1024x725.jpg'],
['DSF7930-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/05/DSF7930-HDR.jpg',
'https://old.marszalekarchitekten.at/wp-content/uploads/2017/05/DSF7930-HDR-1024x683.jpg'],
['DSF8058-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/05/DSF8058-HDR.jpg',
'https://old.marszalekarchitekten.at/wp-content/uploads/2017/05/DSF8058-HDR-1024x659.jpg'],
['DSF8049-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/05/DSF8049-HDR.jpg',
'https://old.marszalekarchitekten.at/wp-content/uploads/2017/05/DSF8049-HDR-1024x683.jpg'],
['DSF8023-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/05/DSF8023-HDR.jpg',
'https://old.marszalekarchitekten.at/wp-content/uploads/2017/05/DSF8023-HDR-683x1024.jpg'],
['DSF8020-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/05/DSF8020-HDR.jpg',
'https://old.marszalekarchitekten.at/wp-content/uploads/2017/05/DSF8020-HDR-1024x683.jpg'],
['DSF8007-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/05/DSF8007-HDR.jpg',
'https://old.marszalekarchitekten.at/wp-content/uploads/2017/05/DSF8007-HDR-1024x762.jpg'],
['DSF7989-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/05/DSF7989-HDR.jpg',
'https://old.marszalekarchitekten.at/wp-content/uploads/2017/05/DSF7989-HDR-1024x684.jpg'],
['DSF7980-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/05/DSF7980-HDR.jpg',
'https://old.marszalekarchitekten.at/wp-content/uploads/2017/05/DSF7980-HDR-1024x683.jpg'],
// ── Modern, offen, viel Glas (2017/05) ───────────────────────────────────
['DSF9330.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/05/DSF9330.jpg', null],
['DSF9343-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/05/DSF9343-HDR.jpg', null],
['DSF9316-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/05/DSF9316-HDR.jpg', null],
['DSF9305-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/05/DSF9305-HDR.jpg', null],
['DSF9278-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/05/DSF9278-HDR.jpg', null],
['DSF9266-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/05/DSF9266-HDR.jpg', null],
['DSF9148-HDR.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/05/DSF9148-HDR.jpg', null],
// ── Alles Aussicht! (2017/04) ─────────────────────────────────────────────
['259_2.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/04/259_2.jpg', null],
['259_3.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/04/259_3.jpg', null],
['259_4.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/04/259_4.jpg', null],
['259_5.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/04/259_5.jpg', null],
['259_6.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/04/259_6.jpg', null],
// ── Landhaus (2017/04) ────────────────────────────────────────────────────
['258_1.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/04/258_1.jpg', null],
['258_4.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/04/258_4.jpg', null],
['258_5.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/04/258_5.jpg', null],
['258_6.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/04/258_6.jpg', null],
['258_7.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/04/258_7.jpg', null],
['258_9.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/04/258_9.jpg', null],
['258_10.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/04/258_10.jpg', null],
// ── Winzerhaus Neusiedlersee (2017/04) ───────────────────────────────────
['228_2.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/04/228_2.jpg', null],
['228_4.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/04/228_4.jpg', null],
['228_5.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/04/228_5.jpg', null],
['228_6.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/04/228_6.jpg', null],
['228_7.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/04/228_7.jpg', null],
// ── Dachausbau Denkmalschutz (2017/04) ─────────────────────────────────
['205_1.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/04/205_1.jpg', null],
['205_3_compa.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/04/205_3_compa.jpg', null],
['205_5.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/04/205_5.jpg', null],
['205_7.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/04/205_7.jpg', null],
// ── Siegfried Ludwig Halle (2017/09) ─────────────────────────────────────
['222_5.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/09/222_5.jpg', null],
['222_6.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/09/222_6.jpg', null],
['222_7.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/09/222_7.jpg', null],
['222_12.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/09/222_12.jpg',
'https://old.marszalekarchitekten.at/wp-content/uploads/2017/09/222_12-1024x680.jpg'],
['222_14.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/09/222_14.jpg', null],
['222_18.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/09/222_18.jpg',
'https://old.marszalekarchitekten.at/wp-content/uploads/2017/09/222_18-1024x680.jpg'],
['222_20.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/09/222_20.jpg', null],
['222_23.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/09/222_23.jpg',
'https://old.marszalekarchitekten.at/wp-content/uploads/2017/09/222_23-1024x680.jpg'],
['222_27.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/09/222_27.jpg', null],
['222_28.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/09/222_28.jpg', null],
['222_34.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/09/222_34.jpg',
'https://old.marszalekarchitekten.at/wp-content/uploads/2017/09/222_34-1024x680.jpg'],
['222_39.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/09/222_39.jpg', null],
['222_41.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/09/222_41.jpg', null],
['222_42.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/09/222_42.jpg', null],
['222_44.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/09/222_44.jpg',
'https://old.marszalekarchitekten.at/wp-content/uploads/2017/09/222_44-1024x680.jpg'],
['222_6-1.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/09/222_6-1.jpg',
'https://old.marszalekarchitekten.at/wp-content/uploads/2017/09/222_6-1-1024x680.jpg'],
['222_7-1.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/09/222_7-1.jpg',
'https://old.marszalekarchitekten.at/wp-content/uploads/2017/09/222_7-1-1024x681.jpg'],
// ── Freizeitanlage (2017/04) ──────────────────────────────────────────────
['198_1.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/04/198_1.jpg', null],
['198_4.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/04/198_4.jpg', null],
['198_6.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/04/198_6.jpg', null],
// ── Winzerhaus 14. Jhdt. (2017/04) ───────────────────────────────────────
['203_1.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/04/203_1.jpg', null],
['203_3.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/04/203_3.jpg', null],
['203_4.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/04/203_4.jpg', null],
['203_6.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/04/203_6.jpg', null],
['203_7.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/04/203_7.jpg', null],
// ── Wohnhaus (2017/04) ────────────────────────────────────────────────────
['194_1.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/04/194_1.jpg', null],
// ── Sanierung (2017/04) ───────────────────────────────────────────────────
['174_2.jpg', 'https://old.marszalekarchitekten.at/wp-content/uploads/2017/04/174_2.jpg', null],
];
function download(url, dest) {
return new Promise((resolve, reject) => {
const file = fs.createWriteStream(dest);
const mod = url.startsWith('https') ? https : http;
mod.get(url, { headers: { 'User-Agent': 'Mozilla/5.0' } }, res => {
if (res.statusCode === 301 || res.statusCode === 302) {
file.destroy();
fs.unlinkSync(dest);
download(res.headers.location, dest).then(resolve).catch(reject);
return;
}
if (res.statusCode !== 200) {
file.destroy();
try { fs.unlinkSync(dest); } catch (_) {}
reject(new Error(`HTTP ${res.statusCode}`));
return;
}
res.pipe(file);
file.on('finish', () => file.close(resolve));
file.on('error', err => { fs.unlinkSync(dest); reject(err); });
}).on('error', err => { try { fs.unlinkSync(dest); } catch (_) {} reject(err); });
});
}
async function run() {
let ok = 0, skipped = 0, failed = 0;
for (const [filename, primary, fallback] of images) {
const dest = path.join(DEST, filename);
if (fs.existsSync(dest)) { process.stdout.write(` skip ${filename}\n`); skipped++; continue; }
try {
await download(primary, dest);
process.stdout.write(` ok ${filename} (primary)\n`);
ok++;
} catch (e1) {
if (fallback) {
try {
await download(fallback, dest);
process.stdout.write(` ok ${filename} (fallback)\n`);
ok++;
} catch (e2) {
process.stdout.write(` FAIL ${filename}: ${e2.message}\n`);
failed++;
}
} else {
process.stdout.write(` FAIL ${filename}: ${e1.message}\n`);
failed++;
}
}
}
console.log(`\nDone: ${ok} downloaded, ${skipped} skipped, ${failed} failed`);
}
run().catch(console.error);