{
  "slug": "gpx-privacy-scrubber",
  "name": "gizza-ai/gpx-privacy-scrubber",
  "version": "0.1.0",
  "title": "GPX Privacy Scrubber — Remove Start/End Points, Timestamps & Sensor Data | gizza.ai",
  "description": "Scrub a GPX file before sharing it: remove or fuzz start/end locations, rewrite timestamps, and strip sensor extensions. Runs locally in your browser.",
  "tags": [
    "gpx",
    "privacy",
    "location",
    "gps",
    "fitness"
  ],
  "category": "security",
  "urls": {
    "page": "https://gizza.ai/tools/gpx-privacy-scrubber/",
    "markdown": "https://gizza.ai/tools/gpx-privacy-scrubber/index.md",
    "descriptor": "https://gizza.ai/tools/gpx-privacy-scrubber/tool.json",
    "deep_link_example": "https://gizza.ai/tools/gpx-privacy-scrubber/?gpx=Paste%20your%20GPX%20file%20here%E2%80%A6&mode=remove&radius_m=200&scrub_timestamps=true&remove_extensions=true"
  },
  "cli": "gizza tool gpx-privacy-scrubber \"Paste your GPX file here…\"",
  "tool": {
    "description": "Scrub the privacy-sensitive parts of a GPX file before you share it. The first and last track/route/way points leak your home or start/end location: `mode` = `remove` drops those two point elements, `mode` = `fuzz` keeps them but offsets their coordinates a deterministic distance within `radius_m` metres (1–10000, default 200). `scrub_timestamps` (default on) rewrites every `<time>` (metadata and every point) to the Unix epoch so the recording date and pace are hidden; `remove_extensions` (default on) deletes every `<extensions>` block (heart rate, cadence, power, temperature, hdop/vdop, …). All other content is preserved byte-for-byte. Errors on empty input or a document with no <trkpt>/<rtept>/<wpt> points. Pure and deterministic; runs locally, no network.",
    "parameters": {
      "additionalProperties": false,
      "properties": {
        "gpx": {
          "description": "The GPX file to scrub, as XML text. Paste the whole document; every element except the ones being scrubbed is preserved byte-for-byte.",
          "type": "string"
        },
        "mode": {
          "default": "remove",
          "description": "How to handle the privacy-sensitive first and last track/route/way points. `remove` drops those two point elements entirely; `fuzz` keeps them but nudges their coordinates a deterministic offset within `radius_m` metres. Default remove.",
          "enum": [
            "remove",
            "fuzz"
          ],
          "type": "string"
        },
        "radius_m": {
          "default": 200,
          "description": "Fuzz offset in metres (only used when mode is `fuzz`): the first and last points are moved this far, in opposite directions. 1–10000, default 200.",
          "maximum": 10000,
          "minimum": 1,
          "type": "integer"
        },
        "remove_extensions": {
          "default": true,
          "description": "Delete every `<extensions>…</extensions>` block — heart rate, cadence, power, temperature, hdop/vdop, and other sensor data. Default true.",
          "type": "boolean"
        },
        "scrub_timestamps": {
          "default": true,
          "description": "Replace the contents of every `<time>…</time>` (metadata and every point) with the Unix epoch `1970-01-01T00:00:00Z`, so the recording date and pace are not leaked. Default true.",
          "type": "boolean"
        }
      },
      "required": [
        "gpx"
      ],
      "type": "object"
    }
  }
}