From 237248321a1a40b9b98e7e0a6df156d0aa247ef0 Mon Sep 17 00:00:00 2001 From: cashmere Date: Sun, 2 Aug 2026 19:59:32 +0200 Subject: feat: pan & zoom motion presets Ken Burns-style motion effects (zoom in/out, pan left/right/up/down) that drag onto clips like regular effects. Instead of shader passes they evaluate a per-frame transform offset in resolveVisualState, so they stack with keyframed transforms and work in preview and export. - intensity param (0-100%, keyframable) scales the whole effect - easing select maps progress through the graph editor's bezier presets - supportsStandalone: false hides them from effect-track creation - empty shader pass groups are filtered out so pass-less effects and zero-intensity blur no longer crash the compositor --- apps/web/src/timeline/controllers/drag-drop-controller.ts | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'apps/web/src/timeline/controllers') diff --git a/apps/web/src/timeline/controllers/drag-drop-controller.ts b/apps/web/src/timeline/controllers/drag-drop-controller.ts index a419101f..6c48428a 100644 --- a/apps/web/src/timeline/controllers/drag-drop-controller.ts +++ b/apps/web/src/timeline/controllers/drag-drop-controller.ts @@ -15,6 +15,7 @@ import { buildEffectElement, } from "@/timeline/element-utils"; import { AddTrackCommand, InsertElementCommand } from "@/commands/timeline"; +import { effectsRegistry } from "@/effects"; import { BatchCommand } from "@/commands"; import type { Command } from "@/commands/base-command"; import { computeDropTarget } from "@/timeline/components/drop-target"; @@ -470,6 +471,10 @@ export class DragDropController { return; } + if (effectsRegistry.get(dragData.effectType).supportsStandalone === false) { + return; + } + const element = buildEffectElement({ effectType: dragData.effectType, startTime: target.xPosition, -- cgit v1.3.1