60 lines
2.0 KiB
TypeScript
60 lines
2.0 KiB
TypeScript
export const FREE_PLAN = {
|
|
monthlyQuota: 14,
|
|
maxFileSizeBytes: 30 * 1024 * 1024,
|
|
maxBatchSize: 3,
|
|
watermarkOptional: true,
|
|
} as const;
|
|
|
|
export const RESOLUTIONS = [
|
|
{ value: "1920x1080", label: "1920x1080 (16:9)", width: 1920, height: 1080 },
|
|
{ value: "1280x720", label: "1280x720 (16:9)", width: 1280, height: 720 },
|
|
{ value: "854x480", label: "854x480 (16:9)", width: 854, height: 480 },
|
|
{ value: "720x720", label: "720x720 (1:1)", width: 720, height: 720 },
|
|
{ value: "640x360", label: "640x360 (16:9)", width: 640, height: 360 },
|
|
{ value: "426x240", label: "426x240 (16:9)", width: 426, height: 240 },
|
|
] as const;
|
|
|
|
export const YOUTUBE_CATEGORIES = [
|
|
{ id: "10", name: "Music" },
|
|
{ id: "1", name: "Film & Animation" },
|
|
{ id: "2", name: "Autos & Vehicles" },
|
|
{ id: "15", name: "Pets & Animals" },
|
|
{ id: "17", name: "Sports" },
|
|
{ id: "19", name: "Travel & Events" },
|
|
{ id: "20", name: "Gaming" },
|
|
{ id: "22", name: "People & Blogs" },
|
|
{ id: "23", name: "Comedy" },
|
|
{ id: "24", name: "Entertainment" },
|
|
{ id: "25", name: "News & Politics" },
|
|
{ id: "26", name: "Howto & Style" },
|
|
{ id: "27", name: "Education" },
|
|
{ id: "28", name: "Science & Technology" },
|
|
{ id: "29", name: "Nonprofits & Activism" },
|
|
] as const;
|
|
|
|
export const QUEUE_NAME = "video-jobs";
|
|
|
|
export function getResolution(value: string) {
|
|
return RESOLUTIONS.find((r) => r.value === value);
|
|
}
|
|
|
|
export function isAllowedResolution(value: string): boolean {
|
|
return RESOLUTIONS.some((r) => r.value === value);
|
|
}
|
|
|
|
export function filenameWithoutExtension(filename: string): string {
|
|
const lastDot = filename.lastIndexOf(".");
|
|
return lastDot > 0 ? filename.slice(0, lastDot) : filename;
|
|
}
|
|
|
|
export function parseTags(input: string): string[] {
|
|
const tags: string[] = [];
|
|
const regex = /"([^"]+)"|([^,\s]+)/g;
|
|
let match: RegExpExecArray | null;
|
|
while ((match = regex.exec(input)) !== null) {
|
|
const tag = (match[1] || match[2]).trim();
|
|
if (tag) tags.push(tag);
|
|
}
|
|
return tags.slice(0, 500);
|
|
}
|