feat: autostart local viz server on port 3001

This commit is contained in:
Jannik committed 2026-09-06 19:50:06 +02:00
1 parent 916bb4f49e
commit 39451db99b
1 file changed
+37 -6
+37 -6
View File
@@ -3,9 +3,15 @@ import path from 'path';
import puppeteer from 'puppeteer';
import fetch from 'node-fetch';
import { pipeline } from 'stream/promises';
import { spawn } from 'child_process';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const BASE_DIR = 'D:/Google Drive/Videos/AIWentNonsense';
const VIZ_URL = 'http://localhost:3000';
const VIZ_PORT = 3001;
const VIZ_URL = `http://localhost:${VIZ_PORT}`;
const NTFY_URL = 'https://ntfy.orfel.de/viz_errors';
async function main() {
@@ -34,16 +40,12 @@ async function main() {
try {
const job = JSON.parse(fs.readFileSync(jsonPath, 'utf8'));
// Zieldateiname bestimmen
const targetFormat = job.format === 'prores4444' ? 'prores' : (job.format || 'prores');
const outExt = (targetFormat === 'prores' || targetFormat === 'qtrle') ? '.mov' : (targetFormat === 'webm_alpha' ? '.webm' : '.mp4');
// Prüfen, ob bereits irgendeine Datei mit dieser Endung (z.B. .mov) im Ordner liegt
const hasVideoAlready = files.some(f => f.toLowerCase().endsWith(outExt));
// Job nur vormerken, wenn NOCH KEIN solches Video existiert
if (!hasVideoAlready) {
// Wir definieren dennoch einen finalen Dateinamen für den neuen Render
const finalTitle = job.title ? job.title.replace(/[^a-zA-Z0-9_-]/g, '_') : 'Output';
const expectedVideoPath = path.join(vizDir, `${finalTitle}${outExt}`);
pendingJobs.push({ jsonPath, job, expectedVideoPath, targetFormat });
@@ -61,12 +63,41 @@ async function main() {
}
console.log(`🚀 ${pendingJobs.length} anstehende(r) Job(s) gefunden.`);
console.log(`⚙️ Starte temporären lokalen Viz Server auf Port ${VIZ_PORT}...`);
const serverProcess = spawn('node', ['server.mjs'], {
env: { ...process.env, PORT: VIZ_PORT.toString() },
cwd: __dirname,
stdio: 'inherit'
});
// Warte bis der Server erreichbar ist
let serverReady = false;
for (let i = 0; i < 20; i++) {
await new Promise(r => setTimeout(r, 1000));
try {
const res = await fetch(VIZ_URL);
if (res.ok) {
serverReady = true;
break;
}
} catch (e) {}
}
if (!serverReady) {
console.error('❌ Temporärer Server konnte nicht gestartet werden. Beende.');
serverProcess.kill();
process.exit(1);
}
console.log(`✅ Server ist online! Starte Verarbeitung...\n`);
for (const jobItem of pendingJobs) {
await processJob(jobItem);
}
console.log('\n🎉 Alle Jobs abgearbeitet!');
console.log('\n🎉 Alle Jobs abgearbeitet! Schalte temporären Server ab...');
serverProcess.kill();
process.exit(0);
}