The Pyvi Toolkit: Video, Audio, and Subtitle Tools in Your Browser
By Raymund Zyron Abella /
Follow a practical media workflow through sixteen browser tools, then inspect worker lifecycles, compression tradeoffs, local inference, and task completion.
In this article
Pyvi is a collection of sixteen focused browser tools for working with media. Each app handles a specific job: extract audio, trim a clip, inspect a file, fix caption timing, or turn a transcript into readable text. Together, they cover many of the small tasks that sit between recording something and sharing it.
The collection uses Astro, TypeScript, and Tailwind CSS for its interfaces. Processing follows the task: simple text transformations stay in JavaScript, heavier media operations use FFmpeg through WebAssembly, and speech recognition and translation use models running on the visitor's device.
If you want to experience the approach before reading the implementation, open framelite with a short recording. Choose a quality setting, process it, and compare the original with the output. File size, visual quality, and waiting time give you three concrete ways to judge the result.
Sixteen Tools, Clear Responsibilities
The video group includes framelite for compression, clipsnip for trimming, framedivide for splitting, reeltogether for merging, clipshape for resizing and cropping, hushclip for removing audio, and framelens for inspecting technical file details.
soundpeel extracts audio, while framepick pulls out individual video frames for thumbnails. They make useful companions: one recording can become an audio file, a shorter video, and a representative image without opening a full editing timeline.
The text and caption group includes wordwave for automatic captions, textune for editing cues, captionclock for shifting timing, submorph for format conversion, captionlingo for translation, textbake for permanently burning subtitles into a video, and scriptpolish for cleaning transcripts.
These are separate applications. A person who only needs to shift subtitles should be able to find that control immediately, without working through the settings of a complete media editor.
A Workflow You Can Try in One Sitting
Imagine preparing a short lesson recording for a class group. Begin with soundpeel if you need an audio-only version. For captions, wordwave's project page explains the speech-to-text tool; its matching public deployment has not been confirmed, so the archive provides the local preview.
Take the generated subtitle file into textune. Correct names, punctuation, and any cue that arrives too early. If the entire track is consistently offset, captionclock can shift the timing as a group. Convert the file with submorph if the destination needs a different subtitle format.
Use textbake when the captions need to remain visible wherever the video is played. Keep a separate subtitle file when the destination supports selectable tracks. Finally, reduce the video size with framelite and choose a cover image through framepick.
This sequence requires explicit downloads and imports between apps. The toolkit does not currently act as an automatic shared editing session. That makes each handoff visible, and gives the user a chance to review an output before another tool changes it.
Processing Files on the Device
The tools read selected files through browser file APIs. Video previews use local object URLs, and processed results become downloadable outputs. Media files and subtitle text are not uploaded to a processing service.
That changes where the costs appear. The browser needs to download application assets and, for some tools, a media engine or inference model. The device then supplies the memory and compute time. A long recording can be demanding even when no server is involved.
FFmpeg runs in a worker so media processing can happen away from the interface thread. The applications still need to explain progress, support cancellation, and release resources after a job. A private workflow is only useful when its waiting states are understandable.
What Happens Inside a Compression Job
Framelite loads its FFmpeg engine when processing is needed. WORKERFS mounts the original browser File, avoiding a wholesale copy of the input into the WebAssembly filesystem. Encoding still needs working memory, so this reduces one cost without making large media free to process. The ffmpeg.wasm architecture guide explains the worker and filesystem boundary behind this design.
The compressor exports H.264 video and optional AAC audio in an MP4 container. Its default configuration uses CRF 28, a maximum height of 720 pixels, the veryfast preset, original frame rate, and 96 kbps audio. CRF is a quality target: a higher value accepts more loss to reduce size, while the final size also depends on the source material. It is not an exact megabyte budget.
The app normalizes output dimensions to even values and avoids upscaling. These choices connect directly to user expectations: selecting 1080p should not manufacture detail that a smaller original never contained.
Cancellation terminates the worker. After completion, the engine and its filesystem are freed, while the output blob remains available for preview and download. Replacing the result revokes its old object URL. MDN's object URL documentation describes why local previews need an explicit release step.
Clipsnip exposes a related tradeoff. Precise trimming decodes and re-encodes to the requested frame. Fast trimming copies streams and may begin at a nearby keyframe. The trimmer project page records both modes. Giving them distinct names helps a user choose between exact boundaries and less processing work.
Small Interfaces, Real Constraints
Subtitle tools have their own validation problems. An end timestamp must follow its start. A conversion should preserve cue order. Translation should keep timing attached to the correct sentence. An export should reflect the edited data rather than an invalid text field left on screen.
Media tools have different limits: available memory, decoding support, duration, and output format. Browser playback support can differ from what FFmpeg can process. The interface needs to make that difference visible instead of treating every preview failure as a broken input file.
Engagement Means Finishing a Useful Job
For these utilities, I would evaluate engagement through successful task completion. Did a visitor obtain a usable file? Could they inspect it before downloading? Did they understand why the first run took longer? Those questions are more informative than time spent watching an encoding bar.
The implementation supports that goal through focused controls, output previews, editable captions, and cancellation. A stronger evaluation would test the same short clip on several devices, then record completion time, output size, abandoned jobs, and whether people understood the quality settings. These are proposed checks, not reported usage statistics.
Try two compression settings on one recording and inspect small text, faces, and fast motion. For captions, deliberately move a cue out of sync and repair it. These small experiments reveal whether the controls are understandable and whether the output matches the action you selected.
Explore the Toolkit
The Lab Projects collection includes all sixteen Pyvi apps with desktop previews and individual descriptions. Confirmed deployments include soundpeel, textune, and captionlingo.
Pyvi gives these recurring tasks a direct place to live. The collection can grow while each tool keeps a clear promise: choose a file, make a specific change, inspect the result, and download it.
Projects in this article
- framelite — Video Compressor
- clipsnip — Video Trimmer
- framedivide — Video Splitter
- reeltogether — Video Merger
- clipshape — Video Resizer & Cropper
- hushclip — Video Muter
- framelens — Video Inspector
- soundpeel — Audio Extractor
- framepick — Thumbnail Extractor
- wordwave — Auto Caption Maker
- textune — Subtitle Editor
- captionclock — Subtitle Sync
- submorph — Subtitle Converter
- captionlingo — Subtitle Translator
- textbake — Subtitle Burner
- scriptpolish — Transcript Cleaner