## Route `/video-to-gif` ## Scenarios to test ### Upload - [ ] Dropzone accepts `.mp4`, `.webm`, `.mov`, `.avi`, `.mkv`, `.ogg`, `.m4v` - [ ] Uploading an MP4 loads the video and renders the preview player - [ ] A file type error is shown when a non-video file is dropped - [ ] The video player shows the first frame after metadata loads ### Video preview & playback - [ ] Play/pause button is visible in the preview area - [ ] Clicking play starts the video - [ ] Clicking pause stops it - [ ] The current-time overlay (e.g. `0:02.3`) updates as the video plays - [ ] Video auto-pauses when playback reaches the clip end time ### Timeline scrubber - [ ] The timeline track is visible below the video - [ ] The playhead (white vertical bar) is visible and moves as the video plays - [ ] Clicking on the track (outside handles) seeks the video to that position - [ ] Start handle (left) is draggable; dragging it moves the start time - [ ] End handle (right) is draggable; dragging it adjusts the clip duration - [ ] Dragging the selection band (between handles) moves both start and end together - [ ] Start time and end time labels below the handles update while dragging - [ ] The clip duration badge updates when handles are dragged - [ ] Dragging the end handle past the max duration (30s) is clamped ### Start / Duration inputs - [ ] Start time input reflects the current start handle position - [ ] Changing the start time input seeks the video and moves the handle - [ ] Duration input reflects the clip length - [ ] Changing the duration input moves the end handle ### Frame capture - [ ] "Save Frame As" section is visible below the video - [ ] Format selector shows PNG, JPEG, WebP - [ ] Clicking "Save Frame" triggers a download named with the timestamp - [ ] Downloaded PNG contains the actual video frame (not blank) - [ ] Frame capture works for JPEG and WebP formats too ### Settings (FPS, width) - [ ] Frame rate selector is visible (6, 10, 15, 24 FPS) - [ ] Output width selector is visible (320, 480, 640, 800px) - [ ] Changing these does not crash the UI ### GIF conversion - [ ] "Convert to GIF" button is present when a video is loaded - [ ] Clicking it shows a "Loading ffmpeg…" then "Converting… X%" progress - [ ] On completion, the GIF preview is displayed below the controls - [ ] "Download GIF (X KB)" button appears and triggers a `.gif` download - [ ] The downloaded file is a valid animated GIF ### Change file - [ ] "Change file" button returns the tool to the dropzone state ## Acceptance criteria - Timeline drag interactions registered by Playwright pointer events - Frame capture downloads a valid image at the current playhead position - GIF conversion completes and downloads for a short (≤5s) test clip
Route
/video-to-gifScenarios to test
Upload
.mp4,.webm,.mov,.avi,.mkv,.ogg,.m4vVideo preview & playback
0:02.3) updates as the video playsTimeline scrubber
Start / Duration inputs
Frame capture
Settings (FPS, width)
GIF conversion
.gifdownloadChange file
Acceptance criteria