The tools' API
Availability: in production since 20 October 2026. Uploaded-file jobs and download links follow separately.
The Matrix Tools pages stay as they are: they run in your browser, and the files you open there are never uploaded.
What it does
The API provides 50 Matrix Tools as 63 operations on our server, using the same engines as the tool pages. Send a tool's arguments and its files in one request. The answer holds the tool's result and every file the tool wrote. Each run gets a process of its own with no network access and its own memory limit, and the process ends with the run.
Encrypt a file with a passphrase, Decrypt a file with its passphrase and the CSR Generator are not offered. They exist so that a passphrase or a private key never leaves your device, so they run only in your browser.
Your files
- Files are sent inside the request, base64-encoded, up to 700 KB together.
- They are held in memory for the run only: the API stores them nowhere, and they are gone when the run ends. The files the tool writes come back in the answer and are not kept either.
- An error's message can name a file you sent. It goes back to you in the answer and is not logged.
- A run keeps nothing, so it takes no
Idempotency-Key: sending a run again runs the tool again. - Each call made with your API Key is counted for its usage, as
/privacy/describes: the action, the result (the HTTP status), the tool's name and the bytes sent and returned. The record never holds your files or their names.
Authentication
Send your API Key in the x-matrix-api-key header. A Key needs the Scope tools.run to run a tool, and
tools.read to list the tools. A Workspace's Key runs in its Workspace. A person's own Key runs in their personal
space, or in a Workspace they belong to when the body names it in workspace_id.
List the tools
GET /v1/tools answers every tool with its name, title and description, the JSON Schema of its arguments
(inputSchema) and of its result (outputSchema), and which arguments name files (files).
Run a tool
POST /v1/tools/{name}/runs, with a JSON body:
curl -s https://api.matrixai.group/v1/tools/merge_pdf/runs \
-H "x-matrix-api-key: $MATRIX_API_KEY" -H "content-type: application/json" \
-d '{"arguments":{"files":["first.pdf","second.pdf"]},
"files":[{"name":"first.pdf","content_base64":"JVBERi0..."},{"name":"second.pdf","content_base64":"JVBERi0..."}]}'
arguments: the tool's arguments, as itsinputSchemasays. An argument marked (file) takes thenameof one of the run's files.files: the run's files, each with a uniquenameand its bytes incontent_base64. Names are case-sensitive, at most 255 characters, with no slashes, backslashes, surrounding whitespace or control characters;.and..are refused.files[].last_modifiedis optional: the original modification time as integer milliseconds since the Unix epoch (0 through 253402300799999). Date-prefixed renaming and oldest/newest duplicate selection require it for every selected file. Without it, duplicate reports leave the date blank; ZIP entries use the run's time. Server dates use UTC.output, where a tool has it, names the file the tool writes; a folder in the name is dropped. A tool that answers inline writes its result as a file too whenoutputis given, as its description says.outputDirandoverwritebelong to a person's own disk and are refused. Every file a tool writes comes back, and a name that repeats gets a number, as on the pages.color_palette,bill_splitandfont_pairswrite their files only into a folder. The API sets that folder itself, so their files come back too.
The answer, 200 (a real one, its bytes shortened):
{
"data": {
"tool": "merge_pdf",
"summary": "Merged 2 PDFs into merged.pdf (2 KB), 8 pages.",
"result": {
"path": "merged.pdf",
"pageCount": 8,
"bytes": 2228
},
"outputs": [
{
"name": "merged.pdf",
"size": 2228,
"content_base64": "JVBERi0xLjcK..."
}
]
},
"meta": {
"request_id": "5a0f6a1e-6f0b-4d1c-9f6e-2b8d1c3e4f50"
}
}
summary: one line about the run, as the tool says it.text: the tool's text result, when it has one (such as the formatted JSON).result: the tool's result, as itsoutputSchemasays. A file is named by its name inoutputs.outputs: every file the tool wrote, with itssizeand its bytes incontent_base64.
Limits
- A run has 30 seconds of wall-clock time, the same CPU-time limit, and a 256 MiB JavaScript heap. It is stopped past a limit.
- 700 KB of files in a request, under the API's 1 MB body.
- Your API Key's requests per minute.
- One active run per API Key family. A rotated replacement shares this limit with the previous Key. If a call disconnects or the runner's response is lost, this lock can remain until 40 seconds after the call started.
- Inline results: 20 MiB of output files, within a 32 MiB JSON response.
Errors
Every error answers { code, message, details, request_id }.
| Status | Code | details.reason | When |
|---|---|---|---|
| 400 | VALIDATION_ERROR | invalid_input | an argument is missing, of the wrong type or outside its values, or is outputDir or overwrite; the message names it |
| 400 | VALIDATION_ERROR | file_not_sent | an argument names a file that is not among the run's files |
| 400 | VALIDATION_ERROR | modified_time_required | date-based rename or oldest/newest duplicate selection needs last_modified for every selected file |
| 401 | AUTH_REQUIRED | no API Key, or one that is not valid | |
| 403 | PERMISSION_DENIED | scope | the API Key does not hold tools.run (tools.read for the list) |
| 404 | RESOURCE_NOT_FOUND | no tool of that name | |
| 413 | FILE_TOO_LARGE | file_too_large | one file is over 700 KB; the message names it with its size and the limit, and details give file_bytes and limit_bytes |
| 413 | FILE_TOO_LARGE | files_too_large | the files are each within 700 KB but over it together; the message gives their total and the limit, and details give total_bytes and limit_bytes |
| 413 | FILE_TOO_LARGE | body_too_large | the request is over the API's 1 MB; the message says so with the 700 KB the files can come to, and details give body_limit_bytes, limit_bytes and, when the request declared its length, body_bytes |
| 422 | UNSUPPORTED_CONTENT | unreadable_input | a file the tool cannot read: not a PDF, a damaged image, ... |
| 422 | UNSUPPORTED_ENCRYPTED_INPUT | encrypted_input | a password-protected PDF, even one that opens without a password |
| 422 | UNSUPPORTED_CONTENT | time_limit | the run took longer than 30 seconds and was stopped |
| 422 | UNSUPPORTED_CONTENT | memory_limit | the run needed more than 256 MB of memory and was stopped |
| 422 | UNSUPPORTED_CONTENT | tool_failed | the tool refused the run for another reason, named in details.tool_code (such as no-pages, too-large or binary); the message says what to change |
| 429 | RATE_LIMITED | over the API Key's requests per minute | |
| 429 | RATE_LIMITED | concurrent_run | this Key already has a tool running; its rotation replacement shares the same limit; Retry-After gives a retry interval |
| 422 | UNSUPPORTED_CONTENT | output_limit | the result exceeds 20 MiB of files or 32 MiB of JSON |
| 503 | PROVIDER_UNAVAILABLE | runner_busy | the runner is at capacity; try again shortly |
| 503 | PROVIDER_UNAVAILABLE | runner_unavailable | the run could not start or ended without an answer; send it again |
A 413 says in its message what was too large and the limit, for example:
- one file:
The file "scan.pdf" is 701 KB. Files sent inline can be at most 700 KB together; larger files go through an upload (not available yet). - files together:
The 3 files sent come to 720 KB. Files sent inline can be at most 700 KB together; larger files go through an upload (not available yet). - the request:
This request is 2.7 MB, more than the 1 MB the API reads in one request. Files sent inline can be at most 700 KB together; larger files go through an upload (not available yet).
Tool reference
merge_pdf: Merge PDF
Merge two or more PDF files into one, in the order given. Writes merged.pdf unless output is given.
| Argument | Type | Required | What it is |
|---|---|---|---|
files (file) | array | yes | The PDFs, in the order they are to appear. |
output | string | no | Where to write the result (a file name: the file comes back under it in the answer's outputs, without any folder). Default: merged.pdf. |
Result: path, pageCount, bytes.
split_pdf: Split PDF
Split one PDF into several files: every N pages (mode every, the default, with every: N), one file per comma-separated range such as "1-3, 4, 5-8" (mode ranges), or one file per page (mode each). Writes <name>_part1.pdf, <name>_part2.pdf, ..., and a ZIP of all parts when zip is true.
| Argument | Type | Required | What it is |
|---|---|---|---|
file (file) | string | yes | The PDF to split: the name of a file sent in this run's files. |
mode | string | no | every: chunks of every pages; ranges: one file per part of ranges; each: one file per page. |
every | integer | no | Pages per file for mode every (default 1). |
ranges | string | no | For mode ranges: parts separated by commas, each a page or a range, for example "1-3, 4, 5-8". Numbers past the last page are clamped, empty parts are ignored. |
zip | boolean | no | Also write <name>_split.zip holding every part. |
Result: files, zip, pageCount.
rotate_pdf: Rotate PDF
Rotate all or some pages of a PDF by 90 degrees clockwise (the default), 180, or 270 (counter-clockwise), on top of any rotation the pages already have. pages is "all" (default), "odd", "even", a list such as "1-3, 5", or an array of page numbers. Writes <name>_rotated.pdf.
| Argument | Type | Required | What it is |
|---|---|---|---|
file (file) | string | yes | The PDF: the name of a file sent in this run's files. |
angle | integer | no | 90 clockwise, 180, or 270 (90 counter-clockwise). |
pages | see description | no | "all", "odd", "even", "1-3, 5", or [1, 3, 5]. |
output | string | no | Where to write the result (a file name: the file comes back under it in the answer's outputs, without any folder). Default: <name>_rotated.pdf. |
Result: path, pages, pageCount.
organize_pdf: Organize PDF
Rebuild a PDF from a page plan: an array of page numbers, or of {page, rotate} objects (rotate 0, 90, 180 or 270), in the order the pages are to appear. Pages left out are dropped, each page can appear once, and at least one page must be kept. Writes <name>_organized.pdf.
| Argument | Type | Required | What it is |
|---|---|---|---|
file (file) | string | yes | The PDF: the name of a file sent in this run's files. |
pages | array | yes | The pages to keep, in order. |
output | string | no | Where to write the result (a file name: the file comes back under it in the answer's outputs, without any folder). Default: <name>_organized.pdf. |
Result: path, pageCount.
image_to_pdf: Image to PDF
Make a PDF from PNG or JPEG images, one page per image: at the image's own size (pageSize image, the page being the picture's size at 72, 150 or 300 dpi) or fitted on A4 or Letter with a margin. The pixels are embedded as they are; a phone photo stored sideways is turned upright. Writes <name>.pdf, images.pdf. WebP, GIF and BMP input, mirrored photos (EXIF orientation 2, 4, 5 or 7) and the web page's "Shrink large photos" option need the browser's canvas. Scope decision: no Node canvas in this version; these inputs are refused with needs-canvas and the error names the reason (the shrink option is not offered, so passing it is invalid-input). Convert such images to PNG or JPEG first.
| Argument | Type | Required | What it is |
|---|---|---|---|
images (file) | array | yes | The images, in page order. |
pageSize | string | no | |
dpi | integer | no | Only for pageSize image. |
margin | string | no | Only for A4 and Letter: none, a quarter inch, or half an inch. |
output | string | no | Where to write the result (a file name: the file comes back under it in the answer's outputs, without any folder). Default: <name>.pdf or images.pdf. |
Result: path, pageCount, turned.
inspect_pdf: Inspect PDF
Page count, each page's size in points and rotation, and whether the PDF has form fields. Reads the file only.
| Argument | Type | Required | What it is |
|---|---|---|---|
file (file) | string | yes | The PDF: the name of a file sent in this run's files. |
Result: pageCount, pages, hasForm.
describe_pdf_form: Describe PDF form
List the fillable fields of a PDF form: name, kind (text, checkbox, radio, dropdown, list), current value, options and whether the field is read-only. Call this before fill_pdf_form to learn the field names.
| Argument | Type | Required | What it is |
|---|---|---|---|
file (file) | string | yes | The PDF form: the name of a file sent in this run's files. |
Result: hasXFA, fields.
fill_pdf_form: Fill PDF form
Fill the fields of a PDF form by name: a string for text, radio and dropdown fields, true or false for a checkbox, a string or an array of strings for a list. flatten burns the values into the page so the form can no longer be edited. The text a field shows is drawn in one font: Helvetica when it has every character, else Noto Sans CJK, embedded as a subset, all of it, digits and Latin letters too. Skipped and listed: text with a character neither font has (Thai, Arabic, an emoji) or that would need both fonts (a character only Noto Sans CJK has beside Š, š, Ž, ž, Ÿ, ˆ or ˜, which only Helvetica has), and read-only fields. Writes <name>_filled.pdf or <name>_flattened.pdf.
| Argument | Type | Required | What it is |
|---|---|---|---|
file (file) | string | yes | The PDF form: the name of a file sent in this run's files. |
values | object | yes | Field name to value. |
flatten | boolean | no | Burn the values into the page content. |
output | string | no | Where to write the result (a file name: the file comes back under it in the answer's outputs, without any folder). Default: <name>_filled.pdf or <name>_flattened.pdf. |
Result: path, written, skipped.
sign_pdf: Sign PDF
Place a PNG or JPEG signature image on one page of a PDF. Every fraction is of the page as viewers show it (its crop box), turned by the page's rotation: x and y are the top-left corner as fractions of its width and height (defaults 0.1 and 0.8), width the fraction of its width from 0.05 to 0.6 (default 0.25); the height follows the image's proportions on that page unless given. A box that would cross the right or bottom edge is moved in. This is a picture of a signature, not a certificate-based digital signature. Writes <name>_signed.pdf.
| Argument | Type | Required | What it is |
|---|---|---|---|
file (file) | string | yes | The PDF: the name of a file sent in this run's files. |
image (file) | string | yes | The signature image (PNG or JPEG): the name of a file sent in this run's files. |
page | integer | no | 1-based page number (default 1). |
x | number | no | Left edge as a fraction (0 to 1) of the width of the page as viewers show it (its crop box). |
y | number | no | Top edge as a fraction (0 to 1) of the height of the page as viewers show it (its crop box). |
width | number | no | Width as a fraction (0.05 to 0.6) of the width of the page as viewers show it (its crop box). |
height | number | no | Height as a fraction of the height of the page as viewers show it (its crop box); by default from the image's proportions on that page. A box taller than the page is made as wide as lets all of it fit, its proportions kept, as on the page. |
output | string | no | Where to write the result (a file name: the file comes back under it in the answer's outputs, without any folder). Default: <name>_signed.pdf. |
Result: path, page, placement.
describe_image_metadata: Describe image metadata
What a JPEG, PNG or WebP file carries besides its pixels: EXIF (camera, date, GPS location), XMP, IPTC, comments, text chunks, the colour profile, and the EXIF orientation. Reads the file only.
| Argument | Type | Required | What it is |
|---|---|---|---|
file (file) | string | yes | A JPEG, PNG or WebP image: the name of a file sent in this run's files. |
Result: format, items, orientation, removableBytes, summary.
remove_exif: Remove EXIF and metadata
Copy a JPEG, PNG or WebP image without its metadata; the compressed pixels are copied byte for byte, nothing is recompressed. The colour profile is kept unless keepIcc is false, and a sideways photo keeps a minimal orientation tag so it still displays upright. Writes <name>_clean.<ext>; a file with nothing to remove is not copied (path null) unless output is given.
| Argument | Type | Required | What it is |
|---|---|---|---|
file (file) | string | yes | A JPEG, PNG or WebP image: the name of a file sent in this run's files. |
keepIcc | boolean | no | Keep the colour profile. |
output | string | no | Where to write the result (a file name: the file comes back under it in the answer's outputs, without any folder). Default: <name>_clean.<ext>. |
Result: path, changed, format, removed, kept, removedBytes, keptOrientation.
json_format: JSON Formatter
Reprint JSON with an indent of 2 (default) or 4 spaces, a tab, or minified on one line (indent "min"), optionally with keys sorted. Every string and number is copied exactly as written. A syntax error is reported with its line and column. The text itself (text) or a file to read it from (file): exactly one of the two. The result is returned inline; results over 65536 characters, or when output is given, are written to a file.
| Argument | Type | Required | What it is |
|---|---|---|---|
text | string | no | The JSON text. |
file (file) | string | no | A JSON file to read instead of text: the name of a file sent in this run's files. |
indent | see description | no | |
sortKeys | boolean | no | Sort object keys by code point. |
output | string | no | Where to write the result (a file name: the file comes back under it in the answer's outputs, without any folder). Default: <name>_formatted.json or <name>_min.json. |
Result: text, textTruncated, path, stats, summary.
text_diff: Text Diff
Line diff of two texts: a unified diff with three lines of context (empty when the texts are identical) and counts of added, removed and unchanged lines. Each side is given inline (original, changed) or as a file (originalFile, changedFile). Options: ignoreCase, whitespace exact (default), trailing or all. Diffs over 65536 characters, or when output is given, are written to a file; with output, identical texts give an empty file.
| Argument | Type | Required | What it is |
|---|---|---|---|
original | string | no | The original text. |
originalFile (file) | string | no | A file to read the original text from: the name of a file sent in this run's files. |
changed | string | no | The changed text. |
changedFile (file) | string | no | A file to read the changed text from: the name of a file sent in this run's files. |
ignoreCase | boolean | no | Compare without regard to case. |
whitespace | string | no | exact, ignore trailing whitespace, or ignore all whitespace changes. |
output | string | no | Where to write the result (a file name: the file comes back under it in the answer's outputs, without any folder). Default: <original>vs<changed>.diff. |
Result: identical, stats, unified, unifiedTruncated, path, timedOut.
regex_tester: Regex Tester
Test a JavaScript regular expression on a text: every match with its index, end, groups and named groups (the first limit matches are returned, default 100), the capture group names, and, when replacement is given, the text with the replacement applied ($1, $<name>, $& and $$ as usual). The text itself (text) or a file to read it from (file): exactly one of the two. A replaced text over 65536 characters, or when output is given, is written to a file.
| Argument | Type | Required | What it is |
|---|---|---|---|
pattern | string | yes | The pattern, without slashes. |
flags | string | no | Any combination of g, i, m, s, u, y. |
text | string | no | The text to search. |
file (file) | string | no | A file to read the text from: the name of a file sent in this run's files. |
replacement | string | no | Replacement text; an empty string deletes the matches. |
limit | integer | no | How many matches to return (1 to 10000). |
output | string | no | Where to write the result (a file name: the file comes back under it in the answer's outputs, without any folder). Default: <name>_replaced.txt. |
Result: pattern, flags, matchCount, truncated, matches, groupNames, replaced, replacedTruncated, path.
markdown_preview: Markdown Preview
Render Markdown to HTML with the web page's renderer: headings with ids, lists, task lists, tables, fenced code (in colour in the languages the page names), footnotes, blockquotes, links and images; raw HTML is shown as text. Returns the body HTML, the title, the headings and counts. The text itself (text) or a file to read it from (file): exactly one of the two. With output, a standalone HTML document is written; HTML over 65536 characters is written too and cut inline.
| Argument | Type | Required | What it is |
|---|---|---|---|
text | string | no | The Markdown text. |
file (file) | string | no | A Markdown file to read instead of text: the name of a file sent in this run's files. |
output | string | no | Where to write the result (a file name: the file comes back under it in the answer's outputs, without any folder). Default: <name>.html. |
Result: title, toc, stats, html, htmlTruncated, path.
unit_convert: Unit Converter
Convert a value between two units of one quantity (length, area, volume, mass, temperature, speed, pressure, energy, power, data, time, fuel economy, ...), with the exact factor in words and the value in every unit of the quantity. Call unit_categories for the quantity and unit ids.
| Argument | Type | Required | What it is |
|---|---|---|---|
category | string | yes | Quantity id, for example length. |
value | see description | yes | A number, or text as typed on the page: "1,5", "3/4", "2e3". |
from | string | yes | Unit id, for example m. |
to | string | yes | Unit id, for example ft. |
Result: value, result, line, explanation, table.
unit_categories: Unit categories
The quantities and unit ids unit_convert accepts.
No arguments.
Result: categories.
date_calc: Date Calculator
Calendar arithmetic without time zones. mode diff: the days from start to end (the start date counts, the end date only with includeEnd) with weeks, months, years and working days. mode add: start moved by years, months, weeks, days and workdays (whole numbers up to 1,000,000; direction subtract reverses them). mode facts: weekday, day of the year, ISO week, quarter, leap year, days in the month and Unix time of a date. Dates are YYYY-MM-DD. Every result has the page's headline line and its rows.
| Argument | Type | Required | What it is |
|---|---|---|---|
mode | string | yes | |
start | string | no | YYYY-MM-DD (modes diff and add). |
end | string | no | YYYY-MM-DD (mode diff). |
includeEnd | boolean | no | Count the end date as well (mode diff). |
direction | string | no | Mode add. |
years | integer | no | Mode add. |
months | integer | no | Mode add. |
weeks | integer | no | Mode add. |
days | integer | no | Mode add. |
workdays | integer | no | Mode add: working days, Monday to Friday. |
date | string | no | YYYY-MM-DD (mode facts). |
Result: mode, line, rows.
timezone_compare: Time Zone Compare
The same moment in several time zones: a date (YYYY-MM-DD) and time (HH:MM) read in the reference zone, with each zone's local time, date, offset, difference from the reference and abbreviation, and an hour-by-hour planner of the reference day. A time inside a daylight-saving gap is moved forward, a time that happens twice takes the first occurrence; note says so. Zone names are IANA names; call time_zones for the list.
| Argument | Type | Required | What it is |
|---|---|---|---|
reference | string | yes | The zone the date and time are read in, for example Asia/Singapore. |
date | string | yes | YYYY-MM-DD. |
time | string | yes | HH:MM, 24-hour clock. |
zones | array | no | Zones to compare (default UTC, Europe/London, America/New_York, Asia/Singapore, Asia/Tokyo). |
Result: line, note, epochMs, shifted, ambiguous, rows, planner.
time_zones: Time zones
The IANA time-zone names this server knows, sorted.
No arguments.
Result: zones.
extract_pages: Extract pages
Pull the chosen pages out of a PDF into a new file, in document order. With includeRest, the pages left over are written as a second file. Writes <name>_pages.pdf, and <name>_remaining.pdf.
| Argument | Type | Required | What it is |
|---|---|---|---|
file (file) | string | yes | The PDF: the name of a file sent in this run's files. |
pages | see description | yes | "all", "odd", "even", "1-3, 5", or [1, 3, 5]. |
includeRest | boolean | no | Also write the pages that were not chosen as a second PDF. |
output | string | no | Where to write the result (a file name: the file comes back under it in the answer's outputs, without any folder). Default: <name>_pages.pdf. |
Result: path, pages, pageCount, restPath.
page_numbers_pdf: Add page numbers
Stamp page numbers on a PDF. Page p is numbered start + p - 1, so numbering can begin at any figure. The text sits inside the crop box and follows the page's rotation so it reads upright. Format custom takes your own template ({n} the number, {p} the total). The labels are written in Helvetica when it has every character in them; otherwise, as for Ā {n} or 第 {n} 页, in Noto Sans CJK, embedded as a subset, digits and Latin letters too, except a few characters, such as Š, that stay in Helvetica. Writes <name>_numbered.pdf.
| Argument | Type | Required | What it is |
|---|---|---|---|
file (file) | string | yes | The PDF: the name of a file sent in this run's files. |
pages | see description | no | |
position | string | no | |
format | string | no | 1; Page 1; 1 / 12; Page 1 of 12; custom: your own template. |
template | string | no | With format custom only: your own label, {n} the page number and {p} the total, for example 第 {n} 页 / 共 {p} 页; up to 60 characters, it must hold {n}. |
start | integer | no | The number the first page carries (default 1), 1 to 999,999,999. |
size | integer | no | Text size in points: the page's small, medium and large. |
output | string | no | Where to write the result (a file name: the file comes back under it in the answer's outputs, without any folder). Default: <name>_numbered.pdf. |
Result: path, count, total, firstLabel, unnumbered, pageCount.
watermark_pdf: Add a text watermark
Stamp text across the chosen pages of a PDF, diagonally, horizontally through the centre, or tiled over the whole page. Writes <name>_watermarked.pdf.
| Argument | Type | Required | What it is |
|---|---|---|---|
file (file) | string | yes | The PDF: the name of a file sent in this run's files. |
text | string | yes | The watermark text, for example CONFIDENTIAL or 机密: Latin, Chinese, Japanese or Korean. |
pages | see description | no | |
layout | string | no | |
size | string | no | |
opacity | number | no | 15, 30 or 50 per cent. |
color | string | no | |
output | string | no | Where to write the result (a file name: the file comes back under it in the answer's outputs, without any folder). Default: <name>_watermarked.pdf. |
Result: path, count, pageCount.
crop_pdf: Crop PDF
Trim margins off the chosen pages of a PDF. The margins are given in millimetres from each edge of the page as viewers show it (its crop box), turned by the page's rotation; nothing is re-rendered, the visible area is moved in. The web page can also measure the white margins and trim automatically, which reads the pages as pictures and is not available here. Writes <name>_cropped.pdf.
| Argument | Type | Required | What it is |
|---|---|---|---|
file (file) | string | yes | The PDF: the name of a file sent in this run's files. |
pages | see description | no | |
top | number | no | Millimetres off the top. |
right | number | no | Millimetres off the right. |
bottom | number | no | Millimetres off the bottom. |
left | number | no | Millimetres off the left. |
output | string | no | Where to write the result (a file name: the file comes back under it in the answer's outputs, without any folder). Default: <name>_cropped.pdf. |
Result: path, count, pageCount, margins.
compress_pdf: Compress PDF
Make a PDF smaller by tidying its structure: streams are recompressed and objects nothing points to are dropped. The pictures are left byte for byte as they are. The web page's balanced and small presets, which re-encode pictures, need the browser's canvas and are refused here. When nothing is gained the original bytes are written back, as on the page. Writes <name>_compressed.pdf.
| Argument | Type | Required | What it is |
|---|---|---|---|
file (file) | string | yes | The PDF: the name of a file sent in this run's files. |
preset | string | no | Only lossless runs here. |
output | string | no | Where to write the result (a file name: the file comes back under it in the answer's outputs, without any folder). Default: <name>_compressed.pdf. |
Result: path, before, after, saved, changed, preset.
describe_pdf_metadata: Describe PDF metadata
What a PDF says about itself besides its pages: the document information entries such as author and producer, the XMP stream, the file identifiers, private application data and the authors and dates on annotations. Reads the file only.
| Argument | Type | Required | What it is |
|---|---|---|---|
file (file) | string | yes | The PDF: the name of a file sent in this run's files. |
Result: pageCount, info.
clean_pdf_metadata: Clean PDF metadata
Remove what a PDF says about its author, tools and history, keeping the pages untouched. Each part can be kept: the information entries, the title within them, the XMP stream, the file identifiers, private application data and annotation authors. Writes <name>_clean.pdf.
| Argument | Type | Required | What it is |
|---|---|---|---|
file (file) | string | yes | The PDF: the name of a file sent in this run's files. |
info | boolean | no | Remove the document information entries. |
keepTitle | boolean | no | Keep the Title entry when the information entries are removed. |
xmp | boolean | no | Remove the XMP stream. |
ids | boolean | no | Remove the file identifiers. |
pieceInfo | boolean | no | Remove private application data. |
annotations | boolean | no | Remove the author and dates on annotations. |
output | string | no | Where to write the result (a file name: the file comes back under it in the answer's outputs, without any folder). Default: <name>_clean.pdf. |
Result: path, removed, remaining.
json_schema_validate: JSON Schema Validator
Check a JSON document against a JSON Schema (draft 2020-12 and draft-07 keywords) and report every error with the path to the value that broke the rule. Each side is given inline (schema, data) or as a file (schemaFile, dataFile). Numbers are compared exactly as written, and $ref follows JSON Pointers, $anchor and $id within the schema. With formats, the format keyword becomes an assertion for date, time, date-time, email, uuid, ipv4, ipv6, hostname, uri, uri-reference and regex.
| Argument | Type | Required | What it is |
|---|---|---|---|
schema | string | no | The JSON Schema, as text. |
schemaFile (file) | string | no | A file holding the schema: the name of a file sent in this run's files. |
data | string | no | The JSON document to check, as text. |
dataFile (file) | string | no | A file holding the document: the name of a file sent in this run's files. |
formats | boolean | no | Check the format keyword as well. |
Result: valid, complete, unchecked, errors, notes, truncated.
mock_data: Mock Data Generator
Generate synthetic rows that look real and repeat exactly for the same seed, for testing without real people's data. Give either a ready-made preset (people, orders, products, events) or a list of fields, each with a name, a type and options. The types are sequence, uuid, firstName, lastName, fullName, email, username, phone, company, jobTitle, street, city, country, countryCode, postcode, date, datetime, integer, decimal, boolean, enum, words, sentence, paragraph, url, ipv4, hexColor. Returned inline, and written to a file when output is given or the result is long.
| Argument | Type | Required | What it is |
|---|---|---|---|
preset | string | no | A ready-made field set. Pass this or fields, not both. |
fields | array | no | Pass this or preset, not both. |
rows | integer | no | How many rows (1 to 100000). |
seed | string | no | Same seed, same rows. Left out, a seed is chosen and returned. |
edgeCases | boolean | no | Mix in awkward values such as empty strings and extreme numbers. |
format | string | no | |
table | string | no | Table name for the sql format (default mock_data). |
dialect | string | no | For the sql format. |
output | string | no | Where to write the result (a file name: the file comes back under it in the answer's outputs, without any folder). Default: mock-data.<ext>, or <table>.sql. |
Result: text, textTruncated, path, seed, rowCount, fields.
cron_explain: Cron Expression Explainer
Say in words what a cron expression means and when it runs next, in a named time zone. Five fields (minute hour day-of-month month day-of-week) or six with a leading seconds field; the usual macros (@daily, @hourly, @weekly, @monthly, @yearly, @reboot) are understood.
| Argument | Type | Required | What it is |
|---|---|---|---|
expression | string | yes | The cron expression, for example "0 9 * * 1-5". |
count | integer | no | How many next runs to list (1 to 50). |
timeZone | string | no | IANA zone the runs are shown in (default UTC). |
from | string | no | Start looking from this moment, as an ISO date-time (default now). |
Result: expression, sentence, fields, timeZone, runs, exhausted.
csv_sql: SQL on CSV
Run a SQL query over one or more CSV files held in memory: SELECT with WHERE, GROUP BY, HAVING, ORDER BY, LIMIT, JOIN (also LEFT, RIGHT and FULL), sub-queries, WITH (also recursive), UNION, INTERSECT and EXCEPT, window functions and the usual aggregate and string functions, with SQLite's rules. Column types are read from the data, and numbers keep their exact decimal value. Each table is a file or inline CSV with a name to use in the query.
| Argument | Type | Required | What it is |
|---|---|---|---|
query | string | yes | The SQL query. |
tables (file) | array | yes | The tables the query can read. |
output | string | no | Where to write the result (a file name: the file comes back under it in the answer's outputs, without any folder). Default: result.csv. |
Result: columns, rows, rowCount, csv, csvTruncated, path, stats, tables.
cert_decode: Certificate Decoder
Read X.509 certificates and certificate requests and say what is in them: subject and issuer, validity, key, signature algorithm, extensions, the alternative names and the fingerprints. Several PEM blocks are read at once and ordered into chains, with each link checked against the one above it. Give PEM text or a DER file.
| Argument | Type | Required | What it is |
|---|---|---|---|
text | string | no | PEM text, one or more blocks. |
file (file) | string | no | A .pem, .crt, .cer, .der or .csr file: the name of a file sent in this run's files. |
at | string | no | Judge validity at this moment, as an ISO date-time (default now). |
Result: items, privateKeys, errors, chains, unrelated.
csv_to_json: CSV to JSON
Convert CSV, TSV or other delimited text to JSON: an array of objects (one per row, the default), JSON Lines, an array of arrays, or one array per column. The delimiter is detected unless given. Numbers and true/false are converted and empty cells become null unless types is false; numbers with leading zeros, integers over 15 digits and any number a JSON number cannot hold exactly (123456789012345.68) stay text, so codes and amounts are never altered. Each column keeps one type: where a value of a column stays text, its numbers and true/false stay text too, as typed, and a warning names the column. The text itself (text) or a file to read it from (file): exactly one of the two.
| Argument | Type | Required | What it is |
|---|---|---|---|
text | string | no | The delimited text. |
file (file) | string | no | A CSV, TSV or text file: the name of a file sent in this run's files. |
delimiter | string | no | What separates the cells; auto detects it. |
header | boolean | no | The first row holds the field names. Without it the fields are column_1, column_2, ... |
shape | string | no | objects: an array of objects; lines: JSON Lines, one object per line; arrays: an array of arrays, header row first; columns: one array per column. |
types | boolean | no | Convert numbers and true/false; empty cells become null. |
trim | boolean | no | Trim spaces around every cell. |
indent | one of the values | no | Spaces per level, or "min" for a single line. JSON Lines has no indentation. |
output | string | no | Where to write the result (a file name: the file comes back under it in the answer's outputs, without any folder). Default: <name>.json, or <name>.jsonl for JSON Lines (data.json for inline text). |
Result: text, textTruncated, path, stats, warnings, summary.
csv_clean: CSV Cleaner
Clean a delimited table: trim cells, remove invisible and control characters, fix header names, even out row lengths, remove blank and duplicate rows, and save with a chosen delimiter and line ending. Every step can be switched off. Nothing is guessed about the values themselves: no number or date is rewritten. The text itself (text) or a file to read it from (file): exactly one of the two.
| Argument | Type | Required | What it is |
|---|---|---|---|
text | string | no | The delimited text. |
file (file) | string | no | A CSV, TSV or text file: the name of a file sent in this run's files. |
delimiter | string | no | What separates the cells; auto detects it. |
header | boolean | no | The first row holds the field names. |
fixHeaders | boolean | no | Fix header names: trim, name empty ones column_N, number duplicates. Needs header. |
snakeCase | boolean | no | Also rewrite header names as snake_case. Needs header. |
trim | boolean | no | Trim spaces around every cell. |
invisible | boolean | no | Remove zero-width characters, stray byte order marks and control characters; non-breaking spaces become ordinary spaces. |
collapse | boolean | no | Collapse repeated spaces inside a cell to one. |
blankRows | boolean | no | Remove blank rows. |
dedupe | boolean | no | Remove duplicate rows (exact match after cleaning). |
ignoreCase | boolean | no | Treat rows that differ only in letter case as duplicates. Needs dedupe. |
ragged | boolean | no | Even out row lengths: pad short rows, keep extra cells as new columns. |
emptyColumns | boolean | no | Remove columns that are empty in every row. |
outDelimiter | string | no | The delimiter to save with; tab gives a .tsv name. |
lineEnding | string | no | same keeps the line ending the input came with. |
bom | string | no | add starts the file with a byte order mark, so Excel reads accented and Chinese letters; same keeps the input's; none leaves it out, for programs that do not expect one. |
output | string | no | Where to write the result (a file name: the file comes back under it in the answer's outputs, without any folder). Default: <name>_clean.csv (or .tsv) (data_clean.csv for inline text). |
Result: text, textTruncated, path, stats, changes, unchanged, summary.
compare_sheets: Compare Sheets
Compare two versions of a delimited table. Rows are matched by one or two key columns (header names that exist in both tables) or, without a key, by their position; columns are matched by header name. Returns the changed cells, the added and removed rows, and a CSV report with one line per changed cell and per cell of every added or removed row. Each table is given inline (a, b) or as a file (aFile, bFile).
| Argument | Type | Required | What it is |
|---|---|---|---|
a | string | no | Table A (before), inline. |
aFile (file) | string | no | Table A as a CSV, TSV or text file: the name of a file sent in this run's files. |
b | string | no | Table B (after), inline. |
bFile (file) | string | no | Table B as a CSV, TSV or text file: the name of a file sent in this run's files. |
delimiter | string | no | The delimiter of both tables; auto detects each table's own. |
keyColumns | array | no | One or two header names that identify a row in both tables. Empty: rows are compared in order. |
trim | boolean | no | Ignore spaces around cells. |
ignoreCase | boolean | no | Ignore letter case. |
numeric | boolean | no | Treat 10, 10.0 and 1e1 as the same number. |
output | string | no | Where to write the result (a file name: the file comes back under it in the answer's outputs, without any folder). Default: <a>vs<b>_changes.csv. |
Result: identical, headline, summary, stats, changed, added, removed, warnings, report, reportTruncated, path.
reconcile_sheets: Reconcile Sheets
Reconcile two tables that should describe the same records, such as a ledger and a bank statement. Rows are matched by key (one or two columns, named per table, so the names may differ); with an amount column on both sides the amounts of each key are added up and compared exactly, as decimals, never as floating point. Returns what matches, what differs, what is missing on either side, rows without a key, and possible matches among the leftovers, which count as matched only when their ids are passed in accepted. Writes the full report and the exceptions as CSV on request. Each table is given inline (a, b) or as a file (aFile, bFile).
| Argument | Type | Required | What it is |
|---|---|---|---|
a | string | no | Table A, inline. |
aFile (file) | string | no | Table A as a CSV, TSV or text file: the name of a file sent in this run's files. |
b | string | no | Table B, inline. |
bFile (file) | string | no | Table B as a CSV, TSV or text file: the name of a file sent in this run's files. |
delimiter | string | no | The delimiter of both tables; auto detects each table's own. |
keysA | array | yes | The key column or columns of table A. |
keysB | array | yes | The key column or columns of table B, the same number as keysA. |
amountA | string | no | The amount column of table A. Give it for both tables or for neither. |
amountB | string | no | The amount column of table B. |
minusA | string | no | A column of table A to subtract from the amount, such as credit from debit. |
minusB | string | no | The same for table B. |
currencyA | string | no | A column of table A holding a currency code. |
currencyB | string | no | The same for table B. |
flipB | boolean | no | Table B shows the same amounts with the opposite sign. |
emptyAmount | string | no | An empty amount makes the key impossible to compare (missing), or counts as zero. |
decimal | string | no | The decimal mark: detected for each table, a dot (1,234.50) or a comma (1.234,50). |
tolerance | object | no | Leave out for an exact match. |
ignoreCase | boolean | no | Keys: ignore letter case. |
ignorePunctuation | boolean | no | Keys: ignore spaces and punctuation. |
ignoreLeadingZeros | boolean | no | Keys: ignore leading zeros. |
suggest | boolean | no | Suggest possible matches among leftover rows. |
accepted | array | no | Ids of suggestions (from a previous call's suggestions) to count as matched. |
output | string | no | Where to write the result (a file name: the file comes back under it in the answer's outputs, without any folder). Default: <a>vs<b>_reconciliation.csv (written only when output is given). |
exceptionsOutput | string | no | Where to write the exceptions only (a file name: the file comes back under it in the answer's outputs, without any folder). |
Result: headline, summary, counts, compared, groups, noKey, suggestions, warnings, exceptions, exceptionsTruncated, path, exceptionsPath.
describe_csv_columns: CSV Anonymizer: what the columns hold
Read one or more CSV, TSV or JSON tables and say what each column looks like (e-mail address, phone number, person's name, identifier, date, IP address, number or text), with the evidence and the action csv_anonymize would take by default. Call it first and check the guesses: only the data's owner knows what a column means.
| Argument | Type | Required | What it is |
|---|---|---|---|
files (file) | array | yes | The tables. |
Result: files, columns.
csv_anonymize: CSV Anonymizer
Replace what looks personal in one or more CSV, TSV or JSON tables with made-up values, using one mapping for the whole call: the same original gets the same replacement in every file, so keys still join. Columns are handled by what they look like unless actions names an action for a column: keep, email, phone, name, id, ip, hash, generalise-email, generalise-phone, generalise-name, generalise-id, month, shift, remove. Dates can be shifted by one offset for the whole run. Writes <name>_anon.<ext> for every file and, unless report is false, anonymize-report.txt with counts and rules, never a value. This is pseudonymisation, not a guarantee of anonymity: read the residual findings. The key of the mapping is drawn at random for every call; a repeatable run from a passphrase is offered by the library function and the web page only, because a passphrase should not travel through a model's context.
| Argument | Type | Required | What it is |
|---|---|---|---|
files (file) | array | yes | The tables. |
actions | object | no | Column name (letter case ignored) to action, for the columns whose default is not wanted. |
offset | integer | no | Days to shift dates by, negative for earlier. Default: drawn from the key, between -180 and 180. |
report | boolean | no | Also write the report. |
zip | boolean | no | Also write anonymized.zip holding every written file. |
Result: files, report, zip, columns, mapped, residual, findings, offset, summary, note.
zip_create: Create ZIP
Pack files into one .zip. Every file is stored under its own name (no folders); a name already used gets a number, as "report (2).pdf". With deflate (the default) a file is compressed unless its first 64 KB show it would not shrink, as photos, videos and office documents do not; store packs everything as it is. Each entry keeps the time its file was last changed. Writes archive.zip unless output is given.
| Argument | Type | Required | What it is |
|---|---|---|---|
files (file) | array | yes | The files, in the order they are to appear in the archive. |
method | string | no | deflate compresses what shrinks; store compresses nothing. |
output | string | no | Where to write the result (a file name: the file comes back under it in the answer's outputs, without any folder). Default: archive.zip. |
Result: path, bytes, entries, renamed, summary.
zip_list: Extract ZIP: what the archive holds
List a .zip without taking anything out: every entry with its path, size, compression method and the time it was last changed, and whether it can be extracted here (password-protected entries and methods other than deflate and stored cannot, with the reason). ZIP64 archives are read.
| Argument | Type | Required | What it is |
|---|---|---|---|
file (file) | string | yes | The ZIP: the name of a file sent in this run's files. |
Result: entries, files, folders, comment, zip64, totalSize, totalCompressed.
zip_extract: Extract ZIP
Take files out of a .zip and verify the CRC-32 of each: all files that can be extracted, or the ones named in entries by name, path or index (see zip_list). Every file is written with the folders it had in the archive in its name (docs/report.txt as docs - report.txt), as the page's downloads are named, and a name still alike gets a number; an entry that fails is reported and the others are still written.
| Argument | Type | Required | What it is |
|---|---|---|---|
file (file) | string | yes | The ZIP: the name of a file sent in this run's files. |
entries | array | no | The files to take out. Default: every file that can be extracted. |
Result: files, failures, summary.
plan_rename: Batch rename: the preview
Say what new name each file would get under renaming rules, and why a name could not be used (a character Windows does not allow, two files ending with the same name). Nothing is read or written. Rules are applied in this order: find and replace in the name without its extension, change of case, text before and after, numbering in list order, the file's modified date in front, and the extension.
| Argument | Type | Required | What it is |
|---|---|---|---|
files (file) | array | yes | The files, in the order they are to be numbered. |
rules | object | yes | The renaming rules; every one is optional. |
Result: plan, changed, problems, ruleProblem, ready, summary.
batch_rename: Batch rename
Make renamed copies of files under renaming rules (see plan_rename for the rules and the preview). The files themselves are never renamed, moved or deleted: each file whose name changes is written under its new name, and with zip the page's renamed-files.zip is written as well, holding every file, renamed or not. Refused when the preview shows a problem.
| Argument | Type | Required | What it is |
|---|---|---|---|
files (file) | array | yes | The files, in the order they are to be numbered. |
rules | object | yes | The renaming rules; every one is optional. |
zip | boolean | no | Also write renamed-files.zip. |
Result: files, zip, plan, changed, summary.
find_duplicates: Find duplicate files
Find byte-identical files among the files given: files of the same size are compared by SHA-256, so files that are alone in their size are never read twice. Returns the groups, which copy of each to keep under the rule (the first in the list, the oldest or newest by modified time, or the one with the shortest path), and the page's CSV report. Nothing is deleted: the report says what could be removed.
| Argument | Type | Required | What it is |
|---|---|---|---|
files (file) | array | yes | The files to compare. |
keep | string | no | Which copy of each group to mark as the one to keep. |
output | string | no | Where to write the result (a file name: the file comes back under it in the answer's outputs, without any folder). Default: duplicates.csv (written only when output is given or the report is long). |
Result: groups, hashed, redundantFiles, redundantBytes, report, reportTruncated, path, summary.
split_file: Split a file
Split one file into numbered parts of partSize bytes (<name>.001, <name>.002, ..., the naming of HJSplit and 7-Zip volumes) and write <name>.sha256 with the SHA-256 of the whole file, so a join can be verified. The parts are written.
| Argument | Type | Required | What it is |
|---|---|---|---|
file (file) | string | yes | The file to split: the name of a file sent in this run's files. |
partSize | integer | yes | Size of each part in bytes; the last part holds the rest. |
Result: parts, checksum, hash, summary.
join_files: Join the parts of a file
Join parts named <name>.001, <name>.002, ... back into the file, in the order of their numbers whatever the order given. With the .sha256 file among the files the result is verified against it, and nothing is written when it does not match. Writes <name> unless output is given.
| Argument | Type | Required | What it is |
|---|---|---|---|
files (file) | array | yes | Every part of one file, and optionally its checksum file. |
output | string | no | Where to write the result (a file name: the file comes back under it in the answer's outputs, without any folder). Default: the file's own name. |
Result: path, bytes, hash, verified, summary.
pdf_to_text: PDF to text
Read the text of a PDF's pages, in reading order. layout paragraphs (the default) joins the lines of a paragraph and leaves a blank line between paragraphs; lines gives one line of the page per line of text. Each page starts with a line such as "---- Page 3 ----" unless pageBreaks is false. pages is "all" (default), "odd", "even", a list such as "1-3, 5", or an array of page numbers. A scanned PDF holds pictures of pages and no text: it is refused (no-text), there is no OCR here. Writes <name>.txt when output is given or the text is long.
| Argument | Type | Required | What it is |
|---|---|---|---|
file (file) | string | yes | The PDF: the name of a file sent in this run's files. |
layout | string | no | How the lines of a page become text. |
pageBreaks | boolean | no | Mark where each page starts. |
pages | see description | no | Which pages: "all", "odd", "even", a list such as "1-3, 5", or an array of page numbers. |
output | string | no | Where to write the result (a file name: the file comes back under it in the answer's outputs, without any folder). Default: <name>.txt. |
Result: text, textTruncated, path, pages, pagesWithText, characters, summary.
subtitle_shift: Subtitle Shift
Retime SRT or WebVTT subtitles: move every cue by offsetMs milliseconds (negative is earlier; a cue that would start before 0 is clamped to 0), stretch the times for a change of frame rate (from and to), and write SRT or WebVTT. Blocks that cannot be read are left out and counted. The text itself (text) or a file to read it from (file): exactly one of the two.
| Argument | Type | Required | What it is |
|---|---|---|---|
text | string | no | The subtitles. |
file (file) | string | no | An .srt or .vtt file: the name of a file sent in this run's files. |
offsetMs | integer | no | Milliseconds to move every cue by; negative moves them earlier. |
from | number | no | The frame rate the subtitles were made for; 0 for none. |
to | number | no | The frame rate the video plays at; 0 for none. Times are multiplied by from / to. |
format | string | no | The format to write; keep writes what came in. |
output | string | no | Where to write the result (a file name: the file comes back under it in the answer's outputs, without any folder). Default: <name>plus<offset>ms.<format>, <name><from>to<to>fps.<format> for a change of frame rate, both for both (subtitles_... for inline text). |
Result: text, textTruncated, path, format, inputFormat, cues, clamped, skipped, warnings, problems, headline, summary.
color_contrast: Colour contrast checker
The contrast ratio of a text colour on a background colour, which of the WCAG 2.2 contrast criteria it meets (AA and AAA for normal and large text, and 3:1 for user interface parts), and for each criterion it fails the nearest text colour and the nearest background colour that would pass: the same hue and colourfulness in OKLCH, only the lightness moved. Colours are given as hex, rgb(), hsl() or a CSS colour name. The verdict is taken from the exact ratio, before it is rounded for display.
| Argument | Type | Required | What it is |
|---|---|---|---|
text | string | yes | The text colour. |
background | string | yes | The background colour. |
Result: text, background, notes, ratio, ratioText, checks, passed, summary, suggestions, css.
color_palette: Colour palette generator
Build a palette from one colour: a tonal scale from 50 to 950 with the colour at its nearest step unchanged, and the companions of a harmony (complementary, analogous, triadic, split, tetradic), all computed in OKLCH. Every swatch names the text colour, black or white, that reads better on it and its WCAG ratio. Returns the palette as CSS custom properties, JSON and an SVG sheet, and writes the three files.
| Argument | Type | Required | What it is |
|---|---|---|---|
color | string | yes | The base colour: hex, rgb(), hsl() or a CSS colour name. |
name | string | no | Prefix of the CSS variables; brand gives --brand-500 (default brand). |
harmony | string | no | Which companions to add. |
Result: color, note, harmony, scale, companions, css, json, svg, files.
qr_code: QR Code Generator
Make a static QR code and write it as SVG and PNG. content says what the code does: {type: "url", url, utm} opens a web address (https:// is added when no scheme is given, campaign parameters are appended from utm), {type: "text", text}, {type: "wifi", ssid, password, security, hidden} joins a network, {type: "email", to, subject, body}, {type: "phone", number}, {type: "sms", number, message}. The code is static: what it holds is printed into it and cannot be changed later. The PNG gets whole pixels per module and prints at exactly widthMm. Scan the result once before printing many.
| Argument | Type | Required | What it is |
|---|---|---|---|
content | object | yes | The type and its fields, as described above. |
color | string | no | Colour of the modules as #rrggbb (default #000000). |
background | string | no | Colour of the background as #rrggbb (default #ffffff). |
transparent | boolean | no | No background: the light modules take the colour of what the code is placed on. |
level | string | no | Error correction: how much damage the code survives. It is raised at no cost when the code has room. |
margin | integer | no | Blank modules around the code; the standard asks for 4. |
widthMm | number | no | Printed width with the margin, in millimetres. |
dpi | one of the values | no | Resolution of the PNG. |
Result: svg, png, payload, summary, version, modules, level, levelRaised, print, notes.
parse_vcard: vCard Maker: open a .vcf file
Read the first contact of a .vcf file (vCard 2.1, 3.0 or 4.0) as a card that vcard_maker takes, and name what the file holds that a card does not, so nothing is lost without a word. The text itself (text) or a file to read it from (file): exactly one of the two.
| Argument | Type | Required | What it is |
|---|---|---|---|
text | string | no | The vCard text. |
file (file) | string | no | A .vcf file: the name of a file sent in this run's files. |
Result: card, version, count, ignored.
vcard_maker: vCard Maker
Make a contact's .vcf file (vCard 3.0, the most compatible, or 4.0), a QR code that adds the contact to a phone, and an email signature as HTML and plain text, and write them. card holds name {given, family, prefix, additional, suffix}, formatted, org, department, title, phones, emails and urls (each a list of {type, value} or of plain values), address {street, locality, region, postcode, country, type}, note and photo {mime, base64}. The photo goes into the file only, never into the QR code. Each output stands on its own: a contact too long for a QR code still gets its file and its signature, and the result says why the code is missing.
| Argument | Type | Required | What it is |
|---|---|---|---|
card | object | yes | The contact, as described above. |
version | string | no | The vCard version of the file. |
qrAddress | boolean | no | Put the address in the QR code. |
qrNote | boolean | no | Put the note in the QR code. |
widthMm | number | no | Printed width of the QR code in millimetres. |
accent | string | no | Accent colour of the signature as #rrggbb (default #0066cc). |
logoUrl | string | no | A public https address of a logo for the signature; mail programs load it from there. |
Result: name, vcf, vcard, qrSvg, qrPng, signatureHtml, signatureText, signature, problems, notes.
bill_split: Bill Splitter
Work out who owes whom after shared expenses, in the fewest payments. All sums are done in whole minor units (cents), so every split adds up to its expense exactly. Pass the split itself (split) or a file the page or this tool saved (file): exactly one of the two. split holds title, currency (such as EUR), decimal ("." or ",": how its amounts are written), people (their names) and expenses: each with description, amount, payer (the position of the person who paid, from 0), method (equal, exact, percent or shares), take (for equal: who shares it, true or false per person; everyone when left out) and values (for the other methods: the amount, percentage or share count of each person, in the order of people). An expense without an amount is not counted. The CSV and the split as a file are written too.
| Argument | Type | Required | What it is |
|---|---|---|---|
split | object | no | The split, as described above. |
file (file) | string | no | A saved split (.json): the name of a file sent in this run's files. |
locale | string | no | The language the amounts are written in, such as en, en-GB or de-DE. |
Result: headline, proof, summary, currency, decimals, total, people, transfers, balances, expenses, provenFewest, notCounted, notes, csv, csvPath, savedPath.
print_templates: Print templates
Make printable paper, a calendar or a label sheet as a vector PDF: lined, handwriting rows, square grid, dot grid, graph paper, tian zi ge writing boxes, music staff, Cornell notes, a month or a whole year, or the outlines or the text of a sheet of labels. Give only the options that belong to the template: one that the web page does not show for it is refused. The PDF carries no date, so the same options give the same bytes. Print at 100 % (actual size), not fit to page.
| Argument | Type | Required | What it is |
|---|---|---|---|
template | string | no | What to draw. |
paper | string | no | Paper size; a label sheet of the list has its own. |
custom | object | no | The size of the paper "custom": 50 to 600 mm on each side (default 210 x 297 mm). |
orientation | string | no | Not for label sheets. |
margin | number | no | Margins; not for label sheets. |
marginUnit | string | no | |
binding | string | no | Paper templates: 10 mm more on the left, or alternating for double-sided printing. |
header | boolean | no | Paper templates: a title and date line at the top. |
pageNumbers | boolean | no | Page numbers; not for label sheets. |
ruler | boolean | no | A scale check line in the bottom margin: 50 mm, or 2 in on inch paper. |
ink | string | no | Line colour. |
inkHex | string | no | The colour of the ink custom, as #rrggbb. |
lineWidth | one of the values | no | Line width in points. |
pages | integer | no | Paper templates: number of pages. |
spacing | number | no | Lined, handwriting, grid, dots, tianzige and cornell: the spacing in mm, 2 to 60. Default: 8 for lined and cornell, 10 for handwriting, 5 for grid and dots, 18 for tianzige. |
marginLine | boolean | no | Lined: a red margin line on the left. |
diagonals | boolean | no | Tianzige: add the diagonals (mi zi ge). |
graphUnit | string | no | Graph paper: 1 mm squares, or 1/10 in squares. |
staves | one of the values | no | Music staff: staves per page. |
calendarLayout | string | no | Calendar: one month per page, or the whole year on one page. |
year | integer | no | Calendar: the year, 1583 to 9999. Default: this year. |
month | integer | no | Calendar: the month. Default: this month. |
months | one of the values | no | Calendar with one month per page: this month only, or 12 months from it. |
weekStart | one of the values | no | Calendar: the week starts on Monday (1) or Sunday (0). |
weekNumbers | boolean | no | Calendar: ISO week numbers; drawn on month pages whose week starts on Monday. |
otherMonths | boolean | no | Calendar: show the days of the neighbouring months in grey. |
lang | string | no | Calendar: language of the month and day names. |
layout | string | no | Labels: a label sheet of the list, or custom. |
customLayout | object | no | The measures of the layout "custom"; one that is left out is that of the A4 sheet with 21 labels. |
labelMode | string | no | Labels: the outlines only, or text on each label. |
text | string | no | Labels with text: the text. Latin, Chinese, Japanese and Korean text, figures and common punctuation. |
textMode | string | no | Labels with text: the same text on every label, or one label per block with a blank line between blocks. |
align | string | no | Labels with text. |
outlines | boolean | no | Labels with text: also draw the outlines. |
skip | integer | no | Labels with text: labels already used on the first sheet. |
sheets | integer | no | Labels, unless filled from a list: number of sheets. |
output | string | no | Where to write the result (a file name: the file comes back under it in the answer's outputs, without any folder). Default: the name the page gives, such as lined-a4.pdf. |
Result: path, pages, title, summary, warnings, counts.
resume_to_pdf: Resume Builder
Make a resume as a one-column PDF with real text that copies in reading order, clickable email and web links and no watermark, from a JSON Resume (jsonresume.org). Pass the resume itself (resume) or a file (file): exactly one of the two. basics (name, label, email, phone, url, summary, location, profiles), work, education and skills fill the resume; projects, certificates, awards, languages, volunteer, publications and interests become sections of their own; references are not taken. A file saved by the web page or by this tool opens exactly as it was, with its layout, headings and order of sections. The PDF carries no date, so the same resume gives the same bytes.
| Argument | Type | Required | What it is |
|---|---|---|---|
resume | object | no | The JSON Resume. |
file (file) | string | no | A JSON Resume file: the name of a file sent in this run's files. |
page | string | no | Paper. Default: what the file holds, else a4. |
font | string | no | Helvetica or Times. Default: what the file holds, else sans. |
size | string | no | Text size. Default: what the file holds, else normal. |
accent | string | no | Colour of the name and the headings. Default: what the file holds, else navy. |
dates | string | no | Mar 2021, 03/2021 or 2021-03. Default: what the file holds, else mon. |
present | string | no | The word for an ongoing role. Default: what the file holds, else Present. |
output | string | no | Where to write the result (a file name: the file comes back under it in the answer's outputs, without any folder). Default: the name the page gives, such as Alex Morgan resume.pdf. |
jsonOutput | string | no | Also write the details as a JSON Resume file here (a file name: the file comes back under it in the answer's outputs, without any folder), to open on the web page or in another resume tool. |
Result: path, pages, paper, summary, warnings, notes, layout, json.
tag_desk: Label Maker
Make labels for a label sheet from a list, as a PDF: text with {{Column}} fields and an optional Code 128, EAN-13 or QR code per label, all as vector shapes. The list is CSV or cells copied from a spreadsheet, given as text or as a file (at most one of the two); without a list the labels are all the same apart from the running number {{#}}, and print.count says how many. designFile takes a design saved by the web page or by this tool; header, sheet, design and print of the call replace those of the file. A row that cannot be printed as asked (a wrong EAN check digit, a character the font cannot draw) stops the PDF unless print.leaveOut is true. Print at 100 % (actual size), never fit to page; tag_desk_calibration makes a page to check the sheet against.
| Argument | Type | Required | What it is |
|---|---|---|---|
text | string | no | The list as text. |
file (file) | string | no | The list as a CSV, TSV or text file: the name of a file sent in this run's files. |
header | boolean | no | The first row holds the column names; otherwise the columns are Column 1, Column 2 and so on. |
designFile (file) | string | no | A saved label design (.json): the name of a file sent in this run's files. |
sheet | object | no | The label sheet. |
design | object | no | What a label shows. |
print | object | no | The printing choices. |
output | string | no | Where to write the result (a file name: the file comes back under it in the answer's outputs, without any folder). Default: labels.pdf, or the list's name with -labels.pdf. |
designOutput | string | no | Also write the design as a file here (a file name: the file comes back under it in the answer's outputs, without any folder); it holds the sheet, the label and the printing choices, never the list. |
Result: path, pages, title, summary, sheet, columns, delimiter, counts, leftOut, problems, notes, design.
tag_desk_calibration: Label Maker: calibration page
Make the calibration page of a label sheet: the outline of every label, moved by the offsets, and a horizontal and a vertical reference line, 100 mm long where the paper has room (on smaller paper the longest of 50, 20 or 10 mm that fits, its length printed beside it). Printed on plain paper at 100 % and held against a label sheet, it shows whether the printer scales and by how much the print must be moved.
| Argument | Type | Required | What it is |
|---|---|---|---|
designFile (file) | string | no | A saved label design (.json): the name of a file sent in this run's files. |
sheet | object | no | The label sheet. |
print | object | no | The offsets typed so far. |
output | string | no | Where to write the result (a file name: the file comes back under it in the answer's outputs, without any folder). Default: label-calibration- and the layout. |
Result: path, sheet, summary, marks.
describe_docx_template: Mail Merge: read a template
Read a Word template (.docx or .dotx) before a mail merge: its fields ({{Name}} placeholders and Word merge fields) and where they stand, its conditions, and the problems that must be fixed in Word first. Call it to know which columns a list needs.
| Argument | Type | Required | What it is |
|---|---|---|---|
file (file) | string | yes | The Word template: the name of a file sent in this run's files. |
Result: name, size, summary, fields, conditions, mergeFields, usesRowNumber, isTemplate, problems.
merge_docx: Mail Merge
Fill a Word template from a list: one Word file per row (output files), or one document with every row, each on a new page (output combined). The list is CSV or cells copied from a spreadsheet, given as text or as a file (exactly one of the two); its first row names the columns. A field takes the column of its own name (case, spaces and underscores do not matter); mapping changes that per field: {"Company": {"column": "Firm"}} takes another column, {"Company": {"column": null, "fallback": "ACME Ltd"}} takes no column and writes the text, {"Grade": {"fallback": "n/a"}} writes the text where the cell is empty. A field without a column and without a text stops the merge. checks in the result names the rows with empty fields, values a format could not read and unusually long values.
| Argument | Type | Required | What it is |
|---|---|---|---|
template (file) | string | yes | The Word template (.docx or .dotx): the name of a file sent in this run's files. |
text | string | no | The list as text. |
file (file) | string | no | The list as a CSV, TSV or text file: the name of a file sent in this run's files. |
mapping | object | no | Per field: column (a column of the list, or null for none) and fallback (the text to use when the cell is empty). |
rows | see description | no | Which rows: "all", a list such as "1-10, 15", or an array of row numbers. Row 1 is the first under the header. |
output | string | no | One Word file per row, or one document with every row. |
pattern | string | no | Output files: the file names, with {{#}} for the row number and {{Field}} for values. Default: the row number and the first field of the text. |
dropEmpty | boolean | no | Remove lines that only held empty fields, like an unused address line. |
zip | boolean | no | Output files: also write all of them as one ZIP. |
outputPath | string | no | Output combined: where to write the document (a file name: the file comes back under it in the answer's outputs, without any folder). Default: the template's name with -merged.docx. |
Result: output, files, list, zip, path, summary, notes, rows, columns, mapping, checks.
csv_to_chart: CSV to Chart
Draw a table as a column, bar, line or area chart and write it as SVG. The first row of the table names the columns; one column gives the category names and up to eight columns of numbers give the series. Left to itself the tool reads the table as the web page does: labels from the first column of dates or of text, the first four columns of numbers as series, and the chart type that suits the table (a line for dates, bars for many or long names, columns otherwise). The result says what was read, and lists cells that are not numbers and were left out. The text itself (text) or a file to read it from (file): exactly one of the two.
| Argument | Type | Required | What it is |
|---|---|---|---|
text | string | no | The table as text. |
file (file) | string | no | The table as a CSV, TSV or text file: the name of a file sent in this run's files. |
type | string | no | Default: the type that suits the table. An area shows one series. |
label | string | no | The column of the category names. |
series | array | no | The columns of numbers to draw. |
stacked | boolean | no | Columns and bars of two or more series: stack them. |
sort | string | no | Columns and bars: as in the table, largest first or smallest first. |
title | string | no | Default: made from the column names. |
subtitle | string | no | A line under the title. |
note | string | no | A source or note, on the bottom line. |
valueTitle | string | no | Title of the value axis. |
categoryTitle | string | no | Title of the category axis. |
theme | string | no | |
background | string | no | |
valueLabels | boolean | no | Write values on the chart. |
zeroBaseline | boolean | no | Line charts: start the value axis at zero. |
pattern | boolean | no | Hatched fills, for print and colour-blind readers. |
size | string | no | 800 x 500, 960 x 540, 640 x 640 or 600 x 750 px. |
delimiter | string | no | What separates the cells; auto detects it. |
decimal | string | no | What the numbers use for decimals. |
output | string | no | Where to write the result (a file name: the file comes back under it in the answer's outputs, without any folder). Default: the file's name with .svg, or a name made from the title. |
Result: path, heading, title, description, type, suggested, stacked, width, height, summary, notes, label, labels, series, columns, delimiter, decimal.
font_pairs: Font pairs
Make the CSS and the JSON design tokens of a type system: a heading font, a body font and a modular scale. Each font is one of: {stack: id} for a system font stack that needs no download (system-sans, helvetica, verdana, trebuchet, gill, georgia, times, palatino, garamond, baskerville, mono, cjk-sans, cjk-serif), {family: name, category} for a font by name with its generic fallback, or {file: path} for a font file, which is read for its family name and axes only and is never copied into an export. The two files are written too.
| Argument | Type | Required | What it is |
|---|---|---|---|
heading | object | no | The heading font, as described above. Default: {stack: "system-sans"}. |
body | object | no | The body font. Default: {stack: "georgia"}. |
base | number | no | Base size in px. |
ratio | one of the values | no | The ratio of the scale. |
bodyLineHeight | number | no | Line height of body text. |
headingLineHeight | number | no | Line height of headings. |
headingSpacing | number | no | Letter spacing of headings in em. |
measure | number | no | Characters per line. |
headingWeight | number | no | Weight of headings; inside the weight axis of a variable heading font. |
prefix | string | no | Prefix of the custom properties. |
licence | string | no | A note on the fonts' licence, for the tokens. |
Result: css, tokens, heading, body, scale, notes, files.
svg_pattern: SVG pattern maker
Make a seamless repeat tile and a 1024 px square filled with it, as SVG, from a built-in shape (dot, ring, square, diamond, triangle, hexagon, cross, star, stripe) or from a motif of one's own (an SVG or a PNG file). Whatever crosses one edge of the tile comes back on the opposite edge, so the tile repeats without a seam.
| Argument | Type | Required | What it is |
|---|---|---|---|
shape | string | no | |
motif (file) | string | no | A motif of one's own, an SVG or a PNG, in place of a shape: the name of a file sent in this run's files. |
layout | string | no | The repeat rule. |
cell | integer | no | Cell size in px. |
scale | integer | no | Size of the motif in percent of the cell, in steps of 5. |
rotate | one of the values | no | Rotation of the motif in degrees. |
color | string | no | Colour of a built-in shape as #rrggbb (default #0066CC). |
background | string or null | no | Background as #rrggbb (default #FFFFFF), or null for none. |
Result: tile, fill, width, height, cell, placements, shape, layout, color, background, summary.