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

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..."}]}'

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"
  }
}

Limits

Errors

Every error answers { code, message, details, request_id }.

StatusCodedetails.reasonWhen
400VALIDATION_ERRORinvalid_inputan argument is missing, of the wrong type or outside its values, or is outputDir or overwrite; the message names it
400VALIDATION_ERRORfile_not_sentan argument names a file that is not among the run's files
400VALIDATION_ERRORmodified_time_requireddate-based rename or oldest/newest duplicate selection needs last_modified for every selected file
401AUTH_REQUIREDno API Key, or one that is not valid
403PERMISSION_DENIEDscopethe API Key does not hold tools.run (tools.read for the list)
404RESOURCE_NOT_FOUNDno tool of that name
413FILE_TOO_LARGEfile_too_largeone file is over 700 KB; the message names it with its size and the limit, and details give file_bytes and limit_bytes
413FILE_TOO_LARGEfiles_too_largethe 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
413FILE_TOO_LARGEbody_too_largethe 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
422UNSUPPORTED_CONTENTunreadable_inputa file the tool cannot read: not a PDF, a damaged image, ...
422UNSUPPORTED_ENCRYPTED_INPUTencrypted_inputa password-protected PDF, even one that opens without a password
422UNSUPPORTED_CONTENTtime_limitthe run took longer than 30 seconds and was stopped
422UNSUPPORTED_CONTENTmemory_limitthe run needed more than 256 MB of memory and was stopped
422UNSUPPORTED_CONTENTtool_failedthe 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
429RATE_LIMITEDover the API Key's requests per minute
429RATE_LIMITEDconcurrent_runthis Key already has a tool running; its rotation replacement shares the same limit; Retry-After gives a retry interval
422UNSUPPORTED_CONTENToutput_limitthe result exceeds 20 MiB of files or 32 MiB of JSON
503PROVIDER_UNAVAILABLErunner_busythe runner is at capacity; try again shortly
503PROVIDER_UNAVAILABLErunner_unavailablethe 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:

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.

ArgumentTypeRequiredWhat it is
files (file)arrayyesThe PDFs, in the order they are to appear.
outputstringnoWhere 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.

ArgumentTypeRequiredWhat it is
file (file)stringyesThe PDF to split: the name of a file sent in this run's files.
modestringnoevery: chunks of every pages; ranges: one file per part of ranges; each: one file per page.
everyintegernoPages per file for mode every (default 1).
rangesstringnoFor 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.
zipbooleannoAlso 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.

ArgumentTypeRequiredWhat it is
file (file)stringyesThe PDF: the name of a file sent in this run's files.
angleintegerno90 clockwise, 180, or 270 (90 counter-clockwise).
pagessee descriptionno"all", "odd", "even", "1-3, 5", or [1, 3, 5].
outputstringnoWhere 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.

ArgumentTypeRequiredWhat it is
file (file)stringyesThe PDF: the name of a file sent in this run's files.
pagesarrayyesThe pages to keep, in order.
outputstringnoWhere 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.

ArgumentTypeRequiredWhat it is
images (file)arrayyesThe images, in page order.
pageSizestringno
dpiintegernoOnly for pageSize image.
marginstringnoOnly for A4 and Letter: none, a quarter inch, or half an inch.
outputstringnoWhere 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.

ArgumentTypeRequiredWhat it is
file (file)stringyesThe 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.

ArgumentTypeRequiredWhat it is
file (file)stringyesThe 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.

ArgumentTypeRequiredWhat it is
file (file)stringyesThe PDF form: the name of a file sent in this run's files.
valuesobjectyesField name to value.
flattenbooleannoBurn the values into the page content.
outputstringnoWhere 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.

ArgumentTypeRequiredWhat it is
file (file)stringyesThe PDF: the name of a file sent in this run's files.
image (file)stringyesThe signature image (PNG or JPEG): the name of a file sent in this run's files.
pageintegerno1-based page number (default 1).
xnumbernoLeft edge as a fraction (0 to 1) of the width of the page as viewers show it (its crop box).
ynumbernoTop edge as a fraction (0 to 1) of the height of the page as viewers show it (its crop box).
widthnumbernoWidth as a fraction (0.05 to 0.6) of the width of the page as viewers show it (its crop box).
heightnumbernoHeight 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.
outputstringnoWhere 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.

ArgumentTypeRequiredWhat it is
file (file)stringyesA 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.

