diff --git a/frontend/src/lib/components/studio/RenderDialog.svelte b/frontend/src/lib/components/studio/RenderDialog.svelte index 467508c..5a96de4 100644 --- a/frontend/src/lib/components/studio/RenderDialog.svelte +++ b/frontend/src/lib/components/studio/RenderDialog.svelte @@ -6,13 +6,33 @@ rendering: boolean; jobId: string | null; resultNodeId: string | null; + errorMessage: string | null; onconfirm: (format: string) => void; onclose: () => void; } - let { operations, rendering, jobId, resultNodeId, onconfirm, onclose }: Props = $props(); + let { operations, rendering, jobId, resultNodeId, errorMessage, onconfirm, onclose }: Props = $props(); let format = $state('mp3'); + + /** Trekk ut brukerlesbar FFmpeg-feil fra stderr-dump. */ + function formatFfmpegError(raw: string): { summary: string; detail: string | null } { + // Fjern "ffmpeg feilet: "-prefiks fra maskinrommet + let cleaned = raw.replace(/^ffmpeg feilet:\s*/i, ''); + + // Finn siste linje som inneholder en feilmelding (typisk FFmpeg-mønster) + const lines = cleaned.split('\n').filter((l) => l.trim()); + const errorLine = lines.findLast( + (l) => + /error|invalid|no such|not found|unknown|unsupported|conversion failed/i.test(l) && + !/^frame=/i.test(l) + ); + + const summary = errorLine?.trim() || lines.at(-1)?.trim() || 'Ukjent FFmpeg-feil'; + const detail = lines.length > 1 ? cleaned.trim() : null; + + return { summary, detail }; + } @@ -27,7 +47,33 @@ >
Rendering feilet
+{parsed.summary}
+ {#if parsed.detail} +{parsed.detail}
+ Rendering fullfort!
diff --git a/frontend/src/routes/studio/[id]/+page.svelte b/frontend/src/routes/studio/[id]/+page.svelte index 24c2031..02ac178 100644 --- a/frontend/src/routes/studio/[id]/+page.svelte +++ b/frontend/src/routes/studio/[id]/+page.svelte @@ -533,8 +533,8 @@ {/if}