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.
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.
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.
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.
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.
.zip is loaded you are asked whether to extract it: OK adds its files in supported formats to the queue (from all its folders; the rest is ignored, with a summary) and Cancel adds it as a file, only renamable.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.
transformer_YYMMDD; it is changed in Settings → Output (it accepts %date%, %time% and %n%)._visor.html added: a standalone gallery (“Transformer viewer”) that, once the ZIP is unzipped, opens in any browser, offline, to view the images, videos, audios and data in the folder.Before exporting (ZIP, ZIP + Viewer, Download all or Share) you are warned if two files are going to come out with the same name.
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.
The trash can in the “Imported” bar deletes all the files, loaded and generated.
Always visible: Download, More actions (⋮) and Delete. The ⋮ menu contains the rest:
</> icon) — copies the image as data:image/…;base64,… text to paste into HTML or CSS, in the chosen format and with the download metadata. Above 100 KB it warns: it is a third larger than the file.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.
On touch screens there is no context menu: a long press selects, and the actions are in the ⋮ button of each row.
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.
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.
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:
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.
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.
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).
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.
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.
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):
%n% counter are revealed, and when you focus Replace, its wildcards (click a chip to insert it, e.g. img_%date%_%n%). If you leave it empty, the original name is kept.%name% (original name), %n% (numeric counter), %ext% (original extension), %date% (current date), %time% (current time), %width% (output width) and %height% (output height).%name% and has not been applied yet, the Rename tab is shown in italics.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.
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.
* or %any% — any number of characters (including none).? or %chr% — a single character of any kind.# or %num% — a digit (0-9).@ or %txt% — a letter (includes accents).%Nstart% (e.g. %3start%) at the start — the first N characters of the name.%Nend% (e.g. %3end%) at the end — the last N characters of the name.%N% inserts a simple counter (1, 2, 3…) based on the file's position in the list.%name%, %n%, etc.), then the replacement is run, and finally the Case transformation.The Case selector applies a final transformation to the base name (it does not affect the extension). Available options:
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.
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.
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.
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:
onnxruntime-web, by overlapping tiles. It does reconstruct texture and edges, but it downloads about 105 MB the first time (then cached) and needs WebGPU to be practical: without it, it falls back to a single-threaded CPU, in the order of tens of minutes per megapixel, and you are warned. Your images still do not leave the machine: the only thing that travels is the model download.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.
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.
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.
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.
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.
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.
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.
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).
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.
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 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.
Each format shows its own advanced controls panel when selected. The exhaustive detail of each parameter is in the Formats tab. Quick summary:
libwebp.libavif.MozJPEG.OxiPNG; lossless unless the colours are reduced.Quality/size balance intended for general web use. Recommended starting point for most images.
Prioritises visual fidelity over file size. Suitable for images that are going to be viewed at high resolution or that require minimal degradation.
Maximises size reduction with aggressive compression. Ideal for thumbnails, background images or contexts with limited bandwidth where size is critical.
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.
It activates automatically when any control is modified manually. Selecting a preset again restores its default values for the active format.
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).
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.
hqdn3d. It smooths the grain of low-light recordings and usually lowers the size; at high levels fine detail is lost.deshake). It is a basic stabiliser that makes conversion considerably slower; the edges left exposed are filled with the reflected image.setpts) and its audio (atempo, which keeps the pitch). The output duration and the fades are worked out on the new timing; in slow motion each frame lasts longer, no new ones are invented.reverse, areverse). FFmpeg holds the whole segment in memory before writing the first frame: if it does not fit (about 10 s at 720p and 30 fps), the conversion stops before starting and says how many seconds fit.lut3d. The strength (0–100) is baked into the entries when loading: 0 leaves the video unchanged and 100 applies the LUT as-is. It is validated on load (1D LUTs, out-of-range sizes and files over 6 MB are rejected) and the file is not stored in the browser. WebCodecs does not apply it, so its presence forces the FFmpeg path (or the intermediate copy for VP9/AV1) and the conversion is slower.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.
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.
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.
-c:a copy). It saves time and preserves quality, but it fails if the source codec is not compatible with the container (MP4 accepts AAC; MKV accepts AAC/Opus; WebM accepts Opus/Vorbis).Each format shows its own advanced controls panel when selected. The exhaustive detail of each parameter is in the Formats tab. Quick summary:
hvc1 tag, so Safari and QuickTime play it; Windows needs the system HEVC codec. A variable-frame-rate source loses its timing.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.
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.
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.
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.
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.
It activates automatically when any control is modified manually. Selecting a preset again restores its default values for the active format.
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.
loudnorm and limits the true peak to Peak; Peak applies a fixed gain so that the sample peak sits at Peak (dBFS), without touching the dynamics; True peak does the same with the inter-sample peak, the one that matters for MP3 and AAC. The peak modes analyse the audio first. Peak (dB) goes from −9 to 0 (−1.5 by default). The measured result appears in the converted file's Properties (Normalisation row).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.
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.
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.
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.
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).
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).
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 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.
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).
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).
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).
It activates automatically when any control is modified manually. Selecting a preset again restores its default values for the active format.
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.
You can load text and data files in the following formats, which are accepted depending on the active operation:
.html .htm .md .markdown.json .csv .tsv.yaml .yml.xlsx .xls .ods (processed with SheetJS).docx (processed with Mammoth.js).epub (EPUB 2 and 3 without DRM, read with JSZip).html .htm .css .js .mjs .jsonEach operation produces one output file per input file, with the target extension (for example report.docx → report.html).
Converts HTML documents to Markdown using Turndown (v7.2.4) + GFM plugin. The available controls are:
Converts Markdown to HTML using Marked (v12.0.2). The available controls are:
Converts JSON to CSV using PapaParse (v5.7.0). The available controls are:
dir.ciudad). Reversible when doing CSV → JSON.Converts CSV to JSON using PapaParse (v5.7.0). The available controls are:
Converts JSON to YAML using js-yaml (v4.1.0). The available controls are:
Converts YAML to JSON using js-yaml (v4.1.0). The available controls are:
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:
Exports one sheet, or all of them, to JSON with SheetJS. The available controls are:
{ "sheet name": rows } with all the sheets in the workbook.null.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:
Converts Word documents to HTML using Mammoth.js (v1.13.0). The available controls are:
Converts Word documents to Markdown using Mammoth.js. The available controls are:
Extracts the plain text from a Word document using Mammoth.js. No additional controls: it returns the document's plain 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:
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.
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.
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.
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).
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.
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.
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.
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.
Several operations act on a range of pages. The field accepts:
3.2-6 (also with an en dash).8- (from 8 to the end) and -3 (from the start to 3).1-5, 12, 20-.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.
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:
images.pdf), or One PDF per image, each with the name of its image.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.
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.
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.
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.
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.
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.
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).
Puts out pages from each selected PDF. The Result variant decides how:
name_p2-6.pdf).1-3, 4-8, 9- gives three files.name_p01.pdf, name_p02.pdf…); the Pages field is not used.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.
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.
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.
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).
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.
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.
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.
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.
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.
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.
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.
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.
%PDF header: probably another kind of file with the extension changed.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.
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.
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.
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.
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).
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.
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.
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.
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.
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 (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.
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).
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.
The gear icon in the header opens the global preferences. Only what you change from the default value is saved.
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.
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.
%date%, %time% and %n%; empty, transformer_YYMMDD.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.
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.
color_space=JCS_GRAYSCALE). Discards the colour information, producing smaller files.libimagequant (the engine of pngquant). It is the only lossy setting PNG has. In flat graphics, screenshots, logos and illustrations it saves between 40% and 70% with a visual difference that is hard to notice; in photographs with smooth gradients it can produce banding. No reduction keeps the full colour and the conversion is 100% lossless..ico with 16, 32, 48, 64, 128 and 256 px; each size is encoded as PNG with the PNG settings.favicon.ico, apple-touch-icon.png, icon-192.png, icon-512.png and site.webmanifest.UTIF.js; from a multi-page TIFF the first one is used.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.
ultrafast, superfast, fast, medium, slow). Slower presets produce smaller files at the same visual quality; faster ones are heavier but finish sooner. medium offers a good balance.-c:a copy; requires an AAC source).hvc1 tag, the one Safari and QuickTime play. On Windows the system HEVC codec is required; without it the file is valid but will not play..mkv): it accepts almost any codec and multiple tracks, and is common as a master file and in desktop players (VLC, mpv, Plex). Its playback in browsers and mobile devices is not reliable: for the web, MP4 or WebM.-c:a copy) it accepts source AAC and Opus.-c:a copy; requires an Opus or Vorbis source).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.
libfdk_aac, which is not included in this FFmpeg.wasm build..m4a extension (MP4 Audio). Native compatibility on iOS/macOS and most modern browsers..opus files inside OGG. Compatible with Chrome, Firefox and Edge, but not with Safari, which has never supported the OGG container. If you need Safari, use WebM (Opus). Hardware support is still patchy..opus in OGG does not work in Safari in any version. It is also the native container of MediaRecorder, so it fits with audio recorded from the browser..weba is generated, the conventional extension of audio-only WebM. It also stops TRANSFORMER itself from taking the file for a video if you load it into the queue again.pcm_s16le): CD standard. Enough for most uses.pcm_s24le): greater dynamic range, common in production and modern hardware (samplers, grooveboxes).pcm_f32le): practically unlimited dynamic range, common in editing workflows that apply chained processing.