<feed xmlns='http://www.w3.org/2005/Atom'>
<title>opencut, branch v0.1.0</title>
<subtitle></subtitle>
<id>http://git.cashmere.rs/opencut/atom/?h=v0.1.0</id>
<link rel='self' href='http://git.cashmere.rs/opencut/atom/?h=v0.1.0'/>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/'/>
<updated>2026-07-30T16:37:39Z</updated>
<entry>
<title>fix(release): pin electron version for electron-builder</title>
<updated>2026-07-30T16:37:39Z</updated>
<author>
<name>cashmere</name>
<email>cashmere@autistici.org</email>
</author>
<published>2026-07-30T16:37:39Z</published>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/commit/?id=94b58d5c168806f6d147e9354e594bcc90e68318'/>
<id>urn:sha1:94b58d5c168806f6d147e9354e594bcc90e68318</id>
<content type='text'>
electron-builder refuses range specifiers in CI where it cannot
traverse installed node_modules.
</content>
</entry>
<entry>
<title>fix(ci): drop stray root next dependency</title>
<updated>2026-07-30T16:27:41Z</updated>
<author>
<name>cashmere</name>
<email>cashmere@autistici.org</email>
</author>
<published>2026-07-30T16:27:41Z</published>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/commit/?id=03adfed13f43e3f9a9bd09a36b0698bf49423947'/>
<id>urn:sha1:03adfed13f43e3f9a9bd09a36b0698bf49423947</id>
<content type='text'>
Root package.json carried next ^16.1.3 alongside apps/web's pinned
16.1.3; fresh installs resolved two next copies whose NextConfig types
are incompatible, failing withContentCollections(nextConfig) in CI.
Nothing at root imports next.
</content>
</entry>
<entry>
<title>feat: Electron desktop app, native ffmpeg export, fully static web</title>
<updated>2026-07-30T16:18:15Z</updated>
<author>
<name>cashmere</name>
<email>cashmere@autistici.org</email>
</author>
<published>2026-07-30T16:17:45Z</published>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/commit/?id=ed02ba872c02eafed45f406c68d389d0a1112a4e'/>
<id>urn:sha1:ed02ba872c02eafed45f406c68d389d0a1112a4e</id>
<content type='text'>
- apps/desktop: Electron shell serving the static web build over a
  privileged opencut:// protocol; exports stream frames over IPC to a
  bundled ffmpeg (libx264/libvpx-vp9, BT.709 tagged) with backpressure.
  electron-builder packaging: AppImage, deb, rpm.
- apps/web: dead backend deleted (better-auth, drizzle/pg, upstash,
  botid, freesound proxy, blog, rss, env validation); next build emits
  a zero-env static export; /editor/[project_id] -&gt; /editor?project=.
- Native exporter mirrors SceneExporter; activates when the preload
  bridge is present; web keeps the mediabunny path.
