Releases: kentcdodds/kody-video
Release list
Kody Video v2026.08.15
Kody Video v2026.08.15
This is the release where Kody Video stops being just a camera and starts being a real editor. Every clip on the timeline now has an info sheet with permanent trim, split, and download — and a filmstrip picker so you choose where the cut lands instead of the app guessing. Behind those headline features, capture jumps to 1080p with a warm encoder that eliminates the startup hole, export survives iOS autoplay blocks, and mid-export toggles mean you never have to wait out a full render just to turn the Kody mark off.
New
-
Clip info sheet with permanent trim, split, and download. Tap the info button on any timeline clip to see its facts — kept vs. full duration, resolution, file size and format, recorded time, and location when tagged — then act on it. Permanent trim bakes your in/out points into a new file and discards the unused head and tail. Split cuts the clip into two timeline pieces (existing trims remap onto each half). Download saves the stored clip to your device. Photos get facts and download only, since there's no unused video to cut. (#160)
-
Filmstrip split picker. Split no longer cuts at a mystery midpoint — it drops you onto a trim-style filmstrip with a draggable handle. The preview scrubs to the cut frame as you move it, and a label shows exactly where you're splitting (
Split at X.Xs · left + right). Cancel or Escape leaves the timeline untouched; Split encodes both halves. The handle stays inside the kept window so you can't accidentally shave off a sliver. (#162) -
1080p capture and export. Kody Video now asks for 1920×1080 at 30fps and scales the bitrate to match (~10 Mbps on the live track instead of a flat 3.5 Mbps). Export keeps the long edge at 1920 with a 12 Mbps cap. The difference is visible: sharper clips on devices that were previously stuck at 720p. (#159)
-
Warm encoder. A video-only dummy recorder runs while the preview is idle so the hardware codec is ready before you press. The ~170ms startup hole that used to eat the first frame of every take now sits in discarded pre-roll. Adopted takes stamp press time, so even a 40ms tap can't inherit the warm session's age. (#159)
Improved
-
Stop mid-export and toggle the mark or location without starting over. The export overlay now has a Stop button (and Escape works). Flipping "Keep the Kody mark" or "Include clip locations" during an encode cancels the current run and restarts with the new setting — no waiting for a full file just to turn something off. (#158)
-
Timeline follows moved clips and inserts where you expect. Arrow-button reorders scroll the selected tile back into view after layout. Device-imported clips now land right after the currently selected clip (then after each other), instead of always jumping to the end. Picked files show shimmer ghost tiles immediately and paint each clip as soon as it's persisted, so there's no more "Clip added" toast before the tile exists. (#158)
Fixed
-
iOS export survives muted autoplay blocks. On Safari iOS (installed PWA), realtime export could fail when a muted
video.play()threwNotAllowedErrorafter the export tap's user activation expired — common in Low Power Mode or with delayed playback. Kody now primes muted playback from the tap and falls back to wall-clock seek-scrub when play is blocked, so the export finishes regardless. (#157) -
QuickTime / .mov clips split correctly. Safari often can't encode .mov sources into WebM, so slices from those clips now remux to MP4 instead of failing. (#161)
-
Failed-split rollback no longer corrupts undo. A failed split used to write an undo snapshot for the rollback, which could clobber a real prior undo or let Undo restore an orphaned right-hand half. Rollback now discards cleanly so your undo history stays intact. (#161)
Kody Video v2026.08.11
Kody Video v2026.08.11
We tried to make a locked project pin to your device's orientation like a native camera app — the interface would hold steady when you turned the phone, instead of reflowing. It didn't hold up in production testing, so it's been reverted. The only thing that stuck around is a small CSS specificity fix that was hiding under the same change.
Fixed
-
Locked projects are back to their previous rotation behavior: the landscape interface follows your device's orientation as before, and portrait projects follow their clips. The counter-rotated shell from the orientation pin was unreliable and confusing in practice, so it's gone. (#155, #156)
-
The home screen's landscape grid no longer loses its layout to a flex-rule specificity collision under load. A scoped selector fix that came along for the ride in the orientation work stays in place. (#155, #156)
Kody Video v2026.08.10
Kody Video v2026.08.10
Kody Video has been a camera — now it's also a photo timeline. You can drop stills right into your filmstrip and treat them like any other clip.
New
Photos on the timeline. Pick an image from your device and it lands on the filmstrip as a still clip that previews, plays, and exports just like a video clip — silent by construction, with no audio decode or sound dial to worry about. Each photo gets a camera badge and a Photo N label so you can tell it apart from video at a glance, and the stage shows the still without a play affordance since there's nothing to scrub. (#154)
A Duration strip instead of Trim for photos. A still has no media length to trim within — its on-screen time is a free choice that can grow as well as shrink. Selecting a photo turns the Trim action into Duration, which opens a strip with a single drag handle over a 0–30s scale, quick presets (1, 2, 3, 5, 10s), and ±0.5s steppers. The readout (N.Ns on screen) is always visible, values snap to tenths, and storage clamps to 0.5–30s while keeping the internal trim window pinned so everything downstream — preview, auto-advance, music ducking, export — keeps working unchanged. (#154)
Photos export at full frame rate. On export the WebCodecs engine decodes a still once and emits it on every 30fps output tick, so photos concatenate seamlessly with video segments at hardware speed. The realtime fallback paints the still for its wall-clock duration. (#154)
Kody Video v2026.08.06
Kody Video v2026.08.06
Getting backups into the app used to mean a trip to About → Import a backup. Now you can just drag the file in.
New
Drag-and-drop backup restore. Drop a .kodyvideo backup anywhere in the app and it restores as a new project using the same import path as the About picker—progress, errors, and all. Overlapping imports are serialized so the free/Plus project cap still holds, and once the restore finishes the project opens automatically. (#144)
Fixed
Kody Video v2026.08.05
Kody Video v2026.08.05
This release reworks how audio works end-to-end: independent per-clip volume sliders, a full audio-track detail view with trim and fades, and a preview path that finally plays music everywhere it should. It also brings a tour video to the home page, a pile of iOS export and storage fixes, and quieter error reporting.
New
-
Per-clip volume sliders and persisted audio normalization. You can now set each clip's own sound level and its music-duck level independently — no more single mix slider that ties the two together. Clip audio is also peak-normalized automatically after recording and stored per clip, so your voice sits at a consistent level across every take whether or not you've added music (#125).
-
Audio track detail view: trim, level, and fades per track. Tapping a background-music track opens a detail view where you can trim the kept window over a decoded waveform, set a per-track volume that only affects the music side of the mix, and apply fade in/out per track. Tracks without explicit fades inherit the playlist defaults, so existing projects keep their behavior and gain eased hand-offs between songs (#116).
-
Tour video on the home page. First-time visitors see a "New here? Watch the tour" card before they ever open the camera. The video streams from kody.video's own media domain (no third-party player), opens in a native dialog so the page layout never reflows, and stays dismissed after you close it — even across SPA navigations (#126, #133, #134, #135).
-
The About page now links a real video made with Kody Video alongside the YouTube tour, so you can see what the app produces (#128).
-
Export fallback hint. When an export falls back to the realtime canvas path (no WebCodecs available), you now see a dismissible notice explaining what happened and how to get a higher-quality result — including saving a project backup to import on a desktop browser (#141).
-
Kody Video now checks for app updates when you return to the tab after switching away, not just on first load. If an update is found, the same Update toast appears (#117).
-
On-device diagnostics and repair pages are available at
/api/diagand/api/recoverfor troubleshooting a stuck or stale shell without needing the app to boot (fb00d85, f4fbbdd).
Improved
-
Preview music is audible everywhere. The project preview and the editor's clip stage now both play the music bed at the right position and level. The previous audio-routing path could go permanently silent on iOS; normalization boosts now ride plain element volumes instead, so you hear audio on every browser (#118).
-
The PWA update toast now reads simply "Update available" with a clickable Update action, sits above the home logo, and stays centered during its animation (#121).
-
Onboarding copy now says Timeline instead of Scissors for the trim tool (ca8054f).
-
The app self-heals after deploys: stale cached assets, retired chunk URLs, and boot-entry imports are detected and purged automatically so you land on the latest version without a hard reload (5c5eb17, 06d6642, e8c3efe, 7deb08e, f12743d).
-
Our test suite now runs in a real browser instead of Node with fakes, catching DOM and browser-API regressions before they reach you (#124).
Fixed
-
iOS black exports when the preview canvas wasn't ready in time. Export now falls back to a tiny on-DOM canvas instead of a detached element, so the browser encodes real frames instead of black ones (#137).
-
iOS clip audio decode failures that produced silent exports. When the WebCodecs audio decoder throws
NotFoundError, the app now remuxes the audio track and decodes it through an alternate path, with retries and proper resource cleanup so the decoder pool doesn't exhaust (#138, #136). -
iOS Safari IndexedDB reconnect. The cached database connection could go stale after Safari backgrounded the page, causing a crash on the next load. The connection is now reopened automatically when the browser closes it (#127).
-
Empty database schema caused by the diagnostics page creating a version-1 database with no stores. The diagnostics page now only opens an existing database, and the schema version bumps to heal already-corrupt databases on next open (#120).
-
False-positive silent-export detection: near-floor audio peaks after lossy encoding were being treated as silent mux faults. The comparator now checks retention against input level before flagging silence (#131).
-
Light-mode contrast on editor chrome — clip action labels, the Trim chip, disabled toolbar controls, keyboard hints, and the Go button are all readable now (#123).
-
Zoom HUD and REC timer jitter during recording: re-renders were wiping the on-screen readouts, collapsing both pills. Both now render as real text nodes, and mid-take drag-zoom no longer triggers re-renders (#122).
-
Camera flip icon arrowheads were floating off their shafts (6c91e10).
-
Array.prototype.atpolyfill for older Chromium shells that lack the method, which caused the router to crash before any page rendered (#132). -
Quieter error reporting: browser-extension noise, CSS preload failures, and lazy chunk load failures are now filtered from error tracking since they're transient deploy races or extension interference, not app bugs (#129, #130, #139).
-
Internal code comments now say "Kody Video Plus" instead of the old "Remove Watermark" naming, matching the app UI and payment surfaces (#140).
Kody Video v2026.08.04
Kody Video v2026.08.04
This release brings background music to the timeline, lets you import existing videos, and overhauls how clip audio flows together — so a film made from many takes finally sounds like one continuous recording.
New
- Background music in the timeline (Plus). Add a playlist of audio files that play one after another under your film, set a default mix level, and duck the music for individual clips where you need the voice to carry. Fade in/out toggles ease the music under the opening and closing frames, and volume changes glide across clip boundaries instead of jumping. The mix is a true balance — clip sound and music always sum to one, and exports peak-normalize both sides so a quietly mastered song no longer disappears under a hot mic. The preview now plays music at the exact level and position it will have in the exported file. (#96, #102, #105)
- Import clips from your device or gallery. You can now add existing videos — MP4, MOV, WebM, and more — to the timeline alongside clips recorded in-app. Multi-select from the system file picker, and files that can't be decoded are skipped with a toast so the good ones still land. (#94)
- Keep the Kody mark on exports (Plus). Plus users get an opt-in toggle to keep the watermark on exports — default is still off, so Plus removes the mark unless you choose otherwise. The mark is now stacked brand above
kody.videoin the bottom-right, with bumped opacity and a drop shadow for readability on bright clips. (#112, #115) - Kody Video is now licensed under the Functional Source License (FSL-1.1-ALv2) — source is open today and converts to Apache 2.0 after two years. (#101)
Improved
- Home screen gets corner buttons and desktop polish. About and Install are now proper 44px corner icon buttons instead of cramped footer links, and the install button opens an explainer popover before prompting so you know what you're getting. The app frame centers and fits on desktop without phantom scroll, the storage note is a subtle gauge with a popover, and the "j" in "New project" no longer loses its descender. (#103, #106, #107)
- Faster record-start. The first hold-to-record press is noticeably snappier — camera readbacks, mic warmup, and codec probing that used to happen mid-press now pre-warm while the camera opens. (#98)
- Trimming a clip now shows the frame at the handle in real time while you drag, and re-opening trim lands on the saved trim-start frame instead of frame zero. (#95)
- The editor and delete icons are redesigned — the editor button is now a filmstrip (not scissors), and the trash icon is sturdier at small sizes. (#99)
Fixed
- Clip audio is seamless at joints. Recordings no longer lose ~370 ms of audio at the head and up to 130 ms at the tail — the mic stays warm between takes, and the recorder consumes the live mic track instead of cloning it. Exports also crossfade adjacent clips with equal-power ramps instead of fading to silence at every cut. (#111, #104)
- The camera preview no longer stays black when you return to the app on iOS — focus and pageshow events now restart a broken preview even when the browser skips the visibility transition. (#97)
- A failed screen load after a deploy no longer dead-ends — the app auto-retries once and offers Try again / Reload buttons. (#110)
- Exiting a project in its default state (no clips, never renamed, no music) now silently cleans it up instead of leaving an empty slot on the home screen. (#109)
- Several error-reporting noise sources are quieted: free-plan project-limit messages and localhost HMR errors no longer open Sentry triage issues. (#100, #108)
- The About page's version SHA now links to its GitHub commit.
Kody Video v2026.08.03
Kody Video v2026.08.03
This is the release where Kody Video gets serious about being a real camera app on your phone. iOS now reaches for your external Bluetooth mic instead of falling back to the built-in one, the whole UI is rebuilt on Remix 3 while every test still passes green, and mobile Lighthouse hits a clean 100 across the board — no score-gaming tricks, just real fixes.
New
- iOS now routes capture to external Bluetooth mics. When you plug in a DJI mic, AirPods, or any Bluetooth headset, Kody Video flips iOS's audio session into
play-and-recordmode the moment the camera opens, so your recordings use the mic you meant to use — not the iPhone's built-in one. The session is released cleanly when you leave the camera, so playback quality stays intact (#85).
Improved
-
The entire UI is rebuilt on Remix 3 — still a pure client-side app, still no server rendering, but now on
remix@3.0.0-beta.5instead of the old React Router setup. The important part: all 45 Playwright tests pass without a single test change, so recording, editing, export, purchase flows, and keyboard shortcuts all behave exactly as before.src/lib(storage, recorder, export engines, thumbnails) is untouched — only the UI shell moved (#87). -
Mobile Lighthouse is 100 / 100 / 100 / 100 — Performance, Accessibility, Best Practices, and SEO all hit perfect. The fixes are real: a static boot hero so your first paint isn't JS-gated, self-hosted fonts (no more render-blocking Google Fonts), proper button contrast in light mode, a real
robots.txtandsitemap.xml, and amainlandmark so screen readers can navigate the page. A/llms.txtfile is now served as actual Markdown for agents and crawlers, and the service worker no longer intercepts asset paths it shouldn't. The Sentry reporting chunk shrank from ~531 KB down to ~90 KB by importing only what's needed, and sourcemaps are now public so error reports are actually useful (#91, #92, #93). -
Contributors can now spin up the project in Cursor Cloud with documented Node, install, and testing steps — including how to drive the camera flow with Chrome's fake-media flags in a headless VM (#90).
Fixed
- The last black flash when ending a take is gone. If you record on Android, you may have noticed a single blink right at finger-lift — caused by reading the on-screen camera element for the thumbnail, which briefly knocks it out of Android's GPU overlay path. Kody now captures thumbnails from a detached mirror
<video>attached to the same stream, so reading it back can't blink anything on screen. Ultra-short takes that end before the mirror's first frame still fall back gracefully (#86).
Kody Video v2026.08.02
Kody Video v2026.08.02
This release is all about making the camera feel like a native app. Zoom lenses hand off seamlessly, the preview stops flashing black between takes, and flipping to selfie no longer flips the wrong feed first.
New
- Seamless zoom lens hand-off on Android. When your phone exposes a logical multi-camera (common on Samsung), Kody Video now locks onto it so zooming switches lenses automatically — no manual chip-tapping before recording. The first time you cycle the rear lens chip, the app remembers which lens gives you the full zoom range and opens it directly every session after. A manual switch still overwrites the memory, so you always win. (#82)
- Inspect cameras on the About page. You can now see exactly what your browser exposes — active camera label, zoom range, per-device labels, and what rear detection concluded. Nothing leaves your device. (#83)
Improved
- Zoom chips cap at 10× so a phone advertising 30× no longer puts a one-tap "mush" chip on screen. Drag-to-zoom still reaches your camera's true maximum, and a new zoom HUD pill shows the live value ("2.3×") while you zoom — during drag, chip taps, and the post-release ease-back. (#84, #83)
- Rear-lens detection is smarter. When a browser labels lenses as plain "Camera 0" with no facing info, Kody Video now falls back to treating any non-front device as rear — so the lens chip shows up on builds that used to hide it. (#83)
Fixed
- No more black flashes when ending a take. Both remaining culprits are gone: clip duration is now read by demuxing the container (no hidden
<video>decoder), and thumbnails are captured straight from the still-running preview via a synchronous canvas draw. Recording also switched to clone-based tracks, so stopping the recorder never disturbs the live preview pipeline. (#80, #83) - Flipping to selfie no longer mirrors the wrong feed during warm-up. The mirror transform now lands in the same render as the selfie feed itself, so you see the rear camera un-mirrored until the front camera actually arrives. (#81)
Kody Video v2026.08.01
Kody Video v2026.08.01
Two things broke at the edges this week: exports died on iOS Chrome over a stubborn <video> element that WebKit refused to load, and deleted projects left gigabytes of cached files silently squatting in OPFS. This release makes exports survive without an element when they don't need one, and gives you a visible way to reclaim storage that was quietly leaking.
New
- One-tap storage cleanup. The home screen now shows a storage banner with a clear action so you can reclaim space occupied by stale export caches and orphaned files. When you delete a project, Kody Video now clears its cached last export in the same transaction and removes the underlying OPFS file — so storage actually frees up instead of staying silently full (#78).
Improved
- Exports survive stubborn element loads. When WebKit persistently refuses to load a blob
<video>it just recorded (a real failure on iOS Chrome), the export no longer dies. Duration measurement now falls back to the recorder-captured clip duration, and output-size probing falls back to stored capture dimensions — so if the WebCodecs path can pump the frames, the whole export completes without ever opening a<video>. The only paths that still require an element are the per-clip fallback pump and the realtime engine's playback, which now fail with clearer context about why they couldn't load. Retry backoff also gained a 2s tail attempt for slow decoder-slot reclaim (#79).
Fixed
- You no longer lose ~1GB to a double-stored export:
persistLastExportnow adopts file-backed exports in place instead of copying them, and superseded temp files are deleted immediately. A boot-time and pre-export sweep removes every stale cache file except a still-valid last export, so leftoverclips.zipscratch files and orphaned references to deleted projects are cleaned up automatically (#78). - Export errors that still escape now carry an
exportDetailtag — engine, load purpose (clip-duration/element-pump/probe-size/segment-load), and clip — so Sentry events are far easier to diagnose (#79).
Kody Video v2026.07.31
Kody Video v2026.07.31
A small but satisfying one: if you've installed Kody Video on your iOS home screen, the app now fills the whole display edge-to-edge — no more opaque strip stealing space behind the status bar.
Improved
- Behind the scenes we automated our manual test checklist into a full browser-based suite covering recording, editing, playback, export, and the no-upload privacy guarantee — so regressions get caught before they ever reach you (#77).
Fixed
- Full-bleed on iOS installed apps. When you add Kody Video to your home screen on iOS, the app now paints behind the status bar instead of leaving an opaque strip at the top. Content clearance is unchanged — every top-anchored element already pads for safe areas — so the clock and notch simply float over the app background now. Status bar text follows your system light/dark mode, matching the app's theming in both appearances. You may need to reinstall the home-screen app for iOS to pick up the change (#76).