Files
SnapOtter/packages/media-engine/src/fonts.ts
T

32 lines
1.0 KiB
TypeScript

import { existsSync } from "node:fs";
export interface FontRef {
file: string;
family: string;
}
const CANDIDATES: FontRef[] = [
// Debian/Ubuntu container (fonts-dejavu-core, present since wave 2)
{ file: "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", family: "DejaVu Sans" },
// macOS development hosts
{ file: "/System/Library/Fonts/Supplemental/Arial.ttf", family: "Arial" },
{ file: "/System/Library/Fonts/Helvetica.ttc", family: "Helvetica" },
];
/**
* Static ffmpeg builds carry no fontconfig database, so drawtext/libass
* filters need an explicit font file. Env overrides first, then known
* platform paths. Returns null when nothing exists (callers raise a clear
* tool error instead of a cryptic ffmpeg one).
*/
export function resolveFontFile(): FontRef | null {
const file = process.env.SNAPOTTER_FONT_FILE;
if (file) {
return { file, family: process.env.SNAPOTTER_FONT_FAMILY ?? "Sans" };
}
for (const c of CANDIDATES) {
if (existsSync(c.file)) return c;
}
return null;
}