<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Samlee Phiput</title>
    <description>The latest articles on DEV Community by Samlee Phiput (@samlee_phiput_ed6bce90ef7).</description>
    <link>https://dev.to/samlee_phiput_ed6bce90ef7</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3917393%2F1d8f625c-933e-4771-b730-d3b7c49117d2.png</url>
      <title>DEV Community: Samlee Phiput</title>
      <link>https://dev.to/samlee_phiput_ed6bce90ef7</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/samlee_phiput_ed6bce90ef7"/>
    <language>en</language>
    <item>
      <title>How We Built MedleyKit: Private Video Editing in the Browser</title>
      <dc:creator>Samlee Phiput</dc:creator>
      <pubDate>Fri, 17 Jul 2026 07:04:11 +0000</pubDate>
      <link>https://dev.to/samlee_phiput_ed6bce90ef7/how-we-built-medleykit-private-video-editing-in-the-browser-4lfi</link>
      <guid>https://dev.to/samlee_phiput_ed6bce90ef7/how-we-built-medleykit-private-video-editing-in-the-browser-4lfi</guid>
      <description>&lt;p&gt;Most “online” video tools begin with the same step: upload your file to a remote server.&lt;/p&gt;

&lt;p&gt;That works, but it also means waiting for the upload, trusting another server with the original file, and downloading the result afterward. For private recordings, internal demos, family videos, or large files, that workflow is not always ideal.&lt;/p&gt;

&lt;p&gt;We built &lt;a href="https://medleykit.com/" rel="noopener noreferrer"&gt;MedleyKit&lt;/a&gt; around a different idea:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The interface runs in the browser, and the media-processing pipeline runs there too.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There is no media upload step, no account to create, and no branded watermark added to the exported video.&lt;/p&gt;

&lt;h2&gt;
  
  
  What can MedleyKit do?
&lt;/h2&gt;

&lt;p&gt;MedleyKit currently provides six focused video tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://medleykit.com/" rel="noopener noreferrer"&gt;Video Trimmer&lt;/a&gt; — select a range using a visual timeline or precise timecodes. Fast mode avoids unnecessary re-encoding when possible, while Precise mode re-encodes the selected range for exact boundaries.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://medleykit.com/compress" rel="noopener noreferrer"&gt;Video Compressor&lt;/a&gt; — choose a target file size, receive a resolution recommendation, and export a smaller MP4.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://medleykit.com/crop-video" rel="noopener noreferrer"&gt;Video Cropper&lt;/a&gt; — use common aspect ratios or a freely adjustable crop area to create square, vertical, or widescreen video.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://medleykit.com/change-speed" rel="noopener noreferrer"&gt;Video Speed Changer&lt;/a&gt; — slow down or speed up video from 0.1× to 16×, with options to preserve audio pitch, change it with the speed, or remove audio.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://medleykit.com/reverse-video" rel="noopener noreferrer"&gt;Video Reverser&lt;/a&gt; — reverse the complete visual sequence and optionally reverse the audio track too.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://medleykit.com/watermark" rel="noopener noreferrer"&gt;Video Watermark Tool&lt;/a&gt; — add text or image watermarks with live positioning, opacity, size, margins, nine anchor positions, free dragging, and tiling.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The tools accept common containers such as MP4, MOV, M4V, WebM, and MKV, depending on the codecs supported by the browser. Results are exported as MP4 files.&lt;/p&gt;

&lt;p&gt;MedleyKit itself does not add a logo, intro, outro, or branded watermark. The watermark tool only adds the text or image explicitly chosen by the user.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why local processing matters
&lt;/h2&gt;

&lt;p&gt;Local processing provides more than a privacy label.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Media files stay on the device
&lt;/h3&gt;

&lt;p&gt;The source video and generated result are not uploaded to a remote media-processing server. The browser reads, transforms, and writes the media locally.&lt;/p&gt;

&lt;p&gt;This is an intentionally precise privacy promise: the media-processing path does not require transferring the video file to our backend.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. There is no upload round trip
&lt;/h3&gt;

