What TRANSFORMER does

TRANSFORMER is a file transformation tool with several functions: image conversion (between WEBP, AVIF, JPG and PNG, and to ICO, TIFF and JPEG XL, also from camera RAW), video conversion (between MP4, WebM, MKV, animated GIF and animated WebP), audio conversion (between MP3, AAC, Opus, WebM/Opus, OGG, FLAC, WAV and AIFF), data transformation (HTML↔MD, JSON↔CSV, JSON↔YAML, spreadsheets↔CSV/JSON, DOCX, image OCR, beautify and minify), PDF operations (create a PDF from images or text, merge, insert, split, compress, OCR, number, metadata, convert to images, text or DOCX, and a page editor) and batch renaming with masks and variables. All the functions work on the same file queue: you load once and choose the corresponding tab in the right-hand column (Image, Video, Audio, Data, PDF or Rename).

This documentation is split across tabs: General (what is common to everything), one for each working tab (Image, Video, Audio, Data and PDF), Advanced (recipes, guided flows, user presets, viewer and editors, Settings, session and history) and Formats (every parameter of every encoder). It opens by clicking the TRANSFORMER title in the header and closes with Esc, with Close or by clicking outside the window.

Simple mode

The Simple / Advanced switch in the header changes the way you work. Advanced is the two-queue mode, input and output, with selection and per-file actions. Simple leaves one list, the tab's settings and a button:

With Interface mode set to Automatic (Settings → Interaction), the app opens in Simple on narrow screens and when you arrive from a task page or a ?preset= link, and in Advanced everywhere else. Choosing one in the header fixes it for future visits. Switching modes does not touch the queue or the settings.

Privacy

All processing (loading, conversion, scaling, renaming, ZIP/PDF generation and metadata editing) is done entirely on your device, inside the browser. No file or private data is uploaded, shared or stored on external servers: the files never leave your device. All the libraries (WASM codecs, FFmpeg engine, data utilities) are served from the site itself; only if a local file failed would it be downloaded from its official CDN with subresource integrity (SRI) verification. After the first load everything is cached and the work is completely local. The AI models (Real-ESRGAN upscale, background removal) and the OCR engine are downloaded only the first time you use them; the only thing travelling over the network is that download, never your files.

On your device, inside the browser's local storage, TRANSFORMER can save:

Each one can be disabled or deleted separately in Settings → Data in this browser (see the Advanced tab), or all at once with Reset everything or by clearing the site data. None of it leaves your device.

Installation and offline use

TRANSFORMER is an installable application (PWA). When the browser allows it, a banner appears with the Install button and the Install link in the footer; once installed, it opens in its own window, without browser bars. After the first visit, the application and its engines (WASM codecs and FFmpeg) are cached, so you can keep working without an internet connection. Next to the Convert button the offline indicator appears when there is no network. If a new version is published while the application is open, a banner is shown to refresh and update.

Remembered settings

The values of the controls of each tab (Image, Video, Audio, Data, PDF and Rename: format or operation, preset and all the settings, including those of the Scale, Adjustments, Background, Max size and Filters modals) are remembered between sessions in this browser. The Preset label of each tab (in Data it is called Settings and in PDF Type) is clickable: it resets that tab's default values. If you edit a control with a preset applied, the selector switches to “Custom”, as always. You can disable this memory in Settings.

Loading files

Supported image formats: PNG JPG WEBP AVIF HEIC GIF BMP TIFF SVG ICO and camera RAW (DNG CR2 CR3 NEF ARW ORF RW2 RAF PEF…)

Supported video formats: MP4 WebM MOV MKV

Supported audio formats: MP3 WAV AIFF AAC M4A OGG Opus FLAC

Supported data formats: HTML HTM MD JSON CSV TSV YAML YML DOCX XLSX XLS ODS EPUB CSS JS

PDF documents: PDF (accepted by dragging, pasting the URL or with the unfiltered selector). For the PDF tab, TXT MD HTML and DOCX texts are also read.

You can mix images, videos, audios, data files and PDFs in the same queue: each file is processed with the tab that is active when you click Convert, according to its type. Each tab only lets you select the files it knows how to process (the eligible ones); the rest appear dimmed and are left untouched.

If you load many files at once, reading is split into batches (how many at a time is set in Settings → Performance). PDFs show their page count in their row; one that is password-protected, damaged or has no pages is flagged with the reason and is not selectable.

Global action buttons

Before exporting (ZIP, ZIP + Viewer, Download all or Share) you are warned if two files are going to come out with the same name.

Recipes

A recipe chains the settings of several tabs and applies them all at once to the selected files: for example, images to WEBP at 1920 px, names in lowercase and download the ZIP. They are managed in My recipes, the list icon with a triangle in the header.

How a recipe works internally (what each step saves, which files it receives, when a step is skipped, warnings, import and export…) is explained in detail in the Advanced tab.

Per-file buttons — left column (originals)

The trash can in the “Imported” bar deletes all the files, loaded and generated.

Per-file buttons — right column (converted)

Always visible: Download, More actions (⋮) and Delete. The ⋮ menu contains the rest:

Each output row shows its dimensions (or pages, or duration), the resulting size and, in brackets, the percentage it represents relative to the original. Outputs that do not hang from an original (the PDF from Images → PDF, the pages from PDF → images…) carry the Generated label.

Context menu (right-click)

On touch screens there is no context menu: a long press selects, and the actions are in the ⋮ button of each row.

Selection and batch operations

Conversion and the rest of the bulk operations act only on the selected files (highlighted in the left list). Files enter selected by default when they are loaded.

