mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
Move all 157 tool pages into image/video/audio/pdf/data subfolders so URLs read /tools/<modality>/<id> (e.g. /tools/image/crop). Nest the image sub-categories under an Image group in the sidebar so the nav reads by modality. Add public/_redirects (301, clean + .html forms) mapping every old flat /tools/<id> URL to its new path so inbound links keep working. Rewrite all internal /tools links. Verified with a clean docs build (no dead links).
4.3 KiB
4.3 KiB
Beautify Screenshot
Add gradient backgrounds, device frames, shadows, watermarks, and social media sizing to screenshots. Ideal for creating polished images for product marketing, social media, and documentation.
API Endpoint
POST /api/v1/tools/image/beautify
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| backgroundType | string | No | "linear-gradient" |
Background type: solid, linear-gradient, radial-gradient, image, transparent |
| backgroundColor | string | No | "#667eea" |
Solid background color (used when backgroundType is solid) |
| gradientStops | array | No | [{"color":"#667eea","position":0},{"color":"#764ba2","position":100}] |
Gradient color stops (min 2). Each stop has color (hex) and position (0-100). |
| gradientAngle | number | No | 135 | Gradient angle in degrees (0 to 360) |
| padding | number | No | 64 | Padding around the image in pixels (0 to 256) |
| borderRadius | number | No | 12 | Corner radius on the screenshot (0 to 64) |
| shadowPreset | string | No | "subtle" |
Shadow preset: none, subtle, medium, dramatic, custom |
| shadowBlur | number | No | 20 | Custom shadow blur radius (0 to 100, used when shadowPreset is custom) |
| shadowOffsetX | number | No | 0 | Custom shadow horizontal offset (-50 to 50) |
| shadowOffsetY | number | No | 10 | Custom shadow vertical offset (-50 to 50) |
| shadowColor | string | No | "#000000" |
Custom shadow color as hex |
| shadowOpacity | number | No | 30 | Custom shadow opacity (0 to 100) |
| frame | string | No | "none" |
Device or window frame: none, macos-light, macos-dark, windows-light, windows-dark, browser-light, browser-dark, iphone, iphone-dark, macbook, macbook-dark, ipad, ipad-dark |
| frameTitle | string | No | - | Title text displayed in window frame title bars |
| socialPreset | string | No | "none" |
Resize to social media dimensions: none, twitter, linkedin, instagram-square, instagram-story, facebook, producthunt |
| watermarkText | string | No | - | Optional watermark text overlay |
| watermarkPosition | string | No | "bottom-right" |
Watermark position: top-left, top-right, bottom-left, bottom-right, center |
| watermarkOpacity | number | No | 50 | Watermark opacity (0 to 100) |
| outputFormat | string | No | "png" |
Output format: png, jpeg, webp |
Example Request
curl -X POST http://localhost:13490/api/v1/tools/image/beautify \
-F "file=@screenshot.png" \
-F 'settings={"backgroundType":"linear-gradient","gradientStops":[{"color":"#667eea","position":0},{"color":"#764ba2","position":100}],"gradientAngle":135,"padding":64,"borderRadius":12,"shadowPreset":"medium","frame":"macos-dark","socialPreset":"twitter"}'
With Background Image
curl -X POST http://localhost:13490/api/v1/tools/image/beautify \
-F "file=@screenshot.png" \
-F "backgroundImage=@bg-texture.jpg" \
-F 'settings={"backgroundType":"image","padding":80,"borderRadius":16,"shadowPreset":"dramatic"}'
Example Response
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/screenshot.png",
"originalSize": 234567,
"processedSize": 567890
}
Notes
- Accepts two file fields:
file(required, the main screenshot) andbackgroundImage(optional, used whenbackgroundTypeisimage). - Supports HEIC, RAW, PSD, and SVG input formats (automatically decoded).
- Shadow presets map to specific values:
subtle: blur 20, offsetY 4, opacity 20%medium: blur 40, offsetY 10, opacity 35%dramatic: blur 80, offsetY 20, opacity 50%
- Social media presets resize the final output to fit the target dimensions using
containmode:twitter: 1600x900linkedin: 1200x627instagram-square: 1080x1080instagram-story: 1080x1920facebook: 1200x630producthunt: 1270x760
- Device frames (
iphone,macbook,ipad) apply a hardware bezel around the image and skip theborderRadiussetting. - When transparency is required (shadow, border radius, device frames, or transparent background), the output is forced to PNG even if
jpegis selected. - Image backgrounds are not supported in pipeline/batch mode.