docs(cli): the streaming duration cap is off by default; document the flag

Explains which routes still write raw RGBA frames to disk and what the
preflight error is telling the user, and records that
PRODUCER_STREAMING_ENCODE_MAX_DURATION_SECONDS (including its 0 = "never
stream" setting) is inert unless the new enable flag is set.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Vance Ingalls
2026-09-17 17:14:41 -07:00
co-authored by Claude Opus 5
parent ac946ef11b
commit c038b087e1
+20
View File
@@ -927,6 +927,26 @@ does not.
becomes a floor and disables that scaling below it. Env:
`PRODUCER_PUPPETEER_PROTOCOL_TIMEOUT_MS`.
#### Long renders and the capture path
Captured frames either stream into FFmpeg as they arrive or land on disk first
as raw RGBA, which costs `frames × width × height × 4` bytes — about 25 GB per
minute at 1080p30. Streaming is the default for single-worker mp4/mov renders
**at any duration**: the old four-minute ceiling guarded an FFmpeg timeout that
is now per-frame rather than whole-render, so it no longer applies.
Renders still land on the disk path when the output is `png-sequence` or `gif`,
when HDR or shader-transition layering is in play, with more than one worker, or
when streaming is switched off. If a render fails preflight asking for tens of
GB of temporary frame storage, the message names which of those applied; the
usual fixes are `--workers 1`, `--low-memory-mode`, or freeing disk.
| Environment variable | Default | Effect |
| ------------------------------------------------ | ------- | ----------------------------------------------------------------------------------------- |
| `PRODUCER_ENABLE_STREAMING_ENCODE` | `true` | `false` sends every render to the disk path |
| `PRODUCER_STREAMING_ENCODE_DURATION_CAP_ENABLED` | `false` | `true` restores the duration ceiling below |
| `PRODUCER_STREAMING_ENCODE_MAX_DURATION_SECONDS` | `240` | The ceiling's value; inert unless the flag above is `true`, including the `0` ("never") setting |
#### Render the same composition with different content
Declare the variables on the composition root, read them inside it, then