Align preview typography with FFmpeg output, add video/song title split, and ship OSS updates.

Separate YouTube video titles from on-video song/artist fields with Pro gating, serve curated fonts and watermark assets for 1:1 preview parity, and include billing/API/docs/deploy stack for self-hosted release.
This commit is contained in:
Atakan Doğan Özban
2026-07-27 16:26:19 +02:00
parent 5c18d199fd
commit 9404efd86c
206 changed files with 37078 additions and 638 deletions
+21 -16
View File
@@ -1,24 +1,29 @@
import { Redis } from "ioredis";
import { Queue } from "bullmq";
import { QUEUE_NAME } from "./constants";
import type { VideoJobData } from "./types";
import { QUEUE_NAME } from "../constants";
import type { VideoJobData } from "../types";
let connection: Redis | null = null;
let queue: Queue<VideoJobData> | null = null;
export function getRedisConnection(): Redis {
if (!connection) {
connection = new Redis(process.env.REDIS_URL || "redis://localhost:6379", {
maxRetriesPerRequest: null,
});
}
return connection;
function getConnectionOptions() {
const url = process.env.REDIS_URL || "redis://localhost:6379";
const parsed = new URL(url);
return {
host: parsed.hostname,
port: Number(parsed.port) || 6379,
username: parsed.username || undefined,
password: parsed.password || undefined,
maxRetriesPerRequest: null as null,
};
}
export function getVideoQueue(): Queue<VideoJobData> {
let queue: Queue | null = null;
export function getRedisConnection() {
return getConnectionOptions();
}
export function getVideoQueue(): Queue {
if (!queue) {
queue = new Queue<VideoJobData>(QUEUE_NAME, {
connection: getRedisConnection(),
queue = new Queue(QUEUE_NAME, {
connection: getConnectionOptions(),
});
}
return queue;