With a partial selection, the bar's counter shows N sel / N total.

The right column has its own selection, with the buttons in the “Generated” bar: all, same output extension, invert and, if there are duplicate names, only those with a name conflict. That selection is what the bulk context menu uses.

Reordering the queue

Drag a row (with the mouse, or hold it down on touch) to move it. The order of the list matters: it is that of the %n% counter, that of the pages in Images → PDF and that of the documents in Merge and Insert.

Undo and redo

Ctrl+Z undoes the last operation on the list (deleting a row, discarding a result, renaming) and Ctrl+Shift+Z or Ctrl+Y redoes it. The last 20 are remembered. If the file has already changed by another route (it was reconverted, it was deleted), that entry is skipped so as not to undo falsely. The image and PDF editors have their own undo, independent of this one.

Under the “Files” bar the batch operations bar appears when there is an active selection in the Image or Video tabs:

Engine indicators

The active tab of the right panel summarises its loading state in a pilot light anchored at the bottom left: a coloured dot —grey on standby, blue while loading, green when ready and red if it fails—. The label with the detail appears when you hover over it. It covers the image WASM codecs (libwebp, libavif, MozJPEG, OxiPNG), the FFmpeg.wasm engine (downloaded the first time a video or audio is processed and then cached), the Data libraries, pdf-lib and pdf.js in PDF, and the AI models and OCR when they are used.

Size estimation

In Image, while you move the controls, the reference row estimates how much the output will weigh, without waiting to convert. It can be disabled in Settings → Performance if the machine is struggling.

Very large files and memory

Before converting a video or audio that might exhaust the tab's memory (estimated according to size and device memory) a confirmation appears with the option to continue, or to trim the clip or reduce the resolution before retrying. If a conversion fails for lack of memory, a warning is shown with those same suggestions. The warning threshold is chosen in Settings → Performance (automatic based on the machine, 1, 2 or 4 GB, or do not warn), and it also applies to large PDFs (see the PDF tab).

On mobile

Below 700 px wide, the Input and Output columns become two pages that are switched by sliding or with the header selector. After importing files, Output is shown, which is where the work continues. A long press selects rows and the actions are in the ⋮ button.

Keyboard shortcuts

The shortcuts do not act while you are typing in a text field. With the viewer open, the keys belong to the viewer (see its shortcuts in the Advanced tab). The PDF tab has no number key: it is chosen with the mouse.

Accessibility

Batch renaming

Switch to the Rename tab (at the top of the right column) to modify the output names in bulk. Renaming works the same for any type of file (image, video, audio, data or PDF):

Duplicate names are flagged in the right-hand list with an amber warning as soon as two already converted files would produce the same output name (comparison ignoring case and leading/trailing spaces; including the mask preview for the selected ones). When exporting to ZIP, ZIP with viewer, “Download all” or share, duplicates are also warned about before continuing.

Replace (find and substitute)

The Replace block lets you find a pattern within the base name (after applying the mask) and substitute it with another text. It is applied to all the files.

Case (uppercase/lowercase transformation)

The Case selector applies a final transformation to the base name (it does not affect the extension). Available options:

Image conversion flow

Supported input formats

You can load image files in the following formats: JPG PNG GIF WebP BMP TIFF HEIC HEIF AVIF SVG ICO and camera RAW. HEIC/HEIF files are decoded with heic-to (libheif) and TIFF with UTIF.js (for a multi-page TIFF the first one is used) before going to the selected encoder. SVGs are rasterised to the requested size.

Camera RAW (DNG CR2 CR3 NEF NRW ARW ORF RW2 RAF PEF SRW and others LibRaw knows): they are developed on load with LibRaw (LibRaw-Wasm, ~1.5 MB downloaded with the first RAW) using the camera white balance, in 8-bit sRGB and with the camera orientation applied. After that they are handled like any other image. Developing a 24 MP RAW takes a few seconds; the RAWs of one load are developed one at a time. A RAW that LibRaw cannot open does not enter the queue and a warning is shown. LibRaw uses threads, so it needs the page to be isolated (COOP/COEP), like FFmpeg.

Scale and dimensions

The Scale slider adjusts the size as a percentage of the original. Click the Scale label to open the advanced modal with the following options:

The three single-factor modes use a single field (percentage, width or height) and deduce the other side from the original ratio, so they never distort, but they also do not let you set width and height at the same time:

In those three the active field priority applies: the last field you edit becomes the active rule and the inactive ones are shown struck through.

The two fit modes use width and height at the same time to reach an exact dimension without distorting:

In the fit modes the percentage does not come into play and its slider is disabled. If you only fill in one of the two fields, both behave as Force. The width and height always refer to the final image: with the image rotated 90° or 270°, the crop and the bars are calculated on the already rotated result.

Interpolation

The Interpolation drop-down in the scale modal decides how the new pixels are calculated when resizing:

Note: when enlarging, Nearest neighbour produces the classic square-pixel effect. If what you want is to enlarge a photograph without it looking blurry, the right tool is not interpolation but the Upscale described below.

Upscale (enlargement)

The Upscale checkbox enlarges the image before fitting it into the target dimensions, with a 2x or 4x factor. It only acts when the target is larger than the source, and on the already cropped area. Two engines:

The modal warns of the expected cost according to engine and factor. During conversion the file's progress bar reflects the phases (download, initialisation and inference) and Cancel aborts instantly.

Remove background

The Background cell opens the modal to remove the background of each image with a segmentation neural network (onnxruntime-web) that runs on your machine: it leaves the subject with transparency. Two engines:

