mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
docs: organize tool pages by modality under /tools/<modality>/
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).
This commit is contained in:
@@ -0,0 +1,105 @@
|
||||
---
|
||||
description: Edit EXIF, IPTC, GPS, and XMP metadata fields in images without re-encoding pixels.
|
||||
---
|
||||
|
||||
# Edit Metadata
|
||||
|
||||
Edit image metadata fields including EXIF, IPTC, GPS coordinates, dates, and keywords. Uses ExifTool under the hood, so metadata is written in-place without re-encoding pixels, preserving full image quality.
|
||||
|
||||
## API Endpoints
|
||||
|
||||
### Edit Metadata
|
||||
|
||||
`POST /api/v1/tools/image/edit-metadata`
|
||||
|
||||
Writes metadata fields to the image and returns the modified file.
|
||||
|
||||
### Inspect Metadata
|
||||
|
||||
`POST /api/v1/tools/image/edit-metadata/inspect`
|
||||
|
||||
Returns the full metadata from the image via ExifTool as JSON. Does not modify the image.
|
||||
|
||||
## Parameters (Edit)
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| title | string | No | - | Image title (XMP/EXIF) |
|
||||
| author | string | No | - | Author name |
|
||||
| artist | string | No | - | Artist name (EXIF Artist tag) |
|
||||
| copyright | string | No | - | Copyright notice |
|
||||
| imageDescription | string | No | - | Image description (EXIF) |
|
||||
| software | string | No | - | Software tag |
|
||||
| dateTime | string | No | - | EXIF DateTime value |
|
||||
| dateTimeOriginal | string | No | - | EXIF DateTimeOriginal value |
|
||||
| setAllDates | string | No | - | Set all date fields at once |
|
||||
| dateShift | string | No | - | Shift all dates by offset (format: `+HH:MM` or `-HH:MM`) |
|
||||
| clearGps | boolean | No | `false` | Remove all GPS data |
|
||||
| gpsLatitude | number | No | - | Set GPS latitude (-90 to 90) |
|
||||
| gpsLongitude | number | No | - | Set GPS longitude (-180 to 180) |
|
||||
| gpsAltitude | number | No | - | Set GPS altitude in meters |
|
||||
| keywords | string[] | No | - | Keywords/tags to add or set |
|
||||
| keywordsMode | string | No | `"add"` | How to handle keywords: `add` (append) or `set` (replace) |
|
||||
| fieldsToRemove | string[] | No | `[]` | List of specific metadata field names to remove |
|
||||
| iptcTitle | string | No | - | IPTC Object Name |
|
||||
| iptcHeadline | string | No | - | IPTC Headline |
|
||||
| iptcCity | string | No | - | IPTC City |
|
||||
| iptcState | string | No | - | IPTC Province/State |
|
||||
| iptcCountry | string | No | - | IPTC Country |
|
||||
|
||||
## Example Request
|
||||
|
||||
Set author and copyright:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/edit-metadata \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"author": "Jane Smith", "copyright": "2024 Jane Smith"}'
|
||||
```
|
||||
|
||||
Set GPS coordinates:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/edit-metadata \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"gpsLatitude": 48.8566, "gpsLongitude": 2.3522, "gpsAltitude": 35}'
|
||||
```
|
||||
|
||||
Remove GPS and add keywords:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/edit-metadata \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"clearGps": true, "keywords": ["landscape", "sunset"], "keywordsMode": "add"}'
|
||||
```
|
||||
|
||||
Inspect metadata:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/edit-metadata/inspect \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg"
|
||||
```
|
||||
|
||||
## Example Response (Edit)
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 2452000
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- This tool requires ExifTool to be installed on the server. It is included in the Docker image.
|
||||
- Metadata is written in-place, so no pixel re-encoding occurs. The file size change is minimal (just the metadata bytes).
|
||||
- The `dateShift` parameter shifts all date fields by the specified offset, useful for correcting timezone errors (e.g. `+02:00` or `-05:30`).
|
||||
- If no changes are requested (all parameters omitted or empty), the original file is returned unchanged.
|
||||
- Supported formats: JPEG, PNG, WebP, AVIF, TIFF, GIF, HEIC/HEIF.
|
||||
- For non-browser-previewable formats (HEIF, TIFF), the response includes a `previewUrl` field with a WebP preview.
|
||||
Reference in New Issue
Block a user