#3335: document EFFECTCRAFT_RQ_RENDERER and the Render Queue's per-job compositor choice

architecture.md and web.md still said every job renders on the project's
renderer (#414); since #3335 a GPU job times both compositors on its first
frames and keeps the faster.
This commit is contained in:
arnav-hiwarkar committed 2026-11-11 11:22:23 +05:30
1 parent f35392cd3e
commit 861c65ab26
3 files changed
+14 -7

No files matched your search

+6 -3
View File
@@ -340,10 +340,13 @@ whichever compositor measured faster for it (`render::auto::AutoPick`, kept by t
per comp, output scale and path (readback or viewer display) it averages CPU and GPU frame times
(warm-up on both sides, the fastest warm-up frame starting the average, single stalls capped),
picks the GPU unless the CPU is clearly faster, and re-measures the other side every 48 frames.
Render Queue jobs don't use Auto: every frame of a job renders on the project's renderer (the
GPU compositor with GPU Acceleration), so runs of a render don't differ by timing.
Light comps (a few small layers, which the CPU composites only within their bounds) then stay on
the CPU instead of paying for full-frame passes and a readback. A GPU frame walks the comp like
the CPU instead of paying for full-frame passes and a readback. Render Queue jobs don't use
Auto per frame: a job renders every frame on one compositor, never a mix (#3335). A GPU
Acceleration job with an accelerator times both on its first frames
(`export::pipeline::Cx::probe`, jobs of 12 frames or more) and keeps the faster, the CPU only
when clearly faster; `EFFECTCRAFT_RQ_RENDERER=gpu|cpu` fixes the choice, and readback-deferred
accelerators (the web) render on the project's renderer. A GPU frame walks the comp like
`draw_comp`: cached layer buffers are uploaded once per buffer, then transformed with the CPU's
sampling (nearest, bilinear, Catmull-Rom bicubic, the same minification pre-filter), motion-blur
sub-samples are accumulated, and track mattes, Preserve Transparency, layer style passes,
+5 -1
View File
@@ -105,7 +105,11 @@ Commands (CLI, MCP, control channel):
flight of every Render Queue render and export, `effectcraft-cli render` included
([#1615](https://github.com/storytold/effectcraft/issues/1615)); previews don't read it. One
exception: while a job on GPU Acceleration times both compositors on its first frames, it
renders them under the cap but keeps them all (up to 12) until it has chosen.
renders them under the cap but keeps them all (up to 12) until it has chosen. That timing
picks the compositor that a job of 12 frames or more renders every frame on (the render log
names it and why). `EFFECTCRAFT_RQ_RENDERER` set to `gpu` or `cpu` skips it and renders on
that compositor; `auto` (the default) measures. A queue item's later output modules reuse its
first one's choice, and Software Rendering projects always render on the CPU.
- `threeD.defaultRenderer`: Default 3D Renderer
- `labels.N.name` / `labels.N.color`: the 16 label names and colours, used by the Label menu,
the timeline, project panel, render queue and viewer handles
+3 -3
View File
@@ -173,9 +173,9 @@ the same futures with `passes::block_on`; they never wait there).
- **Render Queue**: `effectcraft_export::export_async` renders each frame in passes (frames
with deferred readbacks render one by one instead of in parallel batches) and encodes as
before (`Exporter::export_async`). As on the desktop, a job renders every frame on the
project's renderer (the worker's GPU with GPU Acceleration), not on whichever
compositor measured faster, so runs don't differ by timing.
before (`Exporter::export_async`). Unlike the desktop, which times both compositors on a
job's first frames and keeps the faster, a job renders every frame on the project's renderer
(the worker's GPU with GPU Acceleration), so runs don't differ by timing.
- **Analyses** (Warp Stabilizer, 3D Camera Tracker, Track Motion, mask and face tracking, Roto
Brush freeze and propagation): their work functions are `async`; started with `wait` inside
a job they are queued and awaited (`offload::run_or_queue`), and each input frame renders in