&lt;p&gt;With a server-side editor, the workflow usually looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Upload → Wait → Process remotely → Download
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With MedleyKit, it becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Choose a local file → Process locally → Download
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Processing time still depends on the device, codec, resolution, and selected operation, but users do not have to transfer the complete file before work can begin.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. The exported result stays clean
&lt;/h3&gt;

&lt;p&gt;There is no account requirement or paid export step, and MedleyKit does not insert its own branding into the result.&lt;/p&gt;

&lt;h2&gt;
  
  
  Continue editing without downloading and importing again
&lt;/h2&gt;

&lt;p&gt;A video workflow rarely ends after one operation.&lt;/p&gt;

&lt;p&gt;Someone may want to trim a recording, crop it to a vertical aspect ratio, compress it for sharing, and then add a watermark. Treating every tool as an isolated page would force the user to download and reselect the result after every step.&lt;/p&gt;

&lt;p&gt;MedleyKit instead provides a local “Continue editing” workflow.&lt;/p&gt;

&lt;p&gt;After an operation finishes, the user can send the result directly to another compatible tool:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Trim
  ↓
Crop
  ↓
Compress
  ↓
Add watermark
  ↓
Download once
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The media does not travel through a server during these transitions. The next page opens the locally stored result from the same browser workspace.&lt;/p&gt;

&lt;p&gt;Under the hood, large results are streamed into the browser’s Origin Private File System (OPFS). IndexedDB stores artifact metadata and lease state, while lightweight session state records which tool should receive the result next.&lt;/p&gt;

&lt;p&gt;The destination tool acquires a lease before opening the artifact. This prevents temporary cleanup from deleting a result while another page is using it. Expired artifacts can later be reconciled and removed safely.&lt;/p&gt;

&lt;p&gt;Instead of copying a large video between pages, we pass a reference to a locally managed media artifact.&lt;/p&gt;

&lt;h2&gt;
  
  
  The browser-based media architecture
&lt;/h2&gt;

&lt;p&gt;The processing pipeline looks roughly like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Local File / Previous Tool Result
                │
                ▼
       Inspect and demux media
           with Mediabunny
                │
        ┌───────┴────────┐
        │                │
        ▼                ▼
  Copy encoded       Decode frames
  samples when       with WebCodecs
  possible                │
                          ▼
                 Transform video/audio
                 using Canvas, timing,
                 crop, scale, or effects
                          │
                          ▼
                    Re-encode with
                      WebCodecs
        │                │
        └───────┬────────┘
                ▼
       Mux the result as MP4
           with Mediabunny
                │
                ▼
      Memory or streamed OPFS output
                │
        ┌───────┴─────────┐
        ▼                 ▼
     Download       Continue editing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Application layer
&lt;/h3&gt;

&lt;p&gt;The interface is built with Next.js, React, TypeScript, and Tailwind CSS.&lt;/p&gt;

&lt;p&gt;We use the Next.js App Router for page structure, localization, metadata, canonical URLs, and server-rendered content. The actual video-processing code runs only in the client.&lt;/p&gt;

&lt;p&gt;The application is built through Vite and vinext and deployed on a Cloudflare Worker. The worker serves the application and static assets; it is not used as a video-processing backend.&lt;/p&gt;

&lt;h3&gt;
  
  
  Container handling and conversion
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://mediabunny.dev/" rel="noopener noreferrer"&gt;Mediabunny&lt;/a&gt; handles media inspection, demuxing, conversion orchestration, and MP4 muxing.&lt;/p&gt;

&lt;p&gt;For operations that change frames or timing, the browser’s WebCodecs APIs provide hardware-aware video decoding and encoding when supported by the current platform.&lt;/p&gt;

&lt;p&gt;Trimming has two different paths:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fast mode prioritizes copying existing encoded samples. It avoids a quality-changing re-encode, although the start may align with a nearby keyframe.&lt;/li&gt;
&lt;li&gt;Precise mode decodes and re-encodes the selected range so that visual boundaries can match the chosen frames.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Audio processing
&lt;/h3&gt;

