<feed xmlns='http://www.w3.org/2005/Atom'>
<title>opencut, branch rust-rewrite</title>
<subtitle></subtitle>
<id>http://git.cashmere.rs/opencut/atom/?h=rust-rewrite</id>
<link rel='self' href='http://git.cashmere.rs/opencut/atom/?h=rust-rewrite'/>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/'/>
<updated>2026-07-28T18:16:05Z</updated>
<entry>
<title>docs: session 1 wrap-up notes and resumption guide</title>
<updated>2026-07-28T18:16:05Z</updated>
<author>
<name>cashmere</name>
<email>cashmere@autistici.org</email>
</author>
<published>2026-07-28T18:16:05Z</published>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/commit/?id=395a688b2f463798a53d818332d513ab6f9be7aa'/>
<id>urn:sha1:395a688b2f463798a53d818332d513ab6f9be7aa</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat: port domain crates to Rust (session 1 complete)</title>
<updated>2026-07-28T18:14:51Z</updated>
<author>
<name>cashmere</name>
<email>cashmere@autistici.org</email>
</author>
<published>2026-07-28T18:14:51Z</published>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/commit/?id=32438ce25f69de99d2523b98237f62cfa90890d7'/>
<id>urn:sha1:32438ce25f69de99d2523b98237f62cfa90890d7</id>
<content type='text'>
All green: cargo test --workspace (~300 tests, 0 failures).
- timeline (45): placement, resize/ripple, split, snap, retime,
  audio separation, scene helpers
- animation (73): bezier solver, channel sampling, keyframe ops,
  split/clamp/clone, param definitions
- commands (9): Command trait, BatchCommand, history, 19 concrete
  commands, freeze-frame port 1:1
- audio (22): audible collection, range mixing, mastering limiter,
  rms/peak buckets
- text (19): cosmic-text layout/measure/raster, backgrounds,
  decorations
- graphics (52): full CSS gradient parser, tiny-skia raster,
  4 shape definitions
- effect-defs (16): blur definition, registry, pass resolution
- mask-defs (19): all 9 mask renderers via tiny-skia
- renderer (6): node model + scene builder port
- desktop: GPUI projects screen wired to ProjectStore
- scene: factory (web defaults: v32, Main Track, 1920x1080, 30fps)
</content>
</entry>
<entry>
<title>feat: GPUI desktop port foundation</title>
<updated>2026-07-28T17:41:16Z</updated>
<author>
<name>cashmere</name>
<email>cashmere@autistici.org</email>
</author>
<published>2026-07-28T17:41:16Z</published>
<link rel='alternate' type='text/html' href='http://git.cashmere.rs/opencut/commit/?id=f5a82152394fde4d8f740f664ab7737b82861618'/>
<id>urn:sha1:f5a82152394fde4d8f740f664ab7737b82861618</id>
<content type='text'>
- scene crate: full project/scene/element model, serde round-trip
  proven against the web SerializedProject shape
- transfer crate: .ocp zip container, cross-compat with web fflate
  archives proven in both directions
- storage crate: filesystem project store replacing IndexedDB,
  .ocp import/export
- media crate: ffmpeg-next 8 decoder (frames, audio, thumbnails,
  waveform summaries)
- playback crate: wall-clock anchored, frame-rounded playback clock
- gpu crate: native texture readback; compositor renders headless
  offscreen on Vulkan (spike test)
- flake devshell: rust toolchain, GPUI native deps, ffmpeg dev,
  bindgen clang args; GPUI hello-world builds
- port plan in notes/gpui-port.md
</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>
