mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
32 lines
1.0 KiB
TypeScript
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;
|
|
}
|