mrkeyoor.com_
Fri 16 Oct 19:57 UTC
Webevaluationupdated 26 Aug 2026

convert review

Convert to it! is a browser-based file converter that processes files on the user's device instead of uploading them to a conversion server. It links specialist handlers into conversion paths across images, audio, video, documents, archives, fonts, and other media.

+48stars / 7d
Verdict

Our Convert to it! install failed after 227 seconds because its postinstall called Bun in a Node-only container, so source setup requires the README's Bun prerequisite from the first command. The hosted app is still a useful first stop for private, odd conversions. Use it as a workshop and inspect every output; choose a format-specific tool when fidelity or unattended repeatability matters.

We ran it

Lab card: what happened when we ran convertScreenshot of convert (convert.to.it)
Install✗ · 227s
Build—
Repo481 files~59,515 lines of source · 110 MB · 3 CI workflows · tests dir

Answers from our run

Does convert build from source?

The dependency install failed, and the project has no separate build step. We cloned commit da3d3d1 into a clean Debian container with 3 CPUs and no project-specific setup.

Who should not use convert?

Archivists and production teams requiring deterministic, fidelity-checked output: the README says an output may not be what the user expected.

What are the alternatives to convert?

File Converter, Stirling PDF, ffmpeg.wasm. Our Convert to it!

Setup2/5Install failed when npm postinstall required a missing Bun binary
Docs4/5Clear Bun, submodule, Docker, handler, and testing guidance
Community3/53,950 stars and active reports, with 149 issues and pull requests
Maturity3/5Broad working site, no tagged release, and uneven handlers

Who it’s for

People converting sensitive files who do not want to upload them to an unknown server.
Developers who want a self-hosted web converter for a team or household.
Curious users trying an unusual format pair who can inspect a best-effort result.
Contributors interested in wrapping browser libraries and WebAssembly tools behind one interface.

Who it’s NOT for

Archivists and production teams requiring deterministic, fidelity-checked output: the README says an output may not be what the user expected.
Desktop users relying on MKV-to-MP4 or Opus-to-MP3 conversions: issue 709 reports the Electron app crashing on both.
Anyone assuming every visible handler loads cleanly: issue 712 reports the TurboWarp handler failing at page load because JSZip is unavailable.
Maintainers seeking a small dependency surface: the project combines npm packages, WebAssembly binaries, Git submodules, and format wrappers.
Teams requiring versioned releases: GitHub's latest-release endpoint returned no release for this repository.

Setup reality

Our Node 22 sandbox could not finish installation. After 227 seconds, npm's postinstall tried bun run scripts/extract-material-icons.ts, but Bun was absent, so the shell returned exit 127. No build or tests ran after that failure.

The README does name Bun as a prerequisite and says the repository must be cloned with submodules. Local development then uses bun install and Vite. Its optional format cache is generated in a browser; local Docker builds install Chromium and use Puppeteer for that cache.

The 110 MB checkout contained 481 files and about 59,515 lines of source. It has 3 CI workflows, a tests directory, and no Dockerfile detected by our harness. The prebuilt Compose route remains the easier self-hosting path.

Files stay in the browser during conversion

Convert to it! takes a reassuring approach to online conversion: the browser processes the file instead of uploading it to the project's server. The hosted site can therefore handle private material without adding another storage provider to trust, and the same interface can be served locally. That privacy model is the strongest reason to try the project before a conventional upload-and-wait converter.

Range is the second reason. Format handlers form a graph, allowing the app to route through intermediate representations instead of limiting users to image-to-image or video-to-video jobs. An AVI-to-PDF request may produce something strange, but the system attempts a meaningful path across media categories. The README is candid that users are likely to get an output, though it may not be what they expected.

What happened when we ran it

Our run cloned commit da3d3d1 into an unprivileged Node 22 container with 3 CPUs, 8 GB of RAM, and no secrets. The checkout contained 481 files, about 59,515 lines of source, and occupied 110 MB. Installation ran for 227 seconds, then failed with exit code 127. Since installation did not complete, our sandbox did not run a build or tests.