Edge contracts (to remove the background halo) or expands the mask, and Smoothing blurs the cut; both in image pixels. Fill places the subject over a colour instead of transparency (JPG, which does not support transparency, comes out with a white background if you do not choose a colour). Crop to subject fits the frame to the subject before scaling. To keep the transparency, convert to PNG, WebP, AVIF or TIFF.

The network is applied after the edits to each image (erasing, straightening, cropping) and before scaling. Only the first conversion of each image runs it: changing the edge, the fill or the format reuses the mask. The models are cached and are deleted from Settings.

Max size

The Max size cell sets a size ceiling per image (in KB, MB or % of the original). When converting, the highest quality that fits is sought, without going above the chosen one or below 40; if that is not enough and it is allowed (by default), the dimensions are reduced just enough. Lossless PNG and WebP can only reduce dimensions. The output row states the quality it ended up with, or warns in amber if it did not fit.

Image adjustments

The Adjustments cell opens a modal with a selector, nine sliders and a preview of the reference image, already edited and resized, reduced to the size of the modal, and below it its histogram (red, green and blue, with the luminance as a line):

They are applied to all the images when converting, after the edits to each image and the resizing, and they do not touch the letterbox bars. A double click on a slider returns it to its neutral value; Reset returns them all.

Compose images

The + button next to Convert puts the selected images together into one, in queue order, and adds it as a new row. The Compose (+) cell sets the Type (grid, contact sheet with the name or number under each cell, or sprite sheet with cells the size of the largest image), the columns (0: automatic), the cell and its fit, the spacing and the background. Each image comes in with its edits and the colour adjustments, but the cell sets the size; the output uses the tab's format and quality.

Optimize SVG

With the Optimize SVG checkbox, the SVGs in the queue come out as SVG optimized with SVGO instead of being rasterized; the rest follow the chosen format. Comments, metadata and editor leftovers are removed and numbers and paths are shortened, without touching the ids, the viewBox or the titles. Crops, rotations, scale, adjustments, background and max size are not applied to those SVGs.

Processing order

Each image goes through the stages in this order: decoding (HEIC, TIFF, SVG…) → areas erased in the viewer → straightening → viewer crop → remove background (and crop to subject) → upscale, if enlarging → scale and px mode (centred crop or letterbox), with the rotation and flip → colour and sharpness adjustments → encoding in the chosen format → max size, if active (repeats the encoding with another quality or size) → output metadata.

Individual and batch editing

Each image can be edited in the viewer (the eye icon in its row): rotate, flip, crop with a fixed or free ratio, straighten at a free angle and erase areas filling them with colour. The edits are saved in the file and are applied when converting; the details of each tool and its shortcuts are in the Advanced tab. For several images at once, the batch bar under “Imported” rotates, flips and edits the metadata of all the selected ones (see General).

After converting, the output viewer lets you compare with the original with a sliding divider and calculate the SSIM (see Advanced).

ICO / Favicon

The ICO / Favicon format generates a .ico with the sizes 16, 32, 48, 64, 128 and 256 px, all inside the same file. With the Favicon pack (.zip) checkbox enabled, the output is a web-ready ZIP with favicon.ico, apple-touch-icon.png, icon-192.png, icon-512.png and a site.webmanifest. It is best to start from a square image of at least 512 px.

TIFF

The output TIFF is always lossless. Controls:

Browsers (except Safari) do not show TIFF: TIFF outputs have no preview or clipboard copy, but they download normally.

JPEG XL

JPEG XL weighs considerably less than JPG at the same quality and supports transparency and a lossless mode. It is encoded by libjxl (@jsquash/jxl, ~1.4 MB downloaded when you choose the format). Controls: Quality (cjxl scale: 90 is visually lossless), Effort (1–9; 7 by default), Lossless and Progressive.

Few browsers display JPEG XL (Safari does). For the thumbnail, the preview, the comparison and Copy to clipboard, the output is decoded again with the libjxl decoder and shown as PNG: what you see is what was encoded. The download, the ZIP and Share deliver the .jxl. No metadata is written to the JPEG XL.

Per-format controls

Each format shows its own advanced controls panel when selected. The exhaustive detail of each parameter is in the Formats tab. Quick summary:

Image presets

Optimised

Quality/size balance intended for general web use. Recommended starting point for most images.

Max Quality

Prioritises visual fidelity over file size. Suitable for images that are going to be viewed at high resolution or that require minimal degradation.

Min Size

Maximises size reduction with aggressive compression. Ideal for thumbnails, background images or contexts with limited bandwidth where size is critical.

Lossless

Lossless encoding: reproduces the original pixels exactly. In WEBP and PNG it guarantees perfect quality; in AVIF and JPG it gets as close as possible with their encoders.

— Custom —

It activates automatically when any control is modified manually. Selecting a preset again restores its default values for the active format.

Video conversion flow

Trim

In a video's viewer, under the player, a bar appears with two handles to set the start and the end, and two time fields in mm:ss.ms format. The playback line marks where you are and the label shows the duration of the segment. The reset button removes the trim and returns to the full clip. The conversion generates only the chosen segment (also in GIF and animated WebP). For several videos at once, the batch bar accepts the trim as a percentage of each one's duration (see General).

Video filters

The Filters cell opens a modal with filters that are applied to all the videos when converting, also in GIF and animated WebP. The preview only shows the colour, approximately. A double click on a slider returns it to its neutral value; Reset returns them all.

