Repository navigation
Surface a clear error when a video format can't be decoded - #31
Merged
Merged
Conversation
Picking a video the browser's decoder rejects — typically an HEVC (H.265) .mov straight off a phone — used to fail silently: the hidden <video> element fired an error nobody listened for, so no video UI ever appeared and the studio just sat empty. Now the error event closes the dead video and shows a message in the dropzone area (plus a compact note under the picker): what failed, why (HEVC hint for .mov files), and how to fix it — convert to MP4 (H.264) or WebM via QuickTime, HandBrake or the given ffmpeg one-liner. Dropped files that are neither image nor video get the same treatment instead of being silently ignored, and the help page's video section now documents the supported formats. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ng25H1kphEz6dXXevJC8R5
Firefox decodes the first frames of an HEVC .mov before the decoder gives up, so the failure arrives with hatchReady still true — and the error block only rendered on an empty stage, leaving just the small sidebar note. The error content now lives in a snippet rendered two ways: the empty-stage dropzone as before, and a dismissible card floated over the render (same overlay treatment as the timeline) when something is still showing. A decode failure mid seek also left promises hanging: seekVideo now resolves on error/emptied as well as seeked, and a video error cancels a running sequence export instead of letting it spin on a dead element. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ng25H1kphEz6dXXevJC8R5
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ng25H1kphEz6dXXevJC8R5
Deploying rstr with
|
| Latest commit: |
276e9bc
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://15b95911.rstr.pages.dev |
| Branch Preview URL: | https://claude-video-format-support.rstr.pages.dev |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Picking a video the browser's decoder rejects — typically an HEVC (H.265)
.movstraight off a phone in Firefox (AppleVTDecoder … NS_ERROR_DOM_MEDIA_DECODE_ERR) — used to fail silently: the hidden<video>element fired anerrorevent nobody listened for, so no video UI ever appeared and the studio just sat empty.What changed
Error handling (
src/routes/studio/+page.svelte)onerrorhandler on the hidden decoder element catches decode/format failures, closes the dead video, and surfaces a clear message: what failed, why (HEVC hint for.movfiles), and how to fix it — try another browser, or convert to MP4 (H.264) / WebM via QuickTime, HandBrake or a copy-readyffmpegone-liner..movbefore giving up, so the failure often lands mid-scrub with a render still visible. A compact note also appears under the browse button.acceptfilter) get the same treatment instead of being silently ignored.Hang fixes
seekVideowaited for aseekedevent that never comes when the decoder dies mid-seek; it now also resolves onerror/emptied.Docs (
src/routes/(site)/help/+page.svelte)Verification
Driven headlessly (vite dev + Playwright/Chromium): an undecodable
.movfrom an empty stage shows the dropzone error; a video that renders frames and then errors mid-scrub shows the overlay card with the last render kept underneath, timeline removed, and dismiss clearing everything; a.txtdrop shows "can't read"; a valid webm afterwards clears the error and loads the pipeline as before.svelte-check, eslint, prettier and all 263 unit tests pass.🤖 Generated with Claude Code
https://claude.ai/code/session_01Ng25H1kphEz6dXXevJC8R5
Generated by Claude Code