feat(tools)!: SnapOtter 2.0 phase 4 wave 1: 45 core tools across all modalities (#219)

This commit is contained in:
SnapOtter
2026-06-13 10:18:49 +08:00
parent d647d8ed19
commit ae1337901d
115 changed files with 10026 additions and 924 deletions
+199 -4
View File
@@ -1,4 +1,4 @@
import { IMAGE_INPUTS } from "./modality.js";
import { AUDIO_INPUTS, IMAGE_INPUTS, VIDEO_INPUTS } from "./modality.js";
import type { CategoryInfo, SocialMediaPreset, Tool } from "./types.js";
export const CATEGORIES: CategoryInfo[] = [
@@ -9,6 +9,10 @@ export const CATEGORIES: CategoryInfo[] = [
{ id: "utilities", name: "Utilities", icon: "Wrench", color: "#6366F1" },
{ id: "layout", name: "Layout & Composition", icon: "LayoutGrid", color: "#EC4899" },
{ id: "format", name: "Format & Conversion", icon: "FileType", color: "#14B8A6" },
{ id: "video", name: "Video", icon: "Video", color: "#EF4444" },
{ id: "audio", name: "Audio", icon: "AudioLines", color: "#10B981" },
{ id: "documents", name: "PDF & Documents", icon: "FileText", color: "#8B5CF6" },
{ id: "data", name: "Data Files", icon: "Table", color: "#F59E0B" },
{ id: "ai", name: "AI Tools", icon: "Sparkles", color: "#F59E0B" },
];
@@ -599,11 +603,202 @@ export const TOOLS: Tool[] = [
id: "pdf-to-image",
name: "PDF to Image",
description: "Convert PDF pages to images",
category: "format",
category: "documents",
icon: "BookImage",
route: "/pdf-to-image",
modality: "image",
acceptedInputs: IMAGE_INPUTS,
modality: "document",
acceptedInputs: [".pdf"],
executionHint: "fast",
},
// Video
{
id: "convert-video",
name: "Convert Video",
description: "Convert videos between MP4, MOV, and WebM",
category: "video",
icon: "Video",
route: "/convert-video",
modality: "video",
acceptedInputs: VIDEO_INPUTS,
executionHint: "long",
},
{
id: "compress-video",
name: "Compress Video",
description: "Shrink video file size with quality control",
category: "video",
icon: "FileVideo",
route: "/compress-video",
modality: "video",
acceptedInputs: VIDEO_INPUTS,
executionHint: "long",
},
{
id: "trim-video",
name: "Trim Video",
description: "Cut a clip out of a video",
category: "video",
icon: "Scissors",
route: "/trim-video",
modality: "video",
acceptedInputs: VIDEO_INPUTS,
executionHint: "fast",
},
{
id: "mute-video",
name: "Mute Video",
description: "Remove the audio track from a video",
category: "video",
icon: "VolumeX",
route: "/mute-video",
modality: "video",
acceptedInputs: VIDEO_INPUTS,
executionHint: "fast",
},
{
id: "video-to-gif",
name: "Video to GIF",
description: "Turn a video clip into an animated GIF",
category: "video",
icon: "Film",
route: "/video-to-gif",
modality: "video",
acceptedInputs: VIDEO_INPUTS,
executionHint: "long",
},
// Audio
{
id: "convert-audio",
name: "Convert Audio",
description: "Convert audio between MP3, WAV, OGG, and more",
category: "audio",
icon: "AudioLines",
route: "/convert-audio",
modality: "audio",
acceptedInputs: AUDIO_INPUTS,
executionHint: "fast",
},
{
id: "trim-audio",
name: "Trim Audio",
description: "Cut a section out of an audio file",
category: "audio",
icon: "Scissors",
route: "/trim-audio",
modality: "audio",
acceptedInputs: AUDIO_INPUTS,
executionHint: "fast",
},
{
id: "extract-audio",
name: "Extract Audio",
description: "Pull the audio track out of a video",
category: "audio",
icon: "FileAudio",
route: "/extract-audio",
modality: "video",
acceptedInputs: VIDEO_INPUTS,
executionHint: "fast",
},
// PDF & Documents
{
id: "merge-pdf",
name: "Merge PDFs",
description: "Combine multiple PDFs into one",
category: "documents",
icon: "Combine",
route: "/merge-pdf",
modality: "document",
acceptedInputs: [".pdf"],
executionHint: "fast",
},
{
id: "split-pdf",
name: "Split PDF",
description: "Extract pages or split into parts",
category: "documents",
icon: "Split",
route: "/split-pdf",
modality: "document",
acceptedInputs: [".pdf"],
executionHint: "fast",
},
{
id: "compress-pdf",
name: "Compress PDF",
description: "Shrink PDF file size",
category: "documents",
icon: "FileArchive",
route: "/compress-pdf",
modality: "document",
acceptedInputs: [".pdf"],
executionHint: "fast",
},
{
id: "rotate-pdf",
name: "Rotate PDF",
description: "Rotate pages in a PDF",
category: "documents",
icon: "RotateCw",
route: "/rotate-pdf",
modality: "document",
acceptedInputs: [".pdf"],
executionHint: "fast",
},
{
id: "word-to-pdf",
name: "Word to PDF",
description: "Convert Word documents to PDF",
category: "documents",
icon: "FileText",
route: "/word-to-pdf",
modality: "document",
acceptedInputs: [".docx", ".doc", ".odt", ".rtf", ".txt"],
executionHint: "long",
},
// Data Files
{
id: "csv-excel",
name: "CSV to Excel",
description: "Convert between CSV and Excel (XLSX), both directions",
category: "data",
icon: "Table",
route: "/csv-excel",
modality: "file",
acceptedInputs: [".csv", ".xlsx"],
executionHint: "fast",
},
{
id: "csv-json",
name: "CSV to JSON",
description: "Convert between CSV and JSON, both directions",
category: "data",
icon: "Braces",
route: "/csv-json",
modality: "file",
acceptedInputs: [".csv", ".json"],
executionHint: "fast",
},
{
id: "json-xml",
name: "JSON to XML",
description: "Convert between JSON and XML, both directions",
category: "data",
icon: "Code",
route: "/json-xml",
modality: "file",
acceptedInputs: [".json", ".xml"],
executionHint: "fast",
},
{
id: "split-csv",
name: "Split CSV",
description: "Split a CSV into smaller files by row count",
category: "data",
icon: "Split",
route: "/split-csv",
modality: "file",
acceptedInputs: [".csv"],
executionHint: "fast",
},
];