ArgumentTypeRequiredWhat it is
file (file)stringyesA JPEG, PNG or WebP image: the name of a file sent in this run's files.
keepIccbooleannoKeep the colour profile.
outputstringnoWhere 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.

ArgumentTypeRequiredWhat it is
textstringnoThe JSON text.
file (file)stringnoA JSON file to read instead of text: the name of a file sent in this run's files.
indentsee descriptionno
sortKeysbooleannoSort object keys by code point.
outputstringnoWhere 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.

ArgumentTypeRequiredWhat it is
originalstringnoThe original text.
originalFile (file)stringnoA file to read the original text from: the name of a file sent in this run's files.
changedstringnoThe changed text.
changedFile (file)stringnoA file to read the changed text from: the name of a file sent in this run's files.
ignoreCasebooleannoCompare without regard to case.
whitespacestringnoexact, ignore trailing whitespace, or ignore all whitespace changes.
outputstringnoWhere 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.

ArgumentTypeRequiredWhat it is
patternstringyesThe pattern, without slashes.
flagsstringnoAny combination of g, i, m, s, u, y.
textstringnoThe text to search.
file (file)stringnoA file to read the text from: the name of a file sent in this run's files.
replacementstringnoReplacement text; an empty string deletes the matches.
limitintegernoHow many matches to return (1 to 10000).
outputstringnoWhere 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.

ArgumentTypeRequiredWhat it is
textstringnoThe Markdown text.
file (file)stringnoA Markdown file to read instead of text: the name of a file sent in this run's files.
outputstringnoWhere 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.

ArgumentTypeRequiredWhat it is
categorystringyesQuantity id, for example length.
valuesee descriptionyesA number, or text as typed on the page: "1,5", "3/4", "2e3".
fromstringyesUnit id, for example m.
tostringyesUnit 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.

ArgumentTypeRequiredWhat it is
modestringyes
startstringnoYYYY-MM-DD (modes diff and add).
endstringnoYYYY-MM-DD (mode diff).
includeEndbooleannoCount the end date as well (mode diff).
directionstringnoMode add.
yearsintegernoMode add.
monthsintegernoMode add.
weeksintegernoMode add.
daysintegernoMode add.
workdaysintegernoMode add: working days, Monday to Friday.
datestringnoYYYY-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.

ArgumentTypeRequiredWhat it is
referencestringyesThe zone the date and time are read in, for example Asia/Singapore.
datestringyesYYYY-MM-DD.
timestringyesHH:MM, 24-hour clock.
zonesarraynoZones 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.

ArgumentTypeRequiredWhat it is
file (file)stringyesThe PDF: the name of a file sent in this run's files.
pagessee descriptionyes"all", "odd", "even", "1-3, 5", or [1, 3, 5].
includeRestbooleannoAlso write the pages that were not chosen as a second PDF.
outputstringnoWhere 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.

ArgumentTypeRequiredWhat it is
file (file)stringyesThe PDF: the name of a file sent in this run's files.
pagessee descriptionno
positionstringno
formatstringno1; Page 1; 1 / 12; Page 1 of 12; custom: your own template.
templatestringnoWith 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}.
startintegernoThe number the first page carries (default 1), 1 to 999,999,999.
sizeintegernoText size in points: the page's small, medium and large.
outputstringnoWhere 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.

ArgumentTypeRequiredWhat it is
file (file)stringyesThe PDF: the name of a file sent in this run's files.
textstringyesThe watermark text, for example CONFIDENTIAL or 机密: Latin, Chinese, Japanese or Korean.
pagessee descriptionno
layoutstringno
sizestringno
opacitynumberno15, 30 or 50 per cent.
colorstringno
outputstringnoWhere 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.

ArgumentTypeRequiredWhat it is
file (file)stringyesThe PDF: the name of a file sent in this run's files.
pagessee descriptionno
topnumbernoMillimetres off the top.
rightnumbernoMillimetres off the right.
bottomnumbernoMillimetres off the bottom.
leftnumbernoMillimetres off the left.
outputstringnoWhere 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.

ArgumentTypeRequiredWhat it is
file (file)stringyesThe PDF: the name of a file sent in this run's files.
presetstringnoOnly lossless runs here.
outputstringnoWhere 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.

ArgumentTypeRequiredWhat it is
file (file)stringyesThe 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.

