diff --git a/src/components/media/CustomVideoPlayer.tsx b/src/components/media/CustomVideoPlayer.tsx index de2bf38f..483700eb 100644 --- a/src/components/media/CustomVideoPlayer.tsx +++ b/src/components/media/CustomVideoPlayer.tsx @@ -20,7 +20,7 @@ interface CustomVideoPlayerProps { duration: number | null; dimensions: { width: number; height: number } | null; }) => void; - onCaptureFrame?: (frame: { time: number; mode: CaptureFrameMode }) => Promise | void; + onCaptureFrame?: (frame: { time: number }) => Promise | void; onError?: () => void; } @@ -228,7 +228,7 @@ export function CustomVideoPlayer({ : mode === "last" ? Math.max(0, videoDuration - 0.1) : video.currentTime; - await onCaptureFrame({ time, mode }); + await onCaptureFrame({ time }); } finally { setIsCaptureLoading(false); } diff --git a/src/components/nodes/GenerateVideoNode.tsx b/src/components/nodes/GenerateVideoNode.tsx index a8e7814b..c6d5bb26 100644 --- a/src/components/nodes/GenerateVideoNode.tsx +++ b/src/components/nodes/GenerateVideoNode.tsx @@ -335,14 +335,12 @@ export function GenerateVideoNodeView({ id, data, selected, suppressEmptyStateDe const handleCaptureFrame = useCallback(async (frame: { time: number; - mode: "first" | "last" | "current"; }) => { const currentNode = getNodeById(id); if (!currentNode) return; await createVideoFrameSmartImageNode({ sourceNode: currentNode, time: frame.time, - mode: frame.mode, addNode, onConnect, selectSingleNode, diff --git a/src/components/nodes/VideoInputNode.tsx b/src/components/nodes/VideoInputNode.tsx index f92ab77f..cd875b66 100644 --- a/src/components/nodes/VideoInputNode.tsx +++ b/src/components/nodes/VideoInputNode.tsx @@ -253,14 +253,12 @@ export function VideoInputNodeView({ id, data, selected }: VideoInputNodeViewPro const hasVideoAsset = Boolean(nodeData.video || previewVideoPoster); const handleCaptureFrame = useCallback(async (frame: { time: number; - mode: "first" | "last" | "current"; }) => { const currentNode = getNodeById(id); if (!currentNode) return; await createVideoFrameSmartImageNode({ sourceNode: currentNode, time: frame.time, - mode: frame.mode, addNode, onConnect, selectSingleNode, diff --git a/src/store/execution/derivedImageExecutor.ts b/src/store/execution/derivedImageExecutor.ts index bdd68808..503d3b59 100644 --- a/src/store/execution/derivedImageExecutor.ts +++ b/src/store/execution/derivedImageExecutor.ts @@ -13,7 +13,6 @@ import type { NodeExecutionContext } from "./types"; type VideoFrameDerivedTask = { time: number; - mode: "first" | "last" | "current"; }; function isCropTask(value: unknown): value is DerivedImageCropTask { @@ -40,9 +39,7 @@ function isSplitGridTask(value: unknown): value is DerivedImageSplitGridTask { function isVideoFrameTask(value: unknown): value is VideoFrameDerivedTask { if (!value || typeof value !== "object") return false; const task = value as VideoFrameDerivedTask; - return typeof task.time === "number" && - Number.isFinite(task.time) && - (task.mode === "first" || task.mode === "last" || task.mode === "current"); + return typeof task.time === "number" && Number.isFinite(task.time); } async function createSplitGridCellBlob( diff --git a/src/types/nodes.ts b/src/types/nodes.ts index ee0e018d..5ea61797 100644 --- a/src/types/nodes.ts +++ b/src/types/nodes.ts @@ -94,7 +94,6 @@ export interface DerivedMediaInfo { operation: "videoFrame"; task?: { time: number; - mode: "first" | "last" | "current"; }; } diff --git a/src/utils/__tests__/videoFrameNode.test.ts b/src/utils/__tests__/videoFrameNode.test.ts index e398ef63..9dabcfb2 100644 --- a/src/utils/__tests__/videoFrameNode.test.ts +++ b/src/utils/__tests__/videoFrameNode.test.ts @@ -22,7 +22,6 @@ describe("createVideoFrameSmartImageNode", () => { style: { width: 300 }, } as any, time: 1.25, - mode: "current", addNode, onConnect, selectSingleNode, @@ -39,7 +38,6 @@ describe("createVideoFrameSmartImageNode", () => { operation: "videoFrame", task: { time: 1.25, - mode: "current", }, }, })); @@ -50,7 +48,6 @@ describe("createVideoFrameSmartImageNode", () => { operation: "videoFrame", task: { time: 1.25, - mode: "current", }, }); expect(onConnect).toHaveBeenCalledWith({ diff --git a/src/utils/videoFrameCapture.ts b/src/utils/videoFrameCapture.ts index 407466db..6d0b172d 100644 --- a/src/utils/videoFrameCapture.ts +++ b/src/utils/videoFrameCapture.ts @@ -15,7 +15,7 @@ function canvasToBlob(canvas: HTMLCanvasElement): Promise { }); } -export async function captureFrameFromVideoElement(video: HTMLVideoElement): Promise { +async function captureFrameFromVideoElement(video: HTMLVideoElement): Promise { if (!video.videoWidth || !video.videoHeight) { throw new Error("Video frame is not ready"); } diff --git a/src/utils/videoFrameNode.ts b/src/utils/videoFrameNode.ts index c52842b9..23be3cd8 100644 --- a/src/utils/videoFrameNode.ts +++ b/src/utils/videoFrameNode.ts @@ -2,8 +2,6 @@ import type { NodeType, SmartImageNodeData, WorkflowNode } from "@/types"; import type { Connection } from "@xyflow/react"; import { SINGLE_INPUT_HANDLE_ID, SINGLE_OUTPUT_HANDLE_ID } from "@/utils/nodeHandles"; -export type VideoFrameCaptureMode = "first" | "last" | "current"; - type AddNode = ( type: NodeType, position: { x: number; y: number }, @@ -18,7 +16,6 @@ function getNodeWidth(node: WorkflowNode): number { export async function createVideoFrameSmartImageNode({ sourceNode, time, - mode, addNode, onConnect, selectSingleNode, @@ -26,7 +23,6 @@ export async function createVideoFrameSmartImageNode({ }: { sourceNode: WorkflowNode; time: number; - mode: VideoFrameCaptureMode; addNode: AddNode; onConnect: (connection: Connection) => void; selectSingleNode: (nodeId: string) => void; @@ -50,7 +46,6 @@ export async function createVideoFrameSmartImageNode({ operation: "videoFrame", task: { time, - mode, }, }, status: "loading",