<feed xmlns='http://www.w3.org/2005/Atom'>
<title>opencut/apps/web/src/timeline/components, branch rust-rewrite</title>
<subtitle></subtitle>
<id>http://git.cashmere.rs/opencut/atom/apps/web/src/timeline/components?h=rust-rewrite</id>
<link rel='self' href='http://git.cashmere.rs/opencut/atom/apps/web/src/timeline/components?h=rust-rewrite'/>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/'/>
<updated>2026-07-28T17:41:14Z</updated>
<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>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: gate sounds/stickers/effects UI behind feature flags</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=f8fdff7f0c1b8efdef9093c932e28e427799d6ef'/>
<id>urn:sha1:f8fdff7f0c1b8efdef9093c932e28e427799d6ef</id>
<content type='text'>
FEATURES in src/features.ts (all false) hides the assets-panel tabs and
views, the clip effects properties tab, and the timeline effects badge.
Existing project data still renders and stays editable (standalone effect
tab, sticker config, renderer nodes untouched).
</content>
</entry>
<entry>
<title>feat: freeze frame at playhead</title>
<updated>2026-07-26T19:06:33Z</updated>
<author>
<name>cashmere</name>
<email>cashmere@autistici.org</email>
</author>
<published>2026-07-26T19:06:33Z</published>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/commit/?id=fc0a801e8829b623d62137a3f7cbdec38c6d555a'/>
<id>urn:sha1:fc0a801e8829b623d62137a3f7cbdec38c6d555a</id>
<content type='text'>
Enable the timeline toolbar freeze-frame button: capture the composited
canvas as PNG, add it as an image media asset, split the video element
at the playhead, shift the right part by the freeze duration, and insert
a 3-second image element in the gap. Adds RendererManager.captureFrame(),
reused by createSnapshot().

Also adds the Nix devshell (flake.nix/flake.lock: bun + nodejs) and
AGENTS.md repository guidelines.
</content>
</entry>
<entry>
<title>refactor: animate params over time</title>
<updated>2026-05-02T01:27:23Z</updated>
<author>
<name>Maze Winther</name>
<email>mazewinther@gmail.com</email>
</author>
<published>2026-04-29T08:37:39Z</published>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/commit/?id=401cc35743aafc4c8bdfb8055501650390bde88b'/>
<id>urn:sha1:401cc35743aafc4c8bdfb8055501650390bde88b</id>
<content type='text'>
</content>
</entry>
<entry>
<title>refactor: unify element params</title>
<updated>2026-05-02T01:27:23Z</updated>
<author>
<name>Maze Winther</name>
<email>mazewinther@gmail.com</email>
</author>
<published>2026-04-28T23:28:50Z</published>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/commit/?id=2ee0a44735d2b930348e9774909638b2c1909738'/>
<id>urn:sha1:2ee0a44735d2b930348e9774909638b2c1909738</id>
<content type='text'>
</content>
</entry>
<entry>
<title>chore: switch from biome to eslint + prettier; fix ton of lint issues</title>
<updated>2026-05-02T01:27:23Z</updated>
<author>
<name>Maze Winther</name>
<email>mazewinther@gmail.com</email>
</author>
<published>2026-04-28T22:37:56Z</published>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/commit/?id=a9b9cf6bf50f08723896659634f2e6afc17bcd42'/>
<id>urn:sha1:a9b9cf6bf50f08723896659634f2e6afc17bcd42</id>
<content type='text'>
</content>
</entry>
<entry>
<title>refactor: split animation helpers by domain</title>
<updated>2026-04-26T18:44:07Z</updated>
<author>
<name>Maze Winther</name>
<email>mazewinther@gmail.com</email>
</author>
<published>2026-04-26T18:44:07Z</published>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/commit/?id=6b1f38a9a31a0eedaa7abea70f232960469351d5'/>
<id>urn:sha1:6b1f38a9a31a0eedaa7abea70f232960469351d5</id>
<content type='text'>
</content>
</entry>
<entry>
<title>refactor: thinner hooks</title>
<updated>2026-04-26T15:31:28Z</updated>
<author>
<name>Maze Winther</name>
<email>mazewinther@gmail.com</email>
</author>
<published>2026-04-26T15:31:28Z</published>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/commit/?id=56ca09692a308b22455420d11376ff8d41244c47'/>
<id>urn:sha1:56ca09692a308b22455420d11376ff8d41244c47</id>
<content type='text'>
</content>
</entry>
<entry>
<title>refactor: split animation helpers by domain</title>
<updated>2026-04-26T02:04:30Z</updated>
<author>
<name>Maze Winther</name>
<email>mazewinther@gmail.com</email>
</author>
<published>2026-04-26T02:04:30Z</published>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/commit/?id=0b7597b31fa956c7f3d4838923b545ba5e341422'/>
<id>urn:sha1:0b7597b31fa956c7f3d4838923b545ba5e341422</id>
<content type='text'>
</content>
</entry>
</feed>