ArgumentTypeRequiredWhat it is
file (file)stringyesThe PDF: the name of a file sent in this run's files.
infobooleannoRemove the document information entries.
keepTitlebooleannoKeep the Title entry when the information entries are removed.
xmpbooleannoRemove the XMP stream.
idsbooleannoRemove the file identifiers.
pieceInfobooleannoRemove private application data.
annotationsbooleannoRemove the author and dates on annotations.
outputstringnoWhere 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.

ArgumentTypeRequiredWhat it is
schemastringnoThe JSON Schema, as text.
schemaFile (file)stringnoA file holding the schema: the name of a file sent in this run's files.
datastringnoThe JSON document to check, as text.
dataFile (file)stringnoA file holding the document: the name of a file sent in this run's files.
formatsbooleannoCheck 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.

ArgumentTypeRequiredWhat it is
presetstringnoA ready-made field set. Pass this or fields, not both.
fieldsarraynoPass this or preset, not both.
rowsintegernoHow many rows (1 to 100000).
seedstringnoSame seed, same rows. Left out, a seed is chosen and returned.
edgeCasesbooleannoMix in awkward values such as empty strings and extreme numbers.
formatstringno
tablestringnoTable name for the sql format (default mock_data).
dialectstringnoFor the sql format.
outputstringnoWhere 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.

ArgumentTypeRequiredWhat it is
expressionstringyesThe cron expression, for example "0 9 * * 1-5".
countintegernoHow many next runs to list (1 to 50).
timeZonestringnoIANA zone the runs are shown in (default UTC).
fromstringnoStart 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.

ArgumentTypeRequiredWhat it is
querystringyesThe SQL query.
tables (file)arrayyesThe tables the query can read.
outputstringnoWhere 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.

ArgumentTypeRequiredWhat it is
textstringnoPEM text, one or more blocks.
file (file)stringnoA .pem, .crt, .cer, .der or .csr file: the name of a file sent in this run's files.
atstringnoJudge 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.

ArgumentTypeRequiredWhat it is
textstringnoThe delimited text.
file (file)stringnoA CSV, TSV or text file: the name of a file sent in this run's files.
delimiterstringnoWhat separates the cells; auto detects it.
headerbooleannoThe first row holds the field names. Without it the fields are column_1, column_2, ...
shapestringnoobjects: an array of objects; lines: JSON Lines, one object per line; arrays: an array of arrays, header row first; columns: one array per column.
typesbooleannoConvert numbers and true/false; empty cells become null.
trimbooleannoTrim spaces around every cell.
indentone of the valuesnoSpaces per level, or "min" for a single line. JSON Lines has no indentation.
outputstringnoWhere 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.

ArgumentTypeRequiredWhat it is
textstringnoThe delimited text.
file (file)stringnoA CSV, TSV or text file: the name of a file sent in this run's files.
delimiterstringnoWhat separates the cells; auto detects it.
headerbooleannoThe first row holds the field names.
fixHeadersbooleannoFix header names: trim, name empty ones column_N, number duplicates. Needs header.
snakeCasebooleannoAlso rewrite header names as snake_case. Needs header.
trimbooleannoTrim spaces around every cell.
invisiblebooleannoRemove zero-width characters, stray byte order marks and control characters; non-breaking spaces become ordinary spaces.
collapsebooleannoCollapse repeated spaces inside a cell to one.
blankRowsbooleannoRemove blank rows.
dedupebooleannoRemove duplicate rows (exact match after cleaning).
ignoreCasebooleannoTreat rows that differ only in letter case as duplicates. Needs dedupe.
raggedbooleannoEven out row lengths: pad short rows, keep extra cells as new columns.
emptyColumnsbooleannoRemove columns that are empty in every row.
outDelimiterstringnoThe delimiter to save with; tab gives a .tsv name.
lineEndingstringnosame keeps the line ending the input came with.
bomstringnoadd 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.
outputstringnoWhere 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).

ArgumentTypeRequiredWhat it is
astringnoTable A (before), inline.
aFile (file)stringnoTable A as a CSV, TSV or text file: the name of a file sent in this run's files.
bstringnoTable B (after), inline.
bFile (file)stringnoTable B as a CSV, TSV or text file: the name of a file sent in this run's files.
delimiterstringnoThe delimiter of both tables; auto detects each table's own.
keyColumnsarraynoOne or two header names that identify a row in both tables. Empty: rows are compared in order.
trimbooleannoIgnore spaces around cells.
ignoreCasebooleannoIgnore letter case.
numericbooleannoTreat 10, 10.0 and 1e1 as the same number.
outputstringnoWhere 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).

