Files
SnapOtter/apps/docs/tools/gif-tools.md
T
SnapOtter 7db6bb97da docs: add per-tool API documentation and fix parity gaps
- Create 53 per-tool VitePress documentation pages with accurate
  parameters from Zod schemas, example requests, and response formats
- Add root llms.txt for LLM-friendly repo browsing
- Fix OpenAPI spec: add auth and 422 error schemas to
  edit-metadata/inspect and strip-metadata/inspect sub-routes
- Fix tool count inconsistency (52 -> 53) across landing site,
  e2e tests, and local docs
- Rename color-adjustments.ts to adjust-colors.ts to match tool ID
- Update VitePress sidebar with all 8 tool categories and top nav
2026-06-08 11:52:28 +08:00

4.8 KiB

GIF Tools

Resize, optimize, change speed, reverse, extract frames, and rotate animated GIFs. Provides multiple operation modes in a single tool.

API Endpoint

POST /api/v1/tools/gif-tools

Parameters

Common Parameters

Parameter Type Required Default Description
mode string No "resize" Operation mode: resize, optimize, speed, reverse, extract, rotate
loop number No 0 Loop count for output GIF (0 = infinite, 1-100 = finite loops)

Resize Mode Parameters

Parameter Type Required Default Description
width integer No - Target width in pixels (1 to 16384)
height integer No - Target height in pixels (1 to 16384)
percentage number No - Scale by percentage (1 to 500). Overrides width/height if set.

Optimize Mode Parameters

Parameter Type Required Default Description
colors number No 256 Maximum number of colors in palette (2 to 256)
dither number No 1.0 Dithering strength (0 to 1, where 0 disables dithering)
effort number No 7 Optimization effort level (1 to 10, higher = slower but smaller)

Speed Mode Parameters

Parameter Type Required Default Description
speedFactor number No 1.0 Speed multiplier (0.1 to 10). Values > 1 speed up, < 1 slow down.

Extract Mode Parameters

Parameter Type Required Default Description
extractMode string No "single" Extraction mode: single, range, all
frameNumber number No 0 Frame index to extract in single mode (0-based)
frameStart number No 0 Start frame index for range mode (0-based)
frameEnd number No - End frame index for range mode (0-based, inclusive)
extractFormat string No "png" Format for extracted frames: png, webp

Rotate Mode Parameters

Parameter Type Required Default Description
angle number No - Rotation angle: 90, 180, or 270 degrees
flipH boolean No false Flip horizontally
flipV boolean No false Flip vertically

Example Requests

Resize

curl -X POST http://localhost:13490/api/v1/tools/gif-tools \
  -F "file=@animation.gif" \
  -F 'settings={"mode":"resize","percentage":50}'

Optimize

curl -X POST http://localhost:13490/api/v1/tools/gif-tools \
  -F "file=@large.gif" \
  -F 'settings={"mode":"optimize","colors":128,"effort":9}'

Speed Up

curl -X POST http://localhost:13490/api/v1/tools/gif-tools \
  -F "file=@animation.gif" \
  -F 'settings={"mode":"speed","speedFactor":2.0}'

Extract Single Frame

curl -X POST http://localhost:13490/api/v1/tools/gif-tools \
  -F "file=@animation.gif" \
  -F 'settings={"mode":"extract","extractMode":"single","frameNumber":5,"extractFormat":"png"}'

Example Response

{
  "jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/animation.gif",
  "originalSize": 2345678,
  "processedSize": 1234567
}

Info Sub-Route

POST /api/v1/tools/gif-tools/info

Returns metadata about an animated GIF without processing it.

Info Request

curl -X POST http://localhost:13490/api/v1/tools/gif-tools/info \
  -F "file=@animation.gif"

Info Response

{
  "width": 480,
  "height": 320,
  "pages": 24,
  "delay": [100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100],
  "loop": 0,
  "fileSize": 2345678,
  "duration": 2400
}

Notes

  • Uses the standard createToolRoute factory for the main processing endpoint.
  • The info endpoint only requires a file upload (no settings needed).
  • In resize mode, if percentage is provided it takes priority over width/height. The resize uses fit: inside to maintain aspect ratio.
  • In speed mode, frame delays are divided by the speed factor. Minimum delay per frame is 20ms (GIF spec limitation).
  • In reverse mode, the speedFactor parameter is also available to simultaneously adjust speed while reversing.
  • In extract mode with range or all, the output is a ZIP file containing individual frames.
  • In rotate mode, each frame is processed individually and reassembled into an animation.
  • The loop parameter controls how many times the output GIF loops. Use 0 for infinite looping.
  • The duration field in the info response is the total animation duration in milliseconds.