feat(tools): 2.0 phase 5 wave 3a - video depth (22 tools) (#221)

This commit is contained in:
SnapOtter
2026-06-13 10:19:00 +08:00
parent 2f39e38162
commit 5f98b48593
109 changed files with 12086 additions and 838 deletions
+243 -1
View File
@@ -1,4 +1,4 @@
import { AUDIO_INPUTS, IMAGE_INPUTS, VIDEO_INPUTS } from "./modality.js";
import { AUDIO_INPUTS, IMAGE_INPUTS, SUBTITLE_INPUTS, VIDEO_INPUTS } from "./modality.js";
import type { CategoryInfo, SocialMediaPreset, Tool } from "./types.js";
export const CATEGORIES: CategoryInfo[] = [
@@ -666,6 +666,248 @@ export const TOOLS: Tool[] = [
acceptedInputs: VIDEO_INPUTS,
executionHint: "long",
},
{
id: "resize-video",
name: "Resize Video",
description: "Scale a video to a new resolution or preset size",
category: "video",
icon: "Scaling",
route: "/resize-video",
modality: "video",
acceptedInputs: VIDEO_INPUTS,
executionHint: "fast",
},
{
id: "crop-video",
name: "Crop Video",
description: "Crop a region out of a video",
category: "video",
icon: "Crop",
route: "/crop-video",
modality: "video",
acceptedInputs: VIDEO_INPUTS,
executionHint: "fast",
},
{
id: "rotate-video",
name: "Rotate Video",
description: "Rotate or flip a video",
category: "video",
icon: "RotateCw",
route: "/rotate-video",
modality: "video",
acceptedInputs: VIDEO_INPUTS,
executionHint: "fast",
},
{
id: "change-fps",
name: "Change FPS",
description: "Change the frame rate of a video",
category: "video",
icon: "Gauge",
route: "/change-fps",
modality: "video",
acceptedInputs: VIDEO_INPUTS,
executionHint: "fast",
},
{
id: "video-color",
name: "Video Color",
description: "Adjust brightness, contrast, saturation, and gamma",
category: "video",
icon: "SlidersHorizontal",
route: "/video-color",
modality: "video",
acceptedInputs: VIDEO_INPUTS,
executionHint: "fast",
},
{
id: "video-speed",
name: "Video Speed",
description: "Speed up or slow down a video",
category: "video",
icon: "FastForward",
route: "/video-speed",
modality: "video",
acceptedInputs: VIDEO_INPUTS,
executionHint: "fast",
},
{
id: "reverse-video",
name: "Reverse Video",
description: "Play a video clip backwards",
category: "video",
icon: "Rewind",
route: "/reverse-video",
modality: "video",
acceptedInputs: VIDEO_INPUTS,
executionHint: "fast",
},
{
id: "video-loudnorm",
name: "Normalize Audio",
description: "Normalize video audio volume to broadcast standard",
category: "video",
icon: "Volume2",
route: "/video-loudnorm",
modality: "video",
acceptedInputs: VIDEO_INPUTS,
executionHint: "fast",
},
{
id: "aspect-pad",
name: "Aspect Pad",
description: "Add solid-color bars to fit a target aspect ratio",
category: "video",
icon: "RectangleHorizontal",
route: "/aspect-pad",
modality: "video",
acceptedInputs: VIDEO_INPUTS,
executionHint: "fast",
},
{
id: "blur-pad",
name: "Blur Pad",
description: "Fill bars with a blurred copy of the video",
category: "video",
icon: "GalleryHorizontalEnd",
route: "/blur-pad",
modality: "video",
acceptedInputs: VIDEO_INPUTS,
executionHint: "fast",
},
{
id: "watermark-video",
name: "Watermark Video",
description: "Burn a text watermark onto video frames",
category: "video",
icon: "Stamp",
route: "/watermark-video",
modality: "video",
acceptedInputs: VIDEO_INPUTS,
executionHint: "fast",
},
{
id: "stabilize-video",
name: "Stabilize Video",
description: "Reduce camera shake with two-pass stabilization",
category: "video",
icon: "Anchor",
route: "/stabilize-video",
modality: "video",
acceptedInputs: VIDEO_INPUTS,
executionHint: "long",
},
{
id: "gif-to-video",
name: "GIF to Video",
description: "Convert an animated GIF into an MP4 or WebM video",
category: "video",
icon: "Film",
route: "/gif-to-video",
modality: "video",
acceptedInputs: [".gif"],
executionHint: "fast",
},
{
id: "video-to-webp",
name: "Video to WebP",
description: "Convert a video clip into an animated WebP image",
category: "video",
icon: "Image",
route: "/video-to-webp",
modality: "video",
acceptedInputs: VIDEO_INPUTS,
executionHint: "fast",
},
{
id: "video-to-frames",
name: "Video to Frames",
description: "Extract frames from a video as a ZIP of images",
category: "video",
icon: "Images",
route: "/video-to-frames",
modality: "video",
acceptedInputs: VIDEO_INPUTS,
executionHint: "fast",
},
{
id: "merge-videos",
name: "Merge Videos",
description: "Join multiple video clips into one file",
category: "video",
icon: "Combine",
route: "/merge-videos",
modality: "video",
acceptedInputs: VIDEO_INPUTS,
executionHint: "long",
},
{
id: "replace-audio",
name: "Replace Audio",
description: "Swap the audio track of a video with another file",
category: "video",
icon: "MicVocal",
route: "/replace-audio",
modality: "video",
acceptedInputs: [...VIDEO_INPUTS, ...AUDIO_INPUTS],
executionHint: "fast",
},
{
id: "burn-subtitles",
name: "Burn Subtitles",
description: "Permanently render subtitles onto video frames",
category: "video",
icon: "Captions",
route: "/burn-subtitles",
modality: "video",
acceptedInputs: [...VIDEO_INPUTS, ...SUBTITLE_INPUTS],
executionHint: "long",
},
{
id: "embed-subtitles",
name: "Embed Subtitles",
description: "Mux a subtitle track into the video container",
category: "video",
icon: "MessageSquareText",
route: "/embed-subtitles",
modality: "video",
acceptedInputs: [...VIDEO_INPUTS, ...SUBTITLE_INPUTS],
executionHint: "fast",
},
{
id: "extract-subtitles",
name: "Extract Subtitles",
description: "Pull the subtitle track out of a video as an SRT file",
category: "video",
icon: "FileText",
route: "/extract-subtitles",
modality: "video",
acceptedInputs: VIDEO_INPUTS,
executionHint: "fast",
},
{
id: "images-to-video",
name: "Images to Video",
description: "Turn a set of images into a slideshow video",
category: "video",
icon: "GalleryThumbnails",
route: "/images-to-video",
modality: "video",
acceptedInputs: IMAGE_INPUTS,
executionHint: "fast",
},
{
id: "video-metadata",
name: "Clean Video Metadata",
description: "Strip metadata from a video and report what was found",
category: "video",
icon: "Tags",
route: "/video-metadata",
modality: "video",
acceptedInputs: VIDEO_INPUTS,
executionHint: "fast",
},
// Audio
{
id: "convert-audio",