<feed xmlns='http://www.w3.org/2005/Atom'>
<title>opencut/apps/web/src/services/renderer/compositor/frame-descriptor.ts, branch main</title>
<subtitle></subtitle>
<id>http://git.cashmere.rs/opencut/atom/apps/web/src/services/renderer/compositor/frame-descriptor.ts?h=main</id>
<link rel='self' href='http://git.cashmere.rs/opencut/atom/apps/web/src/services/renderer/compositor/frame-descriptor.ts?h=main'/>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/'/>
<updated>2026-08-09T00:37:37Z</updated>
<entry>
<title>feat: lens effects tab, standalone motion effects, clip/asset rename, preview popout</title>
<updated>2026-08-09T00:37:37Z</updated>
<author>
<name>cashmere</name>
<email>cashmere@autistici.org</email>
</author>
<published>2026-08-09T00:37:37Z</published>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/commit/?id=c555f1eaebff90749bdc543592cfa80a060b29e2'/>
<id>urn:sha1:c555f1eaebff90749bdc543592cfa80a060b29e2</id>
<content type='text'>
- New Lens category in the assets panel: Blur, Motion Blur, Zoom In/Out,
  Pan x4, Shake, Pulse, Spin, Custom Zoom. EffectDefinition gains a
  category field; tabs with an empty category are hidden, and the
  properties-panel 'Open effects' button opens the first non-empty one.
- Motion effects work standalone: dropping them on the timeline creates
  an effect-track element that animates (scale/translate/rotate) every
  track below it, computed purely in the TS frame descriptor - no wasm
  changes, identical in preview and export. supportsStandalone removed.
- Motion Blur: directional gaussian smear (amount + angle) reusing the
  existing WGSL shader with arbitrary u_direction.
- Custom Zoom: start/end scale params (keyframable clip-level).
- MotionOffset gains optional rotate, accumulated clip-level and applied
  to standalone layer quads via rotationDegrees.
- Rename clips (timeline context menu) and media assets (media panel
  context menu) via a shared RenameDialog; asset rename persists through
  storageService with rollback on error.
- Preview pops out into a Document Picture-in-Picture window and docks
  back; button hidden where the API is unsupported.
- Export keeps running when the export popover is closed; only the
  explicit Cancel button aborts.
- Captions and Adjustment tabs removed from the assets panel.
</content>
</entry>
<entry>
<title>fix: address review findings in masks substrate</title>
<updated>2026-05-02T01:27:23Z</updated>
<author>
<name>Maze Winther</name>
<email>mazewinther@gmail.com</email>
</author>
<published>2026-05-01T23:28:19Z</published>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/commit/?id=f66cdbfeb2e8b68e70e1f8595c38cacf58210ddf'/>
<id>urn:sha1:f66cdbfeb2e8b68e70e1f8595c38cacf58210ddf</id>
<content type='text'>
- Remove dead ternary in getPreferredEdges (always returned undefined; the
  all-false object was never reached by Object.values().some(Boolean))
- Document why drawWithFeather descriptors zero the feather field in the
  compositor (analytical renderer handles softness itself; zeroing prevents
  a second JFA feather pass)
- Remove legacyType from V30→V31 migration (not consumed anywhere; a
  down-migration can map type:"freeform" back to "custom" directly)
- Add V30→V31 test coverage: skip-guard branches, freeform passthrough,
  elements without a masks array
- Add snap tests for vertical-edge (bottom) and uniform-scale handle paths

Co-authored-by: Cursor &lt;cursoragent@cursor.com&gt;
</content>
</entry>
<entry>
<title>refactor: split builtin and freeform masks</title>
<updated>2026-05-02T01:27:23Z</updated>
<author>
<name>Maze Winther</name>
<email>mazewinther@gmail.com</email>
</author>
<published>2026-04-29T16:41:15Z</published>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/commit/?id=79dcec8a2ec2f5cad9be95e5b52fbfa752fb6ac4'/>
<id>urn:sha1:79dcec8a2ec2f5cad9be95e5b52fbfa752fb6ac4</id>
<content type='text'>
Made-with: Cursor
</content>
</entry>
<entry>
<title>refactor: make mask renderer dispatch explicit</title>
<updated>2026-05-02T01:27:23Z</updated>
<author>
<name>Maze Winther</name>
<email>mazewinther@gmail.com</email>
</author>
<published>2026-04-29T16:27:21Z</published>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/commit/?id=ae1292a14bf5c29544a5f7a49e65b994410f87de'/>
<id>urn:sha1:ae1292a14bf5c29544a5f7a49e65b994410f87de</id>
<content type='text'>
Made-with: Cursor
</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>perf: improve rendering performance by ~20x</title>
<updated>2026-04-22T14:48:37Z</updated>
<author>
<name>Maze Winther</name>
<email>mazewinther@gmail.com</email>
</author>
<published>2026-04-22T14:48:37Z</published>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/commit/?id=cceb835a84c125990ad8e49784e01a7c52636bb3'/>
<id>urn:sha1:cceb835a84c125990ad8e49784e01a7c52636bb3</id>
<content type='text'>
</content>
</entry>
<entry>
<title>chore: formatting</title>
<updated>2026-04-22T00:05:41Z</updated>
<author>
<name>Maze Winther</name>
<email>mazewinther@gmail.com</email>
</author>
<published>2026-04-22T00:05:41Z</published>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/commit/?id=a709af0059dae4702b52197f34af85a817c59a6a'/>
<id>urn:sha1:a709af0059dae4702b52197f34af85a817c59a6a</id>
<content type='text'>
</content>
</entry>
<entry>
<title>refactor: restructure files to their domains,  new preview overlay system, and dep graph</title>
<updated>2026-04-20T09:31:17Z</updated>
<author>
<name>Maze Winther</name>
<email>mazewinther@gmail.com</email>
</author>
<published>2026-04-20T09:31:17Z</published>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/commit/?id=3e89d2998588f8e35c524e523ba2ee853f0f6475'/>
<id>urn:sha1:3e89d2998588f8e35c524e523ba2ee853f0f6475</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat: text / custom masks, fix preview pan, refactor selection</title>
<updated>2026-04-15T13:45:50Z</updated>
<author>
<name>Maze Winther</name>
<email>mazewinther@gmail.com</email>
</author>
<published>2026-04-15T13:45:50Z</published>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/commit/?id=c46d28891fee62ca2d3132da876af6411a41d9da'/>
<id>urn:sha1:c46d28891fee62ca2d3132da876af6411a41d9da</id>
<content type='text'>
</content>
</entry>
<entry>
<title>refactor: rendering pipeline</title>
<updated>2026-04-13T03:08:29Z</updated>
<author>
<name>Maze Winther</name>
<email>mazewinther@gmail.com</email>
</author>
<published>2026-04-13T02:41:17Z</published>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/commit/?id=cad88ee4d1c9e06e7529b88ef5e5d3fdf3f89149'/>
<id>urn:sha1:cad88ee4d1c9e06e7529b88ef5e5d3fdf3f89149</id>
<content type='text'>
Made-with: Cursor
</content>
</entry>
</feed>
