<feed xmlns='http://www.w3.org/2005/Atom'>
<title>opencut/AGENTS.md, branch main</title>
<subtitle></subtitle>
<id>http://git.cashmere.rs/opencut/atom/AGENTS.md?h=main</id>
<link rel='self' href='http://git.cashmere.rs/opencut/atom/AGENTS.md?h=main'/>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/'/>
<updated>2026-07-30T18:12:09Z</updated>
<entry>
<title>build: replace flake with npins, add Nix packages for web and desktop</title>
<updated>2026-07-30T18:12:09Z</updated>
<author>
<name>cashmere</name>
<email>cashmere@autistici.org</email>
</author>
<published>2026-07-30T18:12:09Z</published>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/commit/?id=465071d8232e74b1690280a38a86d435269fc35d'/>
<id>urn:sha1:465071d8232e74b1690280a38a86d435269fc35d</id>
<content type='text'>
- npins pins nixpkgs-unstable + Inter font tarball; shell.nix replaces the flake devshell
- nix/bun-deps.nix: fixed-output bun install of the workspace (hash tied to bun.lock)
- nix/web.nix: static Next.js export; next/font/google patched to local Inter for offline builds
- nix/desktop.nix: tsc-built Electron app embedding the web export, wrapped with nixpkgs electron; ffmpeg-static satisfied by nixpkgs ffmpeg
</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>docs: record green baseline and quality gates</title>
<updated>2026-07-26T22:26:32Z</updated>
<author>
<name>cashmere</name>
<email>cashmere@autistici.org</email>
</author>
<published>2026-07-26T22:26:32Z</published>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/commit/?id=9988b884b381eebcfb66a4bbeb3aad5682612ba8'/>
<id>urn:sha1:9988b884b381eebcfb66a4bbeb3aad5682612ba8</id>
<content type='text'>
</content>
</entry>
<entry>
<title>chore: add justfile with common commands</title>
<updated>2026-07-26T20:42:07Z</updated>
<author>
<name>cashmere</name>
<email>cashmere@autistici.org</email>
</author>
<published>2026-07-26T20:41:44Z</published>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/commit/?id=2f5ff9fefbd968387edb1394377e26ea7df03cd5'/>
<id>urn:sha1:2f5ff9fefbd968387edb1394377e26ea7df03cd5</id>
<content type='text'>
Recipes wrap the documented bun/turbo/cargo/docker commands; 'just test
&lt;path&gt;' passes through to bun test, 'just dev' ensures .env.local exists.
just is added to the nix devshell so it is available after nix develop.
</content>
</entry>
<entry>
<title>docs: mark MediaPreview guard done in AGENTS.md</title>
<updated>2026-07-26T20:34:11Z</updated>
<author>
<name>cashmere</name>
<email>cashmere@autistici.org</email>
</author>
<published>2026-07-26T20:34:11Z</published>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/commit/?id=3e461c6fd62fcdb3c68a1fdda00bf7f060c09435'/>
<id>urn:sha1:3e461c6fd62fcdb3c68a1fdda00bf7f060c09435</id>
<content type='text'>
</content>
</entry>
<entry>
<title>docs: update AGENTS.md freeze-frame and testing notes</title>
<updated>2026-07-26T20:13:01Z</updated>
<author>
<name>cashmere</name>
<email>cashmere@autistici.org</email>
</author>
<published>2026-07-26T20:13:01Z</published>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/commit/?id=db3c7eee7e65831394787c47fbd41a4024537de4'/>
<id>urn:sha1:db3c7eee7e65831394787c47fbd41a4024537de4</id>
<content type='text'>
</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>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>
</feed>
