mirror of
https://github.com/OpenCut-app/OpenCut.git
synced 2026-07-13 21:52:53 +02:00
Add keyframe support for transform, opacity, and volume properties. Includes animation engine (interpolation, mutations, resolvers), timeline markers with selection/snapping, properties panel toggles, keyframe-aware renderer, and full undo/redo command support. Also refactor element command constructors to object params, extract timeline pixel math to pixel-utils.ts, and update cursor rules.
37 lines
904 B
TypeScript
37 lines
904 B
TypeScript
import type { CanvasRenderer } from "../canvas-renderer";
|
|
import { VisualNode, type VisualNodeParams } from "./visual-node";
|
|
import { videoCache } from "@/services/video-cache/service";
|
|
|
|
export interface VideoNodeParams extends VisualNodeParams {
|
|
url: string;
|
|
file: File;
|
|
mediaId: string;
|
|
}
|
|
|
|
export class VideoNode extends VisualNode<VideoNodeParams> {
|
|
async render({ renderer, time }: { renderer: CanvasRenderer; time: number }) {
|
|
await super.render({ renderer, time });
|
|
|
|
if (!this.isInRange(time)) {
|
|
return;
|
|
}
|
|
|
|
const videoTime = this.getSourceLocalTime(time);
|
|
const frame = await videoCache.getFrameAt({
|
|
mediaId: this.params.mediaId,
|
|
file: this.params.file,
|
|
time: videoTime,
|
|
});
|
|
|
|
if (frame) {
|
|
this.renderVisual({
|
|
renderer,
|
|
source: frame.canvas,
|
|
sourceWidth: frame.canvas.width,
|
|
sourceHeight: frame.canvas.height,
|
|
timelineTime: time,
|
|
});
|
|
}
|
|
}
|
|
}
|