Most AI video editors work by feeding frames to a language model and hoping it picks good cut points. i-hate-editing takes the opposite approach: the LLM never sees the video. Audio drives every decision, scripts handle the mechanical work, and the model stays focused on taste calls where it actually adds value.

Why the LLM does not watch the footage

The tool's name comes from a note to its creator: never hand back work that still needs fixing by hand. That principle led to an architecture where transcription, not visual analysis, provides the clock for all editing decisions. The LLM processes text, not pixels, which means it can evaluate the content of what was said without burning compute on video frames that contribute nothing to the editing logic.

The system runs four stages. First, it listens: scanning the footage, transcribing with whisper.cpp running locally, identifying silences, and cataloging takes. Second, it cuts: building an edit decision list, rendering the cut, and then verifying each seam by re-transcribing a short window around it to catch repeated words or mid-clause breaks that a single full-file transcript would miss. Third, it enriches: adding captions with a proofread gate, placing free-licensed sound effects, capturing real web pages as stills with scroll and highlight animations, and composing the final master. Fourth, it ships: delivering the master, platform-specific crops, ranked thumbnails, and post copy.

The verification step is a hard gate. If the re-transcription at a seam reveals a repeated word or a broken clause, the cut fails and gets rebuilt. Only after passing verification does the edit move to color grading and enrichment. Changing the cut after captions and sound are built would invalidate those timestamps, so the system forces a restart from the cut stage.

What it actually produces

The tool outputs a complete package for publishing: a master video, platform-specific crops for different aspect ratios, ranked thumbnail options, and draft post copy. Captions are written to read on a phone, with timing that matches the speaker's natural pauses. Sound effects are placed by intent, with peaks aligned so that short bursts are actually audible against the speech track.

For talking-head content that references websites, the system opens the real page in a vertical viewport, captures a tall still, then adds scroll and zoom animations with a highlighter across the specific line the speaker mentioned. This is not a mocked screenshot. It is the live page, captured and animated to match the timing of the cut.

The tool remembers corrections. When you tell it that captions feel early or that the music is too loud, that feedback goes into a taste.md file and applies to every subsequent video. You should not have to teach the same lesson twice, and the system is built to avoid that.

Local-first with minimal dependencies

Transcription runs entirely on your machine through whisper.cpp. No cloud speech-to-text API key is required, and no audio leaves your hardware. The first Whisper model download runs between 0.5 and 3 gigabytes depending on language and hardware, but after that the tool operates offline for the core editing workflow.

The only external network calls happen during proof capture, which uses Playwright with Chromium to fetch real web pages, and when pulling sound effects from Mixkit or the pinned HyperFrames package for composition. Footage and all intermediate artifacts stay local.

Installation requires ffmpeg and whisper.cpp as system dependencies, Node 22 or later for HyperFrames, and a Python virtual environment with Playwright and Pillow for proof capture and thumbnail generation. The tool registers as a skill that works with Claude Code, Cursor, Codex, or any agent with shell access.

Where it fits and where it does not

The tool is built for talking-head short-form videos and YouTube explainers. It is not designed for travel montages, multi-cam productions, or content that relies on visual storytelling over spoken explanation. You bring your own music bed. The skill ducks it under the voice but does not source or license tracks.

For solo creators who record themselves talking to camera and need to turn raw takes into publishable reels without spending hours scrubbing a timeline, this approach trades some flexibility for speed and consistency. The LLM makes the taste decisions. Scripts do the mechanical work. And the verification step catches the kind of seam errors that would otherwise require a human review pass.

The project is MIT licensed and accepts contributions in the form of rules: what failed, what it cost, and what should never happen again. Those rules go into the hard-rules file and prevent the same mistakes from recurring across future renders.