&lt;p&gt;When a browser does not expose the AAC encoder required for MP4 output, MedleyKit can load a WebAssembly AAC fallback on demand.&lt;/p&gt;

&lt;p&gt;For speed changes, SoundTouchJS provides time stretching so that audio can remain synchronized while preserving its original pitch. Users can also choose a traditional pitch-shifting effect or export without audio.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bounded local storage
&lt;/h3&gt;

&lt;p&gt;Large outputs should not require holding the complete generated file in JavaScript memory.&lt;/p&gt;

&lt;p&gt;MedleyKit therefore prefers streaming output into OPFS. Before an operation begins, the site estimates the required browser storage, includes room for temporary working data, and rejects operations that clearly exceed the available quota.&lt;/p&gt;

&lt;p&gt;Smaller results can fall back to memory when persistent browser storage is unavailable.&lt;/p&gt;

&lt;p&gt;The reverse-video implementation also processes bounded segments rather than buffering the complete decoded video. This keeps memory usage more predictable for longer clips.&lt;/p&gt;

&lt;h2&gt;
  
  
  Local-first does not mean unlimited
&lt;/h2&gt;

&lt;p&gt;Moving video processing into the browser introduces real constraints:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WebCodecs support varies by browser, operating system, and installed codec capabilities.&lt;/li&gt;
&lt;li&gt;Large or high-resolution videos still require CPU, memory, and local disk space.&lt;/li&gt;
&lt;li&gt;Re-encoding operations can consume significant power on laptops and mobile devices.&lt;/li&gt;
&lt;li&gt;The page must remain open until processing finishes.&lt;/li&gt;
&lt;li&gt;Fast trimming may start at a nearby keyframe; exact cuts require Precise mode.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the most consistent experience, we currently recommend a recent version of Chrome or Edge and common H.264/AAC source files.&lt;/p&gt;

&lt;p&gt;These limitations are preferable to hiding the trade-offs. A local-first tool should explain when an operation is fast, when it requires re-encoding, and when browser capabilities may affect the result.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we learned
&lt;/h2&gt;

&lt;p&gt;The most interesting part of MedleyKit was not placing a file input next to a video element. It was treating the browser as a complete media runtime.&lt;/p&gt;

&lt;p&gt;Three principles shaped the project:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Privacy should come from architecture.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
If media processing is genuinely local, the product does not need an upload endpoint for the video-processing path.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;An output should also be a reusable input.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Local artifact handoff turns a collection of small tools into a practical editing workflow.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Use native capabilities, but design for their boundaries.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
WebCodecs, OPFS, IndexedDB, Canvas, and the Storage API are powerful, but codec support, quotas, cancellation, cleanup, and recovery must all be treated as first-class concerns.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you need to make a quick edit without uploading the original file, you can &lt;a href="https://medleykit.com/" rel="noopener noreferrer"&gt;try MedleyKit in your browser&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We would love to hear how local-first browser media tools could fit into your workflow.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>privacy</category>
      <category>webcodecs</category>
    </item>
    <item>
      <title>Most People Don’t Need Premiere Pro — They Just Need to Cut One Clip</title>
      <dc:creator>Samlee Phiput</dc:creator>
      <pubDate>Fri, 29 May 2026 06:09:34 +0000</pubDate>
      <link>https://dev.to/samlee_phiput_ed6bce90ef7/most-people-dont-need-premiere-pro-they-just-need-to-cut-one-clip-10jb</link>
      <guid>https://dev.to/samlee_phiput_ed6bce90ef7/most-people-dont-need-premiere-pro-they-just-need-to-cut-one-clip-10jb</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhv0xzxtpmqujme4ji4cp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhv0xzxtpmqujme4ji4cp.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;br&gt;