ArgumentTypeRequiredWhat it is
astringnoTable A, inline.
aFile (file)stringnoTable A as a CSV, TSV or text file: the name of a file sent in this run's files.
bstringnoTable B, inline.
bFile (file)stringnoTable B as a CSV, TSV or text file: the name of a file sent in this run's files.
delimiterstringnoThe delimiter of both tables; auto detects each table's own.
keysAarrayyesThe key column or columns of table A.
keysBarrayyesThe key column or columns of table B, the same number as keysA.
amountAstringnoThe amount column of table A. Give it for both tables or for neither.
amountBstringnoThe amount column of table B.
minusAstringnoA column of table A to subtract from the amount, such as credit from debit.
minusBstringnoThe same for table B.
currencyAstringnoA column of table A holding a currency code.
currencyBstringnoThe same for table B.
flipBbooleannoTable B shows the same amounts with the opposite sign.
emptyAmountstringnoAn empty amount makes the key impossible to compare (missing), or counts as zero.
decimalstringnoThe decimal mark: detected for each table, a dot (1,234.50) or a comma (1.234,50).
toleranceobjectnoLeave out for an exact match.
ignoreCasebooleannoKeys: ignore letter case.
ignorePunctuationbooleannoKeys: ignore spaces and punctuation.
ignoreLeadingZerosbooleannoKeys: ignore leading zeros.
suggestbooleannoSuggest possible matches among leftover rows.
acceptedarraynoIds of suggestions (from a previous call's suggestions) to count as matched.
outputstringnoWhere 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).
exceptionsOutputstringnoWhere 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.

ArgumentTypeRequiredWhat it is
files (file)arrayyesThe 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.

ArgumentTypeRequiredWhat it is
files (file)arrayyesThe tables.
actionsobjectnoColumn name (letter case ignored) to action, for the columns whose default is not wanted.
offsetintegernoDays to shift dates by, negative for earlier. Default: drawn from the key, between -180 and 180.
reportbooleannoAlso write the report.
zipbooleannoAlso 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.

ArgumentTypeRequiredWhat it is
files (file)arrayyesThe files, in the order they are to appear in the archive.
methodstringnodeflate compresses what shrinks; store compresses nothing.
outputstringnoWhere 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.

ArgumentTypeRequiredWhat it is
file (file)stringyesThe 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.

ArgumentTypeRequiredWhat it is
file (file)stringyesThe ZIP: the name of a file sent in this run's files.
entriesarraynoThe 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.

ArgumentTypeRequiredWhat it is
files (file)arrayyesThe files, in the order they are to be numbered.
rulesobjectyesThe 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.

ArgumentTypeRequiredWhat it is
files (file)arrayyesThe files, in the order they are to be numbered.
rulesobjectyesThe renaming rules; every one is optional.
zipbooleannoAlso 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.

ArgumentTypeRequiredWhat it is
files (file)arrayyesThe files to compare.
keepstringnoWhich copy of each group to mark as the one to keep.
outputstringnoWhere 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.

ArgumentTypeRequiredWhat it is
file (file)stringyesThe file to split: the name of a file sent in this run's files.
partSizeintegeryesSize 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.

ArgumentTypeRequiredWhat it is
files (file)arrayyesEvery part of one file, and optionally its checksum file.
outputstringnoWhere 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.

ArgumentTypeRequiredWhat it is
file (file)stringyesThe PDF: the name of a file sent in this run's files.
layoutstringnoHow the lines of a page become text.
pageBreaksbooleannoMark where each page starts.
pagessee descriptionnoWhich pages: "all", "odd", "even", a list such as "1-3, 5", or an array of page numbers.
outputstringnoWhere 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.

ArgumentTypeRequiredWhat it is
textstringnoThe subtitles.
file (file)stringnoAn .srt or .vtt file: the name of a file sent in this run's files.
offsetMsintegernoMilliseconds to move every cue by; negative moves them earlier.
fromnumbernoThe frame rate the subtitles were made for; 0 for none.
tonumbernoThe frame rate the video plays at; 0 for none. Times are multiplied by from / to.
formatstringnoThe format to write; keep writes what came in.
outputstringnoWhere 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.

ArgumentTypeRequiredWhat it is
textstringyesThe text colour.
backgroundstringyesThe 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.

