Files
SnapOtter/packages/shared/src/constants.ts
T
semantic-release-bot 355022d374 chore(release): 0.11.0 [skip ci]
# [0.11.0](https://github.com/siddharthksah/Stirling-Image/compare/v0.10.0...v0.11.0) (2026-03-27)

### Bug Fixes

* **a11y:** add aria-hidden to decorative GemLogo SVG ([d47548a](https://github.com/siddharthksah/Stirling-Image/commit/d47548a1d7d2de995c881465b79a463de20354df))
* **api:** allow Scalar docs through auth and CSP ([a46d500](https://github.com/siddharthksah/Stirling-Image/commit/a46d500012e1f0724038c695a17e7dafd9be0c40))
* **api:** use content instead of spec.content for Scalar v1.49 API ([05854fd](https://github.com/siddharthksah/Stirling-Image/commit/05854fd61f90a1096e1682ad021d744d178d9b9b))
* **ui:** clean up settings, automate page, fullscreen logo, and README ([e3a8558](https://github.com/siddharthksah/Stirling-Image/commit/e3a85581349b6a992939b08ede932705613d915f))

### Features

* **api:** add all remaining endpoints to OpenAPI spec ([9ed1090](https://github.com/siddharthksah/Stirling-Image/commit/9ed109065189f20545eb24893c2c0b9332e40249))
* **api:** add all tool endpoints to OpenAPI spec ([2bf8689](https://github.com/siddharthksah/Stirling-Image/commit/2bf86894d0005ff4c273334699c30de1fcb38ee6))
* **api:** add llms.txt and llms-full.txt endpoints ([cff1930](https://github.com/siddharthksah/Stirling-Image/commit/cff1930920c488fc853eab5aa36128fac19b3bf5))
* **api:** add OpenAPI 3.1 spec skeleton with common schemas ([9488201](https://github.com/siddharthksah/Stirling-Image/commit/948820180663783d463a07f966dd4336c1a7c503))
* **api:** add Scalar docs route and install dependency ([abb2916](https://github.com/siddharthksah/Stirling-Image/commit/abb2916233de85e62675e609b9d497dcc0a01882))
* **api:** register docs route in server and test helper ([849878e](https://github.com/siddharthksah/Stirling-Image/commit/849878e72fc0e5cb3e775afeea802dac933c4e13))
* **branding:** add faceted gem SVG logo assets ([0214ac1](https://github.com/siddharthksah/Stirling-Image/commit/0214ac11b1ba4142349c09fd2465a425b4e8dd6b))
* **branding:** add favicon and meta tags to index.html ([0364927](https://github.com/siddharthksah/Stirling-Image/commit/036492725eea6cb6b4c0aff307edeee8516ec280))
* **branding:** add OG social preview image ([dcd926c](https://github.com/siddharthksah/Stirling-Image/commit/dcd926c57e9877c2b47e70c494b679f0c00d93d6))
* **branding:** add PWA manifest and PNG logo assets ([26cc183](https://github.com/siddharthksah/Stirling-Image/commit/26cc18342fb6d4027f2130b198090469e27ef797))
* **branding:** show gem icon in app header as default logo ([39dfb93](https://github.com/siddharthksah/Stirling-Image/commit/39dfb93679765366253115240adcbc573e83b8e7))
* **docs:** add gem favicon to VitePress site ([42ec0f2](https://github.com/siddharthksah/Stirling-Image/commit/42ec0f2490267f2e3730764539bdd2920b7b3793))
* **docs:** add llms.txt and llms-full.txt to GitHub Pages ([e6dc7b0](https://github.com/siddharthksah/Stirling-Image/commit/e6dc7b0a18d3d022de4e2f0b971bf25678042b3a))
2026-03-27 05:51:30 +00:00

358 lines
9.8 KiB
TypeScript

import type { CategoryInfo, SocialMediaPreset, Tool } from "./types.js";
export const CATEGORIES: CategoryInfo[] = [
{ 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: "ai", name: "AI Tools", icon: "Sparkles", color: "#F59E0B" },
{ 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: "format", name: "Format & Conversion", icon: "FileType", color: "#14B8A6" },
{ id: "automation", name: "Automation", icon: "Workflow", color: "#F97316" },
];
export const TOOLS: Tool[] = [
// Essentials
{
id: "resize",
name: "Resize",
description: "Resize by pixels, percentage, or social media presets",
category: "essentials",
icon: "Maximize2",
route: "/resize",
},
{
id: "crop",
name: "Crop",
description: "Freeform crop, aspect ratio presets, shape crop",
category: "essentials",
icon: "Crop",
route: "/crop",
},
{
id: "rotate",
name: "Rotate & Flip",
description: "Rotate, flip, and straighten images",
category: "essentials",
icon: "RotateCw",
route: "/rotate",
},
{
id: "convert",
name: "Convert",
description: "Convert between image formats",
category: "essentials",
icon: "FileOutput",
route: "/convert",
},
{
id: "compress",
name: "Compress",
description: "Reduce file size by quality or target size",
category: "essentials",
icon: "Minimize2",
route: "/compress",
},
// Optimization
{
id: "strip-metadata",
name: "Strip Metadata",
description: "Remove EXIF, GPS, and camera info",
category: "optimization",
icon: "ShieldOff",
route: "/strip-metadata",
},
{
id: "bulk-rename",
name: "Bulk Rename",
description: "Rename multiple files with patterns",
category: "optimization",
icon: "FileEdit",
route: "/bulk-rename",
},
{
id: "image-to-pdf",
name: "Image to PDF",
description: "Combine images into a PDF document",
category: "optimization",
icon: "FileText",
route: "/image-to-pdf",
},
{
id: "favicon",
name: "Favicon Generator",
description: "Generate all favicon and app icon sizes",
category: "optimization",
icon: "Globe",
route: "/favicon",
},
// Adjustments
{
id: "brightness-contrast",
name: "Brightness & Contrast",
description: "Adjust brightness and contrast levels",
category: "adjustments",
icon: "Sun",
route: "/brightness-contrast",
},
{
id: "saturation",
name: "Saturation & Exposure",
description: "Adjust color saturation and exposure",
category: "adjustments",
icon: "Palette",
route: "/saturation",
},
{
id: "color-channels",
name: "Color Channels",
description: "Adjust individual R, G, B channels",
category: "adjustments",
icon: "CircleDot",
route: "/color-channels",
},
{
id: "color-effects",
name: "Color Effects",
description: "Grayscale, Sepia, Invert, Tint",
category: "adjustments",
icon: "Paintbrush",
route: "/color-effects",
},
{
id: "replace-color",
name: "Replace & Invert Color",
description: "Replace specific colors or invert",
category: "adjustments",
icon: "Pipette",
route: "/replace-color",
},
// AI Tools
{
id: "remove-background",
name: "Remove Background",
description: "AI-powered background removal",
category: "ai",
icon: "Eraser",
route: "/remove-background",
},
{
id: "upscale",
name: "Image Upscaling",
description: "AI super-resolution enhancement",
category: "ai",
icon: "ZoomIn",
route: "/upscale",
},
{
id: "erase-object",
name: "Object Eraser",
description: "Paint over unwanted elements",
category: "ai",
icon: "Wand2",
route: "/erase-object",
},
{
id: "ocr",
name: "OCR / Text Extraction",
description: "Extract text from images",
category: "ai",
icon: "ScanText",
route: "/ocr",
},
{
id: "blur-faces",
name: "Face / PII Blur",
description: "Auto-detect and blur faces and sensitive info",
category: "ai",
icon: "EyeOff",
route: "/blur-faces",
},
{
id: "smart-crop",
name: "Smart Crop",
description: "AI detects subject and crops optimally",
category: "ai",
icon: "Focus",
route: "/smart-crop",
},
// Watermark & Overlay
{
id: "watermark-text",
name: "Text Watermark",
description: "Add text watermark overlay",
category: "watermark",
icon: "Type",
route: "/watermark-text",
},
{
id: "watermark-image",
name: "Image Watermark",
description: "Overlay a logo as watermark",
category: "watermark",
icon: "Image",
route: "/watermark-image",
},
{
id: "text-overlay",
name: "Text Overlay",
description: "Add styled text to images",
category: "watermark",
icon: "TextCursorInput",
route: "/text-overlay",
},
{
id: "compose",
name: "Image Composition",
description: "Layer images with position and opacity",
category: "watermark",
icon: "Layers",
route: "/compose",
},
// Utilities
{
id: "info",
name: "Image Info",
description: "View all metadata and image properties",
category: "utilities",
icon: "Info",
route: "/info",
},
{
id: "compare",
name: "Image Compare",
description: "Side-by-side comparison of two images",
category: "utilities",
icon: "Columns2",
route: "/compare",
},
{
id: "find-duplicates",
name: "Find Duplicates",
description: "Detect duplicate and near-duplicate images",
category: "utilities",
icon: "Copy",
route: "/find-duplicates",
},
{
id: "color-palette",
name: "Color Palette",
description: "Extract dominant colors from image",
category: "utilities",
icon: "Palette",
route: "/color-palette",
},
{
id: "qr-generate",
name: "QR Code Generator",
description: "Generate QR codes from text or URLs",
category: "utilities",
icon: "QrCode",
route: "/qr-generate",
},
{
id: "barcode-read",
name: "Barcode Reader",
description: "Read QR codes and barcodes from images",
category: "utilities",
icon: "ScanLine",
route: "/barcode-read",
},
// Layout & Composition
{
id: "collage",
name: "Collage / Grid",
description: "Combine images into a grid layout",
category: "layout",
icon: "LayoutGrid",
route: "/collage",
},
{
id: "split",
name: "Image Splitting",
description: "Split image into grid parts",
category: "layout",
icon: "Grid3x3",
route: "/split",
},
{
id: "border",
name: "Border & Frame",
description: "Add borders, rounded corners, shadows",
category: "layout",
icon: "Frame",
route: "/border",
},
// Format & Conversion
{
id: "svg-to-raster",
name: "SVG to Raster",
description: "Convert SVG to PNG/JPG at custom resolution",
category: "format",
icon: "FileImage",
route: "/svg-to-raster",
},
{
id: "vectorize",
name: "Image to SVG",
description: "Vectorize images using tracing",
category: "format",
icon: "PenTool",
route: "/vectorize",
},
{
id: "gif-tools",
name: "GIF Tools",
description: "Resize/crop/convert animated GIFs",
category: "format",
icon: "Film",
route: "/gif-tools",
},
// Automation
{
id: "pipeline",
name: "Pipeline Builder",
description: "Chain multiple tools into a workflow",
category: "automation",
icon: "Workflow",
route: "/pipeline",
},
{
id: "batch",
name: "Batch Processing",
description: "Apply any tool to multiple images",
category: "automation",
icon: "FolderInput",
route: "/batch",
},
];
export const SOCIAL_MEDIA_PRESETS: SocialMediaPreset[] = [
{ platform: "Instagram", name: "Post (Square)", width: 1080, height: 1080 },
{ platform: "Instagram", name: "Story / Reel", width: 1080, height: 1920 },
{ platform: "Instagram", name: "Profile Picture", width: 320, height: 320 },
{ platform: "Instagram", name: "Landscape Post", width: 1080, height: 566 },
{ platform: "Instagram", name: "Portrait Post", width: 1080, height: 1350 },
{ platform: "Twitter/X", name: "Post Image", width: 1200, height: 675 },
{ platform: "Twitter/X", name: "Header", width: 1500, height: 500 },
{ platform: "Twitter/X", name: "Profile Picture", width: 400, height: 400 },
{ platform: "Facebook", name: "Post Image", width: 1200, height: 630 },
{ platform: "Facebook", name: "Cover Photo", width: 820, height: 312 },
{ platform: "Facebook", name: "Profile Picture", width: 170, height: 170 },
{ platform: "Facebook", name: "Event Cover", width: 1920, height: 1005 },
{ platform: "YouTube", name: "Thumbnail", width: 1280, height: 720 },
{ platform: "YouTube", name: "Channel Banner", width: 2560, height: 1440 },
{ platform: "YouTube", name: "Profile Picture", width: 800, height: 800 },
{ platform: "LinkedIn", name: "Post Image", width: 1200, height: 627 },
{ platform: "LinkedIn", name: "Banner", width: 1584, height: 396 },
{ platform: "LinkedIn", name: "Profile Picture", width: 400, height: 400 },
{ platform: "TikTok", name: "Video Cover", width: 1080, height: 1920 },
{ platform: "TikTok", name: "Profile Picture", width: 200, height: 200 },
{ platform: "WhatsApp", name: "Profile Picture", width: 500, height: 500 },
{ platform: "Pinterest", name: "Pin", width: 1000, height: 1500 },
{ platform: "Threads", name: "Post Image", width: 1080, height: 1080 },
];
export const APP_VERSION = "0.11.0";