MLP205: wait(frozen_frame=False) re-renders identical frames¶
qual reports MLP205 when a Scene.wait(frozen_frame=False) call
provably has zero dynamic content over its span — no scene updater, no stop
condition, no registered mobject updater of any arity, no object of a class
with intrinsic per-frame behavior (such as TracedPath), and no unknown
callback — yet forces the full per-frame pipeline for every frame.
- Default severity:
warning - Minimum confidence:
high - Implementation phase:
3 - Fix: none
Thresholds (documented constants in rules/performance/timing.rs):
MLP205_MIN_WAIT_SECONDS = 2.0— shorter static waits re-render few frames and are not worth a warning;MLP205_MIN_PIXEL_AREA = 1280 × 720— below 720p the redundant full-frame raster is cheap. Every analyzed profile must exceed it.
Any Maybe fact silences the rule: an updater registered on only some
paths, an unknown-kind object possibly in the family, an assigned
always_update_mobjects, or a branch-dependent wait. Freezing does not
shorten the video — the encoder still writes the full duration — it skips
the per-frame update, interpolation, and raster work.
Wrong¶
class Demo(Scene):
def construct(self):
square = Square()
self.add(square)
self.wait(3, frozen_frame=False)