domainless · convert
Formats & roadmap
We're building this in stages, starting where in-browser conversion is fastest and most reliable.
Live now
Images
Drop any file — if your browser can decode it as an image, it converts. Out to PNG, JPEG, WebP, GIF, BMP, TIFF, ICO, TGA, PPM or QOI (AVIF too, where your browser can encode it), with quality control, optional resizing and a GIF palette size. Reads PNG, JPEG, WebP, GIF, BMP, SVG, AVIF and ICO. Batch-convert many at once.
Live now
Audio
Drop any file, including video — MP4, MOV, MKV and WebM all have their audio track pulled straight out. Out to WAV (8, 16, 24-bit or 32-bit float), FLAC (lossless, roughly half the size of WAV), Opus (smallest, where your browser supports it), AIFF or AU, with optional mono downmixing and resampling.
Live now
PDF & docs
Turn every page of a PDF into a JPG, PNG or WebP image at your choice of resolution. Combine images into a single PDF (one per page), and turn text, Markdown or any readable document into a paginated PDF. Reads Word .docx, PowerPoint .pptx, OpenDocument .odt/.ods, .epub ebooks, .pdf and HTML — writes Markdown, plain text, Word, EPUB or HTML. The format is detected from the file itself, so the extension doesn't have to be right.
Live now
Data & sheets
Convert between CSV, TSV, JSON, NDJSON, XML, Excel .xlsx and OpenDocument .ods, and export to YAML, Markdown tables, HTML tables or SQL INSERT statements. Also flattens calendars (.ics), contacts (.vcf), GPS tracks (.gpx, .kml), .geojson and INI/TOML/.env config into the same table. Reads every sheet in a workbook, and decodes Excel date cells instead of leaving you serial numbers.
Live now
Archives
Bundle any set of files into a .zip, open an existing ZIP and pull individual files back out, or gzip and gunzip a single file — all using compression built into your browser.
Live now
Subtitles
Convert SubRip .srt to WebVTT .vtt and back, rewriting cue numbering and timestamps for the target format.
Live now
Metadata & privacy
See exactly what a photo reveals — GPS coordinates, camera model and serial, software, timestamps — then remove it. Removal is lossless: the metadata is cut out and the image data is copied across untouched, so no quality is lost. JPEG, PNG and WebP.
Live now
Text & encoding
Rescue text that arrived as � or é: read a file as Windows-1252, Shift_JIS, GB18030, Big5, EUC-KR, KOI8-R, UTF-16 and more, and write clean UTF-8 with the line endings you want. Plus Base64 and hex dumps, both directions.
Live now
Video
Drop any video your browser can play — MP4, MOV, MKV, WebM and more — and re-encode it to WebM (VP9 or VP8), MP4 (H.264) or an animated GIF, with quality, resolution and audio controls. Uses the encoders already built into your browser, so nothing is uploaded and no codec is downloaded.
01Notes on the image converter
Drop anything. There is no file-type filter: every
file you add gets a real decode attempt, and if it can't be read you
get a plain error saying so rather than the file silently vanishing
from the list.
PNG, WebP, GIF, TIFF, ICO, TGA and QOI keep transparency; JPEG, BMP
and PPM flatten transparent areas to white. Quality only applies to
the lossy formats (JPEG, WebP, AVIF). GIF builds its
own palette from your image with a median-cut algorithm — use
256 colours for the best result, or drop to 32 for a much smaller
file. QOI and TIFF are fully
lossless, so opaque pixels come back bit-for-bit identical. Animated
GIFs convert their first frame only. ICO output builds a standard
multi-resolution favicon (16×16, 32×32, 48×48),
stretching a non-square source to fit each square size rather than
cropping it — start from a square image for best results. AVIF
output only appears if your specific browser can actually encode it;
support is inconsistent, so we feature-detect rather than offer
something that would silently fail.
Why so many hand-written formats: browsers can only
encode PNG, JPEG and WebP. Ask a browser canvas for a GIF or
a TIFF and it quietly hands back a PNG instead. Every other format
here is written byte by byte in JavaScript on your device, which is
how they stay available without uploading anything.
Not supported, and why: HEIC/HEIF and RAW camera
formats (CR2, NEF, ARW, DNG…) aren't decodable by any browser
without a large external library, so we don't fake support for them.
SVG conversion only works one direction (SVG → raster) —
going the other way is image tracing/vectorization, a fundamentally
different (and lossy) problem, not format encoding.
02Notes on the audio converter
Video files work here. Your browser's audio decoder
reads the audio track out of MP4, MOV, MKV and WebM just as happily
as it reads an MP3, so those files convert like any other — a
straightforward way to get the soundtrack out of a video without
uploading it anywhere. Input support otherwise depends on your
browser's codecs (all major browsers handle MP3, AAC/M4A and WAV;
OGG and FLAC support varies).
WAV is written at 8, 16 or 24-bit PCM or 32-bit
float — 16-bit is the safe default, 24-bit and float are for
further editing, and 8-bit is small and deliberately lo-fi.
FLAC is fully lossless and typically lands around
half the size of the equivalent WAV; it's encoded here from scratch
in JavaScript using fixed predictors and Rice coding.
AIFF (big-endian PCM) and AU are
there for older Mac and Unix audio tooling. Opus is
the smallest option and uses your browser's own encoder, so it only
appears where that encoder exists.
No MP3 output, deliberately: no browser exposes an
MP3 encoder, and shipping one would mean downloading a large codec
library to your device. FLAC (lossless) and Opus (smaller than MP3 at
the same quality) both cover the ground MP3 usually gets used for.
MP3 files are perfectly fine as input.
03Notes on PDF & docs
Images → PDF embeds each image directly into a standard PDF
(one page per image, in the order you add them). Text, Markdown and
Word → PDF typesets with the standard PDF fonts (Helvetica and
Courier), so the result opens anywhere without embedding a font
file; headings, bullet and numbered lists, block quotes and fenced
code blocks are laid out, and pages break automatically.
What Word conversion does and doesn't do: a
.docx is a ZIP of XML, so we read the document text,
heading levels, lists and tables straight out of it. Inline
formatting (bold, italics, colour), images, headers/footers and
footnotes are not carried across — this converts the writing,
not the layout. Older
.doc files are a different,
binary format and aren't supported. PDF → Word isn't offered
either: that's document reconstruction, a much harder problem than
format conversion, and we'd rather not pretend otherwise.
Looking to write or edit a document instead? The
Documents editor is a separate tool.
04Notes on data & sheets
The input format is detected from the file, so you only pick an
output. Everything is normalised to a list of flat records: the
first row of a CSV/TSV becomes the column names, JSON expects an
array of objects (a single object, or an object of equal-length
arrays, also works), and XML uses its repeated element as the row.
Nested values are kept as JSON text rather than silently dropped.
Excel specifics: reading an .xlsx
converts every worksheet (one output file per sheet), resolves
shared strings, uses the cached result of formula cells, and
converts date-formatted cells into readable dates instead of the
raw serial numbers Excel stores. Writing an .xlsx
keeps digit strings such as 007 or a 20-digit ID as
text, so they don't get silently rounded into numbers. Legacy
.xls is a different binary format and isn't supported.
05Notes on archives
ZIP support uses the compression built into modern browsers, so
there's no library to download and nothing to upload. Each file is
deflate-compressed, or stored uncompressed when that would actually
be smaller. Reading works on stored and deflated entries, including
UTF-8 file names; entries are only decompressed when you download
them, so listing a large archive stays cheap. Encrypted
(password-protected) ZIPs and ZIP64 archives over 4 GB aren't
supported, and neither are .rar or .7z,
which are separate proprietary formats.
06Notes on subtitles
Direction is detected from the file itself — a
WEBVTT signature wins over the extension. Going to SRT,
cues are renumbered from 1, timestamps switch from
. to
,, and VTT-only features with no SRT
equivalent (cue settings,
NOTE/
STYLE
blocks, voice and formatting tags) are stripped rather than left to
confuse a player.
Back to the converter →
07Notes on video
Why there's no big download. The usual way to convert
video in a browser is to ship a WebAssembly build of ffmpeg —
around 32 MB, which is roughly 700 times the weight of this
entire app, and every visitor would pay for it whether or not they
ever converted a video. Instead this uses the video encoders already
built into your browser, so adding video conversion added
nothing to what the page downloads.
Why it runs at normal speed. Conversion plays the
clip through once, so a two-minute video takes about two minutes.
That's deliberate. Playing the file faster doesn't make the browser
work harder, it makes it skip frames: on a ten-second 30 fps
test clip we kept all 300 frames at normal speed, but only 253 at
double speed, 151 at quadruple, and 40 at sixteen times. Since
"faster" really means "throw frames away", quality is controlled
with the bitrate and resolution settings instead, and every frame is
kept. Leave the tab visible while it runs.
Resolution only ever scales down. Choosing a size
larger than the source leaves the video untouched rather than
upscaling it, since upscaling invents detail and inflates the file
for nothing. The number refers to the short side, so a
portrait clip converted at 720 comes out 720 wide, not 720 tall.
Format notes. WebM (VP9) gives the best quality per
byte and is the default. MP4 uses H.264 video for maximum
compatibility, but its audio is Opus, not AAC,
because no browser exposes an AAC encoder — most current
players handle that fine, though some older ones will play the
picture without sound. If you need guaranteed-everywhere audio,
choose WebM. Animated GIF steps through the video frame by frame
rather than playing it, is capped at 300 frames, and has no sound
— GIF has no audio track at all.
Not supported: trimming and cropping (this converts
whole files), subtitles burned into the picture, and any codec your
browser can't already play — if the file won't play in a
browser tab, it won't convert here either. To pull just the
soundtrack out of a video, use the Audio section
instead; it reads the audio track directly and is much faster than a
full re-encode.
08Notes on metadata & privacy
A photo from a phone routinely records where it was taken to within
a few metres, which camera took it, its serial number, and when.
None of that is visible when you look at the picture, and most
places you upload a photo do not remove it for you. Scanning shows
you the actual values; the location, camera and author rows are
highlighted because those are the ones that identify you.
Why removal here is lossless. Re-saving a photo in
an image editor drops the metadata but also re-compresses the
picture, losing a little quality every time. This cuts the metadata
segments out of the file and copies the compressed image data across
byte for byte, so the result is visually identical to the original
— verified by decoding both and comparing every pixel. Colour
profiles are deliberately kept, since removing those would change how
the image looks.
Scope: JPEG, PNG and WebP. Converting an image in the
Images tab also drops metadata as a side effect, but that path
re-encodes the pixels — use this tab when you want the original
file, minus the metadata.
09Notes on text & encoding
Text files carry no reliable record of how they were encoded, which
is why an old CSV or subtitle file so often opens as
é or a row of �. Pick the encoding
the file was saved in and you get clean UTF-8 back. The decoders come
from the browser itself, so there is nothing to download and the list
covers the Western, Central European, Cyrillic, Greek, Turkish,
Arabic, Hebrew, Thai, Japanese, Korean and Chinese legacy encodings.
Automatic detection tries UTF-8 first and falls back to Windows-1252,
which is right most of the time but is a guess — if the result
still looks wrong, pick the encoding explicitly.
Base64 and hex both work in either direction and
decide which one you want from the content, not the file name. Base64
accepts wrapped lines, data: URLs and the URL-safe
alphabet; the hex tool reads back its own dumps as well as bare hex
strings.
10Notes on PDF → images
Each page is rendered at the resolution you choose — 72 dpi
for screens, 150 for general use, 300 for print — and saved as a
JPG, PNG or WebP. A multi-page document also comes back as a single
ZIP with the pages numbered so they sort correctly. Pages are painted
onto white first, because PDF pages are transparent and JPEG has no
transparency, so skipping that step would hand you black rectangles.
This is the one part of the site that downloads a library,
and it is worth being straight about it. Rendering a PDF
faithfully — fonts, vector paths, colour spaces, scanned image
codecs — is a genuinely large problem, and there is no browser
API for it. So this tool uses Mozilla's pdf.js. Two deliberate
decisions follow from that:
It is never fetched unless you use it. Nothing is
downloaded when you open this site, browse the other tools, or even
extract the text from a PDF — that runs on our own code.
The renderer is only requested at the moment you convert a PDF to
images, so everyone else pays nothing for it. There is an automated
test asserting exactly this, so it cannot quietly regress.
It is served from this site, not a CDN. Loading it
from someone else's server would tell that third party you had just
opened a PDF, which is precisely the thing this site exists not to do.
Your file itself still never leaves the device either way. pdf.js is
Apache-2.0 licensed; the licence ships alongside it.
Limits: very large pages are capped so a long
document cannot exhaust your device's memory, and documents beyond 500
pages are rendered up to that point and say so. Going the other way
— images back into a PDF — is the first tool on this page,
and needs no download at all.