- Docker self-hosting now builds and serves the static export via nginx.
- Release workflow: v* tags publish static web tarball + Linux packages.
- Changelog 0.4.0; README/AGENTS/CONTRIBUTING/roadmap updated.
- GPUI/Rust rewrite parked on branch rust-rewrite.
</content>
</entry>
<entry>
<title>feat: ripple-extend resize, timeline filmstrip, export hardening</title>
<updated>2026-07-28T17:41:14Z</updated>
<author>
<name>cashmere</name>
<email>cashmere@autistici.org</email>
</author>
<published>2026-07-28T17:41:14Z</published>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/commit/?id=e837e7504379e100ff3b56282577ec67bb88bec9'/>
<id>urn:sha1:e837e7504379e100ff3b56282577ec67bb88bec9</id>
<content type='text'>
Yesterday's verified web session (gates green: 316 tests, tsc, build):
- ripple-extend pushes right-hand chain on static-element resize
- per-position video filmstrip thumbnails with zoom-adaptive density
- fps-aware export bitrate, 2s keyframes, even-dim export canvas
- freeze frame uses fixed 3s duration, prompt removed
</content>
</entry>
<entry>
<title>docs: record completed roadmap slices</title>
<updated>2026-07-26T23:22:54Z</updated>
<author>
<name>cashmere</name>
<email>cashmere@autistici.org</email>
</author>
<published>2026-07-26T23:22:54Z</published>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/commit/?id=da99dec8a2de1f3849aebbf5695c1e812b2dbdf9'/>
<id>urn:sha1:da99dec8a2de1f3849aebbf5695c1e812b2dbdf9</id>
<content type='text'>
AGENTS.md gains the versions/voiceover/transfer domains and the features
flag module; roadmap marks slices 1-6 done and notes deletion of
flagged-off code as the next strip step.
</content>
</entry>
<entry>
<title>feat: wire versioning/transfer/voice-over actions and header UI</title>
<updated>2026-07-26T23:21:29Z</updated>
<author>
<name>cashmere</name>
<email>cashmere@autistici.org</email>
</author>
<published>2026-07-26T23:21:29Z</published>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/commit/?id=9c3b788b47cc639ee463dd07e1a4cce91e6376cc'/>
<id>urn:sha1:9c3b788b47cc639ee463dd07e1a4cce91e6376cc</id>
<content type='text'>
Shared wiring for the six roadmap slices in one commit: action ids and
handlers for create-checkpoint, toggle-versions-panel,
export-project-archive, and voice-over; the freeze-frame handler awaits
the duration prompt before capture; editor header gains the versions
popover and export menu item (and loses the feedback popover and
Discord item, part of the branding strip).
</content>
</entry>
<entry>
<title>feat: voice-over recording into the timeline</title>
<updated>2026-07-26T23:21:20Z</updated>
<author>
<name>cashmere</name>
<email>cashmere@autistici.org</email>
</author>
<published>2026-07-26T23:21:20Z</published>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/commit/?id=783e9ac8462751adc14d78b070095fd63e45bda0'/>
<id>urn:sha1:783e9ac8462751adc14d78b070095fd63e45bda0</id>
<content type='text'>
MediaRecorder mic capture (defensive mimeType picking, permission/no-mic
toasts) with elapsed display in the timeline toolbar. Stop produces an
audio asset and inserts it at the playhead on an audio track as ONE
BatchCommand undo step, freeze-frame precedent. voice-over action
registered, no default keybinding. 20 tests; smoke-tested in Chromium
with a fake mic end to end.
</content>
</entry>
<entry>
<title>feat: single-file project import/export (.ocp)</title>
<updated>2026-07-26T23:21:20Z</updated>
<author>
<name>cashmere</name>
<email>cashmere@autistici.org</email>
</author>
<published>2026-07-26T23:21:20Z</published>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/commit/?id=30a36e45686db503fded68e4da5d4c465a06f978'/>
<id>urn:sha1:30a36e45686db503fded68e4da5d4c465a06f978</id>
<content type='text'>
fflate zip container: project.json (serialized project incl. schema
version) + media files with a manifest. Export gathers all project
media (missing blobs warn, never abort) after save-flush; import
validates everything before any write, migrates older archives through
the storage migration registry, remaps media ids, and creates a new
project with rollback on failure. Entry points: projects page
import/export, editor header menu, export-project-archive action.
29 tests incl. full round-trip.
</content>
</entry>
<entry>
<title>feat: git-like project versioning (v1)</title>
<updated>2026-07-26T23:21:20Z</updated>
<author>
<name>cashmere</name>
<email>cashmere@autistici.org</email>
</author>
<published>2026-07-26T23:21:20Z</published>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/commit/?id=d55d2583a71ae35fa8d0d1bfbec975e67e66aafa'/>
<id>urn:sha1:d55d2583a71ae35fa8d0d1bfbec975e67e66aafa</id>
<content type='text'>
Linear per-project history per notes/project-versioning.md: named
checkpoints (thumbnail via renderer.captureFrame) plus auto-checkpoints
on save (60s throttle, ring of 20, named never rotate). Restore writes a
safety checkpoint first, then swaps the document outside undo/redo.
Media assets referenced by any version are pinned against deletion.
Migration v31-v32 stamps the schema; the version store lives in its own
IDB database with an in-memory fallback for tests. Versions popover in
the editor header for jump/rename/delete. 12 new tests.
</content>
</entry>
<entry>
<title>refactor: strip landing page and upstream branding</title>
<updated>2026-07-26T23:21:02Z</updated>
<author>
<name>cashmere</name>
<email>cashmere@autistici.org</email>
</author>
<published>2026-07-26T23:21:02Z</published>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/commit/?id=2a372fdec256b8be890e181c221c2a012ead9efa'/>
<id>urn:sha1:2a372fdec256b8be890e181c221c2a012ead9efa</id>
<content type='text'>
/ redirects to /projects; marketing landing components, the feedback
popover + API route, and all Discord links removed (editor header,
footer, onboarding copy).
</content>
</entry>
</feed>
