Preview: playback steps down a resolution when it can't keep up

Settings > Previews > Lower Resolution When Playback Can't Keep Up (on by
default): a preview at Resolution Auto that stalls on uncached frames and
shows under 80 % of its frame rate for two seconds plays on at half the
scale, and two seconds later at a quarter if still slow, no lower than the
Adaptive Resolution Limit. Stopping goes back to the viewer's resolution
and Cache Frames When Idle fills it in. An explicit Resolution, the comp's
or the Preview panel's, is kept as set.

First playback of a 1080p comp with a blur (cache_bench --play): 9.0 to
22.1 frames/s on the CPU (about 27 once at Half), 4.1 to 16.1 with Mercury
Auto on an integrated GPU; plain clips that keep up stay at Full.
This commit is contained in:
nazar-gavrylyk committed 2026-11-10 15:03:10 +01:00
1 parent cc4f834a94
commit 893d9a0b04
8 files changed
+100 -1

No files matched your search

@@ -170,6 +170,7 @@ pub fn pages() -> Vec<Page> {
title: "Previews",
items: vec![
s("previews.adaptiveResolutionLimit", "Adaptive Resolution Limit", Kind::Choice(ON_OFF_RES), true),
s("previews.adaptivePlayback", "Lower Resolution When Playback Can't Keep Up", B, true),
s("previews.showInternalWireframes", "Show Internal Wireframes", B, true),
s("previews.cacheFramesWhenIdle", "Cache Frames When Idle", B, true),
s("previews.fastPreviews", "Fast Previews (Draft 3D, Faster Effects)", B, true),
@@ -92,6 +92,9 @@ page!(CompositionPrefs {
page!(Previews {
/// Largest downsampling while playing back: `1/2`, `1/4`, `1/8`.
adaptive_resolution_limit: String = "1/8".into(),
/// A preview at Resolution Auto that renders slower than real time steps down a resolution
/// (½, then ¼, no further than the Adaptive Resolution Limit) for the rest of that play.
adaptive_playback: bool = true,
show_internal_wireframes: bool = false,
cache_frames_when_idle: bool = true,
fast_previews: bool = false,