Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions technical-documentation/architecture/export-pipeline.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,13 @@ leave the native process. Performance numbers, the bench, and the rejected
alternatives that drove the design live in
[engineering/rendering-performance.md](../engineering/rendering-performance.md).

GIF is out of scope here: it has no native encoder yet, so it keeps its own
dedicated code path in `src/lib/exporter/gifExporter.ts` — the one format
the document adapter still renders in the renderer.
GIF also uses the native compositor. `ExportDialog` calls `exportGifNative`
in [`compositorViewClient.ts`](../../src/native/compositorViewClient.ts), then
`compositorViewService.exportGif` forwards the clips, scene and export settings
to the addon's `exportGif`. The Rust
[`gif_export.rs`](../../crates/compositor/src/gif_export.rs) walks the same
composited timeline as MP4, then encodes the rendered frames as GIF. The
renderer watches progress for both formats; it no longer renders GIF frames.

```mermaid
flowchart LR
Expand Down Expand Up @@ -289,4 +293,4 @@ had `speedRegions: 0, zoomRegions: 0` while the real timeline held two 3× speed
regions and a 1.80× zoom. Truncating to the valid prefix would have returned a
project that opened cleanly and was silently stripped of its effects. **A partial
document that parses is more dangerous than one that does not** — which is why the
loader rejects rather than salvages.
loader rejects rather than salvages.
Loading