ArgumentTypeRequiredWhat it is
colorstringyesThe base colour: hex, rgb(), hsl() or a CSS colour name.
namestringnoPrefix of the CSS variables; brand gives --brand-500 (default brand).
harmonystringnoWhich 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.

ArgumentTypeRequiredWhat it is
contentobjectyesThe type and its fields, as described above.
colorstringnoColour of the modules as #rrggbb (default #000000).
backgroundstringnoColour of the background as #rrggbb (default #ffffff).
transparentbooleannoNo background: the light modules take the colour of what the code is placed on.
levelstringnoError correction: how much damage the code survives. It is raised at no cost when the code has room.
marginintegernoBlank modules around the code; the standard asks for 4.
widthMmnumbernoPrinted width with the margin, in millimetres.
dpione of the valuesnoResolution 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.

ArgumentTypeRequiredWhat it is
textstringnoThe vCard text.
file (file)stringnoA .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.

ArgumentTypeRequiredWhat it is
cardobjectyesThe contact, as described above.
versionstringnoThe vCard version of the file.
qrAddressbooleannoPut the address in the QR code.
qrNotebooleannoPut the note in the QR code.
widthMmnumbernoPrinted width of the QR code in millimetres.
accentstringnoAccent colour of the signature as #rrggbb (default #0066cc).
logoUrlstringnoA 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.

ArgumentTypeRequiredWhat it is
splitobjectnoThe split, as described above.
file (file)stringnoA saved split (.json): the name of a file sent in this run's files.
localestringnoThe 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.

ArgumentTypeRequiredWhat it is
templatestringnoWhat to draw.
paperstringnoPaper size; a label sheet of the list has its own.
customobjectnoThe size of the paper "custom": 50 to 600 mm on each side (default 210 x 297 mm).
orientationstringnoNot for label sheets.
marginnumbernoMargins; not for label sheets.
marginUnitstringno
bindingstringnoPaper templates: 10 mm more on the left, or alternating for double-sided printing.
headerbooleannoPaper templates: a title and date line at the top.
pageNumbersbooleannoPage numbers; not for label sheets.
rulerbooleannoA scale check line in the bottom margin: 50 mm, or 2 in on inch paper.
inkstringnoLine colour.
inkHexstringnoThe colour of the ink custom, as #rrggbb.
lineWidthone of the valuesnoLine width in points.
pagesintegernoPaper templates: number of pages.
spacingnumbernoLined, 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.
marginLinebooleannoLined: a red margin line on the left.
diagonalsbooleannoTianzige: add the diagonals (mi zi ge).
graphUnitstringnoGraph paper: 1 mm squares, or 1/10 in squares.
stavesone of the valuesnoMusic staff: staves per page.
calendarLayoutstringnoCalendar: one month per page, or the whole year on one page.
yearintegernoCalendar: the year, 1583 to 9999. Default: this year.
monthintegernoCalendar: the month. Default: this month.
monthsone of the valuesnoCalendar with one month per page: this month only, or 12 months from it.
weekStartone of the valuesnoCalendar: the week starts on Monday (1) or Sunday (0).
weekNumbersbooleannoCalendar: ISO week numbers; drawn on month pages whose week starts on Monday.
otherMonthsbooleannoCalendar: show the days of the neighbouring months in grey.
langstringnoCalendar: language of the month and day names.
layoutstringnoLabels: a label sheet of the list, or custom.
customLayoutobjectnoThe measures of the layout "custom"; one that is left out is that of the A4 sheet with 21 labels.
labelModestringnoLabels: the outlines only, or text on each label.
textstringnoLabels with text: the text. Latin, Chinese, Japanese and Korean text, figures and common punctuation.
textModestringnoLabels with text: the same text on every label, or one label per block with a blank line between blocks.
alignstringnoLabels with text.
outlinesbooleannoLabels with text: also draw the outlines.
skipintegernoLabels with text: labels already used on the first sheet.
sheetsintegernoLabels, unless filled from a list: number of sheets.
outputstringnoWhere 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.

ArgumentTypeRequiredWhat it is
resumeobjectnoThe JSON Resume.
file (file)stringnoA JSON Resume file: the name of a file sent in this run's files.
pagestringnoPaper. Default: what the file holds, else a4.
fontstringnoHelvetica or Times. Default: what the file holds, else sans.
sizestringnoText size. Default: what the file holds, else normal.
accentstringnoColour of the name and the headings. Default: what the file holds, else navy.
datesstringnoMar 2021, 03/2021 or 2021-03. Default: what the file holds, else mon.
presentstringnoThe word for an ongoing role. Default: what the file holds, else Present.
outputstringnoWhere 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.
jsonOutputstringnoAlso 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.

