locale => native label */ public array $locales = [ 'en' => 'English', ]; /** * ----------------------------------------------------------------- * Media processing limits & retention * ----------------------------------------------------------------- */ public int $maxUploadMb = 512; public int $maxJobsPerHourIp = 20; public int $maxJobsPerHourSession = 40; public int $maxConcurrentSession = 2; public int $retentionHours = 2; public int $maxProcessingSeconds = 900; public int $queueMaxLength = 500; /** * ----------------------------------------------------------------- * Binary locations. The pipeline refuses to enqueue jobs that need a * missing binary and the tool page shows an honest "temporarily * unavailable" state instead of failing after upload. */ public array $binaries = [ 'ffmpeg' => '/usr/bin/ffmpeg', 'ffprobe' => '/usr/bin/ffprobe', 'convert' => '/usr/bin/convert', 'pdftoppm' => '/usr/bin/pdftoppm', 'pdftotext' => '/usr/bin/pdftotext', 'qpdf' => '/usr/bin/qpdf', 'gs' => '/usr/bin/gs', 'yt-dlp' => '/usr/local/bin/yt-dlp', ]; /** * Downloading from YouTube requires yt-dlp AND explicit operator opt-in, * both for legal review and because platform terms evolve. When off, * affected tools render a clear notice and every other tool keeps * working. Thumbnail/metadata/embed tools never require it. */ public bool $ytDlpEnabled = false; /** Extra hosts allowed for direct media URL fetches (SSRF allowlist). */ public array $urlFetchAllowlist = [ 'i.ytimg.com', 'img.youtube.com', 'yt3.ggpht.com', ]; /** * ----------------------------------------------------------------- * Monetization (kept modular; disabled by default) * ----------------------------------------------------------------- */ public bool $adsEnabled = false; /** @var array placement => snippet (loaded by view) */ public array $adSlots = []; /** * ----------------------------------------------------------------- * Analytics beacon sampling: 100 = record every event. */ public int $analyticsSampleRate = 100; }