fix: crop keyframes and position apply to random portrait/square exports

Keyframes were skipped when ratio was None (random mode), and random
crop was overwriting the resolved center with base_center. Now
keyframes resolve the center for all jobs first, then random crop
assigns the ratio while preserving the per-job center.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-13 23:55:06 +02:00
parent 12b06e8144
commit a6b91d9d3f
+2 -4
View File
@@ -2741,8 +2741,6 @@ class MainWindow(QMainWindow):
# at or before its start time (keyframes set in lock mode). # at or before its start time (keyframes set in lock mode).
if self._crop_keyframes: if self._crop_keyframes:
for i, (s, o, r, c) in enumerate(jobs): for i, (s, o, r, c) in enumerate(jobs):
if r is None:
continue # no crop → skip
center = base_center center = base_center
for kt, kc in self._crop_keyframes: for kt, kc in self._crop_keyframes:
if kt <= s + 0.05: if kt <= s + 0.05:
@@ -2766,8 +2764,8 @@ class MainWindow(QMainWindow):
else: else:
ratios = ["1:1"] ratios = ["1:1"]
for idx in indices: for idx in indices:
s, o, _, _ = jobs[idx] s, o, _, c = jobs[idx]
jobs[idx] = (s, o, random.choice(ratios), base_center) jobs[idx] = (s, o, random.choice(ratios), c)
# Subject tracking: re-detect crop center per sub-clip. # Subject tracking: re-detect crop center per sub-clip.
if self._chk_track.isChecked() and any(j[2] for j in jobs): if self._chk_track.isChecked() and any(j[2] for j in jobs):