summaryrefslogtreecommitdiff
path: root/apps/web/src/changelog/entries/0.4.0.md
blob: 8d9e32da46b1a0812c6fb0c0650571d84440086d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
---
version: "0.4.0"
date: "2026-07-30"
published: true
title: "Desktop app, native exports & fully static web"
description: "OpenCut is now a real desktop app for Linux with native ffmpeg-powered exports, and the web version runs anywhere as plain static files — no server, no account, no backend."
summary: "Linux desktop app (AppImage, deb, rpm), native x264/VP9 exports, static web build, project versioning, .ocp files, voice-over."
changes:
  - type: new
    text: "Desktop app for Linux. The full editor as a self-contained native app, distributed as AppImage, .deb, and .rpm. Download, run, edit — no browser required."
  - type: new
    text: "Native export engine in the desktop app. Exports are encoded by a bundled ffmpeg with libx264 (H.264) and libvpx-vp9 (VP9) on a proper quality ladder, instead of the browser's built-in encoder. MP4 exports now actually hit the quality you picked."
  - type: fixed
    text: "Browser MP4 exports silently undershot the selected bitrate — 'high quality' came out at a fraction of the intended bitrate. The desktop app's native encoder honors it, and colors are now correctly tagged as BT.709."
  - type: new
    text: "The web version is now a fully static site. No server, no database, no signup — it can be hosted anywhere as plain files, and everything still lives locally in your browser."
  - type: new
    text: "Project versioning. Create named checkpoints of a project, and restore any of them later — restoring first creates a safety checkpoint of the current state. Media files are pinned per version."
  - type: new
    text: "Single-file projects. Export an entire project — timeline, settings, and all media — as one .ocp file, and import it back anywhere."
  - type: new
    text: "Voice-over recording. Record from your microphone straight onto the timeline at the playhead."
  - type: new
    text: "Freeze frame. One click captures the current frame at the playhead and inserts it as a still."
  - type: improved
    text: "Video clips in the timeline now render real per-position thumbnails that adapt their density to the zoom level."
  - type: improved
    text: "Ripple-extend: dragging the edge of a static element (image, text, freeze still) past its neighbor pushes the whole chain of clips after it, instead of stopping at the boundary."
  - type: improved
    text: "Export encoding is frame-rate aware when computing bitrate, and keyframes are placed every 2 seconds for smoother scrubbing in players."
  - type: technical
    text: "The backend is gone. Authentication, database, rate limiting, and the blog were dead weight — the editor was already fully client-side on IndexedDB, so the entire server surface was deleted. `next build` now emits a static export with zero environment variables."
  - type: technical
    text: "The desktop shell is Electron serving the static web build over a privileged `opencut://` protocol. Exports stream raw frames over IPC to a bundled ffmpeg with full backpressure, so memory stays flat regardless of project length."
---