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.

Captions Need More Than a Generate Button

Wordwave uses multilingual Whisper Tiny through Transformers.js. Its pipeline decodes bounded windows of audio, skips silence, and sends audio buffers to a dedicated speech worker. It attempts WebGPU and falls back to CPU/WASM inference.

The result is an editable subtitle file. It is not automatically burned into the video. That distinction gives the user a review step: correct words and timestamps in textune, shift the whole track with captionclock, then export subtitles or use textbake for a permanent visual layer.

Captionlingo translates between English, Spanish, French, and German using compact Marian OPUS-MT models. Directions involving English use one model; other language pairs pass through English in two stages. It preserves timestamps, but translated phrasing still needs review, and imported styling is flattened.

The models require substantial downloads on first use. Cached assets can speed up later jobs, but browser caches may be evicted. Local processing therefore does not mean every tool works offline immediately.

Wordwave's bounded overlapping audio windows also explain why transcription is a pipeline rather than one instant operation. Decoding, model loading, inference, and cue assembly have different costs. A first run includes setup that a later run may avoid. Transformers.js documentation provides background on browser model execution; the app's worker design keeps that computation separate from the editing controls.

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

More articles

Browse all engineering articles