refactor(shared): modality-scoped tool categories, dissolve ai category

Replace the flat 12-category structure with 27 modality-scoped
sub-categories. The cross-modality "ai" category is dissolved: each
AI tool moves into its natural modality's sub-category (e.g.
remove-background -> image/enhance, auto-subtitles -> video/subtitles,
ocr -> documents/convert, transcribe-audio -> audio/convert).

New category hierarchy:
- Image (8): essentials, adjustments, enhance, watermark, layout,
  utilities, optimization, format
- Video (5): video-edit, video-convert, video-effects,
  video-subtitles, video-metadata
- Audio (4): audio-edit, audio-convert, audio-effects, audio-metadata
- Documents (5): pdf-organize, pdf-edit, pdf-security, pdf-optimize,
  doc-convert
- Data (2): data, archives

No tool IDs, routes, or backend behavior changed. Category labels
updated across all 21 locales.
This commit is contained in:
SnapOtter
2026-06-13 14:45:06 +08:00
parent 492da820f8
commit 7daaa11e7d
23 changed files with 532 additions and 241 deletions
+127 -110
View File
@@ -2,18 +2,35 @@ import { AUDIO_INPUTS, IMAGE_INPUTS, SUBTITLE_INPUTS, VIDEO_INPUTS } from "./mod
import type { CategoryInfo, SocialMediaPreset, Tool } from "./types.js"; import type { CategoryInfo, SocialMediaPreset, Tool } from "./types.js";
export const CATEGORIES: CategoryInfo[] = [ export const CATEGORIES: CategoryInfo[] = [
// Image
{ id: "essentials", name: "Essentials", icon: "Layers", color: "#3B82F6" }, { id: "essentials", name: "Essentials", icon: "Layers", color: "#3B82F6" },
{ id: "optimization", name: "Optimization", icon: "Zap", color: "#10B981" },
{ id: "adjustments", name: "Adjustments", icon: "SlidersHorizontal", color: "#8B5CF6" }, { id: "adjustments", name: "Adjustments", icon: "SlidersHorizontal", color: "#8B5CF6" },
{ id: "enhance", name: "Enhance & AI", icon: "Sparkles", color: "#F59E0B" },
{ id: "watermark", name: "Watermark & Overlay", icon: "Stamp", color: "#EF4444" }, { id: "watermark", name: "Watermark & Overlay", icon: "Stamp", color: "#EF4444" },
{ id: "utilities", name: "Utilities", icon: "Wrench", color: "#6366F1" },
{ id: "layout", name: "Layout & Composition", icon: "LayoutGrid", color: "#EC4899" }, { id: "layout", name: "Layout & Composition", icon: "LayoutGrid", color: "#EC4899" },
{ id: "utilities", name: "Utilities", icon: "Wrench", color: "#6366F1" },
{ id: "optimization", name: "Optimization", icon: "Zap", color: "#10B981" },
{ id: "format", name: "Format & Conversion", icon: "FileType", color: "#14B8A6" }, { id: "format", name: "Format & Conversion", icon: "FileType", color: "#14B8A6" },
{ id: "video", name: "Video", icon: "Video", color: "#EF4444" }, // Video
{ id: "audio", name: "Audio", icon: "AudioLines", color: "#10B981" }, { id: "video-edit", name: "Edit", icon: "Video", color: "#EF4444" },
{ id: "documents", name: "PDF & Documents", icon: "FileText", color: "#8B5CF6" }, { id: "video-convert", name: "Convert", icon: "FileVideo", color: "#F97316" },
{ id: "video-effects", name: "Effects & Compose", icon: "Wand2", color: "#EC4899" },
{ id: "video-subtitles", name: "Subtitles", icon: "Captions", color: "#8B5CF6" },
{ id: "video-metadata", name: "Metadata", icon: "Tags", color: "#6366F1" },
// Audio
{ id: "audio-edit", name: "Edit", icon: "AudioLines", color: "#10B981" },
{ id: "audio-convert", name: "Convert", icon: "FileAudio", color: "#14B8A6" },
{ id: "audio-effects", name: "Effects & Compose", icon: "Waves", color: "#06B6D4" },
{ id: "audio-metadata", name: "Metadata", icon: "Tags", color: "#6366F1" },
// Documents
{ id: "pdf-organize", name: "Organize", icon: "FolderOpen", color: "#8B5CF6" },
{ id: "pdf-edit", name: "Edit & Annotate", icon: "PenLine", color: "#3B82F6" },
{ id: "pdf-security", name: "Security", icon: "Lock", color: "#EF4444" },
{ id: "pdf-optimize", name: "Optimize", icon: "Zap", color: "#10B981" },
{ id: "doc-convert", name: "Convert", icon: "FileType", color: "#14B8A6" },
// Data & Files
{ id: "data", name: "Data Files", icon: "Table", color: "#F59E0B" }, { id: "data", name: "Data Files", icon: "Table", color: "#F59E0B" },
{ id: "ai", name: "AI Tools", icon: "Sparkles", color: "#F59E0B" }, { id: "archives", name: "Archives", icon: "FolderArchive", color: "#6366F1" },
]; ];
export const TOOLS: Tool[] = [ export const TOOLS: Tool[] = [
@@ -186,12 +203,12 @@ export const TOOLS: Tool[] = [
acceptedInputs: IMAGE_INPUTS, acceptedInputs: IMAGE_INPUTS,
executionHint: "fast", executionHint: "fast",
}, },
// AI Tools // Enhance & AI
{ {
id: "remove-background", id: "remove-background",
name: "Remove Background", name: "Remove Background",
description: "AI-powered background removal", description: "AI-powered background removal",
category: "ai", category: "enhance",
icon: "Eraser", icon: "Eraser",
route: "/remove-background", route: "/remove-background",
modality: "image", modality: "image",
@@ -202,7 +219,7 @@ export const TOOLS: Tool[] = [
id: "upscale", id: "upscale",
name: "Image Upscaling", name: "Image Upscaling",
description: "AI super-resolution enhancement", description: "AI super-resolution enhancement",
category: "ai", category: "enhance",
icon: "ZoomIn", icon: "ZoomIn",
route: "/upscale", route: "/upscale",
modality: "image", modality: "image",
@@ -213,7 +230,7 @@ export const TOOLS: Tool[] = [
id: "erase-object", id: "erase-object",
name: "Object Eraser", name: "Object Eraser",
description: "Remove unwanted objects with AI", description: "Remove unwanted objects with AI",
category: "ai", category: "enhance",
icon: "Wand", icon: "Wand",
route: "/erase-object", route: "/erase-object",
modality: "image", modality: "image",
@@ -224,7 +241,7 @@ export const TOOLS: Tool[] = [
id: "ocr", id: "ocr",
name: "OCR / Text Extraction", name: "OCR / Text Extraction",
description: "Extract text from images", description: "Extract text from images",
category: "ai", category: "doc-convert",
icon: "ScanText", icon: "ScanText",
route: "/ocr", route: "/ocr",
modality: "image", modality: "image",
@@ -235,7 +252,7 @@ export const TOOLS: Tool[] = [
id: "ocr-pdf", id: "ocr-pdf",
name: "PDF OCR", name: "PDF OCR",
description: "Extract text from PDF documents using AI-powered OCR", description: "Extract text from PDF documents using AI-powered OCR",
category: "ai", category: "doc-convert",
icon: "ScanText", icon: "ScanText",
route: "/ocr-pdf", route: "/ocr-pdf",
modality: "document", modality: "document",
@@ -246,7 +263,7 @@ export const TOOLS: Tool[] = [
id: "blur-faces", id: "blur-faces",
name: "Face / PII Blur", name: "Face / PII Blur",
description: "Auto-detect and blur faces and sensitive info", description: "Auto-detect and blur faces and sensitive info",
category: "ai", category: "enhance",
icon: "EyeOff", icon: "EyeOff",
route: "/blur-faces", route: "/blur-faces",
modality: "image", modality: "image",
@@ -257,7 +274,7 @@ export const TOOLS: Tool[] = [
id: "smart-crop", id: "smart-crop",
name: "Smart Crop", name: "Smart Crop",
description: "Smart subject, face, or trim-based cropping", description: "Smart subject, face, or trim-based cropping",
category: "ai", category: "enhance",
icon: "Crosshair", icon: "Crosshair",
route: "/smart-crop", route: "/smart-crop",
modality: "image", modality: "image",
@@ -268,7 +285,7 @@ export const TOOLS: Tool[] = [
id: "image-enhancement", id: "image-enhancement",
name: "Image Enhancement", name: "Image Enhancement",
description: "One-click auto-improve with smart analysis", description: "One-click auto-improve with smart analysis",
category: "ai", category: "enhance",
icon: "Sparkles", icon: "Sparkles",
route: "/image-enhancement", route: "/image-enhancement",
modality: "image", modality: "image",
@@ -279,7 +296,7 @@ export const TOOLS: Tool[] = [
id: "enhance-faces", id: "enhance-faces",
name: "Face Enhancement", name: "Face Enhancement",
description: "Restore and enhance faces with AI", description: "Restore and enhance faces with AI",
category: "ai", category: "enhance",
icon: "ScanFace", icon: "ScanFace",
route: "/enhance-faces", route: "/enhance-faces",
modality: "image", modality: "image",
@@ -290,7 +307,7 @@ export const TOOLS: Tool[] = [
id: "colorize", id: "colorize",
name: "AI Colorization", name: "AI Colorization",
description: "Convert B&W photos to full color with AI", description: "Convert B&W photos to full color with AI",
category: "ai", category: "enhance",
icon: "Palette", icon: "Palette",
route: "/colorize", route: "/colorize",
modality: "image", modality: "image",
@@ -301,7 +318,7 @@ export const TOOLS: Tool[] = [
id: "noise-removal", id: "noise-removal",
name: "Noise Removal", name: "Noise Removal",
description: "AI-powered noise and grain removal", description: "AI-powered noise and grain removal",
category: "ai", category: "enhance",
icon: "AudioLines", icon: "AudioLines",
route: "/noise-removal", route: "/noise-removal",
modality: "image", modality: "image",
@@ -312,7 +329,7 @@ export const TOOLS: Tool[] = [
id: "red-eye-removal", id: "red-eye-removal",
name: "Red Eye Removal", name: "Red Eye Removal",
description: "AI-detect and fix red eye in flash photos", description: "AI-detect and fix red eye in flash photos",
category: "ai", category: "enhance",
icon: "ScanEye", icon: "ScanEye",
route: "/red-eye-removal", route: "/red-eye-removal",
modality: "image", modality: "image",
@@ -323,7 +340,7 @@ export const TOOLS: Tool[] = [
id: "restore-photo", id: "restore-photo",
name: "Photo Restoration", name: "Photo Restoration",
description: "Fix scratches, tears, and damage on old photos with AI", description: "Fix scratches, tears, and damage on old photos with AI",
category: "ai", category: "enhance",
icon: "Undo2", icon: "Undo2",
route: "/restore-photo", route: "/restore-photo",
modality: "image", modality: "image",
@@ -334,7 +351,7 @@ export const TOOLS: Tool[] = [
id: "passport-photo", id: "passport-photo",
name: "Passport Photo", name: "Passport Photo",
description: "AI-powered passport and ID photo generator", description: "AI-powered passport and ID photo generator",
category: "ai", category: "utilities",
icon: "UserCheck", icon: "UserCheck",
route: "/passport-photo", route: "/passport-photo",
modality: "image", modality: "image",
@@ -345,7 +362,7 @@ export const TOOLS: Tool[] = [
id: "content-aware-resize", id: "content-aware-resize",
name: "Content-Aware Resize", name: "Content-Aware Resize",
description: "Seam carving resize that preserves important content with face protection", description: "Seam carving resize that preserves important content with face protection",
category: "ai", category: "enhance",
icon: "Scaling", icon: "Scaling",
route: "/content-aware-resize", route: "/content-aware-resize",
modality: "image", modality: "image",
@@ -356,7 +373,7 @@ export const TOOLS: Tool[] = [
id: "ai-canvas-expand", id: "ai-canvas-expand",
name: "AI Canvas Expand", name: "AI Canvas Expand",
description: "Expand canvas with AI-powered fill", description: "Expand canvas with AI-powered fill",
category: "ai", category: "enhance",
icon: "Expand", icon: "Expand",
route: "/ai-canvas-expand", route: "/ai-canvas-expand",
modality: "image", modality: "image",
@@ -367,7 +384,7 @@ export const TOOLS: Tool[] = [
id: "transcribe-audio", id: "transcribe-audio",
name: "Transcribe Audio", name: "Transcribe Audio",
description: "Convert speech to text with AI-powered transcription", description: "Convert speech to text with AI-powered transcription",
category: "ai", category: "audio-convert",
icon: "MicVocal", icon: "MicVocal",
route: "/transcribe-audio", route: "/transcribe-audio",
modality: "audio", modality: "audio",
@@ -378,7 +395,7 @@ export const TOOLS: Tool[] = [
id: "auto-subtitles", id: "auto-subtitles",
name: "Auto Subtitles", name: "Auto Subtitles",
description: "Generate subtitle files from video audio tracks", description: "Generate subtitle files from video audio tracks",
category: "ai", category: "video-subtitles",
icon: "Captions", icon: "Captions",
route: "/auto-subtitles", route: "/auto-subtitles",
modality: "video", modality: "video",
@@ -389,7 +406,7 @@ export const TOOLS: Tool[] = [
id: "transparency-fixer", id: "transparency-fixer",
name: "PNG Transparency Fixer", name: "PNG Transparency Fixer",
description: "Fix fake transparent PNGs in one click", description: "Fix fake transparent PNGs in one click",
category: "ai", category: "enhance",
icon: "ShieldCheck", icon: "ShieldCheck",
route: "/transparency-fixer", route: "/transparency-fixer",
modality: "image", modality: "image",
@@ -400,7 +417,7 @@ export const TOOLS: Tool[] = [
id: "background-replace", id: "background-replace",
name: "Background Replace", name: "Background Replace",
description: "Replace image background with a solid color", description: "Replace image background with a solid color",
category: "ai", category: "enhance",
icon: "PaintBucket", icon: "PaintBucket",
route: "/background-replace", route: "/background-replace",
modality: "image", modality: "image",
@@ -411,7 +428,7 @@ export const TOOLS: Tool[] = [
id: "blur-background", id: "blur-background",
name: "Blur Background", name: "Blur Background",
description: "Blur the background while keeping the subject sharp", description: "Blur the background while keeping the subject sharp",
category: "ai", category: "enhance",
icon: "Focus", icon: "Focus",
route: "/blur-background", route: "/blur-background",
modality: "image", modality: "image",
@@ -768,7 +785,7 @@ export const TOOLS: Tool[] = [
id: "pdf-to-image", id: "pdf-to-image",
name: "PDF to Image", name: "PDF to Image",
description: "Convert PDF pages to images", description: "Convert PDF pages to images",
category: "documents", category: "pdf-organize",
icon: "BookImage", icon: "BookImage",
route: "/pdf-to-image", route: "/pdf-to-image",
modality: "document", modality: "document",
@@ -780,7 +797,7 @@ export const TOOLS: Tool[] = [
id: "convert-video", id: "convert-video",
name: "Convert Video", name: "Convert Video",
description: "Convert videos between MP4, MOV, and WebM", description: "Convert videos between MP4, MOV, and WebM",
category: "video", category: "video-convert",
icon: "Video", icon: "Video",
route: "/convert-video", route: "/convert-video",
modality: "video", modality: "video",
@@ -791,7 +808,7 @@ export const TOOLS: Tool[] = [
id: "compress-video", id: "compress-video",
name: "Compress Video", name: "Compress Video",
description: "Shrink video file size with quality control", description: "Shrink video file size with quality control",
category: "video", category: "video-convert",
icon: "FileVideo", icon: "FileVideo",
route: "/compress-video", route: "/compress-video",
modality: "video", modality: "video",
@@ -802,7 +819,7 @@ export const TOOLS: Tool[] = [
id: "trim-video", id: "trim-video",
name: "Trim Video", name: "Trim Video",
description: "Cut a clip out of a video", description: "Cut a clip out of a video",
category: "video", category: "video-edit",
icon: "Scissors", icon: "Scissors",
route: "/trim-video", route: "/trim-video",
modality: "video", modality: "video",
@@ -813,7 +830,7 @@ export const TOOLS: Tool[] = [
id: "mute-video", id: "mute-video",
name: "Mute Video", name: "Mute Video",
description: "Remove the audio track from a video", description: "Remove the audio track from a video",
category: "video", category: "video-edit",
icon: "VolumeX", icon: "VolumeX",
route: "/mute-video", route: "/mute-video",
modality: "video", modality: "video",
@@ -824,7 +841,7 @@ export const TOOLS: Tool[] = [
id: "video-to-gif", id: "video-to-gif",
name: "Video to GIF", name: "Video to GIF",
description: "Turn a video clip into an animated GIF", description: "Turn a video clip into an animated GIF",
category: "video", category: "video-convert",
icon: "Film", icon: "Film",
route: "/video-to-gif", route: "/video-to-gif",
modality: "video", modality: "video",
@@ -835,7 +852,7 @@ export const TOOLS: Tool[] = [
id: "resize-video", id: "resize-video",
name: "Resize Video", name: "Resize Video",
description: "Scale a video to a new resolution or preset size", description: "Scale a video to a new resolution or preset size",
category: "video", category: "video-edit",
icon: "Scaling", icon: "Scaling",
route: "/resize-video", route: "/resize-video",
modality: "video", modality: "video",
@@ -846,7 +863,7 @@ export const TOOLS: Tool[] = [
id: "crop-video", id: "crop-video",
name: "Crop Video", name: "Crop Video",
description: "Crop a region out of a video", description: "Crop a region out of a video",
category: "video", category: "video-edit",
icon: "Crop", icon: "Crop",
route: "/crop-video", route: "/crop-video",
modality: "video", modality: "video",
@@ -857,7 +874,7 @@ export const TOOLS: Tool[] = [
id: "rotate-video", id: "rotate-video",
name: "Rotate Video", name: "Rotate Video",
description: "Rotate or flip a video", description: "Rotate or flip a video",
category: "video", category: "video-edit",
icon: "RotateCw", icon: "RotateCw",
route: "/rotate-video", route: "/rotate-video",
modality: "video", modality: "video",
@@ -868,7 +885,7 @@ export const TOOLS: Tool[] = [
id: "change-fps", id: "change-fps",
name: "Change FPS", name: "Change FPS",
description: "Change the frame rate of a video", description: "Change the frame rate of a video",
category: "video", category: "video-edit",
icon: "Gauge", icon: "Gauge",
route: "/change-fps", route: "/change-fps",
modality: "video", modality: "video",
@@ -879,7 +896,7 @@ export const TOOLS: Tool[] = [
id: "video-color", id: "video-color",
name: "Video Color", name: "Video Color",
description: "Adjust brightness, contrast, saturation, and gamma", description: "Adjust brightness, contrast, saturation, and gamma",
category: "video", category: "video-edit",
icon: "SlidersHorizontal", icon: "SlidersHorizontal",
route: "/video-color", route: "/video-color",
modality: "video", modality: "video",
@@ -890,7 +907,7 @@ export const TOOLS: Tool[] = [
id: "video-speed", id: "video-speed",
name: "Video Speed", name: "Video Speed",
description: "Speed up or slow down a video", description: "Speed up or slow down a video",
category: "video", category: "video-edit",
icon: "FastForward", icon: "FastForward",
route: "/video-speed", route: "/video-speed",
modality: "video", modality: "video",
@@ -901,7 +918,7 @@ export const TOOLS: Tool[] = [
id: "reverse-video", id: "reverse-video",
name: "Reverse Video", name: "Reverse Video",
description: "Play a video clip backwards", description: "Play a video clip backwards",
category: "video", category: "video-edit",
icon: "Rewind", icon: "Rewind",
route: "/reverse-video", route: "/reverse-video",
modality: "video", modality: "video",
@@ -912,7 +929,7 @@ export const TOOLS: Tool[] = [
id: "video-loudnorm", id: "video-loudnorm",
name: "Normalize Audio", name: "Normalize Audio",
description: "Normalize video audio volume to broadcast standard", description: "Normalize video audio volume to broadcast standard",
category: "video", category: "video-edit",
icon: "Volume2", icon: "Volume2",
route: "/video-loudnorm", route: "/video-loudnorm",
modality: "video", modality: "video",
@@ -923,7 +940,7 @@ export const TOOLS: Tool[] = [
id: "aspect-pad", id: "aspect-pad",
name: "Aspect Pad", name: "Aspect Pad",
description: "Add solid-color bars to fit a target aspect ratio", description: "Add solid-color bars to fit a target aspect ratio",
category: "video", category: "video-effects",
icon: "RectangleHorizontal", icon: "RectangleHorizontal",
route: "/aspect-pad", route: "/aspect-pad",
modality: "video", modality: "video",
@@ -934,7 +951,7 @@ export const TOOLS: Tool[] = [
id: "blur-pad", id: "blur-pad",
name: "Blur Pad", name: "Blur Pad",
description: "Fill bars with a blurred copy of the video", description: "Fill bars with a blurred copy of the video",
category: "video", category: "video-effects",
icon: "GalleryHorizontalEnd", icon: "GalleryHorizontalEnd",
route: "/blur-pad", route: "/blur-pad",
modality: "video", modality: "video",
@@ -945,7 +962,7 @@ export const TOOLS: Tool[] = [
id: "watermark-video", id: "watermark-video",
name: "Watermark Video", name: "Watermark Video",
description: "Burn a text watermark onto video frames", description: "Burn a text watermark onto video frames",
category: "video", category: "video-effects",
icon: "Stamp", icon: "Stamp",
route: "/watermark-video", route: "/watermark-video",
modality: "video", modality: "video",
@@ -956,7 +973,7 @@ export const TOOLS: Tool[] = [
id: "stabilize-video", id: "stabilize-video",
name: "Stabilize Video", name: "Stabilize Video",
description: "Reduce camera shake with two-pass stabilization", description: "Reduce camera shake with two-pass stabilization",
category: "video", category: "video-effects",
icon: "Anchor", icon: "Anchor",
route: "/stabilize-video", route: "/stabilize-video",
modality: "video", modality: "video",
@@ -967,7 +984,7 @@ export const TOOLS: Tool[] = [
id: "gif-to-video", id: "gif-to-video",
name: "GIF to Video", name: "GIF to Video",
description: "Convert an animated GIF into an MP4 or WebM video", description: "Convert an animated GIF into an MP4 or WebM video",
category: "video", category: "video-convert",
icon: "Film", icon: "Film",
route: "/gif-to-video", route: "/gif-to-video",
modality: "video", modality: "video",
@@ -978,7 +995,7 @@ export const TOOLS: Tool[] = [
id: "video-to-webp", id: "video-to-webp",
name: "Video to WebP", name: "Video to WebP",
description: "Convert a video clip into an animated WebP image", description: "Convert a video clip into an animated WebP image",
category: "video", category: "video-convert",
icon: "Image", icon: "Image",
route: "/video-to-webp", route: "/video-to-webp",
modality: "video", modality: "video",
@@ -989,7 +1006,7 @@ export const TOOLS: Tool[] = [
id: "video-to-frames", id: "video-to-frames",
name: "Video to Frames", name: "Video to Frames",
description: "Extract frames from a video as a ZIP of images", description: "Extract frames from a video as a ZIP of images",
category: "video", category: "video-convert",
icon: "Images", icon: "Images",
route: "/video-to-frames", route: "/video-to-frames",
modality: "video", modality: "video",
@@ -1000,7 +1017,7 @@ export const TOOLS: Tool[] = [
id: "merge-videos", id: "merge-videos",
name: "Merge Videos", name: "Merge Videos",
description: "Join multiple video clips into one file", description: "Join multiple video clips into one file",
category: "video", category: "video-effects",
icon: "Combine", icon: "Combine",
route: "/merge-videos", route: "/merge-videos",
modality: "video", modality: "video",
@@ -1011,7 +1028,7 @@ export const TOOLS: Tool[] = [
id: "replace-audio", id: "replace-audio",
name: "Replace Audio", name: "Replace Audio",
description: "Swap the audio track of a video with another file", description: "Swap the audio track of a video with another file",
category: "video", category: "video-effects",
icon: "MicVocal", icon: "MicVocal",
route: "/replace-audio", route: "/replace-audio",
modality: "video", modality: "video",
@@ -1022,7 +1039,7 @@ export const TOOLS: Tool[] = [
id: "burn-subtitles", id: "burn-subtitles",
name: "Burn Subtitles", name: "Burn Subtitles",
description: "Permanently render subtitles onto video frames", description: "Permanently render subtitles onto video frames",
category: "video", category: "video-subtitles",
icon: "Captions", icon: "Captions",
route: "/burn-subtitles", route: "/burn-subtitles",
modality: "video", modality: "video",
@@ -1033,7 +1050,7 @@ export const TOOLS: Tool[] = [
id: "embed-subtitles", id: "embed-subtitles",
name: "Embed Subtitles", name: "Embed Subtitles",
description: "Mux a subtitle track into the video container", description: "Mux a subtitle track into the video container",
category: "video", category: "video-subtitles",
icon: "MessageSquareText", icon: "MessageSquareText",
route: "/embed-subtitles", route: "/embed-subtitles",
modality: "video", modality: "video",
@@ -1044,7 +1061,7 @@ export const TOOLS: Tool[] = [
id: "extract-subtitles", id: "extract-subtitles",
name: "Extract Subtitles", name: "Extract Subtitles",
description: "Pull the subtitle track out of a video as an SRT file", description: "Pull the subtitle track out of a video as an SRT file",
category: "video", category: "video-subtitles",
icon: "FileText", icon: "FileText",
route: "/extract-subtitles", route: "/extract-subtitles",
modality: "video", modality: "video",
@@ -1055,7 +1072,7 @@ export const TOOLS: Tool[] = [
id: "images-to-video", id: "images-to-video",
name: "Images to Video", name: "Images to Video",
description: "Turn a set of images into a slideshow video", description: "Turn a set of images into a slideshow video",
category: "video", category: "video-effects",
icon: "GalleryThumbnails", icon: "GalleryThumbnails",
route: "/images-to-video", route: "/images-to-video",
modality: "video", modality: "video",
@@ -1066,7 +1083,7 @@ export const TOOLS: Tool[] = [
id: "video-metadata", id: "video-metadata",
name: "Clean Video Metadata", name: "Clean Video Metadata",
description: "Strip metadata from a video and report what was found", description: "Strip metadata from a video and report what was found",
category: "video", category: "video-metadata",
icon: "Tags", icon: "Tags",
route: "/video-metadata", route: "/video-metadata",
modality: "video", modality: "video",
@@ -1078,7 +1095,7 @@ export const TOOLS: Tool[] = [
id: "convert-audio", id: "convert-audio",
name: "Convert Audio", name: "Convert Audio",
description: "Convert audio between MP3, WAV, OGG, and more", description: "Convert audio between MP3, WAV, OGG, and more",
category: "audio", category: "audio-convert",
icon: "AudioLines", icon: "AudioLines",
route: "/convert-audio", route: "/convert-audio",
modality: "audio", modality: "audio",
@@ -1089,7 +1106,7 @@ export const TOOLS: Tool[] = [
id: "trim-audio", id: "trim-audio",
name: "Trim Audio", name: "Trim Audio",
description: "Cut a section out of an audio file", description: "Cut a section out of an audio file",
category: "audio", category: "audio-edit",
icon: "Scissors", icon: "Scissors",
route: "/trim-audio", route: "/trim-audio",
modality: "audio", modality: "audio",
@@ -1100,7 +1117,7 @@ export const TOOLS: Tool[] = [
id: "extract-audio", id: "extract-audio",
name: "Extract Audio", name: "Extract Audio",
description: "Pull the audio track out of a video", description: "Pull the audio track out of a video",
category: "audio", category: "audio-edit",
icon: "FileAudio", icon: "FileAudio",
route: "/extract-audio", route: "/extract-audio",
modality: "video", modality: "video",
@@ -1111,7 +1128,7 @@ export const TOOLS: Tool[] = [
id: "volume-adjust", id: "volume-adjust",
name: "Volume Adjust", name: "Volume Adjust",
description: "Increase or decrease audio volume by a fixed gain", description: "Increase or decrease audio volume by a fixed gain",
category: "audio", category: "audio-edit",
icon: "Volume2", icon: "Volume2",
route: "/volume-adjust", route: "/volume-adjust",
modality: "audio", modality: "audio",
@@ -1122,7 +1139,7 @@ export const TOOLS: Tool[] = [
id: "normalize-audio", id: "normalize-audio",
name: "Normalize Audio", name: "Normalize Audio",
description: "Even out loudness to broadcast standard levels", description: "Even out loudness to broadcast standard levels",
category: "audio", category: "audio-edit",
icon: "AudioWaveform", icon: "AudioWaveform",
route: "/normalize-audio", route: "/normalize-audio",
modality: "audio", modality: "audio",
@@ -1133,7 +1150,7 @@ export const TOOLS: Tool[] = [
id: "fade-audio", id: "fade-audio",
name: "Fade Audio", name: "Fade Audio",
description: "Add fade-in and fade-out effects to audio", description: "Add fade-in and fade-out effects to audio",
category: "audio", category: "audio-edit",
icon: "Waves", icon: "Waves",
route: "/fade-audio", route: "/fade-audio",
modality: "audio", modality: "audio",
@@ -1144,7 +1161,7 @@ export const TOOLS: Tool[] = [
id: "reverse-audio", id: "reverse-audio",
name: "Reverse Audio", name: "Reverse Audio",
description: "Play audio backwards", description: "Play audio backwards",
category: "audio", category: "audio-edit",
icon: "Rewind", icon: "Rewind",
route: "/reverse-audio", route: "/reverse-audio",
modality: "audio", modality: "audio",
@@ -1155,7 +1172,7 @@ export const TOOLS: Tool[] = [
id: "audio-speed", id: "audio-speed",
name: "Audio Speed", name: "Audio Speed",
description: "Speed up or slow down audio playback", description: "Speed up or slow down audio playback",
category: "audio", category: "audio-edit",
icon: "FastForward", icon: "FastForward",
route: "/audio-speed", route: "/audio-speed",
modality: "audio", modality: "audio",
@@ -1166,7 +1183,7 @@ export const TOOLS: Tool[] = [
id: "pitch-shift", id: "pitch-shift",
name: "Pitch Shift", name: "Pitch Shift",
description: "Raise or lower pitch by semitones without changing speed", description: "Raise or lower pitch by semitones without changing speed",
category: "audio", category: "audio-edit",
icon: "Music", icon: "Music",
route: "/pitch-shift", route: "/pitch-shift",
modality: "audio", modality: "audio",
@@ -1177,7 +1194,7 @@ export const TOOLS: Tool[] = [
id: "audio-channels", id: "audio-channels",
name: "Audio Channels", name: "Audio Channels",
description: "Convert between mono, stereo, or swap left and right channels", description: "Convert between mono, stereo, or swap left and right channels",
category: "audio", category: "audio-edit",
icon: "Split", icon: "Split",
route: "/audio-channels", route: "/audio-channels",
modality: "audio", modality: "audio",
@@ -1188,7 +1205,7 @@ export const TOOLS: Tool[] = [
id: "silence-removal", id: "silence-removal",
name: "Silence Removal", name: "Silence Removal",
description: "Strip silent sections from audio", description: "Strip silent sections from audio",
category: "audio", category: "audio-edit",
icon: "VolumeX", icon: "VolumeX",
route: "/silence-removal", route: "/silence-removal",
modality: "audio", modality: "audio",
@@ -1199,7 +1216,7 @@ export const TOOLS: Tool[] = [
id: "noise-reduction", id: "noise-reduction",
name: "Noise Reduction", name: "Noise Reduction",
description: "Reduce background noise with FFT-based denoising", description: "Reduce background noise with FFT-based denoising",
category: "audio", category: "audio-edit",
icon: "Sparkles", icon: "Sparkles",
route: "/noise-reduction", route: "/noise-reduction",
modality: "audio", modality: "audio",
@@ -1210,7 +1227,7 @@ export const TOOLS: Tool[] = [
id: "merge-audio", id: "merge-audio",
name: "Merge Audio", name: "Merge Audio",
description: "Combine multiple audio files into one", description: "Combine multiple audio files into one",
category: "audio", category: "audio-effects",
icon: "Combine", icon: "Combine",
route: "/merge-audio", route: "/merge-audio",
modality: "audio", modality: "audio",
@@ -1221,7 +1238,7 @@ export const TOOLS: Tool[] = [
id: "split-audio", id: "split-audio",
name: "Split Audio", name: "Split Audio",
description: "Split audio by time, equal parts, or silence detection", description: "Split audio by time, equal parts, or silence detection",
category: "audio", category: "audio-effects",
icon: "Scissors", icon: "Scissors",
route: "/split-audio", route: "/split-audio",
modality: "audio", modality: "audio",
@@ -1232,7 +1249,7 @@ export const TOOLS: Tool[] = [
id: "ringtone-maker", id: "ringtone-maker",
name: "Ringtone Maker", name: "Ringtone Maker",
description: "Create a ringtone clip from any audio file", description: "Create a ringtone clip from any audio file",
category: "audio", category: "audio-convert",
icon: "BellRing", icon: "BellRing",
route: "/ringtone-maker", route: "/ringtone-maker",
modality: "audio", modality: "audio",
@@ -1243,7 +1260,7 @@ export const TOOLS: Tool[] = [
id: "waveform-image", id: "waveform-image",
name: "Waveform Image", name: "Waveform Image",
description: "Generate a waveform visualization as a PNG image", description: "Generate a waveform visualization as a PNG image",
category: "audio", category: "audio-effects",
icon: "Activity", icon: "Activity",
route: "/waveform-image", route: "/waveform-image",
modality: "audio", modality: "audio",
@@ -1254,7 +1271,7 @@ export const TOOLS: Tool[] = [
id: "audio-metadata", id: "audio-metadata",
name: "Audio Metadata", name: "Audio Metadata",
description: "View, edit, or strip audio tags (ID3)", description: "View, edit, or strip audio tags (ID3)",
category: "audio", category: "audio-metadata",
icon: "Tags", icon: "Tags",
route: "/audio-metadata", route: "/audio-metadata",
modality: "audio", modality: "audio",
@@ -1266,7 +1283,7 @@ export const TOOLS: Tool[] = [
id: "merge-pdf", id: "merge-pdf",
name: "Merge PDFs", name: "Merge PDFs",
description: "Combine multiple PDFs into one", description: "Combine multiple PDFs into one",
category: "documents", category: "pdf-organize",
icon: "Combine", icon: "Combine",
route: "/merge-pdf", route: "/merge-pdf",
modality: "document", modality: "document",
@@ -1277,7 +1294,7 @@ export const TOOLS: Tool[] = [
id: "split-pdf", id: "split-pdf",
name: "Split PDF", name: "Split PDF",
description: "Extract pages or split into parts", description: "Extract pages or split into parts",
category: "documents", category: "pdf-organize",
icon: "Split", icon: "Split",
route: "/split-pdf", route: "/split-pdf",
modality: "document", modality: "document",
@@ -1288,7 +1305,7 @@ export const TOOLS: Tool[] = [
id: "compress-pdf", id: "compress-pdf",
name: "Compress PDF", name: "Compress PDF",
description: "Shrink PDF file size", description: "Shrink PDF file size",
category: "documents", category: "pdf-optimize",
icon: "FileArchive", icon: "FileArchive",
route: "/compress-pdf", route: "/compress-pdf",
modality: "document", modality: "document",
@@ -1299,7 +1316,7 @@ export const TOOLS: Tool[] = [
id: "rotate-pdf", id: "rotate-pdf",
name: "Rotate PDF", name: "Rotate PDF",
description: "Rotate pages in a PDF", description: "Rotate pages in a PDF",
category: "documents", category: "pdf-edit",
icon: "RotateCw", icon: "RotateCw",
route: "/rotate-pdf", route: "/rotate-pdf",
modality: "document", modality: "document",
@@ -1310,7 +1327,7 @@ export const TOOLS: Tool[] = [
id: "convert-document", id: "convert-document",
name: "Convert Document", name: "Convert Document",
description: "Convert between Word, OpenDocument, RTF, and plain text formats", description: "Convert between Word, OpenDocument, RTF, and plain text formats",
category: "documents", category: "doc-convert",
icon: "FileType2", icon: "FileType2",
route: "/convert-document", route: "/convert-document",
modality: "document", modality: "document",
@@ -1321,7 +1338,7 @@ export const TOOLS: Tool[] = [
id: "convert-presentation", id: "convert-presentation",
name: "Convert Presentation", name: "Convert Presentation",
description: "Convert between PowerPoint and OpenDocument presentation formats", description: "Convert between PowerPoint and OpenDocument presentation formats",
category: "documents", category: "doc-convert",
icon: "Presentation", icon: "Presentation",
route: "/convert-presentation", route: "/convert-presentation",
modality: "document", modality: "document",
@@ -1333,7 +1350,7 @@ export const TOOLS: Tool[] = [
name: "Convert Spreadsheet", name: "Convert Spreadsheet",
description: description:
"Convert between Excel, OpenDocument, and CSV formats. Multi-sheet workbooks export the first sheet to CSV.", "Convert between Excel, OpenDocument, and CSV formats. Multi-sheet workbooks export the first sheet to CSV.",
category: "documents", category: "doc-convert",
icon: "Grid3x3", icon: "Grid3x3",
route: "/convert-spreadsheet", route: "/convert-spreadsheet",
modality: "document", modality: "document",
@@ -1344,7 +1361,7 @@ export const TOOLS: Tool[] = [
id: "excel-to-pdf", id: "excel-to-pdf",
name: "Excel to PDF", name: "Excel to PDF",
description: "Convert spreadsheets to PDF. Wide sheets may paginate across multiple pages.", description: "Convert spreadsheets to PDF. Wide sheets may paginate across multiple pages.",
category: "documents", category: "doc-convert",
icon: "Table", icon: "Table",
route: "/excel-to-pdf", route: "/excel-to-pdf",
modality: "document", modality: "document",
@@ -1355,7 +1372,7 @@ export const TOOLS: Tool[] = [
id: "word-to-pdf", id: "word-to-pdf",
name: "Word to PDF", name: "Word to PDF",
description: "Convert Word documents to PDF", description: "Convert Word documents to PDF",
category: "documents", category: "doc-convert",
icon: "FileText", icon: "FileText",
route: "/word-to-pdf", route: "/word-to-pdf",
modality: "document", modality: "document",
@@ -1366,7 +1383,7 @@ export const TOOLS: Tool[] = [
id: "extract-pages", id: "extract-pages",
name: "Extract Pages", name: "Extract Pages",
description: "Pull selected pages into a new PDF", description: "Pull selected pages into a new PDF",
category: "documents", category: "pdf-organize",
icon: "FileOutput", icon: "FileOutput",
route: "/extract-pages", route: "/extract-pages",
modality: "document", modality: "document",
@@ -1377,7 +1394,7 @@ export const TOOLS: Tool[] = [
id: "remove-pages", id: "remove-pages",
name: "Remove Pages", name: "Remove Pages",
description: "Delete specific pages from a PDF", description: "Delete specific pages from a PDF",
category: "documents", category: "pdf-organize",
icon: "FileX", icon: "FileX",
route: "/remove-pages", route: "/remove-pages",
modality: "document", modality: "document",
@@ -1388,7 +1405,7 @@ export const TOOLS: Tool[] = [
id: "organize-pdf", id: "organize-pdf",
name: "Organize PDF", name: "Organize PDF",
description: "Reorder pages with an explicit page order", description: "Reorder pages with an explicit page order",
category: "documents", category: "pdf-organize",
icon: "ListOrdered", icon: "ListOrdered",
route: "/organize-pdf", route: "/organize-pdf",
modality: "document", modality: "document",
@@ -1399,7 +1416,7 @@ export const TOOLS: Tool[] = [
id: "protect-pdf", id: "protect-pdf",
name: "Protect PDF", name: "Protect PDF",
description: "Add password protection (AES-256 encryption)", description: "Add password protection (AES-256 encryption)",
category: "documents", category: "pdf-security",
icon: "Lock", icon: "Lock",
route: "/protect-pdf", route: "/protect-pdf",
modality: "document", modality: "document",
@@ -1410,7 +1427,7 @@ export const TOOLS: Tool[] = [
id: "unlock-pdf", id: "unlock-pdf",
name: "Unlock PDF", name: "Unlock PDF",
description: "Remove password protection from a PDF", description: "Remove password protection from a PDF",
category: "documents", category: "pdf-security",
icon: "LockOpen", icon: "LockOpen",
route: "/unlock-pdf", route: "/unlock-pdf",
modality: "document", modality: "document",
@@ -1421,7 +1438,7 @@ export const TOOLS: Tool[] = [
id: "repair-pdf", id: "repair-pdf",
name: "Repair PDF", name: "Repair PDF",
description: "Attempt to repair a damaged or corrupted PDF", description: "Attempt to repair a damaged or corrupted PDF",
category: "documents", category: "pdf-optimize",
icon: "Wrench", icon: "Wrench",
route: "/repair-pdf", route: "/repair-pdf",
modality: "document", modality: "document",
@@ -1432,7 +1449,7 @@ export const TOOLS: Tool[] = [
id: "linearize-pdf", id: "linearize-pdf",
name: "Web-Optimize PDF", name: "Web-Optimize PDF",
description: "Linearize a PDF for fast web viewing", description: "Linearize a PDF for fast web viewing",
category: "documents", category: "pdf-optimize",
icon: "Zap", icon: "Zap",
route: "/linearize-pdf", route: "/linearize-pdf",
modality: "document", modality: "document",
@@ -1443,7 +1460,7 @@ export const TOOLS: Tool[] = [
id: "grayscale-pdf", id: "grayscale-pdf",
name: "Grayscale PDF", name: "Grayscale PDF",
description: "Convert all colors to grayscale", description: "Convert all colors to grayscale",
category: "documents", category: "pdf-optimize",
icon: "Contrast", icon: "Contrast",
route: "/grayscale-pdf", route: "/grayscale-pdf",
modality: "document", modality: "document",
@@ -1454,7 +1471,7 @@ export const TOOLS: Tool[] = [
id: "pdfa-convert", id: "pdfa-convert",
name: "PDF/A Convert", name: "PDF/A Convert",
description: "Convert to archival PDF/A-2", description: "Convert to archival PDF/A-2",
category: "documents", category: "pdf-optimize",
icon: "Archive", icon: "Archive",
route: "/pdfa-convert", route: "/pdfa-convert",
modality: "document", modality: "document",
@@ -1465,7 +1482,7 @@ export const TOOLS: Tool[] = [
id: "crop-pdf", id: "crop-pdf",
name: "Crop PDF", name: "Crop PDF",
description: "Crop all pages with a uniform margin", description: "Crop all pages with a uniform margin",
category: "documents", category: "pdf-optimize",
icon: "Crop", icon: "Crop",
route: "/crop-pdf", route: "/crop-pdf",
modality: "document", modality: "document",
@@ -1476,7 +1493,7 @@ export const TOOLS: Tool[] = [
id: "nup-pdf", id: "nup-pdf",
name: "N-up PDF", name: "N-up PDF",
description: "Arrange multiple pages per sheet", description: "Arrange multiple pages per sheet",
category: "documents", category: "pdf-optimize",
icon: "LayoutGrid", icon: "LayoutGrid",
route: "/nup-pdf", route: "/nup-pdf",
modality: "document", modality: "document",
@@ -1487,7 +1504,7 @@ export const TOOLS: Tool[] = [
id: "booklet-pdf", id: "booklet-pdf",
name: "Booklet PDF", name: "Booklet PDF",
description: "Arrange pages for folding into a booklet", description: "Arrange pages for folding into a booklet",
category: "documents", category: "pdf-optimize",
icon: "BookOpen", icon: "BookOpen",
route: "/booklet-pdf", route: "/booklet-pdf",
modality: "document", modality: "document",
@@ -1498,7 +1515,7 @@ export const TOOLS: Tool[] = [
id: "watermark-pdf", id: "watermark-pdf",
name: "Watermark PDF", name: "Watermark PDF",
description: "Add a text watermark to every page", description: "Add a text watermark to every page",
category: "documents", category: "pdf-edit",
icon: "Stamp", icon: "Stamp",
route: "/watermark-pdf", route: "/watermark-pdf",
modality: "document", modality: "document",
@@ -1509,7 +1526,7 @@ export const TOOLS: Tool[] = [
id: "pdf-page-numbers", id: "pdf-page-numbers",
name: "PDF Page Numbers", name: "PDF Page Numbers",
description: "Add page numbers to every page", description: "Add page numbers to every page",
category: "documents", category: "pdf-edit",
icon: "Hash", icon: "Hash",
route: "/pdf-page-numbers", route: "/pdf-page-numbers",
modality: "document", modality: "document",
@@ -1520,7 +1537,7 @@ export const TOOLS: Tool[] = [
id: "flatten-pdf", id: "flatten-pdf",
name: "Flatten PDF", name: "Flatten PDF",
description: "Bake forms and annotations into page content", description: "Bake forms and annotations into page content",
category: "documents", category: "pdf-edit",
icon: "Layers2", icon: "Layers2",
route: "/flatten-pdf", route: "/flatten-pdf",
modality: "document", modality: "document",
@@ -1531,7 +1548,7 @@ export const TOOLS: Tool[] = [
id: "redact-pdf", id: "redact-pdf",
name: "Redact PDF", name: "Redact PDF",
description: "Permanently remove text occurrences (verified true redaction)", description: "Permanently remove text occurrences (verified true redaction)",
category: "documents", category: "pdf-edit",
icon: "EyeOff", icon: "EyeOff",
route: "/redact-pdf", route: "/redact-pdf",
modality: "document", modality: "document",
@@ -1542,7 +1559,7 @@ export const TOOLS: Tool[] = [
id: "pdf-to-text", id: "pdf-to-text",
name: "PDF to Text", name: "PDF to Text",
description: "Extract plain text from a PDF", description: "Extract plain text from a PDF",
category: "documents", category: "doc-convert",
icon: "FileText", icon: "FileText",
route: "/pdf-to-text", route: "/pdf-to-text",
modality: "document", modality: "document",
@@ -1553,7 +1570,7 @@ export const TOOLS: Tool[] = [
id: "pdf-to-word", id: "pdf-to-word",
name: "PDF to Word", name: "PDF to Word",
description: "Best for text-based PDFs; scanned pages need OCR", description: "Best for text-based PDFs; scanned pages need OCR",
category: "documents", category: "doc-convert",
icon: "FileType", icon: "FileType",
route: "/pdf-to-word", route: "/pdf-to-word",
modality: "document", modality: "document",
@@ -1564,7 +1581,7 @@ export const TOOLS: Tool[] = [
id: "pdf-metadata", id: "pdf-metadata",
name: "PDF Metadata", name: "PDF Metadata",
description: "Read and write PDF document metadata", description: "Read and write PDF document metadata",
category: "documents", category: "doc-convert",
icon: "Tags", icon: "Tags",
route: "/pdf-metadata", route: "/pdf-metadata",
modality: "document", modality: "document",
@@ -1575,7 +1592,7 @@ export const TOOLS: Tool[] = [
id: "powerpoint-to-pdf", id: "powerpoint-to-pdf",
name: "PowerPoint to PDF", name: "PowerPoint to PDF",
description: "Convert presentations to PDF", description: "Convert presentations to PDF",
category: "documents", category: "doc-convert",
icon: "Presentation", icon: "Presentation",
route: "/powerpoint-to-pdf", route: "/powerpoint-to-pdf",
modality: "document", modality: "document",
@@ -1586,7 +1603,7 @@ export const TOOLS: Tool[] = [
id: "html-to-pdf", id: "html-to-pdf",
name: "HTML to PDF", name: "HTML to PDF",
description: "Convert an HTML file to PDF. Remote resources are disabled for privacy.", description: "Convert an HTML file to PDF. Remote resources are disabled for privacy.",
category: "documents", category: "doc-convert",
icon: "FileCode", icon: "FileCode",
route: "/html-to-pdf", route: "/html-to-pdf",
modality: "document", modality: "document",
@@ -1597,7 +1614,7 @@ export const TOOLS: Tool[] = [
id: "markdown-to-docx", id: "markdown-to-docx",
name: "Markdown to Word", name: "Markdown to Word",
description: "Convert a Markdown file to a Word document (DOCX)", description: "Convert a Markdown file to a Word document (DOCX)",
category: "documents", category: "doc-convert",
icon: "FileType", icon: "FileType",
route: "/markdown-to-docx", route: "/markdown-to-docx",
modality: "document", modality: "document",
@@ -1609,7 +1626,7 @@ export const TOOLS: Tool[] = [
name: "Markdown to HTML", name: "Markdown to HTML",
description: description:
"Convert a Markdown file to a standalone HTML page. Remote images in the source are left as-is in the output.", "Convert a Markdown file to a standalone HTML page. Remote images in the source are left as-is in the output.",
category: "documents", category: "doc-convert",
icon: "FileCode", icon: "FileCode",
route: "/markdown-to-html", route: "/markdown-to-html",
modality: "document", modality: "document",
@@ -1621,7 +1638,7 @@ export const TOOLS: Tool[] = [
name: "Markdown to PDF", name: "Markdown to PDF",
description: description:
"Convert a Markdown file to a styled PDF. Remote resources are disabled for privacy.", "Convert a Markdown file to a styled PDF. Remote resources are disabled for privacy.",
category: "documents", category: "doc-convert",
icon: "FileCode2", icon: "FileCode2",
route: "/markdown-to-pdf", route: "/markdown-to-pdf",
modality: "document", modality: "document",
@@ -1633,7 +1650,7 @@ export const TOOLS: Tool[] = [
name: "Convert EPUB", name: "Convert EPUB",
description: description:
"Convert an EPUB to PDF, DOCX, HTML, or Markdown. Remote resources inside the book are not fetched.", "Convert an EPUB to PDF, DOCX, HTML, or Markdown. Remote resources inside the book are not fetched.",
category: "documents", category: "doc-convert",
icon: "BookOpen", icon: "BookOpen",
route: "/epub-convert", route: "/epub-convert",
modality: "document", modality: "document",
@@ -1644,7 +1661,7 @@ export const TOOLS: Tool[] = [
id: "to-epub", id: "to-epub",
name: "Convert to EPUB", name: "Convert to EPUB",
description: "Convert Word, Markdown, HTML, or plain text files to EPUB", description: "Convert Word, Markdown, HTML, or plain text files to EPUB",
category: "documents", category: "doc-convert",
icon: "Book", icon: "Book",
route: "/to-epub", route: "/to-epub",
modality: "document", modality: "document",
@@ -1745,7 +1762,7 @@ export const TOOLS: Tool[] = [
id: "create-zip", id: "create-zip",
name: "Create ZIP", name: "Create ZIP",
description: "Bundle multiple files into a single ZIP archive", description: "Bundle multiple files into a single ZIP archive",
category: "data", category: "archives",
icon: "FolderArchive", icon: "FolderArchive",
route: "/create-zip", route: "/create-zip",
modality: "file", modality: "file",
@@ -1757,7 +1774,7 @@ export const TOOLS: Tool[] = [
name: "Extract ZIP", name: "Extract ZIP",
description: description:
"Safely extract files from a ZIP archive with bomb protection. Single-file archives return the file directly.", "Safely extract files from a ZIP archive with bomb protection. Single-file archives return the file directly.",
category: "data", category: "archives",
icon: "FolderOpen", icon: "FolderOpen",
route: "/extract-zip", route: "/extract-zip",
modality: "file", modality: "file",
+18 -6
View File
@@ -41,17 +41,29 @@ export const ar: TranslationKeys = {
}, },
categories: { categories: {
essentials: "الأساسيات", essentials: "الأساسيات",
optimization: "التحسين",
adjustments: "التعديلات", adjustments: "التعديلات",
enhance: "Enhance & AI",
watermark: "العلامة المائية والتراكب", watermark: "العلامة المائية والتراكب",
utilities: "الأدوات المساعدة",
layout: "التخطيط والتكوين", layout: "التخطيط والتكوين",
utilities: "الأدوات المساعدة",
optimization: "التحسين",
format: "التنسيق والتحويل", format: "التنسيق والتحويل",
video: "Video", "video-edit": "Video",
audio: "Audio", "video-convert": "Convert",
documents: "PDF & Documents", "video-effects": "Effects & Compose",
"video-subtitles": "Subtitles",
"video-metadata": "Metadata",
"audio-edit": "Edit",
"audio-convert": "Convert",
"audio-effects": "Effects & Compose",
"audio-metadata": "Metadata",
"pdf-organize": "Organize",
"pdf-edit": "Edit & Annotate",
"pdf-security": "Security",
"pdf-optimize": "Optimize",
"doc-convert": "Convert",
data: "Data Files", data: "Data Files",
ai: "أدوات AI", archives: "Archives",
}, },
modalities: { modalities: {
image: "Image", image: "Image",
+18 -6
View File
@@ -41,17 +41,29 @@ export const de: TranslationKeys = {
}, },
categories: { categories: {
essentials: "Grundlagen", essentials: "Grundlagen",
optimization: "Optimierung",
adjustments: "Anpassungen", adjustments: "Anpassungen",
enhance: "Enhance & AI",
watermark: "Wasserzeichen & Overlay", watermark: "Wasserzeichen & Overlay",
utilities: "Hilfswerkzeuge",
layout: "Layout & Komposition", layout: "Layout & Komposition",
utilities: "Hilfswerkzeuge",
optimization: "Optimierung",
format: "Format & Konvertierung", format: "Format & Konvertierung",
video: "Video", "video-edit": "Video",
audio: "Audio", "video-convert": "Convert",
documents: "PDF & Documents", "video-effects": "Effects & Compose",
"video-subtitles": "Subtitles",
"video-metadata": "Metadata",
"audio-edit": "Edit",
"audio-convert": "Convert",
"audio-effects": "Effects & Compose",
"audio-metadata": "Metadata",
"pdf-organize": "Organize",
"pdf-edit": "Edit & Annotate",
"pdf-security": "Security",
"pdf-optimize": "Optimize",
"doc-convert": "Convert",
data: "Data Files", data: "Data Files",
ai: "AI-Werkzeuge", archives: "Archives",
}, },
modalities: { modalities: {
image: "Image", image: "Image",
+23 -6
View File
@@ -38,18 +38,35 @@ export const en = {
pageNotFoundDescription: "The page you are looking for does not exist or has been moved.", pageNotFoundDescription: "The page you are looking for does not exist or has been moved.",
}, },
categories: { categories: {
// Image
essentials: "Essentials", essentials: "Essentials",
optimization: "Optimization",
adjustments: "Adjustments", adjustments: "Adjustments",
enhance: "Enhance & AI",
watermark: "Watermark & Overlay", watermark: "Watermark & Overlay",
utilities: "Utilities",
layout: "Layout & Composition", layout: "Layout & Composition",
utilities: "Utilities",
optimization: "Optimization",
format: "Format & Conversion", format: "Format & Conversion",
video: "Video", // Video
audio: "Audio", "video-edit": "Edit",
documents: "PDF & Documents", "video-convert": "Convert",
"video-effects": "Effects & Compose",
"video-subtitles": "Subtitles",
"video-metadata": "Metadata",
// Audio
"audio-edit": "Edit",
"audio-convert": "Convert",
"audio-effects": "Effects & Compose",
"audio-metadata": "Metadata",
// Documents
"pdf-organize": "Organize",
"pdf-edit": "Edit & Annotate",
"pdf-security": "Security",
"pdf-optimize": "Optimize",
"doc-convert": "Convert",
// Data & Files
data: "Data Files", data: "Data Files",
ai: "AI Tools", archives: "Archives",
}, },
modalities: { modalities: {
image: "Image", image: "Image",
+18 -6
View File
@@ -41,17 +41,29 @@ export const es: TranslationKeys = {
}, },
categories: { categories: {
essentials: "Esenciales", essentials: "Esenciales",
optimization: "Optimizacion",
adjustments: "Ajustes", adjustments: "Ajustes",
enhance: "Enhance & AI",
watermark: "Marca de agua y superposicion", watermark: "Marca de agua y superposicion",
utilities: "Utilidades",
layout: "Diseno y composicion", layout: "Diseno y composicion",
utilities: "Utilidades",
optimization: "Optimizacion",
format: "Formato y conversion", format: "Formato y conversion",
video: "Video", "video-edit": "Video",
audio: "Audio", "video-convert": "Convert",
documents: "PDF & Documents", "video-effects": "Effects & Compose",
"video-subtitles": "Subtitles",
"video-metadata": "Metadata",
"audio-edit": "Edit",
"audio-convert": "Convert",
"audio-effects": "Effects & Compose",
"audio-metadata": "Metadata",
"pdf-organize": "Organize",
"pdf-edit": "Edit & Annotate",
"pdf-security": "Security",
"pdf-optimize": "Optimize",
"doc-convert": "Convert",
data: "Data Files", data: "Data Files",
ai: "Herramientas de AI", archives: "Archives",
}, },
modalities: { modalities: {
image: "Image", image: "Image",
+18 -6
View File
@@ -41,17 +41,29 @@ export const fr: TranslationKeys = {
}, },
categories: { categories: {
essentials: "Essentiels", essentials: "Essentiels",
optimization: "Optimisation",
adjustments: "Reglages", adjustments: "Reglages",
enhance: "Enhance & AI",
watermark: "Filigrane et superposition", watermark: "Filigrane et superposition",
utilities: "Utilitaires",
layout: "Mise en page et composition", layout: "Mise en page et composition",
utilities: "Utilitaires",
optimization: "Optimisation",
format: "Format et conversion", format: "Format et conversion",
video: "Video", "video-edit": "Video",
audio: "Audio", "video-convert": "Convert",
documents: "PDF & Documents", "video-effects": "Effects & Compose",
"video-subtitles": "Subtitles",
"video-metadata": "Metadata",
"audio-edit": "Edit",
"audio-convert": "Convert",
"audio-effects": "Effects & Compose",
"audio-metadata": "Metadata",
"pdf-organize": "Organize",
"pdf-edit": "Edit & Annotate",
"pdf-security": "Security",
"pdf-optimize": "Optimize",
"doc-convert": "Convert",
data: "Data Files", data: "Data Files",
ai: "Outils AI", archives: "Archives",
}, },
modalities: { modalities: {
image: "Image", image: "Image",
+18 -6
View File
@@ -41,17 +41,29 @@ export const hi: TranslationKeys = {
}, },
categories: { categories: {
essentials: "आवश्यक टूल्स", essentials: "आवश्यक टूल्स",
optimization: "ऑप्टिमाइज़ेशन",
adjustments: "समायोजन", adjustments: "समायोजन",
enhance: "Enhance & AI",
watermark: "वॉटरमार्क और ओवरले", watermark: "वॉटरमार्क और ओवरले",
utilities: "सहायक टूल्स",
layout: "लेआउट और कंपोज़िशन", layout: "लेआउट और कंपोज़िशन",
utilities: "सहायक टूल्स",
optimization: "ऑप्टिमाइज़ेशन",
format: "फॉर्मेट और कन्वर्शन", format: "फॉर्मेट और कन्वर्शन",
video: "Video", "video-edit": "Video",
audio: "Audio", "video-convert": "Convert",
documents: "PDF & Documents", "video-effects": "Effects & Compose",
"video-subtitles": "Subtitles",
"video-metadata": "Metadata",
"audio-edit": "Edit",
"audio-convert": "Convert",
"audio-effects": "Effects & Compose",
"audio-metadata": "Metadata",
"pdf-organize": "Organize",
"pdf-edit": "Edit & Annotate",
"pdf-security": "Security",
"pdf-optimize": "Optimize",
"doc-convert": "Convert",
data: "Data Files", data: "Data Files",
ai: "AI टूल्स", archives: "Archives",
}, },
modalities: { modalities: {
image: "Image", image: "Image",
+18 -6
View File
@@ -41,17 +41,29 @@ export const id: TranslationKeys = {
}, },
categories: { categories: {
essentials: "Dasar", essentials: "Dasar",
optimization: "Optimasi",
adjustments: "Penyesuaian", adjustments: "Penyesuaian",
enhance: "Enhance & AI",
watermark: "Watermark & Overlay", watermark: "Watermark & Overlay",
utilities: "Utilitas",
layout: "Tata Letak & Komposisi", layout: "Tata Letak & Komposisi",
utilities: "Utilitas",
optimization: "Optimasi",
format: "Format & Konversi", format: "Format & Konversi",
video: "Video", "video-edit": "Video",
audio: "Audio", "video-convert": "Convert",
documents: "PDF & Documents", "video-effects": "Effects & Compose",
"video-subtitles": "Subtitles",
"video-metadata": "Metadata",
"audio-edit": "Edit",
"audio-convert": "Convert",
"audio-effects": "Effects & Compose",
"audio-metadata": "Metadata",
"pdf-organize": "Organize",
"pdf-edit": "Edit & Annotate",
"pdf-security": "Security",
"pdf-optimize": "Optimize",
"doc-convert": "Convert",
data: "Data Files", data: "Data Files",
ai: "Alat AI", archives: "Archives",
}, },
modalities: { modalities: {
image: "Image", image: "Image",
+18 -6
View File
@@ -41,17 +41,29 @@ export const it: TranslationKeys = {
}, },
categories: { categories: {
essentials: "Essenziali", essentials: "Essenziali",
optimization: "Ottimizzazione",
adjustments: "Regolazioni", adjustments: "Regolazioni",
enhance: "Enhance & AI",
watermark: "Filigrana e sovrapposizione", watermark: "Filigrana e sovrapposizione",
utilities: "Utilita",
layout: "Layout e composizione", layout: "Layout e composizione",
utilities: "Utilita",
optimization: "Ottimizzazione",
format: "Formato e conversione", format: "Formato e conversione",
video: "Video", "video-edit": "Video",
audio: "Audio", "video-convert": "Convert",
documents: "PDF & Documents", "video-effects": "Effects & Compose",
"video-subtitles": "Subtitles",
"video-metadata": "Metadata",
"audio-edit": "Edit",
"audio-convert": "Convert",
"audio-effects": "Effects & Compose",
"audio-metadata": "Metadata",
"pdf-organize": "Organize",
"pdf-edit": "Edit & Annotate",
"pdf-security": "Security",
"pdf-optimize": "Optimize",
"doc-convert": "Convert",
data: "Data Files", data: "Data Files",
ai: "Strumenti IA", archives: "Archives",
}, },
modalities: { modalities: {
image: "Image", image: "Image",
+18 -6
View File
@@ -41,17 +41,29 @@ export const ja: TranslationKeys = {
}, },
categories: { categories: {
essentials: "基本ツール", essentials: "基本ツール",
optimization: "最適化",
adjustments: "調整", adjustments: "調整",
enhance: "Enhance & AI",
watermark: "ウォーターマークとオーバーレイ", watermark: "ウォーターマークとオーバーレイ",
utilities: "ユーティリティ",
layout: "レイアウトと構図", layout: "レイアウトと構図",
utilities: "ユーティリティ",
optimization: "最適化",
format: "フォーマットと変換", format: "フォーマットと変換",
video: "Video", "video-edit": "Video",
audio: "Audio", "video-convert": "Convert",
documents: "PDF & Documents", "video-effects": "Effects & Compose",
"video-subtitles": "Subtitles",
"video-metadata": "Metadata",
"audio-edit": "Edit",
"audio-convert": "Convert",
"audio-effects": "Effects & Compose",
"audio-metadata": "Metadata",
"pdf-organize": "Organize",
"pdf-edit": "Edit & Annotate",
"pdf-security": "Security",
"pdf-optimize": "Optimize",
"doc-convert": "Convert",
data: "Data Files", data: "Data Files",
ai: "AIツール", archives: "Archives",
}, },
modalities: { modalities: {
image: "Image", image: "Image",
+18 -6
View File
@@ -41,17 +41,29 @@ export const ko: TranslationKeys = {
}, },
categories: { categories: {
essentials: "기본 도구", essentials: "기본 도구",
optimization: "최적화",
adjustments: "조정", adjustments: "조정",
enhance: "Enhance & AI",
watermark: "워터마크 및 오버레이", watermark: "워터마크 및 오버레이",
utilities: "유틸리티",
layout: "레이아웃 및 구도", layout: "레이아웃 및 구도",
utilities: "유틸리티",
optimization: "최적화",
format: "포맷 및 변환", format: "포맷 및 변환",
video: "Video", "video-edit": "Video",
audio: "Audio", "video-convert": "Convert",
documents: "PDF & Documents", "video-effects": "Effects & Compose",
"video-subtitles": "Subtitles",
"video-metadata": "Metadata",
"audio-edit": "Edit",
"audio-convert": "Convert",
"audio-effects": "Effects & Compose",
"audio-metadata": "Metadata",
"pdf-organize": "Organize",
"pdf-edit": "Edit & Annotate",
"pdf-security": "Security",
"pdf-optimize": "Optimize",
"doc-convert": "Convert",
data: "Data Files", data: "Data Files",
ai: "AI 도구", archives: "Archives",
}, },
modalities: { modalities: {
image: "Image", image: "Image",
+18 -6
View File
@@ -41,17 +41,29 @@ export const nl: TranslationKeys = {
}, },
categories: { categories: {
essentials: "Basistools", essentials: "Basistools",
optimization: "Optimalisatie",
adjustments: "Aanpassingen", adjustments: "Aanpassingen",
enhance: "Enhance & AI",
watermark: "Watermerk & Overlay", watermark: "Watermerk & Overlay",
utilities: "Hulptools",
layout: "Lay-out & Compositie", layout: "Lay-out & Compositie",
utilities: "Hulptools",
optimization: "Optimalisatie",
format: "Formaat & Conversie", format: "Formaat & Conversie",
video: "Video", "video-edit": "Video",
audio: "Audio", "video-convert": "Convert",
documents: "PDF & Documents", "video-effects": "Effects & Compose",
"video-subtitles": "Subtitles",
"video-metadata": "Metadata",
"audio-edit": "Edit",
"audio-convert": "Convert",
"audio-effects": "Effects & Compose",
"audio-metadata": "Metadata",
"pdf-organize": "Organize",
"pdf-edit": "Edit & Annotate",
"pdf-security": "Security",
"pdf-optimize": "Optimize",
"doc-convert": "Convert",
data: "Data Files", data: "Data Files",
ai: "AI-tools", archives: "Archives",
}, },
modalities: { modalities: {
image: "Image", image: "Image",
+18 -6
View File
@@ -41,17 +41,29 @@ export const pl: TranslationKeys = {
}, },
categories: { categories: {
essentials: "Podstawowe", essentials: "Podstawowe",
optimization: "Optymalizacja",
adjustments: "Korekta", adjustments: "Korekta",
enhance: "Enhance & AI",
watermark: "Znak wodny i nakładka", watermark: "Znak wodny i nakładka",
utilities: "Narzędzia",
layout: "Układ i kompozycja", layout: "Układ i kompozycja",
utilities: "Narzędzia",
optimization: "Optymalizacja",
format: "Format i konwersja", format: "Format i konwersja",
video: "Video", "video-edit": "Video",
audio: "Audio", "video-convert": "Convert",
documents: "PDF & Documents", "video-effects": "Effects & Compose",
"video-subtitles": "Subtitles",
"video-metadata": "Metadata",
"audio-edit": "Edit",
"audio-convert": "Convert",
"audio-effects": "Effects & Compose",
"audio-metadata": "Metadata",
"pdf-organize": "Organize",
"pdf-edit": "Edit & Annotate",
"pdf-security": "Security",
"pdf-optimize": "Optimize",
"doc-convert": "Convert",
data: "Data Files", data: "Data Files",
ai: "Narzędzia AI", archives: "Archives",
}, },
modalities: { modalities: {
image: "Image", image: "Image",
+18 -6
View File
@@ -41,17 +41,29 @@ export const ptBR: TranslationKeys = {
}, },
categories: { categories: {
essentials: "Essenciais", essentials: "Essenciais",
optimization: "Otimizacao",
adjustments: "Ajustes", adjustments: "Ajustes",
enhance: "Enhance & AI",
watermark: "Marca d'agua e sobreposicao", watermark: "Marca d'agua e sobreposicao",
utilities: "Utilitarios",
layout: "Layout e composicao", layout: "Layout e composicao",
utilities: "Utilitarios",
optimization: "Otimizacao",
format: "Formato e conversao", format: "Formato e conversao",
video: "Video", "video-edit": "Video",
audio: "Audio", "video-convert": "Convert",
documents: "PDF & Documents", "video-effects": "Effects & Compose",
"video-subtitles": "Subtitles",
"video-metadata": "Metadata",
"audio-edit": "Edit",
"audio-convert": "Convert",
"audio-effects": "Effects & Compose",
"audio-metadata": "Metadata",
"pdf-organize": "Organize",
"pdf-edit": "Edit & Annotate",
"pdf-security": "Security",
"pdf-optimize": "Optimize",
"doc-convert": "Convert",
data: "Data Files", data: "Data Files",
ai: "Ferramentas de AI", archives: "Archives",
}, },
modalities: { modalities: {
image: "Image", image: "Image",
+18 -6
View File
@@ -41,17 +41,29 @@ export const ru: TranslationKeys = {
}, },
categories: { categories: {
essentials: "Основные", essentials: "Основные",
optimization: "Оптимизация",
adjustments: "Коррекция", adjustments: "Коррекция",
enhance: "Enhance & AI",
watermark: "Водяной знак и наложение", watermark: "Водяной знак и наложение",
utilities: "Утилиты",
layout: "Компоновка и композиция", layout: "Компоновка и композиция",
utilities: "Утилиты",
optimization: "Оптимизация",
format: "Формат и конвертация", format: "Формат и конвертация",
video: "Video", "video-edit": "Video",
audio: "Audio", "video-convert": "Convert",
documents: "PDF & Documents", "video-effects": "Effects & Compose",
"video-subtitles": "Subtitles",
"video-metadata": "Metadata",
"audio-edit": "Edit",
"audio-convert": "Convert",
"audio-effects": "Effects & Compose",
"audio-metadata": "Metadata",
"pdf-organize": "Organize",
"pdf-edit": "Edit & Annotate",
"pdf-security": "Security",
"pdf-optimize": "Optimize",
"doc-convert": "Convert",
data: "Data Files", data: "Data Files",
ai: "AI-инструменты", archives: "Archives",
}, },
modalities: { modalities: {
image: "Image", image: "Image",
+18 -6
View File
@@ -41,17 +41,29 @@ export const sv: TranslationKeys = {
}, },
categories: { categories: {
essentials: "Grundlaggande", essentials: "Grundlaggande",
optimization: "Optimering",
adjustments: "Justeringar", adjustments: "Justeringar",
enhance: "Enhance & AI",
watermark: "Vattenstampel & Overlay", watermark: "Vattenstampel & Overlay",
utilities: "Verktyg",
layout: "Layout & Komposition", layout: "Layout & Komposition",
utilities: "Verktyg",
optimization: "Optimering",
format: "Format & Konvertering", format: "Format & Konvertering",
video: "Video", "video-edit": "Video",
audio: "Audio", "video-convert": "Convert",
documents: "PDF & Documents", "video-effects": "Effects & Compose",
"video-subtitles": "Subtitles",
"video-metadata": "Metadata",
"audio-edit": "Edit",
"audio-convert": "Convert",
"audio-effects": "Effects & Compose",
"audio-metadata": "Metadata",
"pdf-organize": "Organize",
"pdf-edit": "Edit & Annotate",
"pdf-security": "Security",
"pdf-optimize": "Optimize",
"doc-convert": "Convert",
data: "Data Files", data: "Data Files",
ai: "AI-verktyg", archives: "Archives",
}, },
modalities: { modalities: {
image: "Image", image: "Image",
+18 -6
View File
@@ -41,17 +41,29 @@ export const th: TranslationKeys = {
}, },
categories: { categories: {
essentials: "พื้นฐาน", essentials: "พื้นฐาน",
optimization: "การเพิ่มประสิทธิภาพ",
adjustments: "การปรับแต่ง", adjustments: "การปรับแต่ง",
enhance: "Enhance & AI",
watermark: "ลายน้ำและการซ้อนทับ", watermark: "ลายน้ำและการซ้อนทับ",
utilities: "เครื่องมือเสริม",
layout: "เค้าโครงและการจัดองค์ประกอบ", layout: "เค้าโครงและการจัดองค์ประกอบ",
utilities: "เครื่องมือเสริม",
optimization: "การเพิ่มประสิทธิภาพ",
format: "รูปแบบและการแปลง", format: "รูปแบบและการแปลง",
video: "Video", "video-edit": "Video",
audio: "Audio", "video-convert": "Convert",
documents: "PDF & Documents", "video-effects": "Effects & Compose",
"video-subtitles": "Subtitles",
"video-metadata": "Metadata",
"audio-edit": "Edit",
"audio-convert": "Convert",
"audio-effects": "Effects & Compose",
"audio-metadata": "Metadata",
"pdf-organize": "Organize",
"pdf-edit": "Edit & Annotate",
"pdf-security": "Security",
"pdf-optimize": "Optimize",
"doc-convert": "Convert",
data: "Data Files", data: "Data Files",
ai: "เครื่องมือ AI", archives: "Archives",
}, },
modalities: { modalities: {
image: "Image", image: "Image",
+18 -6
View File
@@ -41,17 +41,29 @@ export const tr: TranslationKeys = {
}, },
categories: { categories: {
essentials: "Temel Araçlar", essentials: "Temel Araçlar",
optimization: "Optimizasyon",
adjustments: "Ayarlamalar", adjustments: "Ayarlamalar",
enhance: "Enhance & AI",
watermark: "Filigran ve Kaplama", watermark: "Filigran ve Kaplama",
utilities: "Yardımcı Araçlar",
layout: "Düzen ve Kompozisyon", layout: "Düzen ve Kompozisyon",
utilities: "Yardımcı Araçlar",
optimization: "Optimizasyon",
format: "Biçim ve Dönüştürme", format: "Biçim ve Dönüştürme",
video: "Video", "video-edit": "Video",
audio: "Audio", "video-convert": "Convert",
documents: "PDF & Documents", "video-effects": "Effects & Compose",
"video-subtitles": "Subtitles",
"video-metadata": "Metadata",
"audio-edit": "Edit",
"audio-convert": "Convert",
"audio-effects": "Effects & Compose",
"audio-metadata": "Metadata",
"pdf-organize": "Organize",
"pdf-edit": "Edit & Annotate",
"pdf-security": "Security",
"pdf-optimize": "Optimize",
"doc-convert": "Convert",
data: "Data Files", data: "Data Files",
ai: "AI Araçları", archives: "Archives",
}, },
modalities: { modalities: {
image: "Image", image: "Image",
+18 -6
View File
@@ -41,17 +41,29 @@ export const uk: TranslationKeys = {
}, },
categories: { categories: {
essentials: "Основні", essentials: "Основні",
optimization: "Оптимізація",
adjustments: "Корекція", adjustments: "Корекція",
enhance: "Enhance & AI",
watermark: "Водяний знак і накладання", watermark: "Водяний знак і накладання",
utilities: "Утиліти",
layout: "Компонування та композиція", layout: "Компонування та композиція",
utilities: "Утиліти",
optimization: "Оптимізація",
format: "Формат і конвертація", format: "Формат і конвертація",
video: "Video", "video-edit": "Video",
audio: "Audio", "video-convert": "Convert",
documents: "PDF & Documents", "video-effects": "Effects & Compose",
"video-subtitles": "Subtitles",
"video-metadata": "Metadata",
"audio-edit": "Edit",
"audio-convert": "Convert",
"audio-effects": "Effects & Compose",
"audio-metadata": "Metadata",
"pdf-organize": "Organize",
"pdf-edit": "Edit & Annotate",
"pdf-security": "Security",
"pdf-optimize": "Optimize",
"doc-convert": "Convert",
data: "Data Files", data: "Data Files",
ai: "AI-інструменти", archives: "Archives",
}, },
modalities: { modalities: {
image: "Image", image: "Image",
+18 -6
View File
@@ -41,17 +41,29 @@ export const vi: TranslationKeys = {
}, },
categories: { categories: {
essentials: "Cơ bản", essentials: "Cơ bản",
optimization: "Tối ưu hóa",
adjustments: "Điều chỉnh", adjustments: "Điều chỉnh",
enhance: "Enhance & AI",
watermark: "Hình mờ & Lớp phủ", watermark: "Hình mờ & Lớp phủ",
utilities: "Tiện ích",
layout: "Bố cục & Kết hợp", layout: "Bố cục & Kết hợp",
utilities: "Tiện ích",
optimization: "Tối ưu hóa",
format: "Định dạng & Chuyển đổi", format: "Định dạng & Chuyển đổi",
video: "Video", "video-edit": "Video",
audio: "Audio", "video-convert": "Convert",
documents: "PDF & Documents", "video-effects": "Effects & Compose",
"video-subtitles": "Subtitles",
"video-metadata": "Metadata",
"audio-edit": "Edit",
"audio-convert": "Convert",
"audio-effects": "Effects & Compose",
"audio-metadata": "Metadata",
"pdf-organize": "Organize",
"pdf-edit": "Edit & Annotate",
"pdf-security": "Security",
"pdf-optimize": "Optimize",
"doc-convert": "Convert",
data: "Data Files", data: "Data Files",
ai: "Công cụ AI", archives: "Archives",
}, },
modalities: { modalities: {
image: "Image", image: "Image",
+18 -6
View File
@@ -41,17 +41,29 @@ export const zhCN: TranslationKeys = {
}, },
categories: { categories: {
essentials: "基础工具", essentials: "基础工具",
optimization: "优化",
adjustments: "调整", adjustments: "调整",
enhance: "Enhance & AI",
watermark: "水印与叠加", watermark: "水印与叠加",
utilities: "实用工具",
layout: "布局与排版", layout: "布局与排版",
utilities: "实用工具",
optimization: "优化",
format: "格式与转换", format: "格式与转换",
video: "Video", "video-edit": "Video",
audio: "Audio", "video-convert": "Convert",
documents: "PDF & Documents", "video-effects": "Effects & Compose",
"video-subtitles": "Subtitles",
"video-metadata": "Metadata",
"audio-edit": "Edit",
"audio-convert": "Convert",
"audio-effects": "Effects & Compose",
"audio-metadata": "Metadata",
"pdf-organize": "Organize",
"pdf-edit": "Edit & Annotate",
"pdf-security": "Security",
"pdf-optimize": "Optimize",
"doc-convert": "Convert",
data: "Data Files", data: "Data Files",
ai: "AI 工具", archives: "Archives",
}, },
modalities: { modalities: {
image: "Image", image: "Image",
+18 -6
View File
@@ -41,17 +41,29 @@ export const zhTW: TranslationKeys = {
}, },
categories: { categories: {
essentials: "基本工具", essentials: "基本工具",
optimization: "最佳化",
adjustments: "調整", adjustments: "調整",
enhance: "Enhance & AI",
watermark: "浮水印與覆疊", watermark: "浮水印與覆疊",
utilities: "實用工具",
layout: "版面與構圖", layout: "版面與構圖",
utilities: "實用工具",
optimization: "最佳化",
format: "格式與轉換", format: "格式與轉換",
video: "Video", "video-edit": "Video",
audio: "Audio", "video-convert": "Convert",
documents: "PDF & Documents", "video-effects": "Effects & Compose",
"video-subtitles": "Subtitles",
"video-metadata": "Metadata",
"audio-edit": "Edit",
"audio-convert": "Convert",
"audio-effects": "Effects & Compose",
"audio-metadata": "Metadata",
"pdf-organize": "Organize",
"pdf-edit": "Edit & Annotate",
"pdf-security": "Security",
"pdf-optimize": "Optimize",
"doc-convert": "Convert",
data: "Data Files", data: "Data Files",
ai: "AI工具", archives: "Archives",
}, },
modalities: { modalities: {
image: "Image", image: "Image",
+22 -5
View File
@@ -17,18 +17,35 @@ export interface Tool {
} }
export type ToolCategory = export type ToolCategory =
// Image
| "essentials" | "essentials"
| "optimization" | "optimization"
| "adjustments" | "adjustments"
| "ai" | "enhance"
| "watermark" | "watermark"
| "utilities" | "utilities"
| "layout" | "layout"
| "format" | "format"
| "video" // Video
| "audio" | "video-edit"
| "documents" | "video-convert"
| "data"; | "video-effects"
| "video-subtitles"
| "video-metadata"
// Audio
| "audio-edit"
| "audio-convert"
| "audio-effects"
| "audio-metadata"
// Documents
| "pdf-organize"
| "pdf-edit"
| "pdf-security"
| "pdf-optimize"
| "doc-convert"
// Data & Files
| "data"
| "archives";
export interface CategoryInfo { export interface CategoryInfo {
id: ToolCategory; id: ToolCategory;