Merge pull request #3433 from arnav-hiwarkar/docs/render-queue-env-followup

Docs: scope EFFECTCRAFT_CPU_INFLIGHT to exports, document EFFECTCRAFT_RQ_RENDERER
This commit is contained in:
ash
2026-11-11 13:20:22 +05:30
committed by GitHub
3 changed files with 17 additions and 10 deletions
+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,
+8 -4
View File
@@ -102,10 +102,14 @@ Commands (CLI, MCP, control channel):
`EFFECTCRAFT_GPU_INFLIGHT` overrides it. CPU renders have no such setting: they keep one
frame per thread in flight, so their memory grows with the core count. Set
`EFFECTCRAFT_CPU_INFLIGHT` to a whole number of frames (at least 1) to cap the frames in
flight of every render, `effectcraft-cli render` included
([#1615](https://github.com/storytold/effectcraft/issues/1615)). 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.
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. 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