Downloading Premiere Pro to remove 30 seconds from a screen recording feels a bit like renting a film studio to crop a screenshot.&lt;br&gt;
Technically it works.&lt;br&gt;
But it’s probably not the right tool for the job.&lt;br&gt;
A lot of people run into this same problem now because video has quietly become part of everyday life. Not creator life — regular life.&lt;br&gt;
You record a Zoom meeting.&lt;br&gt;
You capture a tutorial for a coworker.&lt;br&gt;
You save gameplay footage.&lt;br&gt;
You record a lecture or presentation.&lt;br&gt;
And most of the time, you don’t actually need to edit the video.&lt;br&gt;
You just need to remove the unnecessary part.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Most People Actually Do With Videos
&lt;/h2&gt;

&lt;p&gt;For casual users, “video editing” usually means one of four things:&lt;br&gt;
● trimming the awkward beginning&lt;br&gt;
● cutting out silence in the middle&lt;br&gt;
● shortening a recording before sending it&lt;br&gt;
● cropping something for social media&lt;br&gt;
That’s it.&lt;br&gt;
Nobody’s adding cinematic transitions to a client call recording.&lt;br&gt;
Nobody’s color grading a school presentation.&lt;br&gt;
But traditional desktop editors still open like you’re about to produce a documentary.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Overkill Software Problem
&lt;/h2&gt;

&lt;p&gt;Modern editing software is powerful, but lightweight tasks get buried under heavyweight workflows.&lt;br&gt;
You download a giant app.&lt;br&gt;
Wait through installation.&lt;br&gt;
Create a project.&lt;br&gt;
Import media.&lt;br&gt;
Learn the timeline.&lt;br&gt;
Choose export settings.&lt;br&gt;
Then finally remove the 20 seconds you didn’t want.&lt;br&gt;
For creators editing daily, that makes sense.&lt;br&gt;
For someone trimming one MP4 file on a Tuesday afternoon, it’s excessive.&lt;br&gt;
The weird part is that phones solved this years ago.&lt;br&gt;
On mobile, you open the gallery app, drag two handles, tap save, and move on with your life.&lt;br&gt;
Desktop video editing somehow became more complicated instead of less.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Browser-Based Video Cutters Became Popular
&lt;/h2&gt;

&lt;p&gt;This is why lightweight browser tools started getting traction.&lt;br&gt;
They reduce friction.&lt;br&gt;
No installation.&lt;br&gt;
No account.&lt;br&gt;
No giant learning curve.&lt;br&gt;
You upload the file, trim what you need, and download the result.&lt;br&gt;
That workflow feels much closer to how people already expect technology to behave now.&lt;br&gt;
Especially for:&lt;br&gt;
● Zoom recordings&lt;br&gt;
● OBS clips&lt;br&gt;
● online classes&lt;br&gt;
● tutorials&lt;br&gt;
● gameplay footage&lt;br&gt;
● quick social clips&lt;br&gt;
For simple tasks, fast matters more than advanced features.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Actually Makes a Good Lightweight Video Cutter?
&lt;/h2&gt;

&lt;p&gt;After trying a bunch of online editors, the good ones usually have the same qualities:&lt;/p&gt;

&lt;h3&gt;
  
  
  They support large files
&lt;/h3&gt;

&lt;p&gt;A surprising number of “free” tools break once your video goes over a few hundred megabytes.&lt;br&gt;
That becomes a problem fast with screen recordings or 4K footage.&lt;/p&gt;

&lt;h3&gt;
  
  
  They support modern formats
&lt;/h3&gt;

&lt;p&gt;MP4 is standard, but a lot of recordings today are MOV or MKV.&lt;br&gt;
OBS especially saves in MKV by default.&lt;/p&gt;

&lt;h3&gt;
  
  
  They don’t destroy export quality
&lt;/h3&gt;

&lt;p&gt;Some tools quietly re-compress everything during export.&lt;br&gt;
That’s why certain trimmed videos suddenly look blurry afterward.&lt;/p&gt;

&lt;h3&gt;
  
  
  They keep the workflow simple