With Speed or Reverse the audio is re-encoded even when set to Keep (at 320k). When joining videos they apply to the whole, after concatenating.

Extracting audio from a video

With a video selected, switch to the Audio tab and convert: only its audio track comes out, in the chosen audio format. The output row is presented as audio.

Supported input formats

You can load video files in the following formats: MP4 WebM MOV MKV AVI OGV. In general FFmpeg.wasm can demultiplex most common containers; the ones listed are those explicitly filtered from the selector and recognised when dragging.

Global video controls

Per-format controls

Each format shows its own advanced controls panel when selected. The exhaustive detail of each parameter is in the Formats tab. Quick summary:

Video presets

Optimised

Quality/size balance intended for general web use. It keeps the original resolution and FPS with medium-high quality. Recommended starting point for most videos.

Max Quality

Prioritises visual fidelity over file size. It keeps the original resolution and FPS, raises the encoder quality to the maximum (slower encoder, larger files) and keeps the original audio without re-encoding (-c:a copy). Suitable for masters, archiving or playback on a large screen.

Min Size

Maximises size reduction with aggressive compression. Reduces to 720p and 30 FPS to minimise size. Ideal for quick previewing, sending by messaging or contexts with limited bandwidth.

No Audio (Social)

Configuration optimised for social media: it removes the audio, reduces to 720p and 30 FPS, and applies balanced compression. Suitable for clips intended for Instagram, TikTok, X and the like, where the audio is replaced or plays muted.

Lossless (animated WebP only)

Available through the Lossless checkbox in animated WebP: lossless encoding that reproduces the pixels exactly. It generates much larger files than lossy mode. MP4, MKV, WebM (VP8) and GIF do not offer a dedicated lossless mode.

— Custom —

It activates automatically when any control is modified manually. Selecting a preset again restores its default values for the active format.

Audio conversion flow

Supported input formats

You can load audio files in the following formats: MP3 WAV AIFF AAC M4A OGG Opus FLAC. Extracting audio from video files loaded in the queue is also accepted by selecting the Audio tab before converting: only the audio track comes out, in the chosen format.

AIFF is lossless big-endian PCM, the native audio of macOS, DAWs and hardware samplers. It is written at 16 or 24 bits and, unlike WAV, no browser plays it: the preview of the result will not sound; the downloaded file is correct.

Global audio controls

Audio adjustments

The Adjustments cell opens a modal with filters that are applied to all the audios when converting, before normalisation, and also to the audio of videos when it is re-encoded (with “Keep” or “Remove” there is no audio to adjust):

Reset returns them all to their neutral value.

Trim

When you move the cursor over an audio file in the left column a playback bar appears with two handles to set the start and the end of the trim; the same in the viewer (eye icon). The conversion will generate only the selected fragment. The time fields accept the mm:ss.ms format; the reset button removes the trim and returns to the full clip.

Processing order

Trim → high-pass → low-pass → gain → fades → normalisation (loudnorm, or the gain measured with ebur128 in the peak modes) → output sample rate and channels → encoding in the chosen format. The audio output always discards the image: neither the video nor the embedded artwork goes into the file.

Audio max size

The Max size cell sets a cap per file (KB, MB or % of the original). From the duration (the trimmed one, if any) the bitrate that fits is calculated, never above the one the format already has; MP3 switches to CBR and Vorbis to average bitrate. If the file is still too big, it is redone with a lower one; if not even the codec minimum fits, a warning is shown. The output row shows the final bitrate. It does not apply to FLAC, WAV, Original or Container only.

Audio presets

Optimised

Quality/size balance intended for general use. Recommended starting point for most files. It keeps the current format and applies intermediate values (e.g. MP3 VBR V4, AAC 128 kbps, Opus 96 kbps, OGG q5, FLAC level 5, WAV 16-bit).

Max Quality

Prioritises fidelity over size. It keeps the current format and raises the parameters to the maximum reasonable (MP3 VBR V0 ≈ 245 kbps, AAC 256 kbps, Opus 192 kbps, OGG q8, FLAC compression 12, WAV 24-bit).

Min Size

Maximises size reduction with aggressive compression. If the current format is MP3, AAC or OGG, it keeps the format but lowers the bitrate; in any other lossy format it keeps the choice, and from lossless formats (FLAC/WAV) it automatically switches to Opus 48 kbps for its superior efficiency at low bitrates.

Lossless

Lossless encoding. If the current format is not already FLAC or WAV, it automatically switches to FLAC (compression 8). It reproduces the input samples losslessly, at the cost of files significantly larger than any lossy format.

Roland SP-404 MK2

Configuration for the Roland SP-404 MK2 sampler: it forces WAV 48 kHz, 16-bit PCM output and keeps the original channels. Hardware limit: 16 minutes per sample (not enforced in encoding; it remains as a warning).

Roland TR-8S

Configuration for the Roland TR-8S drum machine: it forces WAV 44.1 kHz, 16-bit PCM, mono output. Hardware limit: 600 ms per sample and 256 MB in total (not enforced in encoding; it remains as a warning).

Polyend Play

Configuration for the Polyend Play groovebox: it forces WAV 44.1 kHz, 16-bit PCM, mono output. Hardware limit: 32 MB per sample (not enforced in encoding; it remains as a warning).

— Custom —

It activates automatically when any control is modified manually. Selecting a preset again restores its default values for the active format.

Data transformation flow

Operation selector

The operations are grouped by intent: Text (HTML↔Markdown), Documents (DOCX, EPUB and image OCR), Structured (JSON, CSV, YAML and spreadsheets) and Code (Beautify and Minify).

