save_beam re-encoded every resident raster keyframe to PNG (+ proxy) on every save, even untouched frames — the dominant per-save cost for painting/animation projects (the code noted this as deferred "Phase 3"). The infrastructure to do it incrementally already exists: kf.dirty means "current pixels not yet in the container" (set on any edit, cleared on a successful save, per main.rs), and it's preserved in the document clone the save worker receives. Gate the encode on it: a clean keyframe already stored keeps its full + proxy rows untouched; only dirty (or not-yet-stored) frames are re-encoded. Media blobs were already incremental; this closes the raster gap. No new data-loss risk: the mid-save-edit race (edit between the document clone and save completion) is pre-existing and identical to the old full-write path. |
||
|---|---|---|
| .. | ||
| assets/fonts | ||
| src | ||
| tests | ||
| Cargo.toml | ||