The log tail identifies the immediate problem. npm ran the package's postinstall command, bun run scripts/extract-material-icons.ts, and the shell replied bun: not found. npm then recorded command failure and pointed to its debug log. The README explicitly requires Bun, so this is a missing prerequisite in our Node-only image, not evidence that the application code failed to compile.

The repository has 3 CI workflow files and a tests directory. Our harness detected no Dockerfile, although the README provides Compose files under docker/ and describes a local image build. The failed install means we have no measured dependency count, build timing, or test outcome. Any claim beyond that would turn a clear setup finding into a guess.

The development path requires Bun and submodules

The README tells contributors to clone recursively because some handlers arrive as Git submodules. Bun installs the JavaScript dependencies and Vite runs the development server. Using npm despite that prerequisite reaches a Bun-based postinstall anyway, exactly where our 227-second attempt stopped. A setup guide can be accurate while a generic Node harness still fails, and this project is a good example.

Generating the supported-format list adds another step. On first browser load, the app calculates routes and reports missing cache data. The recommended workflow is to wait for the initial format list, call printSupportedFormatCache(), and store its JSON in cache.json. A local Docker build automates that work with Chromium and Puppeteer, which the README says makes the first image build slow.

Many specialist tools sit behind one interface

The application does not pretend one parser understands every medium. Handlers wrap conversion engines and declare accepted inputs and produced outputs through a common TypeScript interface. Contributors must normalize MIME types, set output filenames, avoid mutating byte buffers, and treat a file as the media it represents. An SVG should become an image through rendering, for example, rather than a crude visualization of XML bytes.

That design lets dedicated libraries cooperate while keeping the user flow simple: add a file, confirm the detected input, choose an output, and convert. It also creates a large maintenance surface. npm packages, WebAssembly components, Git submodules, browser APIs, and format-specific wrappers can change independently. The project's preference to avoid CDNs is sensible because every remote runtime dependency adds another failure point.

Best-effort output needs human verification

Issue 709 reports that the Electron application turns into a blank window within 2 to 5 seconds when converting MKV to MP4 or Opus to MP3 on Linux Mint, while PNG to PDF works. Issue 712 reports that the TurboWarp handler complains about missing JSZip as soon as the page loads in ChromeOS. Both reports were open when checked and concern the components named here.

The README documents broad project tests in test/ plus optional handler-specific tests. It also says not every handler requires its own unit test. That is understandable across a wide format graph, but users inherit the final verification job. Completion does not prove that timing, metadata, layout, color, embedded assets, or filenames survived. Keep the original and compare the result with a trusted viewer.

No tagged release anchors a deployment

GitHub showed 3,950 stars, 149 open issues and pull requests combined, and a last push on August 21, 2026. The current push and issue activity show that work continues. The latest-release endpoint returned no release, so operators have no tagged version or release notes for selecting a stable checkpoint. Pin a tested commit or container digest rather than following the default branch implicitly.

The issue policy also limits scope sensibly. A request for a new format must explain the desired media conversion, confirm that support is absent, and preferably point to browser-compatible implementations with a GPL-2.0-compatible license. The maintainer rejects format names without that research because thousands of possible formats could otherwise fill the queue without helping implementation.

Convert to it! succeeds as a private first attempt for one-off files. Our installation failure shows that local ownership begins with Bun, recursive submodules, and a generated format cache, not a generic npm command. Trial important conversion paths on the hosted site, preserve originals, and self-host only after those examples work. For production PDF or media pipelines, use narrower tools with explicit controls.

Alternatives

ProjectWhat it isPick it when
File ConverterA Windows shell extension for common audio, video, image, and document conversions.pick this instead when right-click conversion on Windows is enough.
Stirling PDF gh↗A self-hosted web suite focused on PDF conversion, OCR, and document operations.pick this instead when PDF work is the main job and deeper controls matter.
ffmpeg.wasmA WebAssembly port of FFmpeg for private browser-based audio and video workflows.pick this instead when you are building a media app and want direct FFmpeg control.

What people are saying

  1. [github-trending] p2r3/convert

Sources

  1. Convert to it! README
  2. Convert to it! hosted application
  3. Electron conversion crash report
  4. TurboWarp JSZip report
  5. Conversion path database proposal

More web reviews

dioramas · elpis · deepseek-whale-girl · floorplan-3d · taro · driver.js · the whole board →