By default the selector shows only the applicable operations: those that have a file in the queue they can read. The last option in the dropdown, Show all, shows the full catalogue (and Show only applicable returns to the filter). If the queue has nothing any operation can read, all of them are shown. The chosen operation decides which input files can be selected: the rest are dimmed.

Supported input formats

You can load text and data files in the following formats, which are accepted depending on the active operation:

Each operation produces one output file per input file, with the target extension (for example report.docx → report.html).

Available operations

HTML → Markdown

Converts HTML documents to Markdown using Turndown (v7.2.4) + GFM plugin. The available controls are:

Markdown → HTML

Converts Markdown to HTML using Marked (v12.0.2). The available controls are:

JSON → CSV

Converts JSON to CSV using PapaParse (v5.7.0). The available controls are:

CSV → JSON

Converts CSV to JSON using PapaParse (v5.7.0). The available controls are:

JSON → YAML

Converts JSON to YAML using js-yaml (v4.1.0). The available controls are:

YAML → JSON

Converts YAML to JSON using js-yaml (v4.1.0). The available controls are:

Spreadsheet → CSV

Exports a sheet from an XLSX, XLS or ODS workbook to CSV using SheetJS (v0.20.3). The library (about 950 KB) is only downloaded when you choose a spreadsheet operation. The available controls are:

Spreadsheet → JSON

Exports one sheet, or all of them, to JSON with SheetJS. The available controls are:

CSV/JSON → Spreadsheet

Creates an XLSX or ODS workbook per file with SheetJS; the sheet is named after the file. A JSON that is an array gives one sheet (nested objects are flattened with dotted keys, as in JSON → CSV); one shaped like { "sheet": [rows], … }, the output of All sheets, gives one sheet per key. The available controls are:

DOCX → HTML

Converts Word documents to HTML using Mammoth.js (v1.13.0). The available controls are:

DOCX → Markdown

Converts Word documents to Markdown using Mammoth.js. The available controls are:

DOCX → Text

Extracts the plain text from a Word document using Mammoth.js. No additional controls: it returns the document's plain text.

EPUB → HTML, Markdown and Text

One file per book with the chapters in reading order, separated by a rule (--- in Markdown). Links to another chapter become anchors of the joined document, so footnotes keep working. An EPUB with DRM is not read: the row warns and the rest of the batch goes on. The available controls are:

Markdown / HTML → EPUB

Builds one EPUB 3 book per file, with a chapter and a contents entry for each level 1 heading (or level 2 too, with Chapters: By H1 and H2). Title and author come from the front matter (title, author) or the HTML <title>; otherwise, from the file name. The language is the interface one. Scripts, videos and audios are removed, and images are removed keeping their alt text (the .md arrives without its local images). Old HTML (<center>, <font>, align, width…) becomes CSS, forms are removed and task checkboxes become ☑ / ☐, so the book passes epubcheck. It carries both EPUB 3 and EPUB 2 contents, so it also works with Send to Kindle.

Image → Text (OCR)

Recognises the text of each selected image with Tesseract (tesseract.js 7.0.0) and returns one .txt per image, read with its viewer edits (crop, rotation). It is the only Data operation that reads images. The available controls are:

The engine (up to about 9 MB, depending on the languages) is not downloaded until you convert for the first time; it stays stored, works offline and can be deleted from Settings. For a scanned PDF, use Searchable PDF (OCR) in the PDF tab.

Beautify

Formats HTML, CSS, JS and JSON code using js-beautify (v1.15.1). The available controls are:

The operation automatically detects the type of code from the file extension and applies the corresponding rules.

Minify

Minifies HTML, CSS, JS and JSON code using Terser (v5.51.2) and CSSO (v5.0.5). The available controls are:

The output file keeps its original extension, adding .min before the extension (e.g. script.js → script.min.js).

Library loading

Each operation loads its JavaScript libraries on demand, served from the site itself (with a fallback to a CDN verified by SRI if the local file failed). The pilot in the right panel shows Loading libraries… during the download and Ready when they are available. The libraries are cached in the browser for later use.

Operation presets

Each operation offers one or more presets with predefined configurations. The preset varies by operation: for example, in HTML→MD you have Standard (GFM on, ATX), GFM strict and Compact; in JSON→YAML you have Standard, No line wrap (no wrap limit) and Sorted keys (keys sorted). The — Custom — preset switches on automatically when you change any control by hand.

PDF workflow

The engine is pdf-lib (creating and modifying documents) together with pdf.js (drawing pages and reading their text), both served from the site itself and loaded the first time they are used. Operations that do not need to draw run in a worker, in the background, so the interface does not freeze on large documents.

Operation selector

The operations are grouped into Create PDF (Images → PDF, Text → PDF and Text and images → PDF) and Operate on PDF (the rest). As in Data, the selector shows only the operations applicable to what is in the queue by default; Show all, at the end of the dropdown, shows the full catalogue, and Show only applicable returns to the filter.

The Pages field

Several operations act on a range of pages. The field accepts:

Pages are counted from 1 and over the already edited document (if you deleted or moved pages in the editor, the numbering is the new one). The order you type is the order of the result: 5, 1, 3 puts those pages out in that order. A repeated page is used only the first time. A backwards range (6-2), a page that does not exist or text that cannot be understood give an error shown under the controls, checked against the first selected PDF; with a batch, a range that goes out of bounds in one document does not stop the rest.

Create PDF

Images → PDF