&lt;/h3&gt;

&lt;p&gt;If trimming a clip requires tutorials, accounts, and subscription popups, the tool missed the point.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Simpler Workflow Most People Want
&lt;/h2&gt;

&lt;p&gt;Recently I’ve been using tools like &lt;a href="https://videocutter.io/?utm_source=dev.to"&gt;Video Cutter&lt;/a&gt; for quick trims because the workflow stays lightweight.&lt;br&gt;
Open site.&lt;br&gt;
Upload file.&lt;br&gt;
Trim.&lt;br&gt;
Export.&lt;br&gt;
Done.&lt;br&gt;
No timeline setup.&lt;br&gt;
No watermark surprise at the end.&lt;br&gt;
No installing a 3GB editor just to cut the first few minutes off a recording.&lt;br&gt;
For quick desktop editing, that simplicity honestly matters more than most “advanced” features.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;Professional editing software absolutely has its place.&lt;br&gt;
But most people aren’t working on projects.&lt;br&gt;
They’re working on tasks.&lt;br&gt;
And those are two very different things.&lt;br&gt;
Complex tools are for projects.&lt;br&gt;
Simple tools are for tasks.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>discuss</category>
      <category>productivity</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Stop wasting time uploading videos. Here’s a 0-second-wait trimmer ⚡️</title>
      <dc:creator>Samlee Phiput</dc:creator>
      <pubDate>Thu, 07 May 2026 07:30:01 +0000</pubDate>
      <link>https://dev.to/samlee_phiput_ed6bce90ef7/stop-wasting-time-uploading-videos-heres-a-0-second-wait-trimmer-oif</link>
      <guid>https://dev.to/samlee_phiput_ed6bce90ef7/stop-wasting-time-uploading-videos-heres-a-0-second-wait-trimmer-oif</guid>
      <description>&lt;p&gt;A few weeks ago I just wanted to trim 5 seconds from a video.&lt;br&gt;
That somehow turned into:&lt;br&gt;
● waiting for upload progress bars 🫠&lt;br&gt;
● creating an account&lt;br&gt;
● hitting export limits&lt;br&gt;
● getting a watermark&lt;br&gt;
● waiting AGAIN for rendering&lt;br&gt;
For a tiny edit.&lt;br&gt;
It honestly felt ridiculous.&lt;br&gt;
So I built a small browser-based tool instead:&lt;br&gt;
👉 Video Cutter(&lt;a href="https://videocutter.io/" rel="noopener noreferrer"&gt;https://videocutter.io/&lt;/a&gt;)&lt;br&gt;
The idea was simple:&lt;br&gt;
Click → trim → exportNo upload waiting. No sign-up. No nonsense.&lt;br&gt;
Because the processing happens locally in the browser, you can start editing immediately instead of uploading a giant file to a server first.&lt;br&gt;
Current tools:&lt;br&gt;
● ✂️ Video Cutter&lt;br&gt;
● 🎬 YouTube Cutter&lt;br&gt;
● 🔄 Flip Video&lt;br&gt;
● ↩️ Rotate Video&lt;br&gt;
● 🖼️ Crop Video&lt;br&gt;
Still very early though 😅&lt;br&gt;
The UI definitely needs work, and I’m still improving:&lt;br&gt;
● ffmpeg.wasm performance&lt;br&gt;
● browser memory handling&lt;br&gt;
● mobile compatibility&lt;br&gt;
● large file stability&lt;br&gt;
One thing I learned while building this:&lt;br&gt;
A lot of “online video editors” are basically upload platforms first, editors second.&lt;br&gt;
For quick edits, upload time is often slower than the actual edit itself.&lt;br&gt;
Would love feedback from other builders/devs here 🙌&lt;br&gt;
Especially if you’ve worked with:&lt;br&gt;
● browser-side processing&lt;br&gt;
● WebAssembly&lt;br&gt;
● video pipelines&lt;br&gt;
● large file optimization&lt;br&gt;
Always happy to learn and improve.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
