Files
SnapOtter/scripts/generate-meme-thumbs.ts
T
SnapOtter 086a386d53 feat(meme-generator): add 100 meme templates with manifest and asset pipeline
Includes full-size images, WebP thumbnails, curated text box positions for
18 popular templates, and default top/bottom layout for the rest.
2026-05-08 15:57:36 +08:00

34 lines
1.0 KiB
TypeScript

import { mkdirSync, readdirSync } from "node:fs";
import { dirname, join, parse } from "node:path";
import { fileURLToPath } from "node:url";
import sharp from "sharp";
const __dirname = dirname(fileURLToPath(import.meta.url));
const TEMPLATES_DIR = join(__dirname, "../apps/api/static/meme-templates");
const FULL_DIR = join(TEMPLATES_DIR, "full");
const THUMBS_DIR = join(TEMPLATES_DIR, "thumbs");
async function main() {
mkdirSync(THUMBS_DIR, { recursive: true });
const files = readdirSync(FULL_DIR).filter(
(f) => f.endsWith(".jpg") || f.endsWith(".jpeg") || f.endsWith(".png"),
);
console.log(`Generating thumbnails for ${files.length} templates...`);
for (const file of files) {
const { name } = parse(file);
const inputPath = join(FULL_DIR, file);
const outputPath = join(THUMBS_DIR, `${name}.webp`);
await sharp(inputPath).resize({ width: 200 }).webp({ quality: 80 }).toFile(outputPath);
console.log(` ${name}.webp`);
}
console.log("Done.");
}
main().catch(console.error);