Assembles a PDF with the already converted images from the right-hand column, in the order of the list (drag the rows to change it). It is the only operation that does not read the input selection: it works on the output, so the images arrive with their edits, adjustments and metadata already applied. In simple mode there is no need to convert them first: the images in the list are assembled as they were loaded (or their output, if already converted); only those with unapplied edits go through Image first. Controls:

The note under the controls says how many images are ready and estimates the weight of the PDF. Variants of Type: Fit to image (page the size of each image), A4 and Letter (with a 1 cm margin), A4 full bleed (no margin) and 10×15 cm photo.

If the queue has unconverted images, the note offers a guided flow: Next takes you to the Image tab with all the images selected so you can adjust the conversion; another Next converts them and returns to PDF; Convert assembles the PDF. The link Use current settings and assemble now does the three steps in a row with the settings Image already has.

Text → PDF

One PDF per selected text file (.txt .md .markdown .html .htm), with selectable and searchable text, written with the Exo 2 font embedded (only with the characters used). Markdown and HTML become plain text: no bold, drawn tables or images (for that there is Text and images → PDF). Controls: Page, Orientation and Margin (as above; with Fit to image, A4 is used), Font (8 to 18 pt) and PDF/A-2b. Variants: A4, Letter and A4, large type.

Text and images → PDF

Like Text → PDF, but laid out: it keeps headings, bold, italics, lists, quotes, code blocks and images, with selectable text. One PDF per file. The images are taken from the file itself if embedded (data:) or from the queue by name (if the HTML or Markdown references photo.jpg and there is a photo.jpg loaded, it is used); those from the internet are not downloaded. Same controls and variants as Text → PDF.

It also accepts DOCX, but not directly: a DOCX is first turned into HTML in the Data tab (with its images embedded) and what comes out is laid out. If you select DOCX without converting, the note offers a guided flow: Next takes you to Data with DOCX → HTML chosen and the DOCX files selected; another Next converts them and returns to PDF; Convert lays out one PDF per document. Use current settings and lay out now does it all in a row. The converted text is stored separately, so you can lay it out again with other settings without repeating Data.

PDF/A-2b

The PDF/A-2b checkbox saves the PDF in the long-term archival format required by administrations and archives: it adds XMP metadata, the sRGB colour profile and an identifier. It is only available in the PDFs the app creates (the three Create PDF operations), not when modifying an existing PDF.

Operate on PDF

Merge

Merges the selected PDFs into one (merged.pdf), in the order of the input list: drag the rows to change it. It needs at least two. Each document goes in with its edits. The note estimates the weight of the result.

If in addition to PDFs there are unconverted images in the queue, the note offers the guided flow Merge with images (scans or photos that are joined with documents): 1/3 takes you to Image and converts the images; 2/3 assembles them into a PDF with Images → PDF; 3/3 returns to Merge with that PDF at the end of the others, and you can reorder the list before clicking Convert. The PDFs you had selected at the start are merged or, if there were none, all the loaded ones.

Merge pages

Like Merge, but choosing which pages go in from each document. In Pages, separate with | one range per document, in the order of the list: 1-3 | 5 | all takes pages 1 to 3 from the first, page 5 from the second and the whole third one. A range without | applies to all.

Insert a PDF into another

It needs exactly two selected PDFs: the first in the list is the base document and the second, the one inserted (drag the rows to swap them). Pages chooses which pages of the second go in. The Position variant decides where: At the end, At the beginning or After a page; with the latter After page appears, the page of the base document after which they are inserted (0 puts them before everything). The result is named after the two documents joined by + (contract+annex.pdf).

Split / extract

Puts out pages from each selected PDF. The Result variant decides how:

With the field empty and One PDF with those pages you get the document as it was left in the editor: it is the way to download a PDF to which you have only rotated, deleted or reordered pages.

PDF → images

One image per page in the Pages field (empty: all), from the already edited document, drawn with pdf.js. They enter the queue as converted images (name_p01.jpg…), with the Generated label. Controls: Format (JPG is light and works well with photos and scans; PNG is lossless, better for text and crisp drawings, but heavier; WebP sits between the two) and Resolution (72–96 dpi for screen, 150 for comfortable reading, 300 for printing; an A4 at 150 dpi is 1240 × 1754 pixels). Variants: JPG, 150 dpi, PNG, 150 dpi and JPG, 300 dpi (print). If a page is enormous, it is drawn at a lower resolution than requested and a warning is shown.

PDF → Text

One .txt per PDF with the text of the pages in the Pages field. It only reads selectable text: a scanned PDF has none, and then a warning is shown and nothing is generated (run it through Searchable PDF (OCR) first). With several columns or tables, the order may not be the reading order. Variants: Continuous paragraphs (joins the lines of each paragraph) and Lines as on the page. The Mark pages checkbox puts === Page N === before the text of each page, with its number in the PDF.

PDF → DOCX

Approximate conversion: one .docx per PDF with the text of the pages in the Pages field, rebuilt into paragraphs and headings (by font size), with bold and italics. Images, tables and layout are not carried over. A scanned PDF has no text: run it through OCR first. Variants: Continuous text and Keep page breaks (a Word page break where each PDF page ended).

Compress

Recompresses the photos and scans inside the PDF to JPEG; the text and vector drawings stay the same. Variants of Level: Light (85 %, 200 dpi), Balanced (75 %, 150 dpi) and Strong (60 %, 110 dpi). An image is only reduced in resolution if it clearly exceeds the target, and is only replaced if the result weighs less; very small ones (icons, bullets) and whatever cannot be handled are left intact. The final notice says how much it went down and how many images were recompressed. If the document does not weigh less, no file is generated. Output: name_compressed.pdf.

