diff --git a/technical-documentation/architecture/export-pipeline.md b/technical-documentation/architecture/export-pipeline.md index 8d773d99f5..b1c99de54e 100644 --- a/technical-documentation/architecture/export-pipeline.md +++ b/technical-documentation/architecture/export-pipeline.md @@ -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 @@ -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. \ No newline at end of file +loader rejects rather than salvages.