From 9230d4e3ebeea9b58ddb25f991faf5ceaffceca8 Mon Sep 17 00:00:00 2001 From: shrimbly Date: Wed, 15 Apr 2026 15:20:29 +1200 Subject: [PATCH] feat: add download buttons to all media-displaying nodes Extract shared downloadMedia utility from OutputNode and add download buttons to ImageInput, VideoInput, Annotation, AudioInput, GenerateImage, GenerateVideo, GenerateAudio, and GLBViewer nodes. Refactor OutputNode to use the shared utility. Co-Authored-By: Claude Opus 4.6 --- src/components/nodes/AnnotationNode.tsx | 12 +++ src/components/nodes/AudioInputNode.tsx | 11 +++ src/components/nodes/GLBViewerNode.tsx | 21 +++-- src/components/nodes/GenerateAudioNode.tsx | 11 +++ src/components/nodes/GenerateImageNode.tsx | 14 +++- src/components/nodes/GenerateVideoNode.tsx | 14 +++- src/components/nodes/ImageInputNode.tsx | 10 +++ src/components/nodes/OutputNode.tsx | 38 +-------- src/components/nodes/VideoInputNode.tsx | 10 +++ src/utils/downloadMedia.ts | 94 ++++++++++++++++++++++ 10 files changed, 190 insertions(+), 45 deletions(-) create mode 100644 src/utils/downloadMedia.ts diff --git a/src/components/nodes/AnnotationNode.tsx b/src/components/nodes/AnnotationNode.tsx index 34b9d4dd..cb8cbc73 100644 --- a/src/components/nodes/AnnotationNode.tsx +++ b/src/components/nodes/AnnotationNode.tsx @@ -7,6 +7,7 @@ import { useAnnotationStore } from "@/store/annotationStore"; import { useWorkflowStore } from "@/store/workflowStore"; import { AnnotationNodeData } from "@/types"; import { useAdaptiveImageSrc } from "@/hooks/useAdaptiveImageSrc"; +import { downloadMedia } from "@/utils/downloadMedia"; type AnnotationNodeType = Node; @@ -130,6 +131,17 @@ export function AnnotationNode({ id, data, selected }: NodeProps + {/* Remove button */} +
+ + +
; @@ -414,6 +415,16 @@ export function GenerateAudioNode({ id, data, selected }: NodeProps + {/* Download button */} + {/* Clear button */}