Searchable PDF (OCR)

Each scanned page in the Pages field is drawn, goes through OCR (Tesseract) and gets an invisible text layer on top: the PDF looks and weighs almost the same, but it can be searched, selected and copied. Variants of Language: Spanish + English, Spanish or English. Controls: Reading (300 dpi recognises small print better; 200 dpi is faster and enough for normal text; it does not change the appearance or the weight of the PDF) and Scanned only (leaves pages that already have selectable text as they are, to avoid duplicating the layer). The engine (up to about 9 MB, depending on the languages) is downloaded the first time and stays stored; each page takes a few seconds. Output: name_ocr.pdf.

Equalise size

Each page is fitted, without distorting it and centred, onto a sheet of the chosen size: useful for documents with pages of mixed sizes. Page, Orientation and Margin controls as in Images → PDF. Variants: A4, Letter and A4 with margin. Links and form fields are lost.

Number pages

Writes the page number on each page in the Pages field (empty: all), with the numbering of the edited document and upright even if the page is rotated. Variants of Format: 1, Page 1 of 5 and 1 / 5. Controls: Position (bottom or top; centre, right or left, as the page is seen) and Font (8 to 18 pt, in Exo 2). Output: name_numbered.pdf.

Metadata

Title, author, subject and keywords of each selected PDF. The ones from the first appear in grey. Variants of Mode: Change what is written (only the fields you fill in are touched) and Replace all (empty clears) (empty fields are cleared). The document XMP metadata is removed, so it does not contradict the new values.

Encrypt with password

Saves the PDF encrypted with AES-256. Open password is needed to open it; owner password is the one that allows removing the restrictions. Permissions choose what can be done without the owner password: print, copy text and images, and modify. Removing a permission does not make the content unreadable: it prevents normal use, not malicious use. The same block appears in Images → PDF and Text → PDF, where it is optional: with both fields empty the PDF is created unencrypted. Output: name_encrypted.pdf. The engine (2.2 MB) is downloaded the first time something is encrypted or a protected PDF is opened.

A password-protected PDF asks for its password when it is loaded and is decrypted in memory: the password is not stored and the original file is not touched. If the dialog is cancelled, the file stays in the queue marked as password-protected and out of the operations.

Optimise for web (linearize)

Reorders the PDF so the first page can be painted with the first bytes (fast web view): what a viewer using HTTP range requests takes advantage of. The content and the pages do not change. It is done by qpdf, the same engine as encryption.

It can increase the weight: qpdf rewrites the streams and in text or vector PDFs they may end up worse compressed (measured: +86 % on a 20-page text PDF), while image PDFs grow only ~0.1 % (the hint tables). The notice reports the before and after, and warns when it grows more than 10 %. Output: name_web.pdf.

Page editor

The eye icon of a PDF in the input opens a grid with its pages in thumbnail (they are drawn as they come on screen, so a document of hundreds of pages opens quickly). From the top bar:

The editing is non-destructive: the file is not rewritten; what pages remain, in what order, with what rotation and what crop is stored, and each operation starts from the resulting document. Close and save keeps the changes; Esc or Close and discard throws them away. The row indicates how many pages the edited document has. To download the edited PDF as it is, use Split / extract with the Pages field empty.

Problematic PDFs and large documents

These PDFs are marked in their row with the reason and are not selectable. Before working with very large documents (from about 150 MB, or 400 MB on machines with 8 GB of memory or more; with Merge, Merge pages and Insert the sum of all of them counts), confirmation is asked: the browser has to load them entirely into memory and the tab could close. If memory runs out halfway, the notice says so; close other tabs or split the document.

With a batch, a PDF that fails is warned about and does not stop the others.

Recipes

A recipe is a named sequence of up to 12 steps, plus a finishing action. Each step is a tab (Image, Video, Audio, Data, PDF or Rename) with its settings. When you apply it, the app does exactly what you would do by hand: it puts the step's settings in its tab, goes to it and clicks Convert (or Rename), step after step. You see it go through the tabs and each file shows its usual progress.

What a step stores

When you click Add step (or Update step), the recipe copies all the controls of that tab as they are at that moment: format or operation, preset or variant, the format's controls and those of its modals (Scale, Settings, Background, Max size, Upscale, Filters, Audio adjustments…). In Image it also stores which field drives the scale (percentage, width or height). What it does not store is what belongs to each file: crops, rotations, straightenings, erased areas, time trims, PDF page edits or hand-edited metadata. Those stay with each file and the recipe respects them when converting.

When a step is applied, whatever it does not carry (the example recipes only carry what changes) takes the factory value, not the one that was on screen: a recipe gives the same result wherever you use it.

Composing and editing

From the list, each recipe has Apply (disabled if it has no steps, if a recipe is already running or if there are no selected files; the tooltip says why), Duplicate, Edit (also by clicking its name) and Delete. Its steps are summarised under the name.

Warnings when composing

The editor marks the steps that will probably not do what you expect (they do not prevent saving or applying):

In Data and PDF there can be several steps, because they usually touch different files (different operations).

What files each step receives
During and after
Try with 1 file

From the editor, apply the recipe as it is (even if it is not saved) only to the first selected file and without a finishing action. The window closes so you can see the result; the recipe being edited is parked and you come back to it when you open My recipes.

Apply from the context menu

Right-click in the input list: under Apply recipe your saved recipes appear (up to six; with more, More recipes… opens the window). They are applied to the selection like the Apply button. They are disabled while a conversion or a recipe is running.

