Show HN: Video to Image – Client-side frame extraction with AI quality scoring
video-to-image.comHello HN,
I built a tool to extract high-quality frames from videos entirely in the browser.
Link: https://video-to-image.com
The Problem I frequently need to grab specific high-res frames from video footage for thumbnails or documentation. Opening heavy desktop editors (Premiere/Resolve) is overkill for this single task, and existing web tools usually require uploading the file to a server (privacy risk + bandwidth constraints) or result in compressed, low-quality output.
How It Works The application runs 100% client-side with no server-side processing for the video files.
Local Loading: It uses URL.createObjectURL to load the local file into an HTML5 video element. The binary data never leaves your device. Frame Capture: To extract a frame, the app seeks the video element to a specific timestamp and draws the content to an off-screen <canvas>. This allows us to export the image data as a Blob (PNG/JPG/WebP) while preserving the original video resolution (up to 4K). AI Quality Scoring: To solve the problem of selecting the best frame among similar ones, I implemented a client-side analysis engine. It evaluates pixel data from the canvas context for sharpness (focus), contrast, and exposure. It assigns a quality score (0-100) and flags blurry frames, which is particularly useful for filtering out motion blur in batch exports. Technical Challenges
Seeking Precision: One of the biggest hurdles was video.currentTime seeking. Browsers often snap to the nearest keyframe rather than the precise timestamp requested, especially with inter-frame compression like H.264. I had to implement logic to verify the seek position. Memory Management: Batch exporting hundreds of 4K frames for a ZIP download quickly hits browser memory limits. I implemented a queue system to process, compress, and release objects from memory in chunks to prevent crashes on lower-RAM devices. Limitations
Codec Support: Since it relies on the browser's native decoding capabilities, file support is limited to what your browser can play (e.g., H.265/HEVC support is inconsistent across Chrome/Firefox/Safari). Performance: Decoding high-bitrate 4K/60fps footage entirely in the browser can be CPU-intensive. I’m happy to answer any questions about the implementation or the client-side stack. Feedback on the quality scoring algorithm is especially welcome.
Thanks!
No comments yet.