Release Twitch VOD Manager 1.0.18

Harden update, system-check, queue, cutter, streamer and shutdown state transitions.

Add multi-user installer recovery, secret-safe config migration, provider fallback handling, managed-tool validation and real media export coverage.

Refresh the English public documentation, release notes and 1.0.18 product screenshot.
This commit is contained in:
Sucukdeluxe
2026-08-13 22:59:15 +02:00
parent f37142401f
commit 9f1b052afd
124 changed files with 21119 additions and 7777 deletions
+9 -1
View File
@@ -79,11 +79,13 @@ interface MergeGroup {
downloadedFiles: Record<number, string>;
mergedFile?: string;
splitFiles?: string[];
splitTempFiles?: string[];
totalDurationSec?: number;
}
interface QueueItem {
id: string;
createdAt?: string;
title: string;
url: string;
date: string;
@@ -101,6 +103,8 @@ interface QueueItem {
last_error?: string;
customClip?: CustomClip;
mergeGroup?: MergeGroup;
mergeRecoveryBlocked?: boolean;
artifactRoot?: string;
outputFiles?: string[];
isLive?: boolean;
recordingHealth?: 'ok' | 'stale' | 'unknown';
@@ -173,6 +177,8 @@ interface VideoInfo {
audioStreams: Array<{ index: number; codec: string; channels: number; language: string | null }>;
}
type QueueAdditionResult = import('./main/domain/queue-addition').QueueAdditionResult<QueueItem>;
interface DownloadPolicy {
throttle: { maxBytesPerSecond: number } | null;
windows: Array<{ start: string; end: string }>;
@@ -433,6 +439,7 @@ interface ApiBridge {
getVODs(userId: string, forceRefresh?: boolean): Promise<VOD[]>;
getQueue(): Promise<QueueItem[]>;
addToQueue(item: Pick<QueueItem, 'url' | 'title' | 'date' | 'streamer' | 'duration_str' | 'customClip'>): Promise<QueueItem[]>;
addToQueueWithResult(item: Pick<QueueItem, 'url' | 'title' | 'date' | 'streamer' | 'duration_str' | 'customClip'>): Promise<QueueAdditionResult>;
startLiveRecording(streamerName: string): Promise<{ success: boolean; error?: string; streamer?: string; title?: string }>;
removeFromQueue(id: string): Promise<QueueItem[]>;
reorderQueue(orderIds: string[]): Promise<QueueItem[]>;
@@ -502,6 +509,7 @@ interface ApiBridge {
openExternal(url: string): Promise<void>;
runPreflight(autoFix: boolean): Promise<PreflightResult>;
getManagedToolStatus(): Promise<ManagedToolStatuses | null>;
getManagedToolExecutionDiagnostics(): Promise<{ ffmpeg: { path: string | null; count: number }; ffprobe: { path: string | null; count: number }; streamlink: { path: string | null; count: number } } | null>;
repairManagedTools(): Promise<{ success: boolean; statuses: ManagedToolStatuses } | null>;
resetManagedTools(): Promise<{ success: boolean; statuses: ManagedToolStatuses } | null>;
getDebugLog(lines: number): Promise<string>;
@@ -525,7 +533,7 @@ interface ApiBridge {
onUpdateNotAvailable(callback: () => void): void;
onUpdateDownloadProgress(callback: (progress: UpdateDownloadProgress) => void): void;
onUpdateDownloaded(callback: (info: UpdateInfo) => void): void;
onUpdateError(callback: (payload: { message: string }) => void): void;
onUpdateError(callback: (payload: { message: string; kind: 'check' | 'download'; version?: string }) => void): void;
}
interface Window {