Example recipes

Grouped into Destinations, Image, PDF, Audio and video, Data and Mixed types. The destinations fit format, size, quality and weight to what a platform asks for; the maximum weight is per file, not for the batch:

They are applied as they are or copied to your recipes (with a free name, e.g. “Lightweight web (2)”) to change them.

Importing and exporting recipes

Export downloads your recipes as a JSON; Import adds them to the ones you have. Those that already exist (same identifier) are not duplicated, and invalid entries are discarded and counted in the notice. A file from a newer version of the app is rejected. Recipes also travel in the export of the complete configuration.

Guided flows

Some tasks need to go through two tabs, for example converting images in Image before assembling them into a PDF. Instead of sending you to a tab and having you come back, a guided flow takes you: the Convert button is called Next in the intermediate steps, shows an n/N indicator and its tooltip says what it will do. Everything can be adjusted at each step before continuing. Cancelling a conversion leaves you at the same step; choosing another operation abandons the flow. The state lives only in memory: on reload there is no flow.

Available flows (detailed in the PDF tab): Images → PDF with unconverted images, Merge with images and DOCX → PDF. Each offers a shortcut in its note to do it all in a row with the current settings.

With Step-by-step guided flows disabled in Settings, when a flow starts all its steps run in sequence. The After converting → Download automatically preference only acts on the last step of the flow.

My presets

My presets (the header icon) saves under a name a complete snapshot of the settings of all the tabs at once (Image, Video, Audio, Data, PDF and Rename). When you apply it, the six tabs recover those values in one go. Differences from recipes: a preset does not run anything, it only changes the controls; a recipe chains steps and converts.

Do not confuse it with the tab presets (Optimised, Max Quality…), which only change the controls of their tab.

Image viewer and editor

The eye icon of an image in the input opens the full-screen viewer, which is also the editor. The edits are stored in the file (they do not rewrite it) and are applied when converting, before scaling.

In video and audio, the viewer is the player with the trim bar (see the Video and Audio tabs); in PDF, the page editor (see the PDF tab).

Before/after comparator

In the viewer of a converted image, Compare with the original (C) overlays the two versions with a divider you drag (or move with ← →). On the left, the original with the same edits and the same resizing but unencoded; on the right, the converted one. So what you see is only the effect of the compression. Zooming and panning affects both layers at once; Fit and 1:1 change the zoom. The bar indicates the change in weight.

Compute SSIM measures the structural similarity between the two (on reduced copies, from 0 to 1) and rates it: indistinguishable (≥ 0.995), good (≥ 0.98), acceptable (≥ 0.95) or visible loss. It is useful for lowering the quality to just before it shows.

Settings

The gear icon in the header opens the global preferences. Only what you change from the default value is saved.

Remember between visits
Session

The session is saved in IndexedDB, on your machine, with the order of the list; generated files come back as generated. As soon as you load new files, the previous session stops counting.

History

The Conversion history modal (the clock icon in the header) lists the original file, operations, date, output files and downloads. Download exports it and Clear deletes it. With the history disabled, this session's conversions are shown, but they are lost when the page is closed.

Output
Interaction
Performance
Data in this browser

It shows how much each saved thing takes up and lets you delete it separately: saved session, history, user presets, recipes, tab settings, preferences, upscale models (AI), background removal models (AI) and the OCR engine and languages. The models and the engine will be downloaded again the next time they are used.

Reset everything deletes all of the above at once, removes the files from the list (your originals are not touched) and reloads the page.

Exporting and importing configuration

Export configuration downloads a JSON (transformer_config_YYYYMMDD.json) with the tab settings, the user presets, the recipes and the preferences; the history and the session are left out on purpose. It is useful for copying your configuration to another browser or machine. Import configuration reads that file and lets you choose which blocks to apply (checkboxes Tab settings, User presets, Recipes and Preferences). Note: unlike importing from My recipes or My presets, which add, here the imported presets and recipes replace the ones you have.

Image formats

WEBP — encoder: libwebp
AVIF — encoder: libavif
JPG — encoder: MozJPEG
PNG — encoder: OxiPNG (+ libimagequant)
ICO / Favicon — encoder: OxiPNG per size
TIFF — own encoder (lossless)
JPEG XL — encoder: libjxl

Video formats

Video formats are encoded with FFmpeg.wasm, which is downloaded the first time a video is processed and stays in the browser cache for later use. WebM (VP9), MP4 (AV1) and, with Accelerate with WebCodecs, MP4 and MKV (H.264) are encoded by the browser (WebCodecs); MP4 (HEVC) uses the hardware encoder when available and x265 in FFmpeg otherwise. FFmpeg still reads the input and packs the output.

MP4 (H.264) — encoder: x264
MP4 (HEVC) — encoder: WebCodecs or x265
MKV (H.264) — encoder: x264
WebM (VP9) — encoder: WebCodecs
MP4 (AV1) — encoder: WebCodecs
Animated AVIF — encoder: WebCodecs
WebM (VP8) — encoder: libvpx
Animated GIF — via FFmpeg
Animated WebP — via FFmpeg

Audio formats

All audio formats are encoded with FFmpeg.wasm using the same engine as for video. The global controls Sample rate, Channels and Normalise volume are applied before the specific encoder.

MP3 — encoder: LAME (libmp3lame)
AAC (M4A) — encoder: aac (native FFmpeg)
Opus — encoder: libopus
WebM (Opus) — encoder: libopus
OGG Vorbis — encoder: libvorbis
FLAC — encoder: flac
WAV — encoder: PCM