Skip to main content
Glama

Server Details

144 deterministic file tools: PDF, image, media, convert, analyze. Connect in one click (OAuth).

Ownership verified

The last two health checks of this connector failed. If this server requires authentication, missing or expired test credentials may be the cause. A test profile lets Glama authenticate for health checks and discover tools; it is separate from your personal connections.

If you are the author, claim ownership, then add or update a test profile under Admin → Test Profile.

Status
Unhealthy
Uptime
57.0% over 75 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP
URL

TDQS

B3.2/5.0

Scored across 147 tools

Disambiguation2/5

Several tools overlap or are near-duplicates, such as octopus_mkdir vs octopus_make_folder, octopus_move vs octopus_move_file, and octopus_list vs octopus_search_meta, making selection ambiguous. Hash generation appears in both analyze_hash and generate_hash, and PDF conversion is split across convert_document, convert_word_to_pdf, and convert_file, creating unclear boundaries.

Naming Consistency4/5

Names consistently use snake_case with a category prefix (analyze_, convert_, pdf_, photo_, etc.), which is easy to follow. Minor deviations exist within categories, such as source_to_target patterns (pdf_excel_to_pdf) mixed with verb-noun forms (photo_resize), but the overall convention is stable.

Tool Count1/5

147 tools is an extreme mismatch for any single server, far exceeding the typical 3-15 range and even the 25+ threshold for 'too many'. This volume suggests a kitchen-sink approach that likely overwhelms an agent's selection process.

Completeness4/5