ArgumentTypeRequiredWhat it is
textstringnoThe list as text.
file (file)stringnoThe list as a CSV, TSV or text file: the name of a file sent in this run's files.
headerbooleannoThe first row holds the column names; otherwise the columns are Column 1, Column 2 and so on.
designFile (file)stringnoA saved label design (.json): the name of a file sent in this run's files.
sheetobjectnoThe label sheet.
designobjectnoWhat a label shows.
printobjectnoThe printing choices.
outputstringnoWhere 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.
designOutputstringnoAlso 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.

ArgumentTypeRequiredWhat it is
designFile (file)stringnoA saved label design (.json): the name of a file sent in this run's files.
sheetobjectnoThe label sheet.
printobjectnoThe offsets typed so far.
outputstringnoWhere 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.

ArgumentTypeRequiredWhat it is
file (file)stringyesThe 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.

ArgumentTypeRequiredWhat it is
template (file)stringyesThe Word template (.docx or .dotx): the name of a file sent in this run's files.
textstringnoThe list as text.
file (file)stringnoThe list as a CSV, TSV or text file: the name of a file sent in this run's files.
mappingobjectnoPer field: column (a column of the list, or null for none) and fallback (the text to use when the cell is empty).
rowssee descriptionnoWhich rows: "all", a list such as "1-10, 15", or an array of row numbers. Row 1 is the first under the header.
outputstringnoOne Word file per row, or one document with every row.
patternstringnoOutput files: the file names, with {{#}} for the row number and {{Field}} for values. Default: the row number and the first field of the text.
dropEmptybooleannoRemove lines that only held empty fields, like an unused address line.
zipbooleannoOutput files: also write all of them as one ZIP.
outputPathstringnoOutput 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.

ArgumentTypeRequiredWhat it is
textstringnoThe table as text.
file (file)stringnoThe table as a CSV, TSV or text file: the name of a file sent in this run's files.
typestringnoDefault: the type that suits the table. An area shows one series.
labelstringnoThe column of the category names.
seriesarraynoThe columns of numbers to draw.
stackedbooleannoColumns and bars of two or more series: stack them.
sortstringnoColumns and bars: as in the table, largest first or smallest first.
titlestringnoDefault: made from the column names.
subtitlestringnoA line under the title.
notestringnoA source or note, on the bottom line.
valueTitlestringnoTitle of the value axis.
categoryTitlestringnoTitle of the category axis.
themestringno
backgroundstringno
valueLabelsbooleannoWrite values on the chart.
zeroBaselinebooleannoLine charts: start the value axis at zero.
patternbooleannoHatched fills, for print and colour-blind readers.
sizestringno800 x 500, 960 x 540, 640 x 640 or 600 x 750 px.
delimiterstringnoWhat separates the cells; auto detects it.
decimalstringnoWhat the numbers use for decimals.
outputstringnoWhere 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.

ArgumentTypeRequiredWhat it is
headingobjectnoThe heading font, as described above. Default: {stack: "system-sans"}.
bodyobjectnoThe body font. Default: {stack: "georgia"}.
basenumbernoBase size in px.
ratioone of the valuesnoThe ratio of the scale.
bodyLineHeightnumbernoLine height of body text.
headingLineHeightnumbernoLine height of headings.
headingSpacingnumbernoLetter spacing of headings in em.
measurenumbernoCharacters per line.
headingWeightnumbernoWeight of headings; inside the weight axis of a variable heading font.
prefixstringnoPrefix of the custom properties.
licencestringnoA 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.

ArgumentTypeRequiredWhat it is
shapestringno
motif (file)stringnoA 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.
layoutstringnoThe repeat rule.
cellintegernoCell size in px.
scaleintegernoSize of the motif in percent of the cell, in steps of 5.
rotateone of the valuesnoRotation of the motif in degrees.
colorstringnoColour of a built-in shape as #rrggbb (default #0066CC).
backgroundstring or nullnoBackground as #rrggbb (default #FFFFFF), or null for none.

Result: tile, fill, width, height, cell, placements, shape, layout, color, background, summary.