The server covers an unusually broad domain (file analysis, conversion, PDF manipulation, image editing, generation, web scraping, storage) with very few obvious dead ends. Some gaps exist, such as writing image metadata or richer video editing, but core workflows are well-supported.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 10 tool updates
    • Changedemail_file4 fields changed
      • changedInput schema / properties / file / description
        Previous value: -"The file to email — a file_id, typically the previous step's output."New value: +"The file or files to email, typically the previous step's output. Several files are zipped into one attachment, so it is always one email."
      • removedInput schema / properties / file / format
        Removed value: -"binary"
      • addedInput schema / properties / file / items
        Added value: +{
        +  "format": "binary",
        +  "type": "string"
        +}
      • changedInput schema / properties / file / type
        Previous value: -"string"New value: +"array"
    • Changedphoto_add_border3 fields changed
      • addedInput schema / properties / color / x-ui
        Added value: +{
        +  "draw": {
        +    "names": {
        +      "aqua": [
        +        0,
        +        255,
        +        255
        +      ],
        +      "beige": [
        +        245,
        +        245,
        +        220
        +      ],
        +      "black": [
        +        0,
        +        0,
        +        0
        +      ],
        +      "blue": [
        +        0,
        +        0,
        +        255
        +      ],
        +      "brown": [
        +        165,
        +        42,
        +        42
        +      ],
        +      "crimson": [
        +        220,
        +        20,
        +        60
        +      ],
        +      "cyan": [
        +        0,
        +        255,
        +        255
        +      ],
        +      "fuchsia": [
        +        255,
        +        0,
        +        255
        +      ],
        +      "gold": [
        +        255,
        +        215,
        +        0
        +      ],
        +      "gray": [
        +        128,
        +        128,
        +        128
        +      ],
        +      "green": [
        +        0,
        +        128,
        +        0
        +      ],
        +      "grey": [
        +        128,
        +        128,
        +        128
        +      ],
        +      "indigo": [
        +        75,
        +        0,
        +        130
        +      ],
        +      "ivory": [
        +        255,
        +        255,
        +        240
        +      ],
        +      "khaki": [
        +        240,
        +        230,
        +        140
        +      ],
        +      "lavender": [
        +        230,
        +        230,
        +        250
        +      ],
        +      "lime": [
        +        0,
        +        255,
        +        0
        +      ],
        +      "magenta": [
        +        255,
        +        0,
        +        255
        +      ],
        +      "maroon": [
        +        128,
        +        0,
        +        0
        +      ],
        +      "navy": [
        +        0,
        +        0,
        +        128
        +      ],
        +      "olive": [
        +        128,
        +        128,
        +        0
        +      ],
        +      "orange": [
        +        255,
        +        165,
        +        0
        +      ],
        +      "pink": [
        +        255,
        +        192,
        +        203
        +      ],
        +      "purple": [
        +        128,
        +        0,
        +        128
        +      ],
        +      "red": [
        +        255,
        +        0,
        +        0
        +      ],
        +      "salmon": [
        +        250,
        +        128,
        +        114
        +      ],
        +      "silver": [
        +        192,
        +        192,
        +        192
        +      ],
        +      "tan": [
        +        210,
        +        180,
        +        140
        +      ],
        +      "teal": [
        +        0,
        +        128,
        +        128
        +      ],
        +      "turquoise": [
        +        64,
        +        224,
        +        208
        +      ],
        +      "violet": [
        +        238,
        +        130,
        +        238
        +      ],
        +      "white": [
        +        255,
        +        255,
        +        255
        +      ],
        +      "yellow": [
        +        255,
        +        255,
        +        0
        +      ]
        +    },
        +    "of": "border",
        +    "role": "color"
        +  }
        +}
      • addedInput schema / properties / size / x-ui / draw
        Added value: +{
        +  "of": "border",
        +  "role": "thickness"
        +}
      • addedInput schema / x-draw
        Added value: +{
        +  "border": {
        +    "noun": "border",
        +    "shape": "border",
        +    "title": "The border"
        +  }
        +}
    • Changedphoto_crop5 fields changed
      • addedInput schema / properties / height / x-ui / draw
        Added value: +{
        +  "of": "crop",
        +  "role": "height"
        +}
      • addedInput schema / properties / width / x-ui / draw
        Added value: +{
        +  "of": "crop",
        +  "role": "width"
        +}
      • addedInput schema / properties / x / x-ui / draw
        Added value: +{
        +  "of": "crop",
        +  "role": "left"
        +}
      • addedInput schema / properties / y / x-ui / draw
        Added value: +{
        +  "of": "crop",
        +  "role": "top"
        +}
      • addedInput schema / x-draw
        Added value: +{
        +  "crop": {
        +    "noun": "crop box",
        +    "shape": "box",
        +    "title": "Part to keep"
        +  }
        +}
    • Changedphoto_face_blur10 fields changed
      • addedInput schema / properties / block_size / x-ui / draw
        Added value: +{
        +  "from": 2,
        +  "of": "areas",
        +  "role": "block_size"
        +}
      • addedInput schema / properties / blur_mode / x-ui
        Added value: +{
        +  "draw": {
        +    "fallback": "gaussian",
        +    "looks": {
        +      "gaussian": "blur",
        +      "pixelate": "pixelate",
        +      "solid": "fill"
        +    },
        +    "of": "areas",
        +    "role": "look"
        +  }
        +}
      • addedInput schema / properties / blur_radius / x-ui / draw
        Added value: +{
        +  "from": 1,
        +  "of": "areas",
        +  "role": "blur_radius"
        +}
      • addedInput schema / properties / blur_strength / x-ui
        Added value: +{
        +  "draw": {
        +    "block": [
        +      4,
        +      6,
        +      10,
        +      15
        +    ],
        +    "blur": [
        +      8,
        +      16,
        +      28,
        +      42
        +    ],
        +    "of": "areas",
        +    "role": "strength"
        +  }
        +}
      • changedInput schema / properties / manual_faces / description
        Previous value: -"Advanced: extra rectangles to blur even if no face was found there, as [{\"x\":10,\"y\":20,\"w\":80,\"h\":80}] in pixels."New value: +"Advanced: extra rectangles to blur even if no face was found there, as [{\"x\":10,\"y\":20,\"w\":80,\"h\":80}] in pixels of the picture as it is shown (turned upright by its EXIF tag). Decimals are rounded."
      • addedInput schema / properties / manual_faces / x-ui / draw
        Added value: +{
        +  "of": "areas",
        +  "role": "list"
        +}
      • changedInput schema / properties / selected_faces / description
        Previous value: -"Advanced: which detected faces to blur, as a list of numbers starting at 0, e.g. [0,2]. Leave empty to blur every face found."New value: +"Advanced: which detected faces to blur, as a list of numbers starting at 0, e.g. [0,2]. Leave it blank to blur every face found; an empty list [] blurs none of them, only the areas in manual_faces. Not offered in the workflow builder: each file there has its own faces."
      • addedInput schema / properties / selected_faces / x-show-when
        Added value: +{
        +  "blur_mode": [
        +    "__never"
        +  ]
        +}
      • addedInput schema / properties / selected_faces / x-ui
        Added value: +{
        +  "builder_omits": true
        +}
      • addedInput schema / x-draw
        Added value: +{
        +  "areas": {
        +    "note": "Every face it finds is hidden the same way. Mark anything else to hide, like a name badge or a license plate.",
        +    "note_no_picture": "Every face it finds is hidden the same way. Other areas can be marked only when this step works on an attached picture.",
        +    "noun": "area to hide",
        +    "shape": "boxes",
        +    "title": "Areas to hide"
        +  }
        +}
    • Changedphoto_image_overlay6 fields changed
      • addedInput schema / properties / opacity / x-ui / draw
        Added value: +{
        +  "max": 100,
        +  "of": "overlay",
        +  "role": "opacity"
        +}
      • addedInput schema / properties / position / x-ui / draw
        Added value: +{
        +  "cells": {
        +    "bc": "bc",
        +    "bl": "bl",
        +    "br": "br",
        +    "mc": "mc",
        +    "ml": "ml",
        +    "mr": "mr",
        +    "tc": "tc",
        +    "tl": "tl",
        +    "tr": "tr"
        +  },
        +  "of": "overlay",
        +  "role": "anchor"
        +}
      • addedInput schema / properties / scale / x-ui / draw
        Added value: +{
        +  "measure": "percent-own",
        +  "of": "overlay",
        +  "role": "size"
        +}
      • addedInput schema / properties / x_offset / x-ui / draw
        Added value: +{
        +  "from": "inward",
        +  "of": "overlay",
        +  "role": "offset_x"
        +}
      • addedInput schema / properties / y_offset / x-ui / draw
        Added value: +{
        +  "from": "inward",
        +  "of": "overlay",
        +  "role": "offset_y"
        +}
      • addedInput schema / x-draw
        Added value: +{
        +  "overlay": {
        +    "image": "overlay",
        +    "noun": "overlay",
        +    "on": "background",
        +    "shape": "stamp",
        +    "title": "Where the overlay goes"
        +  }
        +}
    • Changedphoto_image_splitter3 fields changed
      • addedInput schema / properties / cols / x-ui / draw
        Added value: +{
        +  "of": "grid",
        +  "role": "cols"
        +}
      • addedInput schema / properties / rows / x-ui
        Added value: +{
        +  "draw": {
        +    "of": "grid",
        +    "role": "rows"
        +  }
        +}
      • addedInput schema / x-draw
        Added value: +{
        +  "grid": {
        +    "noun": "grid",
        +    "shape": "grid",
        +    "title": "Where it is cut"
        +  }
        +}
    • Changedphoto_meme_generator9 fields changed
      • addedInput schema / properties / bottom_text / x-ui / draw
        Added value: +{
        +  "of": "captions",
        +  "role": "caption_bottom"
        +}
      • changedInput schema / properties / font / description
        Previous value: -"If Impact isn't installed the server substitutes DejaVu-Sans-Bold; X-JE-Font-* response headers report what actually rendered."New value: +"A font the server does not have is replaced: Impact by Anton (a free face in Impact's style, shipped with the server), Arial-Bold by Liberation-Sans-Bold (drawn to Arial Bold's exact widths). X-JE-Font-* response headers report what actually rendered."
      • addedInput schema / properties / font / x-ui
        Added value: +{
        +  "draw": {
        +    "faces": {
        +      "Arial-Bold": "liberation-sans-bold",
        +      "DejaVu-Sans-Bold": "dejavu-sans-bold",
        +      "Impact": "anton"
        +    },
        +    "fallback": "Impact",
        +    "of": "captions",
        +    "role": "font"
        +  }
        +}
      • addedInput schema / properties / font_color / x-ui
        Added value: +{
        +  "draw": {
        +    "of": "captions",
        +    "role": "color"
        +  }
        +}
      • addedInput schema / properties / font_size / x-ui
        Added value: +{
        +  "draw": {
        +    "accept": {
        +      "max": 200,
        +      "min": 10
        +    },
        +    "auto": {
        +      "max": 150,
        +      "min": 20,
        +      "per": 10
        +    },
        +    "measure": "caption-px",
        +    "of": "captions",
        +    "role": "size"
        +  }
        +}
      • addedInput schema / properties / stroke_color / x-ui
        Added value: +{
        +  "draw": {
        +    "of": "captions",
        +    "role": "outline_color"
        +  }
        +}
      • addedInput schema / properties / stroke_width / x-ui
        Added value: +{
        +  "draw": {
        +    "of": "captions",
        +    "role": "outline_width"
        +  }
        +}
      • addedInput schema / properties / top_text / x-ui / draw
        Added value: +{
        +  "of": "captions",
        +  "role": "caption_top"
        +}
      • addedInput schema / x-draw
        Added value: +{
        +  "captions": {
        +    "noun": "caption",
        +    "shape": "captions",
        +    "title": "Captions on the picture"
        +  }
        +}
    • Changedphoto_rounded_corners5 fields changed
      • addedInput schema / properties / background / x-ui
        Added value: +{
        +  "draw": {
        +    "names": {
        +      "aqua": [
        +        0,
        +        255,
        +        255
        +      ],
        +      "beige": [
        +        245,
        +        245,
        +        220
        +      ],
        +      "black": [
        +        0,
        +        0,
        +        0
        +      ],
        +      "blue": [
        +        0,
        +        0,
        +        255
        +      ],
        +      "brown": [
        +        165,
        +        42,
        +        42
        +      ],
        +      "crimson": [
        +        220,
        +        20,
        +        60
        +      ],
        +      "cyan": [
        +        0,
        +        255,
        +        255
        +      ],
        +      "fuchsia": [
        +        255,
        +        0,
        +        255
        +      ],
        +      "gold": [
        +        255,
        +        215,
        +        0
        +      ],
        +      "gray": [
        +        128,
        +        128,
        +        128
        +      ],
        +      "green": [
        +        0,
        +        128,
        +        0
        +      ],
        +      "grey": [
        +        128,
        +        128,
        +        128
        +      ],
        +      "indigo": [
        +        75,
        +        0,
        +        130
        +      ],
        +      "ivory": [
        +        255,
        +        255,
        +        240
        +      ],
        +      "khaki": [
        +        240,
        +        230,
        +        140
        +      ],
        +      "lavender": [
        +        230,
        +        230,
        +        250
        +      ],
        +      "lime": [
        +        0,
        +        255,
        +        0
        +      ],
        +      "magenta": [
        +        255,
        +        0,
        +        255
        +      ],
        +      "maroon": [
        +        128,
        +        0,
        +        0
        +      ],
        +      "navy": [
        +        0,
        +        0,
        +        128
        +      ],
        +      "olive": [
        +        128,
        +        128,
        +        0
        +      ],
        +      "orange": [
        +        255,
        +        165,
        +        0
        +      ],
        +      "pink": [
        +        255,
        +        192,
        +        203
        +      ],
        +      "purple": [
        +        128,
        +        0,
        +        128
        +      ],
        +      "red": [
        +        255,
        +        0,
        +        0
        +      ],
        +      "salmon": [
        +        250,
        +        128,
        +        114
        +      ],
        +      "silver": [
        +        192,
        +        192,
        +        192
        +      ],
        +      "tan": [
        +        210,
        +        180,
        +        140
        +      ],
        +      "teal": [
        +        0,
        +        128,
        +        128
        +      ],
        +      "turquoise": [
        +        64,
        +        224,
        +        208
        +      ],
        +      "violet": [
        +        238,
        +        130,
        +        238
        +      ],
        +      "white": [
        +        255,
        +        255,
        +        255
        +      ],
        +      "yellow": [
        +        255,
        +        255,
        +        0
        +      ]
        +    },
        +    "of": "corners",
        +    "role": "fill"
        +  }
        +}
      • addedInput schema / properties / corners / x-ui
        Added value: +{
        +  "draw": {
        +    "of": "corners",
        +    "role": "which"
        +  }
        +}
      • addedInput schema / properties / radius / x-ui / draw
        Added value: +{
        +  "of": "corners",
        +  "role": "radius"
        +}
      • addedInput schema / properties / radius_unit / x-ui / draw
        Added value: +{
        +  "of": "corners",
        +  "role": "radius_unit"
        +}
      • addedInput schema / x-draw
        Added value: +{
        +  "corners": {
        +    "noun": "corners",
        +    "shape": "corners",
        +    "title": "The corners"
        +  }
        +}
    • Changedphoto_shadow_adder9 fields changed
      • changedInput schema / properties / angle / default
        Previous value: -315New value: +45
      • changedInput schema / properties / angle / description
        Previous value: -"Shadow direction in degrees."New value: +"Which way the shadow falls, in degrees clockwise from the right: 0 moves it right, 90 down, 180 left, 270 up. The default 45 puts it down and to the right, as if lit from the top left."
      • addedInput schema / properties / angle / x-ui / draw
        Added value: +{
        +  "of": "shadow",
        +  "role": "angle"
        +}
      • addedInput schema / properties / blur / x-ui / draw
        Added value: +{
        +  "of": "shadow",
        +  "role": "blur"
        +}
      • addedInput schema / properties / distance / x-ui / draw
        Added value: +{
        +  "of": "shadow",
        +  "role": "distance"
        +}
      • addedInput schema / properties / opacity / x-ui / draw
        Added value: +{
        +  "max": 100,
        +  "of": "shadow",
        +  "role": "opacity"
        +}
      • addedInput schema / properties / output_format / x-ui / draw
        Added value: +{
        +  "of": "shadow",
        +  "role": "format",
        +  "see_through": [
        +    "png"
        +  ]
        +}
      • addedInput schema / properties / shadow_color / x-ui
        Added value: +{
        +  "draw": {
        +    "names": {
        +      "aqua": [
        +        0,
        +        255,
        +        255
        +      ],
        +      "beige": [
        +        245,
        +        245,
        +        220
        +      ],
        +      "black": [
        +        0,
        +        0,
        +        0
        +      ],
        +      "blue": [
        +        0,
        +        0,
        +        255
        +      ],
        +      "brown": [
        +        165,
        +        42,
        +        42
        +      ],
        +      "crimson": [
        +        220,
        +        20,
        +        60
        +      ],
        +      "cyan": [
        +        0,
        +        255,
        +        255
        +      ],
        +      "fuchsia": [
        +        255,
        +        0,
        +        255
        +      ],
        +      "gold": [
        +        255,
        +        215,
        +        0
        +      ],
        +      "gray": [
        +        128,
        +        128,
        +        128
        +      ],
        +      "green": [
        +        0,
        +        128,
        +        0
        +      ],
        +      "grey": [
        +        128,
        +        128,
        +        128
        +      ],
        +      "indigo": [
        +        75,
        +        0,
        +        130
        +      ],
        +      "ivory": [
        +        255,
        +        255,
        +        240
        +      ],
        +      "khaki": [
        +        240,
        +        230,
        +        140
        +      ],
        +      "lavender": [
        +        230,
        +        230,
        +        250
        +      ],
        +      "lime": [
        +        0,
        +        255,
        +        0
        +      ],
        +      "magenta": [
        +        255,
        +        0,
        +        255
        +      ],
        +      "maroon": [
        +        128,
        +        0,
        +        0
        +      ],
        +      "navy": [
        +        0,
        +        0,
        +        128
        +      ],
        +      "olive": [
        +        128,
        +        128,
        +        0
        +      ],
        +      "orange": [
        +        255,
        +        165,
        +        0
        +      ],
        +      "pink": [
        +        255,
        +        192,
        +        203
        +      ],
        +      "purple": [
        +        128,
        +        0,
        +        128
        +      ],
        +      "red": [
        +        255,
        +        0,
        +        0
        +      ],
        +      "salmon": [
        +        250,
        +        128,
        +        114
        +      ],
        +      "silver": [
        +        192,
        +        192,
        +        192
        +      ],
        +      "tan": [
        +        210,
        +        180,
        +        140
        +      ],
        +      "teal": [
        +        0,
        +        128,
        +        128
        +      ],
        +      "turquoise": [
        +        64,
        +        224,
        +        208
        +      ],
        +      "violet": [
        +        238,
        +        130,
        +        238
        +      ],
        +      "white": [
        +        255,
        +        255,
        +        255
        +      ],
        +      "yellow": [
        +        255,
        +        255,
        +        0
        +      ]
        +    },
        +    "of": "shadow",
        +    "role": "color"
        +  }
        +}
      • addedInput schema / x-draw
        Added value: +{
        +  "shadow": {
        +    "noun": "shadow",
        +    "shape": "shadow",
        +    "title": "The shadow"
        +  }
        +}
    • Changedphoto_watermark8 fields changed
      • addedInput schema / properties / color / x-ui
        Added value: +{
        +  "draw": {
        +    "names": {
        +      "black": [
        +        0,
        +        0,
        +        0
        +      ],
        +      "blue": [
        +        37,
        +        99,
        +        235
        +      ],
        +      "brown": [
        +        120,
        +        63,
        +        4
        +      ],
        +      "cyan": [
        +        6,
        +        182,
        +        212
        +      ],
        +      "gray": [
        +        128,
        +        128,
        +        128
        +      ],
        +      "green": [
        +        22,
        +        163,
        +        74
        +      ],
        +      "grey": [
        +        128,
        +        128,
        +        128
        +      ],
        +      "magenta": [
        +        192,
        +        38,
        +        211
        +      ],
        +      "orange": [
        +        234,
        +        88,
        +        12
        +      ],
        +      "pink": [
        +        236,
        +        72,
        +        153
        +      ],
        +      "purple": [
        +        147,
        +        51,
        +        234
        +      ],
        +      "red": [
        +        220,
        +        38,
        +        38
        +      ],
        +      "white": [
        +        255,
        +        255,
        +        255
        +      ],
        +      "yellow": [
        +        250,
        +        204,
        +        21
        +      ]
        +    },
        +    "of": "mark",
        +    "role": "color"
        +  }
        +}
      • addedInput schema / properties / font_size / x-ui / draw
        Added value: +{
        +  "leading_number": true,
        +  "measure": "font-px",
        +  "of": "mark",
        +  "out_of_range": "default",
        +  "role": "size"
        +}
      • addedInput schema / properties / opacity / x-ui / draw
        Added value: +{
        +  "leading_number": true,
        +  "max": 100,
        +  "of": "mark",
        +  "role": "opacity"
        +}
      • addedInput schema / properties / position / x-ui / draw
        Added value: +{
        +  "cells": {
        +    "Center": "mc",
        +    "East": "mr",
        +    "North": "tc",
        +    "NorthEast": "tr",
        +    "NorthWest": "tl",
        +    "South": "bc",
        +    "SouthEast": "br",
        +    "SouthWest": "bl",
        +    "West": "ml"
        +  },
        +  "of": "mark",
        +  "role": "anchor"
        +}
      • addedInput schema / properties / stroke_color / x-ui / draw
        Added value: +{
        +  "light_luma": 140,
        +  "names": {
        +    "black": [
        +      0,
        +      0,
        +      0
        +    ],
        +    "blue": [
        +      37,
        +      99,
        +      235
        +    ],
        +    "brown": [
        +      120,
        +      63,
        +      4
        +    ],
        +    "cyan": [
        +      6,
        +      182,
        +      212
        +    ],
        +    "gray": [
        +      128,
        +      128,
        +      128
        +    ],
        +    "green": [
        +      22,
        +      163,
        +      74
        +    ],
        +    "grey": [
        +      128,
        +      128,
        +      128
        +    ],
        +    "magenta": [
        +      192,
        +      38,
        +      211
        +    ],
        +    "orange": [
        +      234,
        +      88,
        +      12
        +    ],
        +    "pink": [
        +      236,
        +      72,
        +      153
        +    ],
        +    "purple": [
        +      147,
        +      51,
        +      234
        +    ],
        +    "red": [
        +      220,
        +      38,
        +      38
        +    ],
        +    "white": [
        +      255,
        +      255,
        +      255
        +    ],
        +    "yellow": [
        +      250,
        +      204,
        +      21
        +    ]
        +  },
        +  "of": "mark",
        +  "role": "outline_color"
        +}
      • addedInput schema / properties / stroke_width / x-ui
        Added value: +{
        +  "draw": {
        +    "auto": {
        +      "max": 8,
        +      "min": 1,
        +      "per": 18
        +    },
        +    "leading_number": true,
        +    "max": 20,
        +    "of": "mark",
        +    "role": "outline_width"
        +  }
        +}
      • addedInput schema / properties / text / x-ui
        Added value: +{
        +  "draw": {
        +    "face": "noto-sans-condensed",
        +    "of": "mark",
        +    "role": "text"
        +  }
        +}
      • addedInput schema / x-draw
        Added value: +{
        +  "mark": {
        +    "noun": "watermark",
        +    "shape": "stamp",
        +    "title": "Watermark on the photo"
        +  }
        +}
  2. 16 tool updates
    • Changedpdf_delete_pages3 fields changed
      • changedInput schema / properties / pages / description
        Previous value: -"Pages to delete e.g. '1,3,5-7'"New value: +"Pages to delete e.g. '1,3,5-7'. At least one page must be left."
      • addedInput schema / properties / pages / title
        Added value: +"Pages to delete"
      • addedInput schema / properties / pages / x-ui
        Added value: +{
        +  "no_recall": true,
        +  "page_select": {
        +    "leave_one": true
        +  }
        +}
    • Changedpdf_extract_pages2 fields changed
      • addedInput schema / properties / pages / title
        Added value: +"Pages to extract"
      • addedInput schema / properties / pages / x-ui
        Added value: +{
        +  "no_recall": true,
        +  "page_select": {}
        +}
    • Changedpdf_flatten3 fields changed
      • addedInput schema / properties / pages / title
        Added value: +"Pages to flatten"
      • addedInput schema / properties / pages / x-ui / no_recall
        Added value: +true
      • addedInput schema / properties / pages / x-ui / page_select
        Added value: +{}
    • Changedpdf_flatten_batch3 fields changed
      • addedInput schema / properties / pages / title
        Added value: +"Pages to flatten"
      • addedInput schema / properties / pages / x-ui / no_recall
        Added value: +true
      • addedInput schema / properties / pages / x-ui / page_select
        Added value: +{}
    • Changedpdf_grayscale2 fields changed
      • changedInput schema / properties / pages / title
        Previous value: -"Only these pages"New value: +"Pages to convert"
      • addedInput schema / properties / pages / x-ui
        Added value: +{
        +  "no_recall": true,
        +  "page_select": {}
        +}
    • Changedpdf_header_footer2 fields changed
      • addedInput schema / properties / pages / title
        Added value: +"Pages to add the header and footer to"
      • addedInput schema / properties / pages / x-ui
        Added value: +{
        +  "no_recall": true,
        +  "page_select": {}
        +}
    • Changedpdf_merge1 field changed
      • addedInput schema / properties / pageRanges / x-ui
        Added value: +{
        +  "no_recall": true,
        +  "page_select": {
        +    "per_file": true
        +  }
        +}
    • Changedpdf_page_numbers2 fields changed
      • addedInput schema / properties / pageRange / title
        Added value: +"Pages to number"
      • addedInput schema / properties / pageRange / x-ui
        Added value: +{
        +  "no_recall": true,
        +  "page_select": {}
        +}
    • Changedpdf_rotate2 fields changed
      • addedInput schema / properties / pages / title
        Added value: +"Pages to rotate"
      • addedInput schema / properties / pages / x-ui
        Added value: +{
        +  "no_recall": true,
        +  "page_select": {}
        +}
    • Changedpdf_split2 fields changed
      • addedInput schema / properties / pages / title
        Added value: +"Pages to keep"
      • addedInput schema / properties / pages / x-ui
        Added value: +{
        +  "no_recall": true,
        +  "page_select": {
        +    "no_all": true
        +  }
        +}
    • Changedpdf_to_excel2 fields changed
      • addedInput schema / properties / pages / title
        Added value: +"Pages to read"
      • addedInput schema / properties / pages / x-ui
        Added value: +{
        +  "no_recall": true,
        +  "page_select": {}
        +}
    • Changedpdf_to_excel_batch2 fields changed
      • addedInput schema / properties / pages / title
        Added value: +"Pages to read"
      • addedInput schema / properties / pages / x-ui
        Added value: +{
        +  "no_recall": true,
        +  "page_select": {}
        +}
    • Changedpdf_to_excel_inspect3 fields changed
      • addedInput schema / properties / pages / title
        Added value: +"Pages to read"
      • addedInput schema / properties / pages / x-ui / no_recall
        Added value: +true
      • addedInput schema / properties / pages / x-ui / page_select
        Added value: +{}
    • Changedpdf_to_images2 fields changed
      • addedInput schema / properties / pages / title
        Added value: +"Pages to convert"
      • addedInput schema / properties / pages / x-ui
        Added value: +{
        +  "no_recall": true,
        +  "page_select": {}
        +}
    • Changedpdf_to_images_batch2 fields changed
      • addedInput schema / properties / pages / title
        Added value: +"Pages to convert"
      • addedInput schema / properties / pages / x-ui
        Added value: +{
        +  "no_recall": true,
        +  "page_select": {}
        +}
    • Changedpdf_watermark3 fields changed
      • changedInput schema / properties / pages / description
        Previous value: -"Comma-separated page numbers e.g. '1,3,5'. Empty = all pages."New value: +"Which pages to stamp, e.g. '1-3,5'. Empty = all pages."
      • addedInput schema / properties / pages / title
        Added value: +"Pages to stamp"
      • addedInput schema / properties / pages / x-ui
        Added value: +{
        +  "no_recall": true,
        +  "page_select": {}
        +}
  3. 8 tool updates
    • Changedanalyze_file_diff2 fields changed
      • changedInput schema / properties / text_a / x-ui / unset_label
        Previous value: -"Uses the original file instead"New value: +"Leave both texts empty to compare two files"
      • changedInput schema / properties / text_b / x-ui / unset_label
        Previous value: -"Uses the updated file instead"New value: +"Leave both texts empty to compare two files"
    • Changedpdf_excel_to_pdf3 fields changed
      • changedInput schema / properties / footer / x-ui / unset_label
        Previous value: -"No footer"New value: +"Sheet's own footer"
      • changedInput schema / properties / header / x-ui / unset_label
        Previous value: -"No header"New value: +"Sheet's own header"
      • changedInput schema / properties / repeatRows / x-ui / unset_label
        Previous value: -"No rows repeated"New value: +"Sheet's own print titles"
    • Changedpdf_excel_to_pdf_batch3 fields changed
      • changedInput schema / properties / footer / x-ui / unset_label
        Previous value: -"No footer"New value: +"Sheet's own footer"
      • changedInput schema / properties / header / x-ui / unset_label
        Previous value: -"No header"New value: +"Sheet's own header"
      • changedInput schema / properties / repeatRows / x-ui / unset_label
        Previous value: -"No rows repeated"New value: +"Sheet's own print titles"
    • Changedpdf_merge3 fields changed
      • changedInput schema / properties / author / x-ui / unset_label
        Previous value: -"Left out"New value: +"Kept from the first file"
      • changedInput schema / properties / subject / x-ui / unset_label
        Previous value: -"Left out"New value: +"Kept from the first file"
      • changedInput schema / properties / title / x-ui / unset_label
        Previous value: -"Left out"New value: +"Kept from the first file"
    • Changedpdf_protect2 fields changed
      • changedInput schema / properties / ownerPassword / x-ui / unset_label
        Previous value: -"Same as the open password"New value: +"Same as the open password (random if you limit permissions)"
      • changedInput schema / properties / userPassword / x-ui / unset_label
        Previous value: -"No password to open it"New value: +"Same as Password above"
    • Changedpdf_to_images1 field changed
      • removedInput schema / properties / namePattern / x-ui
        Removed value: -{
        -  "unset_label": "page_0001, page_0002, …"
        -}
    • Changedpdf_to_images_batch1 field changed
      • removedInput schema / properties / namePattern / x-ui
        Removed value: -{
        -  "unset_label": "page_0001, page_0002, …"
        -}
    • Changedphoto_meme_generator2 fields changed
      • changedInput schema / properties / bottom_text / x-ui / unset_label
        Previous value: -"No caption at the bottom"New value: +"None, as long as the top caption is set"
      • changedInput schema / properties / top_text / x-ui / unset_label
        Previous value: -"No caption at the top"New value: +"None, as long as the bottom caption is set"
  4. 5 tool updates
    • Changedmedia_trim_audio1 field changed
      • addedInput schema / properties / start / x-ui
        Added value: +{
        +  "pair_joint": "to",
        +  "pair_label": "Part to keep",
        +  "pair_with": "end"
        +}
    • Changedmedia_trim_video1 field changed
      • addedInput schema / properties / start / x-ui
        Added value: +{
        +  "pair_joint": "to",
        +  "pair_label": "Part to keep",
        +  "pair_with": "end"
        +}
    • Changedphoto_crop1 field changed
      • addedInput schema / properties / x / x-ui / pair_joint
        Added value: +","
    • Changedphoto_image_overlay3 fields changed
      • addedInput schema / properties / x_offset / x-ui / pair_joint
        Added value: +","
      • addedInput schema / properties / x_offset / x-ui / pair_label
        Added value: +"Nudge from the anchor"
      • addedInput schema / properties / x_offset / x-ui / pair_with
        Added value: +"y_offset"
    • Changedphoto_image_splitter1 field changed
      • addedInput schema / properties / cols / x-ui
        Added value: +{
        +  "pair_label": "Grid",
        +  "pair_with": "rows"
        +}
  5. 6 tool updates
    • Changedgenerate_placeholder_image2 fields changed
      • addedInput schema / properties / width / x-ui / pair_label
        Added value: +"Size"
      • addedInput schema / properties / width / x-ui / pair_with
        Added value: +"height"
    • Changedpdf_to_images2 fields changed
      • addedInput schema / properties / maxWidth / x-ui / pair_label
        Added value: +"Fit inside"
      • addedInput schema / properties / maxWidth / x-ui / pair_with
        Added value: +"maxHeight"
    • Changedpdf_to_images_batch2 fields changed
      • addedInput schema / properties / maxWidth / x-ui / pair_label
        Added value: +"Fit inside"
      • addedInput schema / properties / maxWidth / x-ui / pair_with
        Added value: +"maxHeight"
    • Changedphoto_crop4 fields changed
      • addedInput schema / properties / width / x-ui / pair_label
        Added value: +"Size"
      • addedInput schema / properties / width / x-ui / pair_with
        Added value: +"height"
      • addedInput schema / properties / x / x-ui / pair_label
        Added value: +"Top-left corner"
      • addedInput schema / properties / x / x-ui / pair_with
        Added value: +"y"
    • Changedphoto_resize2 fields changed
      • addedInput schema / properties / width / x-ui / pair_label
        Added value: +"Size"
      • addedInput schema / properties / width / x-ui / pair_with
        Added value: +"height"
    • Changedphoto_svg_to_png2 fields changed
      • addedInput schema / properties / width / x-ui / pair_label
        Added value: +"Size"
      • addedInput schema / properties / width / x-ui / pair_with
        Added value: +"height"
  6. 11 tool updates
    • Changedanalyze_file_diff2 fields changed
      • addedInput schema / properties / text_a / x-ui / multiline
        Added value: +true
      • addedInput schema / properties / text_b / x-ui / multiline
        Added value: +true
    • Changedanalyze_grammar_check1 field changed
      • addedInput schema / properties / text / x-ui
        Added value: +{
        +  "multiline": true
        +}
    • Changedanalyze_hash1 field changed
      • addedInput schema / properties / text / x-ui / multiline
        Added value: +true
    • Changedanalyze_json_xml_validator1 field changed
      • addedInput schema / properties / text / x-ui / multiline
        Added value: +true
    • Changedanalyze_link_extractor1 field changed
      • addedInput schema / properties / text / x-ui / multiline
        Added value: +true
    • Changedanalyze_readability1 field changed
      • addedInput schema / properties / text / x-ui
        Added value: +{
        +  "multiline": true
        +}
    • Changedanalyze_word_count1 field changed
      • addedInput schema / properties / text / x-ui
        Added value: +{
        +  "multiline": true
        +}
    • Changedanalyze_word_frequency1 field changed
      • addedInput schema / properties / text / x-ui / multiline
        Added value: +true
    • Changedconvert_text1 field changed
      • addedInput schema / properties / text / x-ui
        Added value: +{
        +  "multiline": true
        +}
    • Changeddata_to_file1 field changed
      • addedInput schema / properties / text / x-ui
        Added value: +{
        +  "multiline": true
        +}
    • Changedgenerate_hash1 field changed
      • addedInput schema / properties / text / x-ui
        Added value: +{
        +  "multiline": true
        +}
  7. 33 tool updates
    • Changedanalyze_file_diff2 fields changed
      • addedInput schema / properties / text_a / x-ui
        Added value: +{
        +  "unset_label": "Uses the original file instead"
        +}
      • addedInput schema / properties / text_b / x-ui
        Added value: +{
        +  "unset_label": "Uses the updated file instead"
        +}
    • Changedanalyze_hash1 field changed
      • addedInput schema / properties / text / x-ui
        Added value: +{
        +  "unset_label": "Uses the attached file instead"
        +}
    • Changedanalyze_json_xml_validator1 field changed
      • addedInput schema / properties / text / x-ui
        Added value: +{
        +  "unset_label": "Uses the attached file instead"
        +}
    • Changedanalyze_link_extractor1 field changed
      • addedInput schema / properties / text / x-ui
        Added value: +{
        +  "unset_label": "Uses the attached file instead"
        +}
    • Changedanalyze_word_frequency2 fields changed
      • addedInput schema / properties / exclude / x-ui
        Added value: +{
        +  "unset_label": "No extra words left out"
        +}
      • addedInput schema / properties / text / x-ui
        Added value: +{
        +  "unset_label": "Uses the attached file instead"
        +}
    • Changedconvert_sqlite1 field changed
      • addedInput schema / properties / table / x-ui
        Added value: +{
        +  "unset_label": "All tables"
        +}
    • Changedconvert_video1 field changed
      • addedInput schema / properties / bitrate_kbps / x-ui / unset_label
        Added value: +"Chosen automatically"
    • Changedemail_file1 field changed
      • addedInput schema / properties / note / x-ui
        Added value: +{
        +  "unset_label": "No note"
        +}
    • Changedgenerate_ascii_art1 field changed
      • addedInput schema / properties / text / x-ui
        Added value: +{
        +  "unset_label": "The picture is converted instead"
        +}
    • Changedgenerate_business_card1 field changed
      • addedInput schema / properties / jobTitle / x-ui
        Added value: +{
        +  "unset_label": "Left off the card"
        +}
    • Changedgenerate_certificate3 fields changed
      • addedInput schema / properties / description / x-ui
        Added value: +{
        +  "unset_label": "Left off the certificate"
        +}
      • addedInput schema / properties / issuerName / x-ui
        Added value: +{
        +  "unset_label": "Left off the certificate"
        +}
      • addedInput schema / properties / issuerTitle / x-ui
        Added value: +{
        +  "unset_label": "Left off the certificate"
        +}
    • Changedgenerate_gradient1 field changed
      • addedInput schema / properties / positions / x-ui / unset_label
        Added value: +"Spaced evenly"
    • Changedoctopus_move_file1 field changed
      • addedInput schema / properties / new_name / x-ui
        Added value: +{
        +  "unset_label": "Keeps its name"
        +}
    • Changedpdf_compress1 field changed
      • addedInput schema / properties / targetSize / x-ui / unset_label
        Added value: +"No size target: Quality decides"
    • Changedpdf_crop1 field changed
      • addedInput schema / properties / outputFilename / x-ui
        Added value: +{
        +  "unset_label": "Named after your file"
        +}
    • Changedpdf_excel_to_pdf6 fields changed
      • addedInput schema / properties / footer / x-ui
        Added value: +{
        +  "unset_label": "No footer"
        +}
      • addedInput schema / properties / header / x-ui
        Added value: +{
        +  "unset_label": "No header"
        +}
      • addedInput schema / properties / password / x-ui
        Added value: +{
        +  "unset_label": "No password"
        +}
      • addedInput schema / properties / permPassword / x-ui
        Added value: +{
        +  "unset_label": "Same as the open password"
        +}
      • addedInput schema / properties / repeatRows / x-ui
        Added value: +{
        +  "unset_label": "No rows repeated"
        +}
      • addedInput schema / properties / watermarkText / x-ui
        Added value: +{
        +  "unset_label": "No watermark"
        +}
    • Changedpdf_excel_to_pdf_batch6 fields changed
      • addedInput schema / properties / footer / x-ui
        Added value: +{
        +  "unset_label": "No footer"
        +}
      • addedInput schema / properties / header / x-ui
        Added value: +{
        +  "unset_label": "No header"
        +}
      • addedInput schema / properties / password / x-ui
        Added value: +{
        +  "unset_label": "No password"
        +}
      • addedInput schema / properties / permPassword / x-ui
        Added value: +{
        +  "unset_label": "Same as the open password"
        +}
      • addedInput schema / properties / repeatRows / x-ui
        Added value: +{
        +  "unset_label": "No rows repeated"
        +}
      • addedInput schema / properties / watermarkText / x-ui
        Added value: +{
        +  "unset_label": "No watermark"
        +}
    • Changedpdf_extract_pages1 field changed
      • addedInput schema / properties / outputName / x-ui
        Added value: +{
        +  "unset_label": "Named after your file"
        +}
    • Changedpdf_flatten2 fields changed
      • addedInput schema / properties / outputFilename / x-ui
        Added value: +{
        +  "unset_label": "Named after your file"
        +}
      • addedInput schema / properties / pages / x-ui
        Added value: +{
        +  "unset_label": "All pages"
        +}
    • Changedpdf_flatten_batch2 fields changed
      • addedInput schema / properties / outputFilename / x-ui
        Added value: +{
        +  "unset_label": "Named after your file"
        +}
      • addedInput schema / properties / pages / x-ui
        Added value: +{
        +  "unset_label": "All pages"
        +}
    • Changedpdf_header_footer3 fields changed
      • addedInput schema / properties / footer / x-ui
        Added value: +{
        +  "unset_label": "No footer text"
        +}
      • addedInput schema / properties / header / x-ui
        Added value: +{
        +  "unset_label": "No header text"
        +}
      • addedInput schema / properties / outputFilename / x-ui
        Added value: +{
        +  "unset_label": "Keeps your file's name"
        +}
    • Changedpdf_merge3 fields changed
      • addedInput schema / properties / author / x-ui
        Added value: +{
        +  "unset_label": "Left out"
        +}
      • addedInput schema / properties / subject / x-ui
        Added value: +{
        +  "unset_label": "Left out"
        +}
      • addedInput schema / properties / title / x-ui
        Added value: +{
        +  "unset_label": "Left out"
        +}
    • Changedpdf_protect3 fields changed
      • addedInput schema / properties / outputName / x-ui
        Added value: +{
        +  "unset_label": "Named after your file"
        +}
      • addedInput schema / properties / ownerPassword / x-ui
        Added value: +{
        +  "unset_label": "Same as the open password"
        +}
      • addedInput schema / properties / userPassword / x-ui
        Added value: +{
        +  "unset_label": "No password to open it"
        +}
    • Changedpdf_reorder2 fields changed
      • addedInput schema / properties / outputName / x-ui
        Added value: +{
        +  "unset_label": "Named after your file"
        +}
      • addedInput schema / properties / password / x-ui
        Added value: +{
        +  "unset_label": "Only needed for a locked PDF"
        +}
    • Changedpdf_set_metadata1 field changed
      • addedInput schema / properties / title / x-ui
        Added value: +{
        +  "unset_label": "Keeps the current title"
        +}
    • Changedpdf_to_excel_inspect2 fields changed
      • addedInput schema / properties / pages / x-ui
        Added value: +{
        +  "unset_label": "All pages"
        +}
      • addedInput schema / properties / tableIndexes / x-ui
        Added value: +{
        +  "unset_label": "All tables"
        +}
    • Changedpdf_to_images3 fields changed
      • addedInput schema / properties / crop / x-ui
        Added value: +{
        +  "unset_label": "No cropping"
        +}
      • addedInput schema / properties / namePattern / x-ui
        Added value: +{
        +  "unset_label": "page_0001, page_0002, …"
        +}
      • addedInput schema / properties / watermarkText / x-ui
        Added value: +{
        +  "unset_label": "No watermark"
        +}
    • Changedpdf_to_images_batch3 fields changed
      • addedInput schema / properties / crop / x-ui
        Added value: +{
        +  "unset_label": "No cropping"
        +}
      • addedInput schema / properties / namePattern / x-ui
        Added value: +{
        +  "unset_label": "page_0001, page_0002, …"
        +}
      • addedInput schema / properties / watermarkText / x-ui
        Added value: +{
        +  "unset_label": "No watermark"
        +}
    • Changedpdf_unlock1 field changed
      • addedInput schema / properties / outputName / x-ui
        Added value: +{
        +  "unset_label": "Named after your file"
        +}
    • Changedphoto_bg_remover1 field changed
      • addedInput schema / properties / bg_color / x-ui
        Added value: +{
        +  "unset_label": "Transparent"
        +}
    • Changedphoto_face_blur1 field changed
      • addedInput schema / properties / manual_faces / x-ui
        Added value: +{
        +  "unset_label": "Only the faces it finds"
        +}
    • Changedphoto_meme_generator2 fields changed
      • addedInput schema / properties / bottom_text / x-ui
        Added value: +{
        +  "unset_label": "No caption at the bottom"
        +}
      • addedInput schema / properties / top_text / x-ui
        Added value: +{
        +  "unset_label": "No caption at the top"
        +}
    • Changedphoto_watermark1 field changed
      • addedInput schema / properties / stroke_color / x-ui
        Added value: +{
        +  "unset_label": "Picked to stand out from the text"
        +}
  8. 6 tool updates
    • Changedanalyze_audio1 field changed
      • changedInput schema / properties / file / description
        Previous value: -"Input file (MP3, WAV, AAC, FLAC, OGG)"New value: +"Input file (MP3, WAV, AAC, OGG, FLAC, M4A, WMA, OPUS or AIFF)"
    • Changedanalyze_video1 field changed
      • changedInput schema / properties / file / description
        Previous value: -"Input file (MP4, MOV, AVI, MKV, WebM)"New value: +"Input file (MP4, MOV, AVI, MKV, WebM, WMV, FLV, 3GP or MPG)"
    • Changedmedia_extract_audio1 field changed
      • changedInput schema / properties / file / description
        Previous value: -"Video to pull the soundtrack from (any FFmpeg-readable container). Audio is always re-encoded to `format`, never stream-copied."New value: +"Video to pull the soundtrack from (any FFmpeg-readable container), or an M4A: an MP4 that carries only sound. Audio is always re-encoded to `format`, never stream-copied."
    • Changedmedia_merge_audio1 field changed
      • changedInput schema / properties / files / description
        Previous value: -"Input audio files (MP3, WAV, AAC, OGG) — at least 2 required."New value: +"Input audio files (MP3, WAV, AAC, OGG, FLAC, M4A, WMA, OPUS or AIFF) — at least 2 required."
    • Changedmedia_mute_video1 field changed
      • changedInput schema / properties / file / description
        Previous value: -"Input file (MP4, MOV, AVI, MKV)"New value: +"Input file (MP4, MOV, AVI, MKV, WebM or MPG)"
    • Changedmedia_trim_audio1 field changed
      • changedInput schema / properties / file / description
        Previous value: -"Audio to trim. Output keeps this file's container/codec (stream copy); a filename with no extension is treated as .mp3."New value: +"Audio to trim. Output keeps this file's container/codec (stream copy); a file name with no extension is read by the file's type, and treated as .mp3 when the type names no sound format."
  9. 17 tool updates
    • Changedanalyze_file_diff3 fields changed
      • addedInput schema / properties / file_a / title
        Added value: +"Original file"
      • addedInput schema / properties / file_b / title
        Added value: +"Updated file"
      • addedInput schema / x-require-one-of
        Added value: +[
        +  [
        +    "file_a",
        +    "file_b"
        +  ],
        +  [
        +    "text_a",
        +    "text_b"
        +  ]
        +]
    • Changedanalyze_hash1 field changed
      • addedInput schema / x-require-one-of
        Added value: +[
        +  [
        +    "file"
        +  ],
        +  [
        +    "text"
        +  ]
        +]
    • Changedanalyze_json_xml_validator2 fields changed
      • addedInput schema / x-passes-no-file
        Added value: +true
      • addedInput schema / x-require-one-of
        Added value: +[
        +  [
        +    "file"
        +  ],
        +  [
        +    "text"
        +  ]
        +]
    • Changedanalyze_link_extractor1 field changed
      • addedInput schema / x-require-one-of
        Added value: +[
        +  [
        +    "file"
        +  ],
        +  [
        +    "text"
        +  ]
        +]
    • Changedanalyze_readability1 field changed
      • addedInput schema / x-require-one-of
        Added value: +[
        +  [
        +    "file"
        +  ],
        +  [
        +    "text"
        +  ]
        +]
    • Changedanalyze_word_count1 field changed
      • addedInput schema / x-require-one-of
        Added value: +[
        +  [
        +    "file"
        +  ],
        +  [
        +    "text"
        +  ]
        +]
    • Changedanalyze_word_frequency1 field changed
      • addedInput schema / x-require-one-of
        Added value: +[
        +  [
        +    "file"
        +  ],
        +  [
        +    "text"
        +  ]
        +]
    • Changeddrive_upload1 field changed
      • addedInput schema / x-passes-no-file
        Added value: +true
    • Changedemail_file1 field changed
      • addedInput schema / x-passes-no-file
        Added value: +true
    • Changedgenerate_hash1 field changed
      • addedInput schema / x-require-one-of
        Added value: +[
        +  [
        +    "file"
        +  ],
        +  [
        +    "text"
        +  ]
        +]
    • Changedoctopus_make_folder1 field changed
      • addedInput schema / x-passes-no-file
        Added value: +true
    • Changedphoto_color_adjuster1 field changed
      • changedInput schema / properties / file / description
        Previous value: -"JPG, PNG, WebP, GIF, BMP, HEIC, TIFF. Max 25 MB. Output keeps the input format."New value: +"JPG, PNG, WebP, GIF, BMP, HEIC, TIFF. Max 25 MB. Output keeps the input format, except that a HEIC or HEIF photo comes back as a JPG."
    • Changedphoto_crop1 field changed
      • changedInput schema / properties / file / description
        Previous value: -"JPG, PNG, WebP, HEIC, TIFF, BMP, or GIF. Output keeps the input format."New value: +"JPG, PNG, WebP, HEIC, TIFF, BMP, or GIF. Output keeps the input format, except that a HEIC or HEIF photo comes back as a JPG."
    • Changedphoto_editor1 field changed
      • changedInput schema / properties / file / description
        Previous value: -"JPG, PNG, WebP, GIF, BMP, HEIC, TIFF (max 25MB)"New value: +"JPG, PNG, WebP, GIF, BMP, HEIC, TIFF (max 25MB). Output keeps the input format, except that a HEIC or HEIF photo comes back as a JPG."
    • Changedphoto_face_detect1 field changed
      • changedInput schema / properties / file / description
        Previous value: -"Input file (JPG, PNG)"New value: +"Input file (JPG, PNG, WebP, BMP)"
    • Changedphoto_resize1 field changed
      • changedInput schema / properties / file / description
        Previous value: -"JPG, PNG, WebP, GIF, BMP"New value: +"JPG, PNG, WebP, GIF, BMP, TIFF, AVIF, HEIC or HEIF. Output keeps the input format, except that a HEIC or HEIF photo comes back as a JPG."
    • Changedphoto_watermark1 field changed
      • changedInput schema / properties / file / description
        Previous value: -"JPG, PNG, WebP, GIF, BMP, HEIC, TIFF. Max 25 MB. Output keeps the input format."New value: +"JPG, PNG, WebP, GIF, BMP, HEIC, TIFF. Max 25 MB. Output keeps the input format, except that a HEIC or HEIF photo comes back as a JPG."
  10. 13 tool updates
    • Changedgenerate_ascii_art2 fields changed
      • changedInput schema / properties / file / description
        Previous value: -"The picture to convert (max 10 MB)."New value: +"The picture to convert, up to 10 MB. Used when Mode is Image, and also when Text is left empty; with words in Text and Mode on Text, the picture is ignored."
      • removedInput schema / properties / file / x-show-when
        Removed value: -{
        -  "mode": [
        -    "image"
        -  ]
        -}
    • Changedgenerate_gradient1 field changed
      • changedInput schema / properties / positions / description
        Previous value: -"Optional, and API-only for now: the builder cannot draw it safely yet. Where each colour sits along the blend, as a percentage, one entry per colour. Leave it out and the colours are spaced evenly. The API accepts it normally; it is hidden in the builder because the control an array gets there is a chip list, and a chip list DISCARDS DUPLICATES — a hard-edged gradient needs two colours at the same stop (0,50,50,100) and the chips would silently collapse that to three stops and change the picture. Same defect class as pdf_merge.pageRanges. Show it once there is a control that keeps one entry per colour."New value: +"Where each colour sits along the blend, as a percentage from 0 to 100: one entry per colour, in the same order. Two colours at the same stop make a hard edge (0, 50, 50, 100). Leave it out and the colours are spaced evenly. A list without exactly one entry per colour is refused."
    • Changedgenerate_signature3 fields changed
      • changedInput schema / properties / background / description
        Previous value: -"'transparent' is what makes the result stampable onto a PDF or a photo. Give a hex colour instead if you want it on a solid card."New value: +"'transparent' is what makes the result stampable onto a PDF or a photo. Give a colour instead, as hex or a name such as white, if you want it on a solid card. A colour we cannot read is refused rather than turned transparent."
      • changedInput schema / properties / color / description
        Previous value: -"A hex colour, with or without the leading '#'. Anything we cannot read reverts to the default ink."New value: +"A hex colour (#1a1a2e or #fff, with or without the '#', optionally with an alpha pair) or a colour name such as black or navy. A colour we cannot read is refused, and so is ink that would not show, such as transparent."
      • changedInput schema / properties / style / description
        Previous value: -"Which handwriting face to use. If the chosen face is not installed on the server the request fails and says so, rather than handing back a 'signature' in a plain block font."New value: +"Which handwriting face to use: Script is Dancing Script, Elegant is Great Vibes, Handwritten is Pacifico and Bold is Lobster, the faces the web page draws. When that face is not installed on our server, another handwriting face is drawn in its place, never a plain block font, and the X-JE-Font-Substituted response header says so. Only when no handwriting face is installed does the request fail."
    • Changedmedia_add_watermark1 field changed
      • changedInput schema / properties / text / description
        Previous value: -"The words burned into every frame. Required, and there is no default: a step nobody opened used to burn our own company name into the customer's video."New value: +"The words burned into every frame, drawn exactly as typed (% signs and backslashes included) on one line of up to 200 characters. Required; there is no default."
    • Changedpdf_watermark1 field changed
      • addedInput schema / properties / imageFile / x-show-when
        Added value: +{
        +  "mode": [
        +    "image"
        +  ]
        +}
    • Changedphoto_collage2 fields changed
      • changedInput schema / properties / template / description
        Previous value: -"Named template (layout_mode=template), e.g. ig_post_2x2, ig_story_3_vertical, ig_post_5_magazine."New value: +"Named template (layout_mode=template), e.g. ig_post_2x2, ig_story_3_vertical, ig_post_5_magazine. Needed when Layout mode is template: there is no default, and a template-mode run with none chosen, or with fewer photos than the template has places for, is refused with the reason."
      • changedInput schema / properties / template / x-ui / unset_label
        Previous value: -"No template"New value: +"Choose a template"
    • Changedphoto_compress1 field changed
      • changedInput schema / properties / output_format / x-ui / unset_label
        Previous value: -"Keeps input format"New value: +"Keeps input format (HEIC becomes JPG)"
    • Changedphoto_compress_to_size1 field changed
      • changedInput schema / properties / output_format / x-ui / unset_label
        Previous value: -"Keeps input format"New value: +"Keeps input format (HEIC becomes JPG)"
    • Changedphoto_image_overlay1 field changed
      • changedInput schema / properties / scale / description
        Previous value: -"Overlay width as a percent of background width, 1-200."New value: +"Overlay size as a percent of the overlay's own size, not of the background: 100 keeps it as it is, 50 halves it, 200 doubles it."
    • Changedphoto_image_splitter3 fields changed
      • addedInput schema / properties / cols / title
        Added value: +"Columns"
      • removedInput schema / properties / cols / x-ui
        Removed value: -{
        -  "unit": "columns"
        -}
      • removedInput schema / properties / rows / x-ui
        Removed value: -{
        -  "unit": "rows"
        -}
    • Changedphoto_rounded_corners2 fields changed
      • changedInput schema / properties / background / description
        Previous value: -"What fills the corners that were rounded off: 'transparent' (the default; 'none' is accepted as a synonym for it) leaves them see-through, or 'white', 'black', or a hex value such as #1a1a1a. That is the whole list — any other colour name, red or navy included, is refused with a 400, even though Add Border accepts them."New value: +"What fills the corners that were rounded off: 'transparent' (the default; 'none' means the same) leaves them see-through. Anything else fills them with a colour: a hex value (#rgb, #rgba, #rrggbb or #rrggbbaa, such as #1a1a1a) or any of the named colours Add Border accepts (red, navy, gold and others; not case-sensitive). Any other name is refused with a 400 that lists every accepted name."
      • addedInput schema / properties / radius / x-ui
        Added value: +{
        +  "unit_from": {
        +    "by_value": {
        +      "percent": {
        +        "maximum": 50,
        +        "unit": "%"
        +      },
        +      "px": {
        +        "maximum": 5000,
        +        "unit": "px"
        +      }
        +    },
        +    "param": "radius_unit"
        +  }
        +}
    • Changedphoto_to_text1 field changed
      • changedInput schema / properties / languages / description
        Previous value: -"Which language or languages the writing is in, as two-letter codes. One, or several separated by commas: en, or en,fr. Common ones are en, fr, de, es, pt, it, nl, ru, ar, zh, ja, ko. Field name is languages, not language, and Tesseract-style codes like eng are not recognised."New value: +"Which language or languages the writing is in. One code, or several separated by commas (en,fr); a plus sign works too, as Tesseract writes it (eng+fra). Two-letter codes are the usual form: en, fr, de, es, pt, it, nl, ru, ar, zh, ja, ko. Tesseract's own codes (eng, fra, deu, chi_sim, chi_tra, ...) are also accepted; each of the two reading engines is handed its own spelling of the language. A language whose reading pack is not installed on our server is refused with a message that says so, rather than reported as an engine fault. Letters and underscores only, not case-sensitive; a value with no code in it, such as a lone comma, is refused with a 400. Field name is languages, not language."
    • Changedphoto_watermark1 field changed
      • changedInput schema / properties / text / description
        Previous value: -"The words stamped onto the photo. Required, and there is no default: a step nobody opened used to stamp our own company name onto the customer's picture. A leading '@' is stripped."New value: +"The words stamped onto the photo. Required; there is no default. A leading '@' is removed."
  11. 24 tool updates
    • Changedanalyze_json_xml_validator2 fields changed
      • addedInput schema / properties / file
        Added value: +{
        +  "description": "A JSON or XML file to check — this is how a previous step hands its output over. Up to 1 MB. Send this or the text below; a file wins if both arrive.",
        +  "format": "binary",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "text"
        -]New value: +[]
    • Changedconvert_data1 field changed
      • addedInput schema / properties / from / x-ui
        Added value: +{
        +  "unset_label": "Read from file"
        +}
    • Changedconvert_file1 field changed
      • addedInput schema / properties / from / x-ui
        Added value: +{
        +  "unset_label": "Read from file"
        +}
    • Changedconvert_geo1 field changed
      • addedInput schema / properties / from / x-ui
        Added value: +{
        +  "unset_label": "Read from file"
        +}
    • Changedconvert_parquet1 field changed
      • addedInput schema / properties / from / x-ui
        Added value: +{
        +  "unset_label": "Read from file"
        +}
    • Changedconvert_video1 field changed
      • addedInput schema / properties / preset_name / x-ui / unset_label
        Added value: +"No preset"
    • Changedpdf_excel_to_pdf3 fields changed
      • addedInput schema / properties / gridlines / x-ui / unset_label
        Added value: +"Sheet's own setting"
      • addedInput schema / properties / quality / x-ui / unset_label
        Added value: +"Converter's setting"
      • addedInput schema / properties / showHeaders / x-ui / unset_label
        Added value: +"Sheet's own setting"
    • Changedpdf_excel_to_pdf_batch3 fields changed
      • addedInput schema / properties / gridlines / x-ui / unset_label
        Added value: +"Sheet's own setting"
      • addedInput schema / properties / quality / x-ui / unset_label
        Added value: +"Converter's setting"
      • addedInput schema / properties / showHeaders / x-ui / unset_label
        Added value: +"Sheet's own setting"
    • Changedpdf_images_to_pdf1 field changed
      • addedInput schema / properties / orientation / x-ui / unset_label
        Added value: +"Follows page size"
    • Changedpdf_to_images2 fields changed
      • addedInput schema / properties / preset / x-ui / unset_label
        Added value: +"No preset"
      • changedInput schema / properties / watermarkFontSize / description
        Previous value: -"Points against the bitmap's 72dpi density — at dpi=300 text is ~4x smaller on the page than in a PDF. Needs watermarkText."New value: +"Size of the stamped text in PIXELS of the rasterised page: it is annotated onto the bitmap at ImageMagick's 72 dpi default, so at dpi=300 the same number covers ~4x less of the page than it would inside a PDF. Needs watermarkText."
    • Changedpdf_to_images_batch2 fields changed
      • addedInput schema / properties / preset / x-ui / unset_label
        Added value: +"No preset"
      • changedInput schema / properties / watermarkFontSize / description
        Previous value: -"Points against the bitmap's 72dpi density — at dpi=300 text is ~4x smaller on the page than in a PDF. Needs watermarkText."New value: +"Size of the stamped text in PIXELS of the rasterised page: it is annotated onto the bitmap at ImageMagick's 72 dpi default, so at dpi=300 the same number covers ~4x less of the page than it would inside a PDF. Needs watermarkText."
    • Changedphoto_add_border2 fields changed
      • changedInput schema / properties / color / description
        Previous value: -"A hex colour (#rgb, #rgba, #rrggbb or #rrggbbaa) or one of the 35 standard CSS colour names. Anything else is refused rather than quietly falling back. A see-through colour needs a PNG or WebP input — on a JPEG it is refused, because JPEG cannot hold transparency and the border would come out black."New value: +"A hex colour (#rgb, #rgba, #rrggbb or #rrggbbaa) or one of these 35 names — a hand-picked set, not the whole CSS list, so lightblue and darkgreen are refused: black, silver, gray, grey, white, maroon, red, purple, fuchsia, green, lime, olive, yellow, navy, blue, teal, aqua, cyan, magenta, orange, pink, brown, beige, ivory, gold, tan, khaki, crimson, indigo, violet, salmon, turquoise, lavender, plus none and transparent, which still widen the picture by the border size on every side but fill those new pixels with see-through rather than a visible frame. Anything else is refused rather than quietly falling back. A see-through colour needs a PNG or WebP input — on a JPEG it is refused, because JPEG cannot hold transparency and the border would come out black."
      • changedInput schema / properties / size / description
        Previous value: -"How thick the border is, in pixels, on all four sides. Out-of-range values are pulled back to the nearest allowed value rather than refused; 0 returns the picture untouched."New value: +"How thick the border is, in pixels, on all four sides. Out-of-range values are pulled back to the nearest allowed value rather than refused. 0 adds no border, but it is NOT a pass-through: the picture is still decoded and written out again (a JPEG is re-encoded at quality 92), and an EXIF-rotated phone photo comes back physically rotated with its orientation tag cleared."
    • Changedphoto_collage1 field changed
      • addedInput schema / properties / template / x-ui / unset_label
        Added value: +"No template"
    • Changedphoto_compress1 field changed
      • addedInput schema / properties / output_format / x-ui
        Added value: +{
        +  "unset_label": "Keeps input format"
        +}
    • Changedphoto_compress_to_size1 field changed
      • addedInput schema / properties / output_format / x-ui
        Added value: +{
        +  "unset_label": "Keeps input format"
        +}
    • Changedphoto_face_blur1 field changed
      • addedInput schema / properties / output_format / x-ui
        Added value: +{
        +  "unset_label": "Keeps input format"
        +}
    • Changedphoto_image_overlay1 field changed
      • addedInput schema / properties / output_format / x-ui
        Added value: +{
        +  "unset_label": "Keeps background's format"
        +}
    • Changedphoto_image_splitter1 field changed
      • addedInput schema / properties / output_format / x-ui
        Added value: +{
        +  "unset_label": "Keeps input format"
        +}
    • Changedphoto_meme_generator1 field changed
      • addedInput schema / properties / output_format / x-ui
        Added value: +{
        +  "unset_label": "Keeps input format"
        +}
    • Changedphoto_noise_reducer1 field changed
      • addedInput schema / properties / output_format / x-ui
        Added value: +{
        +  "unset_label": "Keeps input format"
        +}
    • Changedphoto_rounded_corners3 fields changed
      • changedInput schema / properties / background / description
        Previous value: -"What fills the corners that were rounded off: 'transparent' (the default) leaves them see-through, or give a colour name or a hex value to fill them instead."New value: +"What fills the corners that were rounded off: 'transparent' (the default; 'none' is accepted as a synonym for it) leaves them see-through, or 'white', 'black', or a hex value such as #1a1a1a. That is the whole list — any other colour name, red or navy included, is refused with a 400, even though Add Border accepts them."
      • changedInput schema / properties / radius / description
        Previous value: -"How far the curve reaches in from each corner. Out-of-range values are pulled back rather than refused, and the value is capped again per picture at half the shorter side, because a curve larger than that has no meaning. Fractions are rounded."New value: +"How far the curve reaches in from each corner. Measured in whichever unit the next setting says: PIXELS, up to 5000 — or PERCENT of the shorter side, where anything above 50 is treated as 50, because half the shorter side is a full semicircle and there is nothing beyond it. Out-of-range values are pulled back rather than refused. Fractions are rounded."
      • removedInput schema / properties / radius / x-ui
        Removed value: -{
        -  "unit": "px"
        -}
    • Changedphoto_shadow_adder1 field changed
      • addedInput schema / properties / output_format / x-ui
        Added value: +{
        +  "unset_label": "Keeps input format"
        +}
    • Changedphoto_upscaler1 field changed
      • addedInput schema / properties / output_format / x-ui
        Added value: +{
        +  "unset_label": "Keeps input format"
        +}
    • Changedphoto_watermark3 fields changed
      • changedInput schema / properties / color / description
        Previous value: -"A hex colour, or one of white, black, gray, red, orange, yellow, green, blue, cyan, magenta, purple, pink, brown. Anything else falls back to white."New value: +"A hex colour, or one of white, black, gray, grey, red, orange, yellow, green, blue, cyan, magenta, purple, pink, brown. Anything else falls back to white."
      • changedInput schema / properties / font_size / description
        Previous value: -"Points. Out-of-range values (<6 or >500) silently reset to 36 — no error returned."New value: +"How big the lettering is, measured in PIXELS of the photo rather than points on a page: the words are drawn straight onto the bitmap, so the same number gives the same size here, on the Signature Generator and on PDF to Images. Out-of-range values (<6 or >500) silently reset to 36 — no error returned."
      • changedInput schema / properties / font_size / x-ui / unit
        Previous value: -"pt"New value: +"px"
  12. 48 tool updates
    • Removedanalyze_grammar_check_batch
    • Addedanalyze_json_xml_validator
    • Changedconvert_file2 fields changed
      • addedInput schema / properties / gif_fps / x-ui
        Added value: +{
        +  "unit": "fps"
        +}
      • addedInput schema / properties / gif_width / x-ui
        Added value: +{
        +  "unit": "px"
        +}
    • Changedconvert_video1 field changed
      • addedInput schema / properties / bitrate_kbps / x-ui
        Added value: +{
        +  "unit": "kbps"
        +}
    • Changedgenerate_ascii_art1 field changed
      • addedInput schema / properties / width / x-ui
        Added value: +{
        +  "unit": "chars"
        +}
    • Changedgenerate_barcode1 field changed
      • addedInput schema / properties / height / x-ui
        Added value: +{
        +  "unit": "px"
        +}
    • Addedgenerate_color_palette
    • Changedgenerate_favicon1 field changed
      • addedInput schema / properties / borderRadius / x-ui
        Added value: +{
        +  "unit": "%"
        +}
    • Addedgenerate_gradient
    • Removedgenerate_invoice
    • Changedgenerate_password1 field changed
      • addedInput schema / properties / length / x-ui
        Added value: +{
        +  "unit": "chars"
        +}
    • Changedgenerate_placeholder_image2 fields changed
      • addedInput schema / properties / height / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / width / x-ui
        Added value: +{
        +  "unit": "px"
        +}
    • Changedgenerate_qr_code1 field changed
      • addedInput schema / properties / size / x-ui
        Added value: +{
        +  "unit": "px"
        +}
    • Addedgenerate_signature
    • Addedgenerate_uuid
    • Changedmedia_add_watermark4 fields changed
      • addedInput schema / properties / fontsize / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • removedInput schema / properties / text / default
        Removed value: -"John's Essentials"
      • changedInput schema / properties / text / description
        Previous value: -"Watermark text."New value: +"The words burned into every frame. Required, and there is no default: a step nobody opened used to burn our own company name into the customer's video."
      • changedInput schema / required
        Previous value: -[
        -  "file"
        -]New value: +[
        +  "file",
        +  "text"
        +]
    • Changedmedia_extract_frames1 field changed
      • addedInput schema / properties / fps / x-ui
        Added value: +{
        +  "unit": "fps"
        +}
    • Changedpdf_crop4 fields changed
      • addedInput schema / properties / bottom / x-ui
        Added value: +{
        +  "unit": "pt"
        +}
      • addedInput schema / properties / left / x-ui
        Added value: +{
        +  "unit": "pt"
        +}
      • addedInput schema / properties / right / x-ui
        Added value: +{
        +  "unit": "pt"
        +}
      • addedInput schema / properties / top / x-ui
        Added value: +{
        +  "unit": "pt"
        +}
    • Changedpdf_excel_to_pdf4 fields changed
      • addedInput schema / properties / scale / x-ui
        Added value: +{
        +  "unit": "%"
        +}
      • addedInput schema / properties / watermarkFontSize / x-ui
        Added value: +{
        +  "unit": "pt"
        +}
      • addedInput schema / properties / watermarkRotation / x-ui
        Added value: +{
        +  "unit": "deg"
        +}
      • addedInput schema / properties / watermarkScale / x-ui
        Added value: +{
        +  "unit": "x"
        +}
    • Changedpdf_excel_to_pdf_batch4 fields changed
      • addedInput schema / properties / scale / x-ui
        Added value: +{
        +  "unit": "%"
        +}
      • addedInput schema / properties / watermarkFontSize / x-ui
        Added value: +{
        +  "unit": "pt"
        +}
      • addedInput schema / properties / watermarkRotation / x-ui
        Added value: +{
        +  "unit": "deg"
        +}
      • addedInput schema / properties / watermarkScale / x-ui
        Added value: +{
        +  "unit": "x"
        +}
    • Changedpdf_flatten3 fields changed
      • addedInput schema / properties / watermarkFontSize / x-ui
        Added value: +{
        +  "unit": "pt"
        +}
      • addedInput schema / properties / watermarkRotation / x-ui
        Added value: +{
        +  "unit": "deg"
        +}
      • addedInput schema / properties / watermarkScale / x-ui
        Added value: +{
        +  "unit": "x"
        +}
    • Changedpdf_flatten_batch3 fields changed
      • addedInput schema / properties / watermarkFontSize / x-ui
        Added value: +{
        +  "unit": "pt"
        +}
      • addedInput schema / properties / watermarkRotation / x-ui
        Added value: +{
        +  "unit": "deg"
        +}
      • addedInput schema / properties / watermarkScale / x-ui
        Added value: +{
        +  "unit": "x"
        +}
    • Changedpdf_header_footer2 fields changed
      • addedInput schema / properties / fontSize / x-ui
        Added value: +{
        +  "unit": "pt"
        +}
      • addedInput schema / properties / margin / x-ui
        Added value: +{
        +  "unit": "pt"
        +}
    • Changedpdf_images_to_pdf1 field changed
      • addedInput schema / properties / margin / x-ui
        Added value: +{
        +  "unit": "pt"
        +}
    • Changedpdf_page_numbers1 field changed
      • addedInput schema / properties / fontSize / x-ui
        Added value: +{
        +  "unit": "pt"
        +}
    • Changedpdf_split1 field changed
      • addedInput schema / properties / chunkSize / x-ui
        Added value: +{
        +  "unit": "pages"
        +}
    • Changedpdf_to_images6 fields changed
      • addedInput schema / properties / dpi / x-ui
        Added value: +{
        +  "unit": "dpi"
        +}
      • addedInput schema / properties / maxHeight / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / maxWidth / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / sheetGap / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / watermarkFontSize / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / watermarkRotation / x-ui
        Added value: +{
        +  "unit": "deg"
        +}
    • Changedpdf_to_images_batch6 fields changed
      • addedInput schema / properties / dpi / x-ui
        Added value: +{
        +  "unit": "dpi"
        +}
      • addedInput schema / properties / maxHeight / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / maxWidth / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / sheetGap / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / watermarkFontSize / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / watermarkRotation / x-ui
        Added value: +{
        +  "unit": "deg"
        +}
    • Changedpdf_watermark2 fields changed
      • addedInput schema / properties / fontSize / x-ui
        Added value: +{
        +  "unit": "pt"
        +}
      • addedInput schema / properties / rotation / x-ui
        Added value: +{
        +  "unit": "deg"
        +}
    • Addedphoto_add_border
    • Changedphoto_collage3 fields changed
      • addedInput schema / properties / gap / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / output_long_edge / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / output_width / x-ui
        Added value: +{
        +  "unit": "px"
        +}
    • Changedphoto_color_adjuster3 fields changed
      • addedInput schema / properties / brightness / x-ui
        Added value: +{
        +  "unit": "%"
        +}
      • addedInput schema / properties / contrast / x-ui
        Added value: +{
        +  "unit": "%"
        +}
      • addedInput schema / properties / saturation / x-ui
        Added value: +{
        +  "unit": "%"
        +}
    • Changedphoto_compress_to_size1 field changed
      • addedInput schema / properties / target_size_kb / x-ui
        Added value: +{
        +  "unit": "KB"
        +}
    • Changedphoto_crop4 fields changed
      • addedInput schema / properties / height / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / width / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / x / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / y / x-ui
        Added value: +{
        +  "unit": "px"
        +}
    • Changedphoto_face_blur2 fields changed
      • addedInput schema / properties / block_size / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / blur_radius / x-ui
        Added value: +{
        +  "unit": "px"
        +}
    • Changedphoto_flip_rotate1 field changed
      • addedInput schema / properties / degrees / x-ui
        Added value: +{
        +  "unit": "deg"
        +}
    • Changedphoto_image_diff1 field changed
      • addedInput schema / properties / fuzz / x-ui
        Added value: +{
        +  "unit": "%"
        +}
    • Changedphoto_image_overlay4 fields changed
      • addedInput schema / properties / opacity / x-ui
        Added value: +{
        +  "unit": "%"
        +}
      • addedInput schema / properties / scale / x-ui
        Added value: +{
        +  "unit": "%"
        +}
      • addedInput schema / properties / x_offset / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / y_offset / x-ui
        Added value: +{
        +  "unit": "px"
        +}
    • Changedphoto_image_splitter2 fields changed
      • addedInput schema / properties / cols / x-ui
        Added value: +{
        +  "unit": "columns"
        +}
      • addedInput schema / properties / rows / x-ui
        Added value: +{
        +  "unit": "rows"
        +}
    • Changedphoto_resize3 fields changed
      • addedInput schema / properties / height / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / percentage / x-ui
        Added value: +{
        +  "unit": "%"
        +}
      • addedInput schema / properties / width / x-ui
        Added value: +{
        +  "unit": "px"
        +}
    • Addedphoto_rounded_corners
    • Changedphoto_shadow_adder4 fields changed
      • addedInput schema / properties / angle / x-ui
        Added value: +{
        +  "unit": "deg"
        +}
      • addedInput schema / properties / blur / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / distance / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / opacity / x-ui
        Added value: +{
        +  "unit": "%"
        +}
    • Changedphoto_svg_to_png2 fields changed
      • addedInput schema / properties / height / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / width / x-ui
        Added value: +{
        +  "unit": "px"
        +}
    • Changedphoto_to_text1 field changed
      • addedInput schema / properties / binarize_threshold / x-ui
        Added value: +{
        +  "unit": "%"
        +}
    • Changedphoto_watermark5 fields changed
      • addedInput schema / properties / font_size / x-ui
        Added value: +{
        +  "unit": "pt"
        +}
      • addedInput schema / properties / opacity / x-ui
        Added value: +{
        +  "unit": "%"
        +}
      • removedInput schema / properties / text / default
        Removed value: -"John's Essentials"
      • changedInput schema / properties / text / description
        Previous value: -"Defaults to 'John's Essentials' when omitted — always pass your own. A leading '@' is stripped."New value: +"The words stamped onto the photo. Required, and there is no default: a step nobody opened used to stamp our own company name onto the customer's picture. A leading '@' is stripped."
      • changedInput schema / required
        Previous value: -[
        -  "file"
        -]New value: +[
        +  "file",
        +  "text"
        +]
    • Changedweb_extract_table1 field changed
      • addedInput schema / properties / timeout_ms / x-ui
        Added value: +{
        +  "unit": "ms"
        +}
    • Changedweb_fetch1 field changed
      • addedInput schema / properties / timeout_ms / x-ui
        Added value: +{
        +  "unit": "ms"
        +}
    • Changedweb_scrape_page1 field changed
      • addedInput schema / properties / timeout_ms / x-ui
        Added value: +{
        +  "unit": "ms"
        +}
  13. 1 tool update
    • Addeddrive_upload
  14. 79 tool updates
    • Changedanalyze_color_palette2 fields changed
      • changedInput schema / properties / colors / description
        Previous value: -"Number of palette colors to extract."New value: +"How many dominant colours to pull out of the image."
      • addedInput schema / properties / colors / title
        Added value: +"Colors to extract"
    • Changedanalyze_csv1 field changed
      • addedInput schema / properties / strict
        Added value: +{
        +  "default": false,
        +  "description": "Files over 10,000 rows are analysed from the first 10,000 only. Switch on to get an error instead of statistics that cover part of the file.",
        +  "title": "Refuse partial answers",
        +  "type": "boolean"
        +}
    • Changedanalyze_file_diff5 fields changed
      • addedInput schema / properties / strict
        Added value: +{
        +  "default": false,
        +  "description": "Only the first 2,000 lines of each side are compared. Switch on to get an error instead of a comparison that covers part of the files.",
        +  "title": "Refuse partial answers",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / text_a / description
        Previous value: -"First text — alternative to the file pair. Send text_a AND text_b together (text mode)."New value: +"The BEFORE version. Anything that appears only here is reported as removed."
      • addedInput schema / properties / text_a / title
        Added value: +"Original text"
      • changedInput schema / properties / text_b / description
        Previous value: -"Second text."New value: +"The AFTER version. Anything that appears only here is reported as added."
      • addedInput schema / properties / text_b / title
        Added value: +"Updated text"
    • Changedanalyze_grammar_check9 fields changed
      • addedInput schema / properties / dialect / title
        Added value: +"English spelling"
      • addedInput schema / properties / dialect / x-ui
        Added value: +{
        +  "labels": {
        +    "auto": "Detect automatically",
        +    "en-AU": "Australian English",
        +    "en-CA": "Canadian English",
        +    "en-GB": "British English",
        +    "en-US": "American English"
        +  }
        +}
      • changedInput schema / properties / include_llm / description
        Previous value: -"Run the Grok stage for context-dependent issues LanguageTool misses. Set false for rule-only output."New value: +"Adds a second pass that catches wording and context problems the rule checker cannot see. Turn off for rule-based results only, which is faster."
      • addedInput schema / properties / include_llm / title
        Added value: +"Deeper AI check"
      • changedInput schema / properties / mode / description
        Previous value: -"strict = flag any casual phrasing; tone-preserving = preserve the author's voice."New value: +"Keep my voice leaves your phrasing alone; Strict also flags casual or loose wording."
      • addedInput schema / properties / mode / title
        Added value: +"How picky should it be"
      • addedInput schema / properties / mode / x-show-when
        Added value: +{
        +  "include_llm": [
        +    true
        +  ]
        +}
      • addedInput schema / properties / style / title
        Added value: +"Style guide"
      • addedInput schema / properties / style / x-ui
        Added value: +{
        +  "labels": {
        +    "ap": "AP",
        +    "apa": "APA",
        +    "chicago": "Chicago",
        +    "ieee": "IEEE",
        +    "mla": "MLA",
        +    "none": "No style guide"
        +  }
        +}
    • Changedanalyze_grammar_check_batch8 fields changed
      • addedInput schema / properties / items / items / properties / dialect / default
        Added value: +"en-US"
      • addedInput schema / properties / items / items / properties / dialect / description
        Added value: +"Which spelling to expect. Anything we do not recognise is read as en-US."
      • addedInput schema / properties / items / items / properties / include_llm / default
        Added value: +true
      • addedInput schema / properties / items / items / properties / include_llm / description
        Added value: +"Also run the slower rewrite pass that suggests whole-sentence improvements. On unless you say otherwise."
      • addedInput schema / properties / items / items / properties / mode / default
        Added value: +"tone-preserving"
      • addedInput schema / properties / items / items / properties / mode / description
        Added value: +"Tone-preserving keeps the writer's voice and fixes mistakes; strict rewrites towards plain correctness."
      • addedInput schema / properties / items / items / properties / style / default
        Added value: +"none"
      • addedInput schema / properties / items / items / properties / style / description
        Added value: +"Which style guide to judge the writing against. Leave it out and no style guide is applied."
    • Changedanalyze_hash5 fields changed
      • changedInput schema / properties / file / description
        Previous value: -"File to hash (any type)"New value: +"The file to hash. Any type, of any size we accept."
      • addedInput schema / properties / file / title
        Added value: +"File to hash"
      • changedInput schema / properties / text / description
        Previous value: -"Direct text alternative to the file."New value: +"Hash typed text instead of a file. Ignored if a file is attached — the file wins."
      • addedInput schema / properties / text / title
        Added value: +"Text to hash"
      • changedInput schema / required
        Previous value: -[
        -  "file"
        -]New value: +[]
    • Changedanalyze_link_extractor5 fields changed
      • changedInput schema / properties / file / description
        Previous value: -"PDF or HTML file. Other types (incl. DOCX) are scanned as raw bytes and usually yield few links."New value: +"A PDF or HTML file to pull the links out of. Any other type is read as plain text."
      • addedInput schema / properties / file / title
        Added value: +"File to scan"
      • changedInput schema / properties / text / description
        Previous value: -"Direct text/HTML alternative to the file."New value: +"Paste text or HTML to pull links out of. Ignored if a file is attached — the file wins."
      • addedInput schema / properties / text / title
        Added value: +"Text or HTML to scan"
      • changedInput schema / required
        Previous value: -[
        -  "file"
        -]New value: +[]
    • Changedanalyze_readability3 fields changed
      • changedInput schema / properties / text / description
        Previous value: -"Plain text to score — minimum ~5 words. Required unless 'file' is provided."New value: +"Paste the text to score — about five words minimum. Leave blank if you are uploading a document instead."
      • addedInput schema / properties / text / title
        Added value: +"Text to score"
      • changedInput schema / required
        Previous value: -[
        -  "text"
        -]New value: +[]
    • Changedanalyze_ssl2 fields changed
      • changedInput schema / properties / hostname / description
        Previous value: -"Hostname to check, e.g. example.com. Field name is 'hostname' — not 'domain'. Any port suffix is ignored; 443 is always used."New value: +"The site to check, e.g. example.com — just the address, with no https:// in front and no page path. A port number is ignored; 443 is always used."
      • addedInput schema / properties / hostname / title
        Added value: +"Website address"
    • Changedanalyze_word_count2 fields changed
      • changedInput schema / properties / text / description
        Previous value: -"Text to analyse. Required unless 'file' is provided."New value: +"Paste the text to count. Leave blank if you are uploading a document instead."
      • addedInput schema / properties / text / title
        Added value: +"Text to count"
    • Changedanalyze_word_frequency4 fields changed
      • changedInput schema / properties / exclude / description
        Previous value: -"Comma-separated words to exclude from the count."New value: +"Comma-separated, e.g. the, and, of. Capitals and spacing do not matter. Words under two letters are always ignored."
      • addedInput schema / properties / exclude / title
        Added value: +"Words to ignore"
      • changedInput schema / properties / topN / description
        Previous value: -"How many top words to return."New value: +"Show this many of the most common words, most frequent first."
      • addedInput schema / properties / topN / title
        Added value: +"How many words to show"
    • Changedconvert_archive2 fields changed
      • addedInput schema / properties / to / default
        Added value: +"zip"
      • changedInput schema / properties / to / description
        Previous value: -"Output archive format. Field name is 'to' — not 'format'."New value: +"The archive format you want back. ZIP opens on every computer without extra software."
    • Changedconvert_batch4 fields changed
      • changedInput schema / properties / filenames / description
        Previous value: -"Original filenames, one per entry in files[] and in the same order (e.g. ['report.csv','photo.heic']). Strongly recommended: per-file format detection and per-extension target rules key off these names."New value: +"Not used by this tool — the names come from the uploaded files themselves. Leave it empty."
      • addedInput schema / properties / filenames / x-ui
        Added value: +{
        +  "no_recall": true
        +}
      • addedInput schema / properties / target / default
        Added value: +"auto"
      • changedInput schema / properties / target / description
        Previous value: -"'auto' (default), a single target format like 'pdf', or a JSON map like '{\"docx\":\"pdf\",\"heic\":\"jpg\"}'"New value: +"What to turn every file into. Leave it on 'auto' and we pick a sensible result for each one (Word becomes PDF, HEIC photos become JPG, MOV becomes MP4). Type a single format, like pdf, to force them all the same way."
    • Changedconvert_data2 fields changed
      • addedInput schema / properties / to / default
        Added value: +"json"
      • changedInput schema / properties / to / description
        Previous value: -"Target format. Must differ from the source format."New value: +"The format you want back. It has to be different from what you put in."
    • Changedconvert_document3 fields changed
      • changedInput schema / properties / from / description
        Previous value: -"Source format — REQUIRED on this path (extensionless uploads can't be sniffed reliably; this drives the converter engine). 'md' = markdown (GFM); 'ipynb' = Jupyter notebook."New value: +"What the file is now. We normally read this from the file name; set it when the file has no name or an odd one. Markdown and Jupyter notebooks always take their own route, so say so here for those two."
      • addedInput schema / properties / to / default
        Added value: +"pdf"
      • changedInput schema / properties / to / description
        Previous value: -"Target format. Must differ from 'from'. Markdown INPUT converts to pdf, docx, html, epub, txt. Markdown OUTPUT ('md') is supported from docx, html, pdf (text extraction), and ipynb. Jupyter notebooks (ipynb) convert to pdf, html, docx, md."New value: +"What you want back. PDF works from every source. Word stays Word, spreadsheets stay spreadsheets, slides stay slides — a Word file cannot become slides. A PDF source can only come back as Markdown."
    • Changedconvert_ebook3 fields changed
      • addedInput schema / properties / to / default
        Added value: +"epub"
      • changedInput schema / properties / to / description
        Previous value: -"Target format. EPUB is the recommended direction."New value: +"The format you want back. EPUB is what a modern Kindle accepts when you send a book to it, so it is the usual answer. Pick MOBI or AZW3 only for an older device."
      • changedInput schema / properties / to / enum
        Previous value: -[
        -  "epub",
        -  "pdf",
        -  "mobi",
        -  "azw3"
        -]New value: +[
        +  "epub",
        +  "mobi",
        +  "azw3",
        +  "pdf"
        +]
    • Changedconvert_file4 fields changed
      • changedInput schema / properties / file / description
        Previous value: -"Bytes are taken at face value as 'from' — no content sniffing; a wrong 'from' fails inside the engine, not with a clean 400."New value: +"The file to convert. We read its current format from the file itself, so you only need to say what you want back."
      • addedInput schema / properties / gif_fps
        Added value: +{
        +  "default": 10,
        +  "description": "Frames per second. Higher is smoother and bigger. If the width and frame rate together are too heavy we keep the width and ease this down.",
        +  "maximum": 30,
        +  "minimum": 1,
        +  "type": "integer",
        +  "x-show-when": {
        +    "to": [
        +      "gif"
        +    ]
        +  }
        +}
      • addedInput schema / properties / gif_width
        Added value: +{
        +  "default": 320,
        +  "description": "How wide the GIF should be, in pixels. Height follows automatically. Very wide plus very smooth is capped - we keep the width you asked for and ease the frame rate down.",
        +  "maximum": 1280,
        +  "minimum": 64,
        +  "type": "integer",
        +  "x-show-when": {
        +    "to": [
        +      "gif"
        +    ]
        +  }
        +}
      • changedInput schema / properties / to / enum
        Previous value: -[
        -  "pdf",
        -  "jpg",
        -  "png",
        -  "webp",
        -  "bmp",
        -  "tiff",
        -  "gif",
        -  "avif",
        -  "ico",
        -  "mp3",
        -  "wav",
        -  "ogg",
        -  "opus",
        -  "flac",
        -  "m4a",
        -  "aac",
        -  "wma",
        -  "aiff",
        -  "alac",
        -  "mp4",
        -  "mov",
        -  "webm",
        -  "mkv",
        -  "avi",
        -  "srt",
        -  "vtt",
        -  "txt",
        -  "3gp",
        -  "flv",
        -  "m2ts",
        -  "mpg",
        -  "ts",
        -  "vob",
        -  "wmv"
        -]New value: +[
        +  "pdf",
        +  "jpg",
        +  "png",
        +  "webp",
        +  "bmp",
        +  "tiff",
        +  "gif",
        +  "avif",
        +  "ico",
        +  "mp3",
        +  "wav",
        +  "ogg",
        +  "opus",
        +  "flac",
        +  "m4a",
        +  "aac",
        +  "wma",
        +  "aiff",
        +  "alac",
        +  "mp4",
        +  "mov",
        +  "webm",
        +  "mkv",
        +  "avi",
        +  "3gp",
        +  "flv",
        +  "m2ts",
        +  "mpg",
        +  "ts",
        +  "vob",
        +  "wmv",
        +  "srt",
        +  "vtt",
        +  "txt"
        +]
    • Changedconvert_geo4 fields changed
      • addedInput schema / properties / strict / default
        Added value: +false
      • changedInput schema / properties / strict / description
        Previous value: -"When true, refuse the conversion instead of returning a result that loses information."New value: +"Stop the conversion rather than hand back a file that has lost something. Off by default: you get the result plus a note about anything that could not be carried over."
      • removedInput schema / properties / strict / enum
        Removed value: -[
        -  "true",
        -  "false"
        -]
      • changedInput schema / properties / strict / type
        Previous value: -"string"New value: +"boolean"
    • Changedconvert_parquet2 fields changed
      • changedInput schema / properties / sheet / description
        Previous value: -"Optional: when the source is .xlsx, which worksheet to read (default: the first)."New value: +"Which worksheet to read. Leave it blank for the first one."
      • addedInput schema / properties / sheet / x-show-when
        Added value: +{
        +  "from": [
        +    "xlsx"
        +  ]
        +}
    • Changedconvert_sqlite3 fields changed
      • addedInput schema / properties / strict
        Added value: +{
        +  "default": false,
        +  "description": "Stop rather than hand back a partial export. Off by default: a very large database comes back with whatever we could reach, and a note saying what was left out.",
        +  "title": "Refuse partial answers",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / to / default
        Added value: +"csv"
      • changedInput schema / properties / to / description
        Previous value: -"With 2+ tables, csv arrives as a ZIP of per-table CSVs — pass 'table' when a downstream step needs one plain CSV. xlsx = always one file."New value: +"What you want back. A database holds several tables, so the shape follows: CSV gives one file per table (zipped if there is more than one), Excel gives one workbook with a sheet per table, JSON gives the rows as records."
    • Changedconvert_text1 field changed
      • changedInput schema / properties / to / description
        Previous value: -"What you want back. Must differ from the source. Supported pairs: Markdown↔HTML, CSV→JSON/XML, JSON↔CSV, JSON↔XML, JSON↔YAML, XML→JSON, and anything→plain text."New value: +"What you want back. Must differ from the source. For a Base64 or URL encode/decode, leave this on the format you want the result read as — do NOT pick plain text, which currently returns the input untouched."
    • Changedconvert_unit_convert1 field changed
      • changedInput schema / properties / value / description
        Previous value: -"JSON number, not a string. Negatives are valid (temperatures, deltas)."New value: +"The amount to convert. Negative numbers are fine (below-zero temperatures, drops in weight)."
    • Changedconvert_video12 fields changed
      • changedInput schema / properties / bitrate_kbps / description
        Previous value: -"Giving it switches rate control to ABR (a size target) and beats 'crf'. Omit for CRF quality mode."New value: +"Aim for a file size instead of a quality level. Setting this overrides the quality slider. Leave it alone unless you have a size you must hit."
      • addedInput schema / properties / bitrate_kbps / x-show-when
        Added value: +{
        +  "to": [
        +    "mp4",
        +    "mov",
        +    "webm",
        +    "mkv",
        +    "avi"
        +  ]
        +}
      • addedInput schema / properties / codec / default
        Added value: +"auto"
      • changedInput schema / properties / codec / description
        Previous value: -"'auto' picks the container's default. h265 and av1 need Business; a codec the container can't hold 400s."New value: +"How the picture is compressed. Leave it on Automatic unless you know you need otherwise — a compression method the chosen format cannot carry (H.265 in a WebM, say) will fail during conversion. H.265 and AV1 need Business."
      • changedInput schema / properties / codec / enum
        Previous value: -[
        -  "auto",
        -  "h264",
        -  "h265",
        -  "vp9",
        -  "av1"
        -]New value: +[
        +  "auto",
        +  "h264",
        +  "vp9",
        +  "h265",
        +  "av1"
        +]
      • addedInput schema / properties / codec / x-show-when
        Added value: +{
        +  "to": [
        +    "mp4",
        +    "mov",
        +    "webm",
        +    "mkv",
        +    "avi"
        +  ]
        +}
      • addedInput schema / properties / crf
        Added value: +{
        +  "default": 23,
        +  "description": "Picture quality. Lower is better-looking and bigger; higher is smaller and rougher. 23 is the everyday setting for H.264. Each compression method reads this scale differently - left alone we pick the matching everyday value (28 for H.265, 32 for VP9, 30 for AV1). Out-of-range values are pulled back into range rather than refused, and the whole setting is ignored if you set a data rate or pick a platform preset.",
        +  "maximum": 51,
        +  "minimum": 0,
        +  "type": "integer",
        +  "x-show-when": {
        +    "to": [
        +      "mp4",
        +      "mov",
        +      "webm",
        +      "mkv",
        +      "avi"
        +    ]
        +  }
        +}
      • changedInput schema / properties / preset_name / description
        Previous value: -"Business-only. Wins over 'to', 'codec', 'resolution' and 'bitrate_kbps' — every preset forces h264 mp4. Only set when the user names the platform."New value: +"Make it ready for one place in particular. Picking one sets the format, size, compression and data rate for you and ignores your choices above. Business only."
      • addedInput schema / properties / resolution / default
        Added value: +"source"
      • changedInput schema / properties / resolution / description
        Previous value: -"Default 'source' = no scaling. 1080p and 2160p need Business. Scales by height only; aspect ratio preserved."New value: +"How big the picture should be. 'Source' keeps the original size. Height is set and the shape is kept. 1080p and 4K need Business."
      • addedInput schema / properties / to / default
        Added value: +"mp4"
      • changedInput schema / properties / to / description
        Previous value: -"mkv, avi and gif need Business. GIF output is palette-optimized and defaults to 480p unless 'resolution' says otherwise."New value: +"The format you want back. MP4 plays almost everywhere. MKV, AVI and animated GIF need Business. A GIF is made at 480p unless you set the size below."
    • Changeddata_to_file4 fields changed
      • changedInput schema / properties / format / description
        Previous value: -"What kind of file to write. csv turns a list of values into a spreadsheet; json is pretty-printed."New value: +"What kind of file to write. csv turns a list of values into a spreadsheet — a header row and one row per value — and anything it cannot tabulate becomes a single column. json is pretty-printed, and data that is not valid JSON is saved as plain text instead."
      • addedInput schema / properties / name / default
        Added value: +"data"
      • changedInput schema / properties / name / description
        Previous value: -"Optional file name without the extension (default: data)."New value: +"File name without the extension — the extension comes from the format above. Anything over 80 characters is shortened."
      • changedInput schema / properties / text / description
        Previous value: -"The data to save — normally an earlier step's output, e.g. {{step_1.text}} or {{step_1.palette}}."New value: +"The result to save. Point this at the earlier step whose text or data you want in the file — the colour palette, the password, the extracted text."
    • Changedemail_file3 fields changed
      • changedInput schema / properties / note / description
        Previous value: -"Optional one-line note to include in the email body."New value: +"Optional one-line note to put in the email body. The mail is sent from your own connected Google account, to you — files up to 5 MB."
      • addedInput schema / properties / subject / default
        Added value: +"Your file is ready"
      • changedInput schema / properties / subject / description
        Previous value: -"Optional subject line. Defaults to 'Your file is ready'."New value: +"Subject line of the email."
    • Changedesign_place1 field changed
      • changedInput schema / properties / fields / description
        Previous value: -"JSON array of field placements: [{page,x,y,w,h,type,value,font_size,image_b64}]"New value: +"Where each signature, initial, date or text box sits on the page. Build these on the PDF E-Signature page — it draws them on the document and gives you this value — then paste it here. Up to 100 placements; each names a page, a box in points from that page's top-left corner, and a type: signature, initial, date or text."
    • Changedfiles_zip1 field changed
      • changedInput schema / properties / name / description
        Previous value: -"Optional name for the archive, without .zip (default: files)."New value: +"Name for the archive, without .zip. Leave it blank and the archive is named johns-essentials- plus today's date."
    • Changedgenerate_ascii_art6 fields changed
      • changedInput schema / properties / file / description
        Previous value: -"Image to convert. REQUIRED when mode=image (max 10MB)."New value: +"The picture to convert (max 10 MB)."
      • addedInput schema / properties / file / x-show-when
        Added value: +{
        +  "mode": [
        +    "image"
        +  ]
        +}
      • changedInput schema / properties / font / enum
        Previous value: -[
        -  "standard",
        -  "banner",
        -  "big",
        -  "block",
        -  "bubble",
        -  "digital",
        -  "lean",
        -  "mini",
        -  "script",
        -  "shadow",
        -  "slant",
        -  "small"
        -]New value: +[
        +  "standard",
        +  "big",
        +  "block",
        +  "banner",
        +  "bubble",
        +  "digital",
        +  "ivrit",
        +  "lean",
        +  "mini",
        +  "mnemonic",
        +  "script",
        +  "shadow",
        +  "slant",
        +  "small",
        +  "smscript",
        +  "smshadow",
        +  "smslant",
        +  "term"
        +]
      • changedInput schema / properties / mode / description
        Previous value: -"Turn words into a banner, or turn a picture into characters."New value: +"Draw your words as big letters, or turn a picture into characters. If you attach a picture and type nothing, picture mode is used automatically."
      • changedInput schema / properties / text / description
        Previous value: -"The words to render as a banner. Up to 100 characters."New value: +"The words to draw. Longer than 100 characters is trimmed."
      • changedInput schema / properties / width / description
        Previous value: -"How many characters wide the picture is drawn."New value: +"How many characters wide the picture is."
    • Changedgenerate_barcode5 fields changed
      • changedInput schema / properties / height / description
        Previous value: -"Output height in px. Width is derived automatically (height×3; square for qr/datamatrix) — there is no 'width' parameter."New value: +"How tall the bars are, in pixels. The width follows automatically."
      • changedInput schema / properties / height / minimum
        Previous value: -1New value: +50
      • addedInput schema / properties / showText
        Added value: +{
        +  "default": true,
        +  "description": "Print the encoded digits underneath the bars, so a cashier can key them in if a scan fails.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / type / description
        Previous value: -"Symbology. Unknown types fall back to code128."New value: +"Which barcode standard to make. Code 128 takes any text or number; EAN-13 needs 12-13 digits and EAN-8 needs 7-8; UPC-A needs 11-12; Code 39 takes capitals and digits; ITF-14 needs 13-14 digits; Data Matrix, PDF417 and QR are the square ones that hold any text. Anything we do not recognise is made as a Code 128."
      • addedInput schema / properties / type / x-ui
        Added value: +{
        +  "labels": {
        +    "code128": "Code 128",
        +    "code39": "Code 39",
        +    "datamatrix": "Data Matrix",
        +    "ean13": "EAN-13",
        +    "ean8": "EAN-8",
        +    "itf14": "ITF-14",
        +    "pdf417": "PDF417",
        +    "qr": "QR Code",
        +    "upca": "UPC-A"
        +  }
        +}
    • Changedgenerate_certificate2 fields changed
      • changedInput schema / properties / template / description
        Previous value: -"Accepted but does NOT change the layout — every template renders identically today; use borderStyle for the look."New value: +"Kept for older calls; it does not change the certificate. Set the heading with Cert title and the look with Border style."
      • addedInput schema / properties / template / x-show-when
        Added value: +{
        +  "borderStyle": [
        +    "__never"
        +  ]
        +}
    • Changedgenerate_favicon1 field changed
      • addedInput schema / properties / background
        Added value: +{
        +  "default": "none",
        +  "description": "Fill behind a logo that is not square. None leaves it see-through, which suits both light and dark browser tabs. A hex colour such as #1a1a1a is also accepted; anything we do not recognise is treated as see-through.",
        +  "enum": [
        +    "none",
        +    "white",
        +    "black",
        +    "gray",
        +    "silver",
        +    "red",
        +    "green",
        +    "blue",
        +    "yellow",
        +    "orange",
        +    "purple",
        +    "pink",
        +    "brown",
        +    "navy",
        +    "teal",
        +    "cyan",
        +    "magenta"
        +  ],
        +  "type": "string",
        +  "x-ui": {
        +    "labels": {
        +      "none": "See-through"
        +    }
        +  }
        +}
    • Changedgenerate_hash4 fields changed
      • changedInput schema / properties / file / description
        Previous value: -"Optional file to hash instead of text."New value: +"A file to hash instead of typed text. If you attach one, the file wins."
      • changedInput schema / properties / text / description
        Previous value: -"Text to hash. Required unless 'file' is provided."New value: +"The text to hash. Leave it blank when you are hashing a file instead."
      • addedInput schema / properties / text / title
        Added value: +"Text to hash"
      • changedInput schema / required
        Previous value: -[
        -  "text"
        -]New value: +[]
    • Changedgenerate_invoice2 fields changed
      • changedInput schema / properties / discountPercent / description
        Previous value: -"Percent of subtotal subtracted. Unvalidated — over 100 yields a negative total. Row hidden when 0."New value: +"Percent added to the subtotal. At 0 the tax line is left off the invoice."
      • changedInput schema / properties / taxPercent / description
        Previous value: -"Percent of subtotal added on top. Unvalidated; the tax row appears only when greater than 0."New value: +"Percent added to the subtotal. At 0 the tax line is left off the invoice."
    • Changedgenerate_password10 fields changed
      • changedInput schema / properties / length / description
        Previous value: -"Characters per password. Values over 256 silently clamp to 256; zero or negative resets to the default 16."New value: +"Characters per password."
      • changedInput schema / properties / length / minimum
        Previous value: -1New value: +4
      • changedInput schema / properties / lowercase / default
        Previous value: -falseNew value: +true
      • changedInput schema / properties / lowercase / description
        Previous value: -"Include lowercase letters. NOT implied by the other flags — sending only uppercase/numbers/symbols=true yields a password with no lowercase."New value: +"Include small letters a-z. Turning all four off is the same as leaving all four on."
      • changedInput schema / properties / numbers / default
        Previous value: -falseNew value: +true
      • changedInput schema / properties / numbers / description
        Previous value: -"Include digits 0-9. Class flags work jointly: all four false/omitted = every class enabled."New value: +"Include digits 0-9. Turning all four off is the same as leaving all four on."
      • changedInput schema / properties / symbols / default
        Previous value: -falseNew value: +true
      • changedInput schema / properties / symbols / description
        Previous value: -"Include symbols from !@#$%^&*()-_=+[]{}|;:,.<>? — quotes, backslash, backtick, tilde and slash are never used."New value: +"Include symbols from !@#$%^&*()-_=+[]{}|;:,.<>? - quotes, backslash, backtick, tilde and slash are never used. Turning all four off is the same as leaving all four on."
      • changedInput schema / properties / uppercase / default
        Previous value: -falseNew value: +true
      • changedInput schema / properties / uppercase / description
        Previous value: -"Include uppercase letters. If ALL four class flags (uppercase/lowercase/numbers/symbols) are omitted or false, all classes are used."New value: +"Include capital letters A-Z. Turning all four off is the same as leaving all four on."
    • Changedgenerate_placeholder_image2 fields changed
      • changedInput schema / properties / format / description
        Previous value: -"Sets the response MIME (png/jpg/jpeg/webp). Unrecognized values get mislabeled as PNG — stick to the enum."New value: +"Image file type to save as."
      • changedInput schema / properties / format / enum
        Previous value: -[
        -  "png",
        -  "jpg",
        -  "jpeg",
        -  "webp"
        -]New value: +[
        +  "png",
        +  "jpg",
        +  "webp"
        +]
    • Changedgenerate_qr_code2 fields changed
      • changedInput schema / properties / size / description
        Previous value: -"Image size in pixels (max 2000)"New value: +"Width and height of the square image, in pixels."
      • changedInput schema / properties / size / minimum
        Previous value: -1New value: +200
    • Changedmedia_add_watermark4 fields changed
      • addedInput schema / properties / fontsize
        Added value: +{
        +  "default": 0,
        +  "description": "Text size in pixels. Leave it at 0 and the size is worked out from the video's own height - about 36 on a 1080p video. Sizes below 6 are treated the same as 0.",
        +  "maximum": 400,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • changedInput schema / properties / opacity / description
        Previous value: -"Fraction 0.0-1.0; invalid values fall back to 0.7."New value: +"How solid the watermark looks: 1 is fully solid, 0.3 is a faint ghost."
      • changedInput schema / properties / position / description
        Previous value: -"No hyphens — 'bottomright', not 'bottom-right'. Unknown values fall back to bottomright."New value: +"Which corner of the frame the watermark sits in."
      • addedInput schema / properties / position / x-ui
        Added value: +{
        +  "labels": {
        +    "bottomleft": "Bottom left",
        +    "bottomright": "Bottom right",
        +    "center": "Centre",
        +    "topleft": "Top left",
        +    "topright": "Top right"
        +  }
        +}
    • Changedmedia_extract_audio1 field changed
      • changedInput schema / properties / format / description
        Previous value: -"Values outside the enum are a 400, not a silent fallback. wav/flac come back lossless; mp3/ogg/aac are lossy re-encodes."New value: +"What to save the soundtrack as. WAV and FLAC keep every bit of the original; MP3, OGG and AAC are smaller but re-compressed."
    • Changedmedia_extract_frames5 fields changed
      • changedInput schema / properties / fps / description
        Previous value: -"Frames per second to extract"New value: +"How many frames to take per second of video. 1 means one frame a second."
      • changedInput schema / properties / fps / maximum
        Previous value: -1000New value: +30
      • changedInput schema / properties / fps / minimum
        Previous value: -0.01New value: +0.1
      • changedInput schema / properties / max / description
        Previous value: -"Maximum number of frames to extract."New value: +"Stop after this many frames, however long the video is."
      • addedInput schema / properties / max / title
        Added value: +"Most frames to take"
    • Changedoctopus_list1 field changed
      • changedInput schema / properties / folder / description
        Previous value: -"Optional folder path, e.g. /Tax/2026. Omit for all recent files."New value: +"Folder to list, written exactly as it is stored, closing slash included: /Tax/2026/. Leave blank for every recent file."
    • Changedpdf_compress6 fields changed
      • changedInput schema / properties / metadataOnly / description
        Previous value: -"Strip metadata only (Ghostscript pdfmark) — no image downsampling."New value: +"Only strip the hidden details - author, title, producing software - and leave every page exactly as it is."
      • changedInput schema / properties / quality / description
        Previous value: -"Compression preset: light=300dpi, balanced=150dpi, mobile=96dpi, maximum=72dpi. Unknown values (including low/medium/high) silently fall back to balanced."New value: +"How hard to squeeze. Light keeps print quality (300 DPI); balanced is the everyday choice (150 DPI); mobile (96 DPI) and maximum (72 DPI) trade sharpness for size."
      • addedInput schema / properties / quality / x-show-when
        Added value: +{
        +  "metadataOnly": [
        +    "false"
        +  ]
        +}
      • changedInput schema / properties / targetSize / description
        Previous value: -"Target output size. When set, compresses iteratively to fit and overrides 'quality'."New value: +"Squeeze until the file fits this size. Overrides the preset above."
      • addedInput schema / properties / targetSize / title
        Added value: +"Squeeze down to"
      • addedInput schema / properties / targetSize / x-show-when
        Added value: +{
        +  "metadataOnly": [
        +    "false"
        +  ]
        +}
    • Changedpdf_crop8 fields changed
      • changedInput schema / properties / bottom / description
        Previous value: -"Bottom crop in points."New value: +"How much to cut off the bottom edge, in points - 72 points is one inch. 0 leaves this edge alone. Cut away more than the page holds and you get a 1-point page rather than an error."
      • changedInput schema / properties / bottom / maximum
        Previous value: -14400New value: +288
      • changedInput schema / properties / left / description
        Previous value: -"Left crop in points."New value: +"How much to cut off the left edge, in points - 72 points is one inch. 0 leaves this edge alone. Cut away more than the page holds and you get a 1-point page rather than an error."
      • changedInput schema / properties / left / maximum
        Previous value: -14400New value: +288
      • changedInput schema / properties / right / description
        Previous value: -"Right crop in points."New value: +"How much to cut off the right edge, in points - 72 points is one inch. 0 leaves this edge alone. Cut away more than the page holds and you get a 1-point page rather than an error."
      • changedInput schema / properties / right / maximum
        Previous value: -14400New value: +288
      • changedInput schema / properties / top / description
        Previous value: -"Top crop in points. 0 = no crop on this edge."New value: +"How much to cut off the top edge, in points - 72 points is one inch. 0 leaves this edge alone. Cut away more than the page holds and you get a 1-point page rather than an error."
      • changedInput schema / properties / top / maximum
        Previous value: -14400New value: +288
    • Changedpdf_excel_to_pdf26 fields changed
      • changedInput schema / properties / gridlines / description
        Previous value: -"Show gridlines. Empty leaves the sheet's own setting."New value: +"Print the faint grid between cells. Leave blank to keep whatever the sheet already does."
      • changedInput schema / properties / gridlines / enum
        Previous value: -[
        -  "",
        -  "true",
        -  "false"
        -]New value: +[
        +  "true",
        +  "false"
        +]
      • addedInput schema / properties / gridlines / x-ui
        Added value: +{
        +  "labels": {
        +    "false": "Hide gridlines",
        +    "true": "Show gridlines"
        +  }
        +}
      • addedInput schema / properties / margins / x-ui
        Added value: +{
        +  "labels": {
        +    "default": "Keep the sheet's own margins",
        +    "narrow": "Narrow",
        +    "normal": "Normal",
        +    "wide": "Wide"
        +  }
        +}
      • changedInput schema / properties / pdfa / description
        Previous value: -"Archival PDF/A output. 2b is the safe default."New value: +"Save in the PDF/A archive format, which embeds everything the file needs to open correctly in decades' time. Off unless you need it; 2b is the version most archives ask for."
      • addedInput schema / properties / pdfa / x-ui
        Added value: +{
        +  "labels": {
        +    "1b": "PDF/A-1b",
        +    "2b": "PDF/A-2b (most asked for)",
        +    "3b": "PDF/A-3b",
        +    "none": "Ordinary PDF"
        +  }
        +}
      • changedInput schema / properties / permPassword / description
        Previous value: -"Owner password for permission restrictions. Optional."New value: +"A second, different password that locks printing, copying and editing. Only takes effect if you also set an open password above."
      • addedInput schema / properties / permPassword / title
        Added value: +"Owner password"
      • changedInput schema / properties / quality / description
        Previous value: -"Output compression quality preset."New value: +"How sharp the pictures and charts stay in the PDF. Leave blank for the converter's own setting."
      • changedInput schema / properties / quality / enum
        Previous value: -[
        -  "",
        -  "low",
        -  "medium",
        -  "high"
        -]New value: +[
        +  "low",
        +  "medium",
        +  "high"
        +]
      • addedInput schema / properties / quality / x-ui
        Added value: +{
        +  "labels": {
        +    "high": "Best quality (no downsizing)",
        +    "low": "Smallest file (96 DPI pictures)",
        +    "medium": "Balanced (150 DPI pictures)"
        +  }
        +}
      • changedInput schema / properties / scale / description
        Previous value: -"Print scaling percent. Overrides fitToPage when set."New value: +"Print size as a percentage, where 100 is life size and less shrinks the sheet to fit more on a page. Leave it blank unless you want a specific percentage - setting any value here turns Fit to page off."
      • addedInput schema / properties / scale / x-show-when
        Added value: +{
        +  "fitToPage": [
        +    "none"
        +  ]
        +}
      • addedInput schema / properties / sheets / default
        Added value: +"all"
      • changedInput schema / properties / sheets / description
        Previous value: -"Sheet selection: 'all', comma-separated names (e.g. 'Sales,Ledger'), or comma-separated 0-based indexes (e.g. '0,2'). Non-selected sheets are hidden before conversion."New value: +"Which sheets to convert: all, or the names or positions you want — Sales,Ledger or 0,2."
      • changedInput schema / properties / showHeaders / description
        Previous value: -"Show row/column headers (A/B/C + 1/2/3). Empty leaves the sheet's own setting."New value: +"Print the A B C column letters and 1 2 3 row numbers down the edges. Leave blank to keep the sheet's own setting."
      • changedInput schema / properties / showHeaders / enum
        Previous value: -[
        -  "",
        -  "true",
        -  "false"
        -]New value: +[
        +  "true",
        +  "false"
        +]
      • addedInput schema / properties / showHeaders / x-ui
        Added value: +{
        +  "labels": {
        +    "false": "Hide row & column headings",
        +    "true": "Show row & column headings"
        +  }
        +}
      • changedInput schema / properties / splitMode / description
        Previous value: -"combined = one multi-page PDF; per-sheet = ZIP with one PDF per sheet."New value: +"One PDF containing every sheet, or a ZIP holding one PDF per sheet."
      • addedInput schema / properties / watermarkColor
        Added value: +{
        +  "default": "#808080",
        +  "description": "Colour of the watermark lettering, as #rgb or #rrggbb. Anything else becomes mid-grey. Only used when there is watermark text.",
        +  "type": "string"
        +}
      • addedInput schema / properties / watermarkFont
        Added value: +{
        +  "default": "Helvetica",
        +  "description": "Lettering style for the watermark. Latin alphabet only. Only used when there is watermark text.",
        +  "enum": [
        +    "Helvetica",
        +    "Times-Roman",
        +    "Courier"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / watermarkFontSize
        Added value: +{
        +  "default": 48,
        +  "description": "Height of the watermark lettering in points. Only used when there is watermark text.",
        +  "maximum": 1000,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / watermarkOpacity
        Added value: +{
        +  "default": 0.3,
        +  "description": "How solid the watermark looks: 1 is fully solid, 0.3 is a faint ghost. This is a fraction, not a percent. Only used when there is watermark text.",
        +  "maximum": 1,
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / watermarkPosition
        Added value: +{
        +  "default": "c",
        +  "description": "Where the watermark sits on the page. Only used when there is watermark text.",
        +  "enum": [
        +    "c",
        +    "tl",
        +    "tc",
        +    "tr",
        +    "ml",
        +    "mr",
        +    "bl",
        +    "bc",
        +    "br"
        +  ],
        +  "type": "string",
        +  "x-ui": {
        +    "labels": {
        +      "bc": "Bottom centre",
        +      "bl": "Bottom left",
        +      "br": "Bottom right",
        +      "c": "Centre",
        +      "ml": "Middle left",
        +      "mr": "Middle right",
        +      "tc": "Top centre",
        +      "tl": "Top left",
        +      "tr": "Top right"
        +    }
        +  }
        +}
      • addedInput schema / properties / watermarkRotation
        Added value: +{
        +  "default": 45,
        +  "description": "Angle of the watermark in whole degrees; 45 is the classic diagonal. Only used when there is watermark text.",
        +  "maximum": 180,
        +  "minimum": -180,
        +  "type": "integer"
        +}
      • addedInput schema / properties / watermarkScale
        Added value: +{
        +  "default": 1,
        +  "description": "Size multiplier applied on top of the lettering size. Only used when there is watermark text.",
        +  "maximum": 20,
        +  "minimum": 0.01,
        +  "type": "number"
        +}
    • Changedpdf_excel_to_pdf_batch26 fields changed
      • changedInput schema / properties / gridlines / description
        Previous value: -"Show gridlines. Empty leaves the sheet's own setting."New value: +"Print the faint grid between cells. Leave blank to keep whatever the sheet already does."
      • changedInput schema / properties / gridlines / enum
        Previous value: -[
        -  "",
        -  "true",
        -  "false"
        -]New value: +[
        +  "true",
        +  "false"
        +]
      • addedInput schema / properties / gridlines / x-ui
        Added value: +{
        +  "labels": {
        +    "false": "Hide gridlines",
        +    "true": "Show gridlines"
        +  }
        +}
      • addedInput schema / properties / margins / x-ui
        Added value: +{
        +  "labels": {
        +    "default": "Keep the sheet's own margins",
        +    "narrow": "Narrow",
        +    "normal": "Normal",
        +    "wide": "Wide"
        +  }
        +}
      • changedInput schema / properties / pdfa / description
        Previous value: -"Archival PDF/A output. 2b is the safe default."New value: +"Save in the PDF/A archive format, which embeds everything the file needs to open correctly in decades' time. Off unless you need it; 2b is the version most archives ask for."
      • addedInput schema / properties / pdfa / x-ui
        Added value: +{
        +  "labels": {
        +    "1b": "PDF/A-1b",
        +    "2b": "PDF/A-2b (most asked for)",
        +    "3b": "PDF/A-3b",
        +    "none": "Ordinary PDF"
        +  }
        +}
      • changedInput schema / properties / permPassword / description
        Previous value: -"Owner password for permission restrictions. Optional."New value: +"A second, different password that locks printing, copying and editing. Only takes effect if you also set an open password above."
      • addedInput schema / properties / permPassword / title
        Added value: +"Owner password"
      • changedInput schema / properties / quality / description
        Previous value: -"Output compression quality preset."New value: +"How sharp the pictures and charts stay in the PDF. Leave blank for the converter's own setting."
      • changedInput schema / properties / quality / enum
        Previous value: -[
        -  "",
        -  "low",
        -  "medium",
        -  "high"
        -]New value: +[
        +  "low",
        +  "medium",
        +  "high"
        +]
      • addedInput schema / properties / quality / x-ui
        Added value: +{
        +  "labels": {
        +    "high": "Best quality (no downsizing)",
        +    "low": "Smallest file (96 DPI pictures)",
        +    "medium": "Balanced (150 DPI pictures)"
        +  }
        +}
      • changedInput schema / properties / scale / description
        Previous value: -"Print scaling percent. Overrides fitToPage when set."New value: +"Print size as a percentage, where 100 is life size and less shrinks the sheet to fit more on a page. Leave it blank unless you want a specific percentage - setting any value here turns Fit to page off."
      • addedInput schema / properties / scale / x-show-when
        Added value: +{
        +  "fitToPage": [
        +    "none"
        +  ]
        +}
      • addedInput schema / properties / sheets / default
        Added value: +"all"
      • changedInput schema / properties / sheets / description
        Previous value: -"Sheet selection: 'all', comma-separated names (e.g. 'Sales,Ledger'), or comma-separated 0-based indexes (e.g. '0,2'). Non-selected sheets are hidden before conversion."New value: +"Which sheets to convert: all, or the names or positions you want — Sales,Ledger or 0,2."
      • changedInput schema / properties / showHeaders / description
        Previous value: -"Show row/column headers (A/B/C + 1/2/3). Empty leaves the sheet's own setting."New value: +"Print the A B C column letters and 1 2 3 row numbers down the edges. Leave blank to keep the sheet's own setting."
      • changedInput schema / properties / showHeaders / enum
        Previous value: -[
        -  "",
        -  "true",
        -  "false"
        -]New value: +[
        +  "true",
        +  "false"
        +]
      • addedInput schema / properties / showHeaders / x-ui
        Added value: +{
        +  "labels": {
        +    "false": "Hide row & column headings",
        +    "true": "Show row & column headings"
        +  }
        +}
      • changedInput schema / properties / splitMode / description
        Previous value: -"combined = one multi-page PDF; per-sheet = ZIP with one PDF per sheet."New value: +"One PDF containing every sheet, or a ZIP holding one PDF per sheet."
      • addedInput schema / properties / watermarkColor
        Added value: +{
        +  "default": "#808080",
        +  "description": "Colour of the watermark lettering, as #rgb or #rrggbb. Anything else becomes mid-grey. Only used when there is watermark text.",
        +  "type": "string"
        +}
      • addedInput schema / properties / watermarkFont
        Added value: +{
        +  "default": "Helvetica",
        +  "description": "Lettering style for the watermark. Latin alphabet only. Only used when there is watermark text.",
        +  "enum": [
        +    "Helvetica",
        +    "Times-Roman",
        +    "Courier"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / watermarkFontSize
        Added value: +{
        +  "default": 48,
        +  "description": "Height of the watermark lettering in points. Only used when there is watermark text.",
        +  "maximum": 1000,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / watermarkOpacity
        Added value: +{
        +  "default": 0.3,
        +  "description": "How solid the watermark looks: 1 is fully solid, 0.3 is a faint ghost. This is a fraction, not a percent. Only used when there is watermark text.",
        +  "maximum": 1,
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / watermarkPosition
        Added value: +{
        +  "default": "c",
        +  "description": "Where the watermark sits on the page. Only used when there is watermark text.",
        +  "enum": [
        +    "c",
        +    "tl",
        +    "tc",
        +    "tr",
        +    "ml",
        +    "mr",
        +    "bl",
        +    "bc",
        +    "br"
        +  ],
        +  "type": "string",
        +  "x-ui": {
        +    "labels": {
        +      "bc": "Bottom centre",
        +      "bl": "Bottom left",
        +      "br": "Bottom right",
        +      "c": "Centre",
        +      "ml": "Middle left",
        +      "mr": "Middle right",
        +      "tc": "Top centre",
        +      "tl": "Top left",
        +      "tr": "Top right"
        +    }
        +  }
        +}
      • addedInput schema / properties / watermarkRotation
        Added value: +{
        +  "default": 45,
        +  "description": "Angle of the watermark in whole degrees; 45 is the classic diagonal. Only used when there is watermark text.",
        +  "maximum": 180,
        +  "minimum": -180,
        +  "type": "integer"
        +}
      • addedInput schema / properties / watermarkScale
        Added value: +{
        +  "default": 1,
        +  "description": "Size multiplier applied on top of the lettering size. Only used when there is watermark text.",
        +  "maximum": 20,
        +  "minimum": 0.01,
        +  "type": "number"
        +}
    • Changedpdf_flatten11 fields changed
      • changedInput schema / properties / compressPreset / description
        Previous value: -"screen|ebook|printer|prepress (Ghostscript). Read only when compressImages=true; unknown → ebook. screen=72dpi, printer/prepress=300dpi."New value: +"How hard to squeeze the pictures: screen 72 DPI, ebook 150 DPI, printer and prepress 300 DPI."
      • addedInput schema / properties / compressPreset / x-show-when
        Added value: +{
        +  "compressImages": [
        +    "true"
        +  ]
        +}
      • changedInput schema / properties / exportData / description
        Previous value: -"Return a ZIP containing the flattened PDF plus form_values.json and annotations.json side files."New value: +"Also give me the form answers and note text as separate files. You get a ZIP containing the flattened PDF plus form_values.json and annotations.json - not a PDF."
      • changedInput schema / properties / ocrLang / description
        Previous value: -"Allowlist: eng fra spa deu ita por nld pol chi_sim jpn kor ara rus hin; unknown → eng. Read only when ocrFirst=true (paid OCR tier)."New value: +"Which language the scanned text is in."
      • addedInput schema / properties / ocrLang / x-show-when
        Added value: +{
        +  "ocrFirst": [
        +    "true"
        +  ]
        +}
      • addedInput schema / properties / ocrLang / x-ui
        Added value: +{
        +  "labels": {
        +    "ara": "Arabic",
        +    "chi_sim": "Chinese (Simplified)",
        +    "deu": "German",
        +    "eng": "English",
        +    "fra": "French",
        +    "hin": "Hindi",
        +    "ita": "Italian",
        +    "jpn": "Japanese",
        +    "kor": "Korean",
        +    "nld": "Dutch",
        +    "pol": "Polish",
        +    "por": "Portuguese",
        +    "rus": "Russian",
        +    "spa": "Spanish"
        +  }
        +}
      • changedInput schema / properties / signatureMode / description
        Previous value: -"preserve = return original when signatures detected; ignore = flatten anyway (invalidates sigs); block = 409 error."New value: +"What to do if the PDF has been digitally signed. Flattening destroys a signature, so by default we hand the original back untouched."
      • addedInput schema / properties / signatureMode / x-ui
        Added value: +{
        +  "labels": {
        +    "block": "Stop and tell me",
        +    "ignore": "Flatten anyway (breaks the signature)",
        +    "preserve": "Leave signed files untouched"
        +  }
        +}
      • changedInput schema / properties / watermarkPosition / description
        Previous value: -"pdfcpu anchor: c tl tc tr ml mr bl bc br (ml/mr are folded to the engine's l/r); unknown → c (center). Read only when watermarkText is set."New value: +"Where the watermark sits on the page. Only used when there is watermark text."
      • addedInput schema / properties / watermarkPosition / x-ui
        Added value: +{
        +  "labels": {
        +    "bc": "Bottom centre",
        +    "bl": "Bottom left",
        +    "br": "Bottom right",
        +    "c": "Centre",
        +    "ml": "Middle left",
        +    "mr": "Middle right",
        +    "tc": "Top centre",
        +    "tl": "Top left",
        +    "tr": "Top right"
        +  }
        +}
      • removedInput schema / properties / watermarkTile
        Removed value: -{
        -  "default": false,
        -  "description": "NOT available here — true returns a clear error (the flatten tile path is broken in the pinned engine; run pdf_watermark, which tiles, before flattening).",
        -  "type": "boolean"
        -}
    • Changedpdf_flatten_batch11 fields changed
      • changedInput schema / properties / compressPreset / description
        Previous value: -"screen|ebook|printer|prepress (Ghostscript). Read only when compressImages=true; unknown → ebook. screen=72dpi, printer/prepress=300dpi."New value: +"How hard to squeeze the pictures: screen 72 DPI, ebook 150 DPI, printer and prepress 300 DPI."
      • addedInput schema / properties / compressPreset / x-show-when
        Added value: +{
        +  "compressImages": [
        +    "true"
        +  ]
        +}
      • changedInput schema / properties / exportData / description
        Previous value: -"Return a ZIP containing the flattened PDF plus form_values.json and annotations.json side files."New value: +"Also give me the form answers and note text as separate files. You get a ZIP containing the flattened PDF plus form_values.json and annotations.json - not a PDF."
      • changedInput schema / properties / ocrLang / description
        Previous value: -"Allowlist: eng fra spa deu ita por nld pol chi_sim jpn kor ara rus hin; unknown → eng. Read only when ocrFirst=true (paid OCR tier)."New value: +"Which language the scanned text is in."
      • addedInput schema / properties / ocrLang / x-show-when
        Added value: +{
        +  "ocrFirst": [
        +    "true"
        +  ]
        +}
      • addedInput schema / properties / ocrLang / x-ui
        Added value: +{
        +  "labels": {
        +    "ara": "Arabic",
        +    "chi_sim": "Chinese (Simplified)",
        +    "deu": "German",
        +    "eng": "English",
        +    "fra": "French",
        +    "hin": "Hindi",
        +    "ita": "Italian",
        +    "jpn": "Japanese",
        +    "kor": "Korean",
        +    "nld": "Dutch",
        +    "pol": "Polish",
        +    "por": "Portuguese",
        +    "rus": "Russian",
        +    "spa": "Spanish"
        +  }
        +}
      • changedInput schema / properties / signatureMode / description
        Previous value: -"preserve = return original when signatures detected; ignore = flatten anyway (invalidates sigs); block = 409 error."New value: +"What to do if the PDF has been digitally signed. Flattening destroys a signature, so by default we hand the original back untouched."
      • addedInput schema / properties / signatureMode / x-ui
        Added value: +{
        +  "labels": {
        +    "block": "Stop and tell me",
        +    "ignore": "Flatten anyway (breaks the signature)",
        +    "preserve": "Leave signed files untouched"
        +  }
        +}
      • changedInput schema / properties / watermarkPosition / description
        Previous value: -"pdfcpu anchor: c tl tc tr ml mr bl bc br (ml/mr are folded to the engine's l/r); unknown → c (center). Read only when watermarkText is set."New value: +"Where the watermark sits on the page. Only used when there is watermark text."
      • addedInput schema / properties / watermarkPosition / x-ui
        Added value: +{
        +  "labels": {
        +    "bc": "Bottom centre",
        +    "bl": "Bottom left",
        +    "br": "Bottom right",
        +    "c": "Centre",
        +    "ml": "Middle left",
        +    "mr": "Middle right",
        +    "tc": "Top centre",
        +    "tl": "Top left",
        +    "tr": "Top right"
        +  }
        +}
      • removedInput schema / properties / watermarkTile
        Removed value: -{
        -  "default": false,
        -  "description": "NOT available here — true returns a clear error (the flatten tile path is broken in the pinned engine; run pdf_watermark, which tiles, before flattening).",
        -  "type": "boolean"
        -}
    • Changedpdf_grayscale4 fields changed
      • addedInput schema / properties / mode
        Added value: +{
        +  "default": "gray",
        +  "description": "Grey keeps every shade of the original. Black and white forces each dot to pure black or pure white - smaller, and right for line art or a fax.",
        +  "enum": [
        +    "gray",
        +    "bw"
        +  ],
        +  "type": "string",
        +  "x-ui": {
        +    "labels": {
        +      "bw": "Pure black and white",
        +      "gray": "Shades of grey"
        +    }
        +  }
        +}
      • addedInput schema / properties / outputName
        Added value: +{
        +  "description": "Optional name for the file you get back. Leave blank and we name it for you.",
        +  "type": "string"
        +}
      • addedInput schema / properties / pages
        Added value: +{
        +  "description": "Which pages to convert, written as 3,7 or 1-5. Leave it blank to convert every page.",
        +  "title": "Only these pages",
        +  "type": "string"
        +}
      • addedInput schema / properties / strict
        Added value: +{
        +  "default": false,
        +  "description": "Refuse the job if any page could not be converted, rather than handing back a document with colour pages still in it.",
        +  "title": "Refuse partial answers",
        +  "type": "boolean"
        +}
    • Changedpdf_header_footer8 fields changed
      • changedInput schema / properties / fontFamily / description
        Previous value: -"Exactly Helvetica, Times-Roman, or Courier (case-sensitive); anything else silently becomes Helvetica."New value: +"Typeface for the header and footer text."
      • changedInput schema / properties / fontSize / description
        Previous value: -"Points, integer 6-20; anything outside that range (or non-integer) silently resets to 10."New value: +"Text size in points."
      • changedInput schema / properties / footerAlign / description
        Previous value: -"left|center|right; unknown values silently become center."New value: +"Line the footer text up left, centred, or right."
      • changedInput schema / properties / headerAlign / description
        Previous value: -"left|center|right; unknown values silently become center."New value: +"Line the header text up left, centred, or right."
      • changedInput schema / properties / margin / description
        Previous value: -"Distance from the page edge in points, 10-100; out-of-range or non-numeric silently resets to 30."New value: +"How far in from the edge of the page the text sits, in points (72 = 1 inch)."
      • changedInput schema / properties / pageNumberPosition / description
        Previous value: -"header or footer; anything else → footer. Only matters when pageNumbers is not 'none'."New value: +"Put the page number in the header or the footer."
      • addedInput schema / properties / pageNumberPosition / x-show-when
        Added value: +{
        +  "pageNumbers": [
        +    "simple",
        +    "pageN",
        +    "nOfTotal",
        +    "pageNOfTotal"
        +  ]
        +}
      • addedInput schema / properties / pageNumbers / x-ui
        Added value: +{
        +  "labels": {
        +    "nOfTotal": "7 of 12",
        +    "none": "No page numbers",
        +    "pageN": "Page 7",
        +    "pageNOfTotal": "Page 7 of 12",
        +    "simple": "7"
        +  }
        +}
    • Changedpdf_images_to_pdf6 fields changed
      • addedInput schema / properties / autoOrient
        Added value: +{
        +  "default": true,
        +  "description": "Turn photos the right way up using the camera's own rotation tag. On by default — switch it off only if you want the raw pixels exactly as stored.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / files / description
        Previous value: -"Input files (JPG, PNG, TIFF)"New value: +"Input files (JPG, JPEG, PNG, WEBP)"
      • addedInput schema / properties / fitMode
        Added value: +{
        +  "default": "contain",
        +  "description": "How each picture sits on the page.",
        +  "enum": [
        +    "contain",
        +    "fill"
        +  ],
        +  "type": "string",
        +  "x-show-when": {
        +    "pageSize": [
        +      "a4",
        +      "a4-landscape",
        +      "letter",
        +      "letter-landscape",
        +      "legal",
        +      "legal-landscape",
        +      "a3",
        +      "a3-landscape",
        +      "a5",
        +      "a5-landscape",
        +      "tabloid",
        +      "tabloid-landscape"
        +    ]
        +  },
        +  "x-ui": {
        +    "labels": {
        +      "contain": "Show the whole picture",
        +      "fill": "Fill the page (crops the edges)"
        +    }
        +  }
        +}
      • addedInput schema / properties / margin
        Added value: +{
        +  "default": 0,
        +  "description": "White border around each picture, in points - 72 points is one inch. A margin so large that nothing is left for the picture is ignored rather than refused.",
        +  "maximum": 200,
        +  "minimum": 0,
        +  "type": "integer",
        +  "x-show-when": {
        +    "pageSize": [
        +      "a4",
        +      "a4-landscape",
        +      "letter",
        +      "letter-landscape",
        +      "legal",
        +      "legal-landscape",
        +      "a3",
        +      "a3-landscape",
        +      "a5",
        +      "a5-landscape",
        +      "tabloid",
        +      "tabloid-landscape"
        +    ]
        +  }
        +}
      • addedInput schema / properties / orientation
        Added value: +{
        +  "description": "Leave blank to follow the page size you picked.",
        +  "enum": [
        +    "portrait",
        +    "landscape",
        +    "auto"
        +  ],
        +  "type": "string",
        +  "x-show-when": {
        +    "pageSize": [
        +      "a4",
        +      "a4-landscape",
        +      "letter",
        +      "letter-landscape",
        +      "legal",
        +      "legal-landscape",
        +      "a3",
        +      "a3-landscape",
        +      "a5",
        +      "a5-landscape",
        +      "tabloid",
        +      "tabloid-landscape"
        +    ]
        +  },
        +  "x-ui": {
        +    "labels": {
        +      "auto": "Match each picture",
        +      "landscape": "Landscape",
        +      "portrait": "Portrait"
        +    }
        +  }
        +}
      • addedInput schema / properties / pageSize
        Added value: +{
        +  "default": "fit",
        +  "description": "Fit makes every page exactly the size of its own picture, so a phone photo becomes a page yards across. Any fixed size gives one uniform, printable document.",
        +  "enum": [
        +    "fit",
        +    "a4",
        +    "a4-landscape",
        +    "letter",
        +    "letter-landscape",
        +    "legal",
        +    "legal-landscape",
        +    "a3",
        +    "a3-landscape",
        +    "a5",
        +    "a5-landscape",
        +    "tabloid",
        +    "tabloid-landscape"
        +  ],
        +  "type": "string",
        +  "x-ui": {
        +    "labels": {
        +      "a3": "A3 portrait",
        +      "a3-landscape": "A3 landscape",
        +      "a4": "A4 portrait",
        +      "a4-landscape": "A4 landscape",
        +      "a5": "A5 portrait",
        +      "a5-landscape": "A5 landscape",
        +      "fit": "Fit the page to the picture",
        +      "legal": "Legal portrait",
        +      "legal-landscape": "Legal landscape",
        +      "letter": "Letter portrait",
        +      "letter-landscape": "Letter landscape",
        +      "tabloid": "Tabloid portrait",
        +      "tabloid-landscape": "Tabloid landscape"
        +    }
        +  }
        +}
    • Changedpdf_merge2 fields changed
      • changedInput schema / properties / pageRanges / description
        Previous value: -"Optional per-file page selection aligned with the files order, e.g. '1-3,5'. The multipart field name is 'pageRanges[]' (with brackets)."New value: +"Leave blank to use every page. To take only part of a file, give its pages in the same order as the files themselves — 1-3 for the first, 2,5 for the second."
      • addedInput schema / properties / pageRanges / title
        Added value: +"Pages to take from each file"
    • Changedpdf_page_numbers4 fields changed
      • changedInput schema / properties / position / description
        Previous value: -"Short codes ONLY: bc=bottom-center, bl=bottom-left, br=bottom-right, tc=top-center, tl=top-left, tr=top-right. Long names like 'bottom-right' are NOT recognized and silently fall back to bottom-center."New value: +"Where the number sits on the page."
      • addedInput schema / properties / position / x-ui
        Added value: +{
        +  "labels": {
        +    "bc": "Bottom centre",
        +    "bl": "Bottom left",
        +    "br": "Bottom right",
        +    "tc": "Top centre",
        +    "tl": "Top left",
        +    "tr": "Top right"
        +  }
        +}
      • changedInput schema / properties / start / description
        Previous value: -"Starting number. Field name is 'start' — not 'start_number'."New value: +"The number printed on the first numbered page."
      • changedInput schema / properties / start / maximum
        Previous value: -999999New value: +999
    • Changedpdf_protect9 fields changed
      • changedInput schema / properties / encryption / description
        Previous value: -"Encryption strength."New value: +"How strongly the file is locked."
      • addedInput schema / properties / encryption / x-ui
        Added value: +{
        +  "labels": {
        +    "aes128": "AES-128 (compatible)",
        +    "aes256": "AES-256 (strongest)"
        +  }
        +}
      • changedInput schema / properties / password / description
        Previous value: -"Sets BOTH the user and owner password. May be omitted only when userPassword or ownerPassword is provided instead."New value: +"One password used for both opening the file and unlocking its permissions. Leave it blank only if you set an open password or a permissions password below instead - one of the three is needed."
      • addedInput schema / properties / password / title
        Added value: +"Password"
      • removedInput schema / properties / permissions / default
        Removed value: -"print"
      • changedInput schema / properties / permissions / description
        Previous value: -"What a reader is still allowed to do after the password is entered."New value: +"What a reader is still allowed to do after they enter the password. Use any of print, copy, edit, annotate, separated by commas - or the single word all. A word we do not recognise is ignored, and if none of them are recognised the reader can do nothing at all, so leave this blank rather than guessing."
      • removedInput schema / properties / permissions / enum
        Removed value: -[
        -  "all",
        -  "print",
        -  "print,copy",
        -  "copy",
        -  "annotate",
        -  "edit"
        -]
      • removedInput schema / properties / permissions / x-ui
        Removed value: -{
        -  "labels": {
        -    "all": "Allow everything",
        -    "annotate": "Commenting only",
        -    "copy": "Copying text only",
        -    "edit": "Editing only",
        -    "print": "Printing only",
        -    "print,copy": "Printing and copying text"
        -  }
        -}
      • changedInput schema / required
        Previous value: -[
        -  "file",
        -  "password"
        -]New value: +[
        +  "file"
        +]
    • Changedpdf_remove_watermark1 field changed
      • addedInput schema / properties / passthrough
        Added value: +{
        +  "default": false,
        +  "description": "Some watermarks are painted into the page and cannot be lifted out. Left off, the step stops with an error when that happens. Switch it on and the file is passed through untouched so the rest of the workflow still runs.",
        +  "title": "Carry on if there is nothing to remove",
        +  "type": "boolean"
        +}
    • Changedpdf_reverse3 fields changed
      • addedInput schema / properties / outputName
        Added value: +{
        +  "description": "Optional name for the file you get back. Leave blank and we name it for you.",
        +  "type": "string"
        +}
      • addedInput schema / properties / ranges
        Added value: +{
        +  "description": "Reverse only these pages, written as 1-3,7-10. Leave it blank to reverse the whole document.",
        +  "title": "Only these pages",
        +  "type": "string"
        +}
      • addedInput schema / properties / reverseTarget
        Added value: +{
        +  "default": "in",
        +  "description": "Which pages the reversal applies to when you have named a range above. Ignored when no range is given.",
        +  "enum": [
        +    "in",
        +    "off"
        +  ],
        +  "type": "string",
        +  "x-ui": {
        +    "labels": {
        +      "in": "Reverse the pages inside those ranges",
        +      "off": "Reverse everything outside those ranges"
        +    }
        +  }
        +}
    • Changedpdf_rotate3 fields changed
      • changedInput schema / properties / pages / description
        Previous value: -"Page ranges e.g. '1-3,5'. Empty = ALL pages — do NOT send 'all'."New value: +"Which pages to turn, e.g. '1-3,5'. Leave blank to turn every page."
      • changedInput schema / properties / rotation / description
        Previous value: -"Degrees clockwise. The field name is 'rotation' — not 'angle'."New value: +"How far to turn each page, clockwise."
      • addedInput schema / properties / rotation / x-ui
        Added value: +{
        +  "labels": {
        +    "180": "180° (upside down)",
        +    "270": "90° anticlockwise",
        +    "90": "90° clockwise"
        +  }
        +}
    • Changedpdf_split5 fields changed
      • changedInput schema / properties / chunkSize / description
        Previous value: -"Pages per chunk when mode=chunks."New value: +"How many pages go into each output file."
      • changedInput schema / properties / chunkSize / maximum
        Previous value: -10000New value: +100
      • addedInput schema / properties / chunkSize / x-show-when
        Added value: +{
        +  "mode": [
        +    "chunks"
        +  ]
        +}
      • changedInput schema / properties / pages / description
        Previous value: -"Page range e.g. '1-3,5,7-9'. REQUIRED when mode=range (the default); ignored for other modes."New value: +"Which pages to keep, e.g. '1-3,5,7-9'."
      • addedInput schema / properties / pages / x-show-when
        Added value: +{
        +  "mode": [
        +    "range"
        +  ]
        +}
    • Changedpdf_to_excel6 fields changed
      • changedInput schema / properties / ocrLang / description
        Previous value: -"Any Tesseract code, passed raw to ocrmypdf -l (default eng). Read only when ocrFirst=true; on OCR failure extraction continues un-OCR'd."New value: +"The language of the writing in the scan."
      • addedInput schema / properties / ocrLang / x-show-when
        Added value: +{
        +  "ocrFirst": [
        +    "true"
        +  ]
        +}
      • addedInput schema / properties / ocrLang / x-ui
        Added value: +{
        +  "labels": {
        +    "ara": "Arabic",
        +    "chi_sim": "Chinese (Simplified)",
        +    "deu": "German",
        +    "eng": "English",
        +    "fra": "French",
        +    "hin": "Hindi",
        +    "ita": "Italian",
        +    "jpn": "Japanese",
        +    "kor": "Korean",
        +    "nld": "Dutch",
        +    "pol": "Polish",
        +    "por": "Portuguese",
        +    "rus": "Russian",
        +    "spa": "Spanish"
        +  }
        +}
      • changedInput schema / properties / sheetMode / description
        Previous value: -"XLSX sheet strategy. CSV/TSV/JSON ignore this."New value: +"How the tables are laid out across the workbook's sheets."
      • addedInput schema / properties / sheetMode / x-show-when
        Added value: +{
        +  "format": [
        +    "xlsx"
        +  ]
        +}
      • addedInput schema / properties / sheetMode / x-ui
        Added value: +{
        +  "labels": {
        +    "per-page": "One sheet per page",
        +    "per-table": "One sheet per table",
        +    "single": "Everything on one sheet"
        +  }
        +}
    • Changedpdf_to_excel_batch6 fields changed
      • changedInput schema / properties / ocrLang / description
        Previous value: -"Any Tesseract code, passed raw to ocrmypdf -l (default eng). Read only when ocrFirst=true; on OCR failure extraction continues un-OCR'd."New value: +"The language of the writing in the scan."
      • addedInput schema / properties / ocrLang / x-show-when
        Added value: +{
        +  "ocrFirst": [
        +    "true"
        +  ]
        +}
      • addedInput schema / properties / ocrLang / x-ui
        Added value: +{
        +  "labels": {
        +    "ara": "Arabic",
        +    "chi_sim": "Chinese (Simplified)",
        +    "deu": "German",
        +    "eng": "English",
        +    "fra": "French",
        +    "hin": "Hindi",
        +    "ita": "Italian",
        +    "jpn": "Japanese",
        +    "kor": "Korean",
        +    "nld": "Dutch",
        +    "pol": "Polish",
        +    "por": "Portuguese",
        +    "rus": "Russian",
        +    "spa": "Spanish"
        +  }
        +}
      • changedInput schema / properties / sheetMode / description
        Previous value: -"XLSX sheet strategy. CSV/TSV/JSON ignore this."New value: +"How the tables are laid out across the workbook's sheets."
      • addedInput schema / properties / sheetMode / x-show-when
        Added value: +{
        +  "format": [
        +    "xlsx"
        +  ]
        +}
      • addedInput schema / properties / sheetMode / x-ui
        Added value: +{
        +  "labels": {
        +    "per-page": "One sheet per page",
        +    "per-table": "One sheet per table",
        +    "single": "Everything on one sheet"
        +  }
        +}
    • Changedpdf_to_excel_inspect6 fields changed
      • changedInput schema / properties / ocrFirst / description
        Previous value: -"Run OCR before table extraction (scanned PDFs)."New value: +"Accepted but ignored by the inspector — run pdf_ocr first, then inspect."
      • addedInput schema / properties / ocrFirst / x-show-when
        Added value: +{
        +  "engine": [
        +    "__never"
        +  ]
        +}
      • changedInput schema / properties / ocrLang / description
        Previous value: -"OCR language (Tesseract code)."New value: +"Accepted but ignored by the inspector - it never runs OCR. Run PDF OCR first, then inspect."
      • addedInput schema / properties / ocrLang / x-show-when
        Added value: +{
        +  "engine": [
        +    "__never"
        +  ]
        +}
      • changedInput schema / properties / tableIndexes / description
        Previous value: -"Comma-separated 0-based table indexes to keep. Empty = all tables."New value: +"Accepted but ignored by the inspector - its whole job is to report every table so you can choose indexes on PDF to Excel afterwards."
      • addedInput schema / properties / tableIndexes / x-show-when
        Added value: +{
        +  "engine": [
        +    "__never"
        +  ]
        +}
    • Changedpdf_to_images30 fields changed
      • changedInput schema / properties / avifQuality / description
        Previous value: -"AVIF quality (Starter+)"New value: +"Higher keeps more detail and makes a bigger file."
      • addedInput schema / properties / avifQuality / x-show-when
        Added value: +{
        +  "format": [
        +    "avif"
        +  ]
        +}
      • changedInput schema / properties / backgroundColor / description
        Previous value: -"Background for transparent PDFs rendered to non-alpha formats"New value: +"What fills the see-through parts of the page in a format that cannot keep them."
      • addedInput schema / properties / backgroundColor / x-show-when
        Added value: +{
        +  "format": [
        +    "jpg",
        +    "webp"
        +  ]
        +}
      • changedInput schema / properties / jpegQuality / description
        Previous value: -"Consulted only when format=jpg. Out-of-range clamps silently to 50-95 — this is not a 0-100 scale."New value: +"Higher keeps more detail and makes a bigger file. 50 is the lowest this tool will go."
      • addedInput schema / properties / jpegQuality / x-show-when
        Added value: +{
        +  "format": [
        +    "jpg",
        +    "tiff"
        +  ]
        +}
      • changedInput schema / properties / maxWidth / description
        Previous value: -"Cap width (shrink-only, preserves aspect)"New value: +"Shrink-only width cap in pixels, aspect preserved. Leave blank for no cap — an explicit 0 clamps UP to 100 and shrinks every page."
      • changedInput schema / properties / preset / description
        Previous value: -"One-click preset bundle. Explicit fields override preset values."New value: +"A ready-made bundle of settings. Anything you set yourself wins over the preset."
      • changedInput schema / properties / preset / enum
        Previous value: -[
        -  "",
        -  "web",
        -  "print",
        -  "email",
        -  "archive"
        -]New value: +[
        +  "web",
        +  "print",
        +  "email",
        +  "archive"
        +]
      • addedInput schema / properties / preset / x-ui
        Added value: +{
        +  "labels": {
        +    "archive": "For keeping (PNG, 300 DPI)",
        +    "email": "For emailing (JPG, 150 DPI)",
        +    "print": "For printing (PNG, 300 DPI)",
        +    "web": "For a web page (WEBP, 96 DPI)"
        +  }
        +}
      • changedInput schema / properties / sheetBackground / description
        Previous value: -"Canvas color behind tiles, sheet/filmstrip modes only. #rgb or #rrggbb; invalid hex silently keeps #FFFFFF."New value: +"Colour of the canvas behind the tiles, as #rgb or #rrggbb. Anything we cannot read stays white."
      • addedInput schema / properties / sheetBackground / title
        Added value: +"Sheet background colour"
      • addedInput schema / properties / sheetBackground / x-show-when
        Added value: +{
        +  "mode": [
        +    "sheet",
        +    "filmstrip"
        +  ]
        +}
      • changedInput schema / properties / sheetColumns / description
        Previous value: -"mode=sheet only — filmstrip is always one row. Out-of-range clamps silently to 1-10."New value: +"How many pages sit side by side on the contact sheet."
      • addedInput schema / properties / sheetColumns / x-show-when
        Added value: +{
        +  "mode": [
        +    "sheet"
        +  ]
        +}
      • changedInput schema / properties / sheetGap / description
        Previous value: -"Pixel spacing between tiles in sheet/filmstrip modes. Out-of-range clamps silently to 0-200."New value: +"Spacing between the tiles, in pixels."
      • addedInput schema / properties / sheetGap / x-show-when
        Added value: +{
        +  "mode": [
        +    "sheet",
        +    "filmstrip"
        +  ]
        +}
      • changedInput schema / properties / tiffCompression / description
        Previous value: -"TIFF compression (format=tiff only)."New value: +"How the TIFF is packed down."
      • addedInput schema / properties / tiffCompression / x-show-when
        Added value: +{
        +  "format": [
        +    "tiff"
        +  ]
        +}
      • addedInput schema / properties / tiffCompression / x-ui
        Added value: +{
        +  "labels": {
        +    "g4": "Group 4 (black and white)",
        +    "jpeg": "JPEG (smaller, lossy)",
        +    "lzw": "LZW (lossless, default)",
        +    "none": "None (largest)",
        +    "packbits": "PackBits (lossless)",
        +    "zip": "ZIP (lossless)"
        +  }
        +}
      • changedInput schema / properties / transparent / description
        Previous value: -"PNG alpha channel when true"New value: +"Leave the paper see-through instead of white."
      • addedInput schema / properties / transparent / x-show-when
        Added value: +{
        +  "colorMode": [
        +    "rgb"
        +  ],
        +  "format": [
        +    "png",
        +    "webp",
        +    "avif"
        +  ]
        +}
      • changedInput schema / properties / watermarkPosition / description
        Previous value: -"Unknown codes silently become c (center). Does nothing unless watermarkText is set."New value: +"Where the stamp sits on each image."
      • addedInput schema / properties / watermarkPosition / x-ui
        Added value: +{
        +  "labels": {
        +    "bc": "Bottom centre",
        +    "bl": "Bottom left",
        +    "br": "Bottom right",
        +    "c": "Centre",
        +    "ml": "Middle left",
        +    "mr": "Middle right",
        +    "tc": "Top centre",
        +    "tl": "Top left",
        +    "tr": "Top right"
        +  }
        +}
      • changedInput schema / properties / watermarkScale / description
        Previous value: -"ACCEPTED BUT UNUSED in this tool — the raster stamp sizes by watermarkFontSize only; set that instead."New value: +"Not used by this tool — size the stamp with Watermark font size."
      • addedInput schema / properties / watermarkScale / x-show-when
        Added value: +{
        +  "mode": [
        +    "__never"
        +  ]
        +}
      • changedInput schema / properties / watermarkTile / description
        Previous value: -"ACCEPTED BUT UNUSED in this tool — no tiling on rasterized pages; the stamp renders once at watermarkPosition."New value: +"Not used by this tool - a rasterised page is stamped once, where Watermark position says."
      • addedInput schema / properties / watermarkTile / x-show-when
        Added value: +{
        +  "mode": [
        +    "__never"
        +  ]
        +}
      • changedInput schema / properties / webpQuality / description
        Previous value: -"Consulted only when format=webp. Out-of-range clamps silently to 50-95 — this is not a 0-100 scale."New value: +"Higher keeps more detail and makes a bigger file."
      • addedInput schema / properties / webpQuality / x-show-when
        Added value: +{
        +  "format": [
        +    "webp"
        +  ]
        +}
    • Changedpdf_to_images_batch30 fields changed
      • changedInput schema / properties / avifQuality / description
        Previous value: -"AVIF quality (Starter+)"New value: +"Higher keeps more detail and makes a bigger file."
      • addedInput schema / properties / avifQuality / x-show-when
        Added value: +{
        +  "format": [
        +    "avif"
        +  ]
        +}
      • changedInput schema / properties / backgroundColor / description
        Previous value: -"Background for transparent PDFs rendered to non-alpha formats"New value: +"What fills the see-through parts of the page in a format that cannot keep them."
      • addedInput schema / properties / backgroundColor / x-show-when
        Added value: +{
        +  "format": [
        +    "jpg",
        +    "webp"
        +  ]
        +}
      • changedInput schema / properties / jpegQuality / description
        Previous value: -"Consulted only when format=jpg. Out-of-range clamps silently to 50-95 — this is not a 0-100 scale."New value: +"Higher keeps more detail and makes a bigger file. 50 is the lowest this tool will go."
      • addedInput schema / properties / jpegQuality / x-show-when
        Added value: +{
        +  "format": [
        +    "jpg",
        +    "tiff"
        +  ]
        +}
      • changedInput schema / properties / maxWidth / description
        Previous value: -"Cap width (shrink-only, preserves aspect)"New value: +"Shrink-only width cap in pixels, aspect preserved. Leave blank for no cap — an explicit 0 clamps UP to 100 and shrinks every page."
      • changedInput schema / properties / preset / description
        Previous value: -"One-click preset bundle. Explicit fields override preset values."New value: +"A ready-made bundle of settings. Anything you set yourself wins over the preset."
      • changedInput schema / properties / preset / enum
        Previous value: -[
        -  "",
        -  "web",
        -  "print",
        -  "email",
        -  "archive"
        -]New value: +[
        +  "web",
        +  "print",
        +  "email",
        +  "archive"
        +]
      • addedInput schema / properties / preset / x-ui
        Added value: +{
        +  "labels": {
        +    "archive": "For keeping (PNG, 300 DPI)",
        +    "email": "For emailing (JPG, 150 DPI)",
        +    "print": "For printing (PNG, 300 DPI)",
        +    "web": "For a web page (WEBP, 96 DPI)"
        +  }
        +}
      • changedInput schema / properties / sheetBackground / description
        Previous value: -"Canvas color behind tiles, sheet/filmstrip modes only. #rgb or #rrggbb; invalid hex silently keeps #FFFFFF."New value: +"Colour of the canvas behind the tiles, as #rgb or #rrggbb. Anything we cannot read stays white."
      • addedInput schema / properties / sheetBackground / title
        Added value: +"Sheet background colour"
      • addedInput schema / properties / sheetBackground / x-show-when
        Added value: +{
        +  "mode": [
        +    "sheet",
        +    "filmstrip"
        +  ]
        +}
      • changedInput schema / properties / sheetColumns / description
        Previous value: -"mode=sheet only — filmstrip is always one row. Out-of-range clamps silently to 1-10."New value: +"How many pages sit side by side on the contact sheet."
      • addedInput schema / properties / sheetColumns / x-show-when
        Added value: +{
        +  "mode": [
        +    "sheet"
        +  ]
        +}
      • changedInput schema / properties / sheetGap / description
        Previous value: -"Pixel spacing between tiles in sheet/filmstrip modes. Out-of-range clamps silently to 0-200."New value: +"Spacing between the tiles, in pixels."
      • addedInput schema / properties / sheetGap / x-show-when
        Added value: +{
        +  "mode": [
        +    "sheet",
        +    "filmstrip"
        +  ]
        +}
      • changedInput schema / properties / tiffCompression / description
        Previous value: -"TIFF compression (format=tiff only)."New value: +"How the TIFF is packed down."
      • addedInput schema / properties / tiffCompression / x-show-when
        Added value: +{
        +  "format": [
        +    "tiff"
        +  ]
        +}
      • addedInput schema / properties / tiffCompression / x-ui
        Added value: +{
        +  "labels": {
        +    "g4": "Group 4 (black and white)",
        +    "jpeg": "JPEG (smaller, lossy)",
        +    "lzw": "LZW (lossless, default)",
        +    "none": "None (largest)",
        +    "packbits": "PackBits (lossless)",
        +    "zip": "ZIP (lossless)"
        +  }
        +}
      • changedInput schema / properties / transparent / description
        Previous value: -"PNG alpha channel when true"New value: +"Leave the paper see-through instead of white."
      • addedInput schema / properties / transparent / x-show-when
        Added value: +{
        +  "colorMode": [
        +    "rgb"
        +  ],
        +  "format": [
        +    "png",
        +    "webp",
        +    "avif"
        +  ]
        +}
      • changedInput schema / properties / watermarkPosition / description
        Previous value: -"Unknown codes silently become c (center). Does nothing unless watermarkText is set."New value: +"Where the stamp sits on each image."
      • addedInput schema / properties / watermarkPosition / x-ui
        Added value: +{
        +  "labels": {
        +    "bc": "Bottom centre",
        +    "bl": "Bottom left",
        +    "br": "Bottom right",
        +    "c": "Centre",
        +    "ml": "Middle left",
        +    "mr": "Middle right",
        +    "tc": "Top centre",
        +    "tl": "Top left",
        +    "tr": "Top right"
        +  }
        +}
      • changedInput schema / properties / watermarkScale / description
        Previous value: -"ACCEPTED BUT UNUSED in this tool — the raster stamp sizes by watermarkFontSize only; set that instead."New value: +"Not used by this tool — size the stamp with Watermark font size."
      • addedInput schema / properties / watermarkScale / x-show-when
        Added value: +{
        +  "mode": [
        +    "__never"
        +  ]
        +}
      • changedInput schema / properties / watermarkTile / description
        Previous value: -"ACCEPTED BUT UNUSED in this tool — no tiling on rasterized pages; the stamp renders once at watermarkPosition."New value: +"Not used by this tool - a rasterised page is stamped once, where Watermark position says."
      • addedInput schema / properties / watermarkTile / x-show-when
        Added value: +{
        +  "mode": [
        +    "__never"
        +  ]
        +}
      • changedInput schema / properties / webpQuality / description
        Previous value: -"Consulted only when format=webp. Out-of-range clamps silently to 50-95 — this is not a 0-100 scale."New value: +"Higher keeps more detail and makes a bigger file."
      • addedInput schema / properties / webpQuality / x-show-when
        Added value: +{
        +  "format": [
        +    "webp"
        +  ]
        +}
    • Changedpdf_watermark8 fields changed
      • changedInput schema / properties / color / description
        Previous value: -"Hex color #rgb or #rrggbb (mode=text)."New value: +"Colour of the lettering. Hex, #rgb or #rrggbb."
      • addedInput schema / properties / color / x-show-when
        Added value: +{
        +  "mode": [
        +    "text"
        +  ]
        +}
      • changedInput schema / properties / fontFamily / description
        Previous value: -"Outside the enum it silently becomes Helvetica. All three are Latin-1 — non-Latin text is refused 400 (use mode=image)."New value: +"Lettering style. Latin alphabet only — for other scripts stamp an image instead."
      • addedInput schema / properties / fontFamily / x-show-when
        Added value: +{
        +  "mode": [
        +    "text"
        +  ]
        +}
      • changedInput schema / properties / fontSize / description
        Previous value: -"Point size on the page (mode=text only). Non-integer input silently resets to 48."New value: +"Height of the lettering in points."
      • addedInput schema / properties / fontSize / x-show-when
        Added value: +{
        +  "mode": [
        +    "text"
        +  ]
        +}
      • changedInput schema / properties / text / description
        Previous value: -"Watermark text (used when mode=text)."New value: +"The wording stamped across each page."
      • addedInput schema / properties / text / x-show-when
        Added value: +{
        +  "mode": [
        +    "text"
        +  ]
        +}
    • Changedphoto_bg_remover5 fields changed
      • addedInput schema / properties / alpha_matting
        Added value: +{
        +  "default": false,
        +  "description": "Re-solves hair, fur and glass edges as a soft fade instead of a hard cut. Slower and uses more memory.",
        +  "title": "Soften the edges",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / alpha_matting_background_threshold
        Added value: +{
        +  "default": 10,
        +  "description": "How certain a pixel must be to count as definitely background. Only used when edge softening is on. Values outside 0-255 are pulled back into range.",
        +  "maximum": 255,
        +  "minimum": 0,
        +  "type": "integer",
        +  "x-show-when": {
        +    "alpha_matting": [
        +      "true"
        +    ]
        +  }
        +}
      • addedInput schema / properties / alpha_matting_erode_size
        Added value: +{
        +  "default": 10,
        +  "description": "Width of the band around the subject that gets re-solved. Only used when edge softening is on. Values outside 0-64 are pulled back into range.",
        +  "maximum": 64,
        +  "minimum": 0,
        +  "type": "integer",
        +  "x-show-when": {
        +    "alpha_matting": [
        +      "true"
        +    ]
        +  }
        +}
      • addedInput schema / properties / alpha_matting_foreground_threshold
        Added value: +{
        +  "default": 240,
        +  "description": "How certain a pixel must be to count as definitely the subject. Only used when edge softening is on. Values outside 0-255 are pulled back into range.",
        +  "maximum": 255,
        +  "minimum": 0,
        +  "type": "integer",
        +  "x-show-when": {
        +    "alpha_matting": [
        +      "true"
        +    ]
        +  }
        +}
      • addedInput schema / properties / model / x-ui
        Added value: +{
        +  "labels": {
        +    "isnet-general-use": "Fine detail (slower)",
        +    "u2net": "Standard",
        +    "u2net_human_seg": "People and portraits"
        +  }
        +}
    • Changedphoto_collage15 fields changed
      • addedInput schema / properties / aspect_ratio / default
        Added value: +"1:1"
      • addedInput schema / properties / aspect_ratio / x-show-when
        Added value: +{
        +  "layout_mode": [
        +    "smart",
        +    "grid_legacy"
        +  ]
        +}
      • addedInput schema / properties / layout / default
        Added value: +"2x2"
      • changedInput schema / properties / layout / description
        Previous value: -"Legacy NxM grid, e.g. 2x2, 3x3 (layout_mode=grid_legacy)."New value: +"A plain grid, written as columns then rows."
      • addedInput schema / properties / layout / enum
        Added value: +[
        +  "1x2",
        +  "2x1",
        +  "2x2",
        +  "2x3",
        +  "3x2",
        +  "3x3",
        +  "4x4"
        +]
      • addedInput schema / properties / layout / x-show-when
        Added value: +{
        +  "layout_mode": [
        +    "grid_legacy"
        +  ]
        +}
      • addedInput schema / properties / output_long_edge / default
        Added value: +1200
      • changedInput schema / properties / output_width / description
        Previous value: -"Legacy alias for output_long_edge."New value: +"Older name for the setting above. Set the longest side instead; this is only used if that one is left empty."
      • addedInput schema / properties / quality / default
        Added value: +90
      • changedInput schema / properties / quality / minimum
        Previous value: -0New value: +1
      • addedInput schema / properties / quality / x-show-when
        Added value: +{
        +  "output_format": [
        +    "jpg",
        +    "webp",
        +    "avif"
        +  ]
        +}
      • changedInput schema / properties / template / description
        Previous value: -"Named template (layout_mode=template), e.g. ig_post_2x2, ig_story_3_vertical, magazine_5_hero."New value: +"Named template (layout_mode=template), e.g. ig_post_2x2, ig_story_3_vertical, ig_post_5_magazine."
      • addedInput schema / properties / template / enum
        Added value: +[
        +  "ig_post_2x2",
        +  "ig_post_hero_3",
        +  "ig_post_5_magazine",
        +  "ig_story_3_vertical",
        +  "ig_story_hero_4",
        +  "ig_carousel_4_split",
        +  "pinterest_3_stack",
        +  "landscape_3up_equal",
        +  "landscape_hero_2_offset",
        +  "landscape_film_strip",
        +  "square_diptych",
        +  "square_triptych_top_2_bottom_1"
        +]
      • addedInput schema / properties / template / x-show-when
        Added value: +{
        +  "layout_mode": [
        +    "template"
        +  ]
        +}
      • addedInput schema / properties / template / x-ui
        Added value: +{
        +  "labels": {
        +    "ig_carousel_4_split": "Carousel — quad split",
        +    "ig_post_2x2": "Instagram post — 2x2",
        +    "ig_post_5_magazine": "Magazine — 5 photos",
        +    "ig_post_hero_3": "Instagram post — hero + 3",
        +    "ig_story_3_vertical": "Story — 3 stacked",
        +    "ig_story_hero_4": "Story — hero + 4 strip",
        +    "landscape_3up_equal": "Landscape — 3 equal columns",
        +    "landscape_film_strip": "Landscape — 5 film strip",
        +    "landscape_hero_2_offset": "Landscape — hero + 2 stacked",
        +    "pinterest_3_stack": "Pinterest — 3 stack",
        +    "square_diptych": "Diptych — side by side",
        +    "square_triptych_top_2_bottom_1": "Triptych — 2 over 1"
        +  }
        +}
    • Changedphoto_compress_to_size4 fields changed
      • changedInput schema / properties / output_format / description
        Previous value: -"Optional output format, e.g. jpg, png, webp. HEIC/HEIF inputs default to jpg output."New value: +"What to save it as. Leave blank to keep the format it came in as - except HEIC and HEIF pictures, which always come back as JPG. Squeezing to a size needs a format that compresses, which is why BMP and GIF are not offered."
      • addedInput schema / properties / output_format / enum
        Added value: +[
        +  "jpg",
        +  "png",
        +  "webp"
        +]
      • addedInput schema / properties / target_size_kb / default
        Added value: +500
      • changedInput schema / properties / target_size_kb / maximum
        Previous value: -524288New value: +25600
    • Changedphoto_face_blur7 fields changed
      • changedInput schema / properties / block_size / description
        Previous value: -"Pixelate block size override. 0 = auto from blur_strength."New value: +"Size of each mosaic square. 0 uses the amount chosen above; 1 is ignored, use 2 or more."
      • addedInput schema / properties / block_size / x-show-when
        Added value: +{
        +  "blur_mode": [
        +    "pixelate"
        +  ]
        +}
      • addedInput schema / properties / blur_radius / x-show-when
        Added value: +{
        +  "blur_mode": [
        +    "gaussian"
        +  ]
        +}
      • addedInput schema / properties / blur_strength / x-show-when
        Added value: +{
        +  "blur_mode": [
        +    "gaussian",
        +    "pixelate"
        +  ]
        +}
      • changedInput schema / properties / manual_faces / description
        Previous value: -"Optional JSON array of manual face rectangles to blur."New value: +"Advanced: extra rectangles to blur even if no face was found there, as [{\"x\":10,\"y\":20,\"w\":80,\"h\":80}] in pixels."
      • addedInput schema / properties / output_format / enum
        Added value: +[
        +  "jpg",
        +  "png",
        +  "webp",
        +  "bmp"
        +]
      • changedInput schema / properties / selected_faces / description
        Previous value: -"Optional JSON array of detected-face indexes to blur (default: all)."New value: +"Advanced: which detected faces to blur, as a list of numbers starting at 0, e.g. [0,2]. Leave empty to blur every face found."
    • Changedphoto_flip_rotate2 fields changed
      • addedInput schema / properties / action / x-ui
        Added value: +{
        +  "labels": {
        +    "custom": "Rotate by an exact angle",
        +    "flip-h": "Flip left to right",
        +    "flip-v": "Flip top to bottom",
        +    "rotate180": "Rotate 180°",
        +    "rotate270": "Rotate 90° left",
        +    "rotate90": "Rotate 90° right"
        +  }
        +}
      • addedInput schema / properties / degrees / x-show-when
        Added value: +{
        +  "action": [
        +    "custom"
        +  ]
        +}
    • Changedphoto_image_overlay1 field changed
      • addedInput schema / properties / output_format / enum
        Added value: +[
        +  "jpg",
        +  "png",
        +  "webp",
        +  "bmp"
        +]
    • Changedphoto_image_splitter1 field changed
      • addedInput schema / properties / output_format / enum
        Added value: +[
        +  "jpg",
        +  "png",
        +  "webp",
        +  "bmp"
        +]
    • Changedphoto_meme_generator2 fields changed
      • changedInput schema / properties / font_size / description
        Previous value: -"'auto' or a pixel size."New value: +"Caption size in pixels, or the word auto to size it from the picture (a tenth of its height, kept between 20 and 150). A number outside 10 to 200 is treated as auto."
      • changedInput schema / properties / output_format / enum
        Previous value: -[
        -  "jpg",
        -  "jpeg",
        -  "png",
        -  "webp"
        -]New value: +[
        +  "jpg",
        +  "png",
        +  "webp"
        +]
    • Changedphoto_noise_reducer4 fields changed
      • addedInput schema / properties / mode / x-ui
        Added value: +{
        +  "labels": {
        +    "auto": "Balanced",
        +    "dctdnoiz": "Best for JPEG blockiness (slow)",
        +    "despeckle": "Gentle speckle removal",
        +    "gaussian": "Soft blur",
        +    "luminance": "Keep colour, smooth brightness",
        +    "median": "Speckle removal",
        +    "nlmeans": "Best quality (slow)",
        +    "smart": "Let the tool decide"
        +  }
        +}
      • addedInput schema / properties / sharpen / x-show-when
        Added value: +{
        +  "mode": [
        +    "auto",
        +    "median",
        +    "despeckle",
        +    "gaussian",
        +    "luminance",
        +    "nlmeans",
        +    "dctdnoiz"
        +  ]
        +}
      • addedInput schema / properties / strength / x-show-when
        Added value: +{
        +  "mode": [
        +    "auto",
        +    "median",
        +    "despeckle",
        +    "gaussian",
        +    "luminance",
        +    "nlmeans",
        +    "dctdnoiz"
        +  ]
        +}
      • addedInput schema / properties / strength / x-ui
        Added value: +{
        +  "labels": {
        +    "1": "Light",
        +    "2": "Medium",
        +    "3": "Strong",
        +    "4": "Maximum"
        +  }
        +}
    • Changedphoto_resize10 fields changed
      • changedInput schema / properties / bg_color / description
        Previous value: -"Canvas background color (mode=canvas)."New value: +"Colour of the padding added around the picture when it does not fill the canvas."
      • addedInput schema / properties / bg_color / x-show-when
        Added value: +{
        +  "mode": [
        +    "canvas"
        +  ]
        +}
      • addedInput schema / properties / force_exact / x-show-when
        Added value: +{
        +  "mode": [
        +    "dimensions"
        +  ]
        +}
      • addedInput schema / properties / height / x-show-when
        Added value: +{
        +  "mode": [
        +    "dimensions",
        +    "height",
        +    "canvas"
        +  ]
        +}
      • addedInput schema / properties / maintain_ratio / x-show-when
        Added value: +{
        +  "mode": [
        +    "dimensions"
        +  ]
        +}
      • addedInput schema / properties / mode / x-ui
        Added value: +{
        +  "labels": {
        +    "canvas": "Pad to an exact canvas",
        +    "dimensions": "Exact width and height",
        +    "height": "Fit to a height",
        +    "max": "Fit inside a box (never enlarge)",
        +    "percentage": "Scale by percent",
        +    "width": "Fit to a width"
        +  }
        +}
      • changedInput schema / properties / percentage / description
        Previous value: -"Scale percentage — REQUIRED when mode=percentage."New value: +"Scale to this percent of the original size."
      • addedInput schema / properties / percentage / x-show-when
        Added value: +{
        +  "mode": [
        +    "percentage"
        +  ]
        +}
      • changedInput schema / properties / width / description
        Previous value: -"Target width px. In the default 'dimensions' mode at least one of width/height is REQUIRED; also required for width/max/canvas modes."New value: +"Target width in pixels. In 'Fit inside a box' mode this is the longest side the picture may reach."
      • addedInput schema / properties / width / x-show-when
        Added value: +{
        +  "mode": [
        +    "dimensions",
        +    "width",
        +    "max",
        +    "canvas"
        +  ]
        +}
    • Changedphoto_shadow_adder2 fields changed
      • changedInput schema / properties / output_format / description
        Previous value: -"Optional output format."New value: +"Leave blank to keep the format it came in as. Only PNG keeps the area around the shadow see-through; JPG and WebP are flattened onto white."
      • addedInput schema / properties / output_format / enum
        Added value: +[
        +  "png",
        +  "jpg",
        +  "webp"
        +]
    • Changedphoto_to_text3 fields changed
      • addedInput schema / properties / binarize
        Added value: +{
        +  "default": false,
        +  "description": "Force the picture to pure black and white before reading it. Off by default because it destroys text in uneven light; try it on faint or washed-out scans.",
        +  "title": "Force black and white",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / binarize_threshold
        Added value: +{
        +  "default": 60,
        +  "description": "The cut-off between black and white, as a percent. Lower keeps more of the picture black. Only used when black and white is forced on; anything outside 1-99 quietly reverts to 60.",
        +  "maximum": 99,
        +  "minimum": 1,
        +  "type": "integer",
        +  "x-show-when": {
        +    "binarize": [
        +      "true"
        +    ]
        +  }
        +}
      • changedInput schema / properties / languages / description
        Previous value: -"Comma-separated ISO-639-1 codes, e.g. 'en' or 'en,fr'. Supported: en, fr, de, es, pt, it, zh, ja, ar, ru, ko, nl. Field name is 'languages' — not 'language'; Tesseract codes like 'eng' are NOT recognized."New value: +"Which language or languages the writing is in, as two-letter codes. One, or several separated by commas: en, or en,fr. Common ones are en, fr, de, es, pt, it, nl, ru, ar, zh, ja, ko. Field name is languages, not language, and Tesseract-style codes like eng are not recognised."
    • Changedphoto_upscaler2 fields changed
      • addedInput schema / properties / model / x-ui
        Added value: +{
        +  "labels": {
        +    "fast": "Fast — about 15 seconds",
        +    "quality": "Best detail — up to 4 minutes"
        +  }
        +}
      • changedInput schema / properties / output_format / enum
        Previous value: -[
        -  "jpg",
        -  "jpeg",
        -  "png",
        -  "webp"
        -]New value: +[
        +  "jpg",
        +  "png",
        +  "webp"
        +]
    • Changedphoto_watermark4 fields changed
      • addedInput schema / properties / color
        Added value: +{
        +  "default": "#ffffff",
        +  "description": "A hex colour, or one of white, black, gray, red, orange, yellow, green, blue, cyan, magenta, purple, pink, brown. Anything else falls back to white.",
        +  "title": "Watermark colour",
        +  "type": "string"
        +}
      • addedInput schema / properties / position / x-ui
        Added value: +{
        +  "labels": {
        +    "Center": "Middle centre",
        +    "East": "Middle right",
        +    "North": "Top centre",
        +    "NorthEast": "Top right",
        +    "NorthWest": "Top left",
        +    "South": "Bottom centre",
        +    "SouthEast": "Bottom right",
        +    "SouthWest": "Bottom left",
        +    "West": "Middle left"
        +  }
        +}
      • addedInput schema / properties / stroke_color
        Added value: +{
        +  "description": "The outline behind the text, which is what keeps a watermark readable over a white dress or a black suit. Leave it unset and it is picked for you - black behind a light colour, white behind a dark one. Same colour names as above.",
        +  "title": "Outline colour",
        +  "type": "string"
        +}
      • addedInput schema / properties / stroke_width
        Added value: +{
        +  "default": "auto",
        +  "description": "How thick the outline behind the text is. Leave it on auto and it scales with the text size. 0 turns the outline off; otherwise a whole number up to 20 - anything larger is treated as 20.",
        +  "title": "Outline thickness",
        +  "type": "string"
        +}
    • Changedweb_extract_table9 fields changed
      • changedInput schema / properties / acknowledge_robots / description
        Previous value: -"Business+ only: proceed even when robots.txt disallows the page."New value: +"Business plan: read the table even when the site's robots.txt asks bots to stay away. On any other plan this switch does nothing and the page is still refused."
      • changedInput schema / properties / output / description
        Previous value: -"Both values return a JSON envelope: 'json' puts a rows matrix in 'rows'; 'csv' puts one CSV string in the 'csv' field — never a file."New value: +"How the table comes back: JSON gives rows you can feed to the next step, CSV gives one block of comma-separated text. Either way it is data, not a downloadable file."
      • changedInput schema / properties / table_index / description
        Previous value: -"0-based table index"New value: +"Which table on the page, counting from 0 for the first one. If the page has fewer tables than this, the error tells you how many it found."
      • addedInput schema / properties / table_index / maximum
        Added value: +50
      • addedInput schema / properties / table_index / minimum
        Added value: +0
      • addedInput schema / properties / timeout_ms / default
        Added value: +30000
      • changedInput schema / properties / timeout_ms / description
        Previous value: -"Optional fetch timeout override in milliseconds."New value: +"How long to wait for the page before giving up, in milliseconds (30000 = 30 seconds)."
      • changedInput schema / properties / timeout_ms / minimum
        Previous value: -1New value: +1000
      • changedInput schema / properties / user_agent / description
        Previous value: -"Optional custom User-Agent header."New value: +"Advanced: how we introduce ourselves to the site. Left blank we identify as JohnsEssentialsBot."
    • Changedweb_fetch5 fields changed
      • changedInput schema / properties / acknowledge_robots / description
        Previous value: -"Business+ only: proceed even when robots.txt disallows the page."New value: +"Business plan only: fetch the page even when the site's rules file (robots.txt) asks crawlers to stay away. On other plans this switch has no effect."
      • addedInput schema / properties / timeout_ms / default
        Added value: +30000
      • changedInput schema / properties / timeout_ms / description
        Previous value: -"Optional fetch timeout override in milliseconds."New value: +"How long to wait for the page before giving up, in milliseconds (30000 = 30 seconds)."
      • changedInput schema / properties / timeout_ms / minimum
        Previous value: -1New value: +1000
      • changedInput schema / properties / user_agent / description
        Previous value: -"Optional custom User-Agent header."New value: +"What to tell the site we are. Leave blank and we identify honestly as JohnsEssentialsBot/1.0."
    • Changedweb_scrape_page8 fields changed
      • changedInput schema / properties / acknowledge_robots / description
        Previous value: -"Business+ only: proceed even when robots.txt disallows the page."New value: +"Business plan: scrape the page even when the site's robots.txt asks bots to stay away. On any other plan this switch does nothing and the page is still refused."
      • changedInput schema / properties / mode / description
        Previous value: -"Chooses the response shape: selectors returns per-key text under 'data'; readability returns the article object under 'article'."New value: +"Readability gives you the page's main article as clean text. Selectors gives you only the specific bits you name below."
      • changedInput schema / properties / selectors / description
        Previous value: -"key → CSS selector map — REQUIRED (non-empty) when mode=selectors"New value: +"One CSS selector per thing you want, named: {\"headline\": \"h1\", \"price\": \".price\"}. Needed only when you pick Selectors above."
      • addedInput schema / properties / selectors / x-show-when
        Added value: +{
        +  "mode": [
        +    "selectors"
        +  ]
        +}
      • addedInput schema / properties / timeout_ms / default
        Added value: +30000
      • changedInput schema / properties / timeout_ms / description
        Previous value: -"Optional fetch timeout override in milliseconds."New value: +"How long to wait for the page before giving up, in milliseconds (30000 = 30 seconds)."
      • changedInput schema / properties / timeout_ms / minimum
        Previous value: -1New value: +1000
      • changedInput schema / properties / user_agent / description
        Previous value: -"Optional custom User-Agent header."New value: +"Advanced: how we introduce ourselves to the site. Left blank we identify as JohnsEssentialsBot."
  15. 9 tool updates
    • Changedanalyze_word_count1 field changed
      • changedInput schema / required
        Previous value: -[
        -  "text"
        -]New value: +[]
    • Changedconvert_file4 fields changed
      • changedInput schema / properties / from / description
        Previous value: -"Source format, e.g. 'jpg', 'mp3', 'docx'. OPTIONAL — leave it out and we read the format from the file's own bytes. Only worth setting when the bytes are ambiguous or the file has a synthetic name."New value: +"Leave blank and we read the format from the file itself. Only set it if the file has no name or an odd one."
      • addedInput schema / properties / from / enum
        Added value: +[
        +  "jpg",
        +  "png",
        +  "webp",
        +  "bmp",
        +  "tiff",
        +  "gif",
        +  "avif",
        +  "ico",
        +  "heic",
        +  "svg",
        +  "psd",
        +  "mp3",
        +  "wav",
        +  "ogg",
        +  "opus",
        +  "flac",
        +  "m4a",
        +  "aac",
        +  "wma",
        +  "aiff",
        +  "alac",
        +  "mp4",
        +  "mov",
        +  "webm",
        +  "mkv",
        +  "avi",
        +  "flv",
        +  "wmv",
        +  "3gp",
        +  "mpg",
        +  "vob",
        +  "ts",
        +  "m2ts",
        +  "srt",
        +  "vtt",
        +  "docx",
        +  "doc",
        +  "txt",
        +  "cbz"
        +]
      • changedInput schema / properties / to / description
        Previous value: -"Target format, e.g. 'png', 'pdf', 'mp3'."New value: +"The format you want back. Apple Lossless (alac) is delivered as a .m4a file."
      • addedInput schema / properties / to / enum
        Added value: +[
        +  "pdf",
        +  "jpg",
        +  "png",
        +  "webp",
        +  "bmp",
        +  "tiff",
        +  "gif",
        +  "avif",
        +  "ico",
        +  "mp3",
        +  "wav",
        +  "ogg",
        +  "opus",
        +  "flac",
        +  "m4a",
        +  "aac",
        +  "wma",
        +  "aiff",
        +  "alac",
        +  "mp4",
        +  "mov",
        +  "webm",
        +  "mkv",
        +  "avi",
        +  "srt",
        +  "vtt",
        +  "txt",
        +  "3gp",
        +  "flv",
        +  "m2ts",
        +  "mpg",
        +  "ts",
        +  "vob",
        +  "wmv"
        +]
    • Changedconvert_text6 fields changed
      • addedInput schema / properties / from / default
        Added value: +"md"
      • changedInput schema / properties / from / description
        Previous value: -"Source format or operation: md, html, csv, json, xml, yaml — or base64_encode, base64_decode, url_encode, url_decode (the operation rides in 'from')."New value: +"What the text is now — or the encoding job to run (Base64 / URL encode and decode ride in this field)."
      • addedInput schema / properties / from / enum
        Added value: +[
        +  "md",
        +  "html",
        +  "csv",
        +  "json",
        +  "xml",
        +  "yaml",
        +  "base64_encode",
        +  "base64_decode",
        +  "url_encode",
        +  "url_decode"
        +]
      • addedInput schema / properties / to / default
        Added value: +"html"
      • changedInput schema / properties / to / description
        Previous value: -"Target format: html, md, json, csv, xml, yaml, txt. Must differ from 'from'. Supported pairs: md↔html, csv→json/xml, json↔csv, json↔xml, json↔yaml, xml→json, any→txt; for encode/decode operations set to='txt'."New value: +"What you want back. Must differ from the source. Supported pairs: Markdown↔HTML, CSV→JSON/XML, JSON↔CSV, JSON↔XML, JSON↔YAML, XML→JSON, and anything→plain text."
      • addedInput schema / properties / to / enum
        Added value: +[
        +  "html",
        +  "md",
        +  "json",
        +  "csv",
        +  "xml",
        +  "yaml",
        +  "txt"
        +]
    • Changedconvert_unit_convert7 fields changed
      • addedInput schema / properties / category / default
        Added value: +"length"
      • changedInput schema / properties / category / description
        Previous value: -"One of: length, weight, area, volume, speed, time, data, temperature. Anything else = 400."New value: +"What kind of measurement this is. Pick this first — it decides which units are available."
      • addedInput schema / properties / category / enum
        Added value: +[
        +  "length",
        +  "weight",
        +  "area",
        +  "volume",
        +  "speed",
        +  "time",
        +  "data",
        +  "temperature"
        +]
      • changedInput schema / properties / from / description
        Previous value: -"Full snake_case name ('kilometer', 'mile_per_hour'), not symbols. Temperature units aren't validated — a typo returns garbage."New value: +"The unit you have. It must belong to the kind of measurement chosen above. Data sizes are the computing kind (1 kilobyte = 1024 bytes)."
      • addedInput schema / properties / from / enum
        Added value: +[
        +  "meter",
        +  "kilometer",
        +  "centimeter",
        +  "millimeter",
        +  "mile",
        +  "yard",
        +  "foot",
        +  "inch",
        +  "nautical_mile",
        +  "kilogram",
        +  "gram",
        +  "milligram",
        +  "pound",
        +  "ounce",
        +  "ton",
        +  "stone",
        +  "square_meter",
        +  "square_kilometer",
        +  "square_centimeter",
        +  "square_mile",
        +  "square_yard",
        +  "square_foot",
        +  "square_inch",
        +  "hectare",
        +  "acre",
        +  "liter",
        +  "milliliter",
        +  "cubic_meter",
        +  "cubic_centimeter",
        +  "gallon_us",
        +  "gallon_uk",
        +  "quart",
        +  "pint",
        +  "cup",
        +  "fluid_ounce",
        +  "tablespoon",
        +  "teaspoon",
        +  "meter_per_second",
        +  "kilometer_per_hour",
        +  "mile_per_hour",
        +  "knot",
        +  "foot_per_second",
        +  "second",
        +  "millisecond",
        +  "minute",
        +  "hour",
        +  "day",
        +  "week",
        +  "month",
        +  "year",
        +  "byte",
        +  "kilobyte",
        +  "megabyte",
        +  "gigabyte",
        +  "terabyte",
        +  "bit",
        +  "kilobit",
        +  "megabit",
        +  "gigabit",
        +  "celsius",
        +  "fahrenheit",
        +  "kelvin"
        +]
      • changedInput schema / properties / to / description
        Previous value: -"Same rules as 'from', same category. Data units are binary (kilobyte = 1024 B); temperature accepts only celsius/fahrenheit/kelvin."New value: +"The unit you want. It must belong to the same kind of measurement as the one you have."
      • addedInput schema / properties / to / enum
        Added value: +[
        +  "meter",
        +  "kilometer",
        +  "centimeter",
        +  "millimeter",
        +  "mile",
        +  "yard",
        +  "foot",
        +  "inch",
        +  "nautical_mile",
        +  "kilogram",
        +  "gram",
        +  "milligram",
        +  "pound",
        +  "ounce",
        +  "ton",
        +  "stone",
        +  "square_meter",
        +  "square_kilometer",
        +  "square_centimeter",
        +  "square_mile",
        +  "square_yard",
        +  "square_foot",
        +  "square_inch",
        +  "hectare",
        +  "acre",
        +  "liter",
        +  "milliliter",
        +  "cubic_meter",
        +  "cubic_centimeter",
        +  "gallon_us",
        +  "gallon_uk",
        +  "quart",
        +  "pint",
        +  "cup",
        +  "fluid_ounce",
        +  "tablespoon",
        +  "teaspoon",
        +  "meter_per_second",
        +  "kilometer_per_hour",
        +  "mile_per_hour",
        +  "knot",
        +  "foot_per_second",
        +  "second",
        +  "millisecond",
        +  "minute",
        +  "hour",
        +  "day",
        +  "week",
        +  "month",
        +  "year",
        +  "byte",
        +  "kilobyte",
        +  "megabyte",
        +  "gigabyte",
        +  "terabyte",
        +  "bit",
        +  "kilobit",
        +  "megabit",
        +  "gigabit",
        +  "celsius",
        +  "fahrenheit",
        +  "kelvin"
        +]
    • Changedgenerate_ascii_art8 fields changed
      • changedInput schema / properties / font / description
        Previous value: -"FIGlet font name (default 'standard')."New value: +"Lettering style."
      • addedInput schema / properties / font / enum
        Added value: +[
        +  "standard",
        +  "banner",
        +  "big",
        +  "block",
        +  "bubble",
        +  "digital",
        +  "lean",
        +  "mini",
        +  "script",
        +  "shadow",
        +  "slant",
        +  "small"
        +]
      • addedInput schema / properties / font / x-show-when
        Added value: +{
        +  "mode": [
        +    "text"
        +  ]
        +}
      • changedInput schema / properties / mode / description
        Previous value: -"'text' (default) renders 'text' via figlet+'font'; 'image' converts 'file' at 'width' chars. Any other value 400s."New value: +"Turn words into a banner, or turn a picture into characters."
      • changedInput schema / properties / text / description
        Previous value: -"Text to render. REQUIRED when mode=text (the default). Truncated at 100 characters."New value: +"The words to render as a banner. Up to 100 characters."
      • addedInput schema / properties / text / x-show-when
        Added value: +{
        +  "mode": [
        +    "text"
        +  ]
        +}
      • changedInput schema / properties / width / description
        Previous value: -"Output width in characters, 40-200 (mode=image)."New value: +"How many characters wide the picture is drawn."
      • addedInput schema / properties / width / x-show-when
        Added value: +{
        +  "mode": [
        +    "image"
        +  ]
        +}
    • Changedgenerate_business_card2 fields changed
      • changedInput schema / properties / template / description
        Previous value: -"Card template, e.g. modern or classic."New value: +"Card layout."
      • addedInput schema / properties / template / enum
        Added value: +[
        +  "modern",
        +  "classic",
        +  "minimal",
        +  "creative",
        +  "corporate",
        +  "elegant"
        +]
    • Changedpdf_ocr3 fields changed
      • changedInput schema / properties / lang / description
        Previous value: -"Tesseract language code(s): three letters, joinable with '+' (e.g. 'eng', 'deu', 'eng+fra'). The pack must be installed on the server."New value: +"The language of the writing in the scan. The wrong language makes the searchable text gibberish."
      • addedInput schema / properties / lang / enum
        Added value: +[
        +  "eng",
        +  "deu",
        +  "fra",
        +  "spa",
        +  "ita",
        +  "por",
        +  "nld",
        +  "rus",
        +  "jpn",
        +  "kor",
        +  "chi_sim",
        +  "chi_tra",
        +  "ara",
        +  "hin",
        +  "eng+fra",
        +  "eng+deu",
        +  "eng+spa"
        +]
      • addedInput schema / properties / lang / x-ui
        Added value: +{
        +  "labels": {
        +    "ara": "Arabic",
        +    "chi_sim": "Chinese (Simplified)",
        +    "chi_tra": "Chinese (Traditional)",
        +    "deu": "German",
        +    "eng": "English",
        +    "eng+deu": "English + German",
        +    "eng+fra": "English + French",
        +    "eng+spa": "English + Spanish",
        +    "fra": "French",
        +    "hin": "Hindi",
        +    "ita": "Italian",
        +    "jpn": "Japanese",
        +    "kor": "Korean",
        +    "nld": "Dutch",
        +    "por": "Portuguese",
        +    "rus": "Russian",
        +    "spa": "Spanish"
        +  }
        +}
    • Changedpdf_page_numbers3 fields changed
      • changedInput schema / properties / format / description
        Previous value: -"Number template with {page} and {pages} tokens."New value: +"How each number is written on the page."
      • addedInput schema / properties / format / enum
        Added value: +[
        +  "Page {page}",
        +  "{page}",
        +  "{page} of {pages}",
        +  "- {page} -"
        +]
      • addedInput schema / properties / format / x-ui
        Added value: +{
        +  "labels": {
        +    "- {page} -": "- 1 -",
        +    "Page {page}": "Page 1",
        +    "{page}": "1",
        +    "{page} of {pages}": "1 of 10"
        +  }
        +}
    • Changedpdf_protect4 fields changed
      • addedInput schema / properties / permissions / default
        Added value: +"print"
      • changedInput schema / properties / permissions / description
        Previous value: -"Comma-separated permissions to ALLOW: print, copy, edit, modify, annotate, all. Empty = pdfcpu defaults."New value: +"What a reader is still allowed to do after the password is entered."
      • addedInput schema / properties / permissions / enum
        Added value: +[
        +  "all",
        +  "print",
        +  "print,copy",
        +  "copy",
        +  "annotate",
        +  "edit"
        +]
      • addedInput schema / properties / permissions / x-ui
        Added value: +{
        +  "labels": {
        +    "all": "Allow everything",
        +    "annotate": "Commenting only",
        +    "copy": "Copying text only",
        +    "edit": "Editing only",
        +    "print": "Printing only",
        +    "print,copy": "Printing and copying text"
        +  }
        +}
  16. 1 tool update
    • Changedconvert_file1 field changed
      • changedInput schema / properties / from / description
        Previous value: -"Source format, e.g. 'jpg', 'mp3', 'docx' — REQUIRED and must match the uploaded file."New value: +"Source format, e.g. 'jpg', 'mp3', 'docx'. OPTIONAL — leave it out and we read the format from the file's own bytes. Only worth setting when the bytes are ambiguous or the file has a synthetic name."
  17. 3 tool updates
    • Changedconvert_file1 field changed
      • changedInput schema / required
        Previous value: -[
        -  "file",
        -  "from",
        -  "to"
        -]New value: +[
        +  "file",
        +  "to"
        +]
    • Addeddata_to_file
    • Addedfiles_unzip
  18. 1 tool update
    • Addedfiles_zip
  19. 1 tool update
    • Changedconvert_video2 fields changed
      • changedInput schema / properties / preset_name / description
        Previous value: -"Business-only. Wins over 'to', 'codec', 'resolution' and 'bitrate_kbps' — every preset forces h264 mp4."New value: +"Business-only. Wins over 'to', 'codec', 'resolution' and 'bitrate_kbps' — every preset forces h264 mp4. Only set when the user names the platform."
      • addedInput schema / properties / preset_name / x-ui
        Added value: +{
        +  "no_recall": true
        +}

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    Enables AI agents to convert documents, images, and data files across 50+ format pairs and to run PDF/image operations such as merge, split, compress, rotate, protect, unlock, extract text, and resize or compress images. Files are passed URL-in and returned URL-out (or saved locally in stdio mode), with tools for checking credits and generating Stripe checkout or billing-portal links.
    18
    29 PyPI
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Privacy-first file tools for AI agents, enabling operations like PDF merge/split, image compression/convert, metadata stripping, and background removal without storing files.
    27 npm
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources