HRConvert2 Self-Hosted File Conversion Server
A self-hosted, respource aware file conversion server supporting 488 formats in 26 languages.
At a glance
- What is it?
- HRConvert2 is a PHP-based, self-hosted conversion server for organizations and technically capable users who want document, media, archive, OCR, and other conversions to run locally. Its strongest documented feature is process isolation, but deployment requires a server, dependency installation, and a resource-intensive toolchain.
- Who is it for?
- Adopt HRConvert2 when files must remain on infrastructure you control and you have staff or users who can operate a PHP server with Linux conversion tools. Do not choose it as a simple hosted API without checking its sandbox, dependency, and resource requirements.
- Can I use it commercially?
- Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository last received commits 31 days ago.
- What is it written in?
- Mainly PHP, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 20, 2026, and from our analysis. They are not legal advice.
Editorial analysis
Why HRConvert2 Exists
HRConvert2 addresses the privacy and control problems associated with sending files to public conversion websites. Its target users include administrators who operate an internal or public-facing conversion service, privacy-conscious organizations, and individuals running a conversion service on a Raspberry Pi. The repository describes the application as a self-hosted server rather than a desktop converter library. Files are processed on the server, and the README states that nothing is transmitted to a third party.
The application also removes several common web-service features. The documentation says that users need no account and that the project has no database, cookies, analytics, telemetry, or CDN. Each user is associated with a temporary directory, and age-based cleanup can remove files automatically. The repository further states that users cannot see one another's files. These characteristics make the project relevant to temporary document handling, although they do not by themselves establish the security of the underlying server or operating system.
HRConvert2 is not limited to office documents. Its documented categories include video, audio, spreadsheets, presentations, images, archives, e-books, 3D models, technical drawings, subtitles, bootable ISO files, OCR, and live streams. The README claims 488 supported formats across 26 languages. The format count is a project claim, so deployment planning should still check whether the particular conversion paths needed by an organization are installed and available.
The Conversion Pipeline and Sandbox Boundary
HRConvert2 is presented as a thin PHP application built on the reusable HRProprietary engine. That engine handles sandboxing, dependency management, configuration repair, and resource budgets. The conversion layer includes tools such as ImageMagick, FFmpeg, Inkscape, and OpenSCAD. The README states that each dependency runs inside a bubblewrap namespace, with access limited to a read-only input directory and an output directory.
Network access is also unshared in the sandbox. This restriction matters because conversion tools can otherwise act on URLs, external resources, or other process-visible data. The README further states that uploads are sanitized before tools process them and that stream URLs are inspected before FFmpeg receives them. These are documented design controls, not a substitute for an independent review of the actual scripts and container configuration.
The application refuses conversions when no sandbox is available. The Docker example includes `--cap-add SYS_ADMIN`, which the README identifies as required for the security sandbox. That choice creates a clear operational boundary. It also means that a managed host, restricted container platform, or operating system that blocks the required namespace behavior may not support the documented deployment even if it can run PHP and the individual conversion programs. HRConvert2 should therefore be evaluated as a server and sandbox system, not merely as a PHP web page.
Installation and First Conversion
The README gives a traditional installation path for a Linux server. It clones the repository and runs the setup script. The script is documented to pull dependencies, create storage, configure AppArmor and PHP settings, install a systemd unit, and report status. The URL shown after installation is the application entry point. The project also offers a Docker image for a shorter container-based start.
The traditional installation commands are:
git clone https://github.com/zelon88/HRConvert2
sudo bash HRConvert2/Documentation/Build/hrconvert2-setup.shAfter installation, the README says to open `http://your-server/HRProprietary/HRConvert2/convertCore.php` and begin converting. The repository documentation links to `Documentation/INSTALLATION_INSTRUCTIONS.txt` for the full installation instructions. It does not provide enough information here to describe every prerequisite or configuration choice, so operators should follow that file rather than infer missing packages.
The Docker command is:
docker run -d -p 8080:80 --cap-add SYS_ADMIN zelon88/hrconvert2The README warns that omitting `SYS_ADMIN` causes HRConvert2 to refuse conversions rather than run without its sandbox. For diagnostic work, the documented commands are:
sudo php convertCore.php -fpThe README describes `-fp` as permission repair and diagnostics. It separately documents `-v` as a version, dependency, and feature check:
sudo php convertCore.php -vThese commands are useful first steps because they distinguish an installation problem from a conversion problem. The command-line interface also documents `--status`, `-u=latest`, `-c=now`, `--config`, `-l`, and `-k` for state inspection, updating, session cleanup, configuration, and resource-listener control.
Resource Controls and Server Sizing
HRConvert2 includes optional resource-aware load management. The README says that CPU and memory caps scale with system load, runaway conversions are terminated, and storage can span several disks using round-robin, least-active, or failover policies. A system watchdog is also described. These features are aimed at keeping a conversion server responsive when users submit demanding media or document jobs.
The design has an unusual fail-open behavior. The documentation states that if no budget socket is available, conversion runs anyway. The stated goal is to prevent the resource manager itself from taking the server offline. For an operator, this is a trade-off rather than a universally safe default. A missing budget socket can restore conversion capacity, but it can also remove the intended cap on CPU and memory use. The README does not document an option-level policy for choosing stricter fail-closed behavior, so this point needs verification in the configuration files before exposing the service publicly.
File conversion also brings storage costs. Temporary sessions, outputs, downloaded source files, and cached resources can consume disk space, while FFmpeg and other tools can require substantial memory for large media. Age-based cleanup is documented, and `-c=now` is provided to clean expired sessions. The documentation does not specify retention defaults, maximum upload sizes, or queue semantics in the README. Those limits matter more than the headline format count when estimating capacity.
Localization, Interface Customization, and Operational Trade-offs
HRConvert2 includes 26 languages in the interface, including English, French, Spanish, Chinese, Hindi, Arabic, Russian, Ukrainian, Bengali, German, Korean, Japanese, and others. The README also documents right-to-left layouts for Arabic, Hebrew, Persian, Urdu, and Syriac. New languages can be added by creating a language folder, according to the project documentation, without modifying core code.
The interface can use Default or Original layouts, with fluid width and seven documented color schemes: Red, Green, Blue, Grey, Orange, Purple, and Dark. Administrators can lock preferences in `config.php`. Each interface is stored in its own folder, which makes visual retheming and branding separate from the conversion core. This is useful for organizations that need a branded internal portal, although the README does not describe a supported API for external job submission or automated batch processing.
The project is a public-facing application with upload handling and many external conversion dependencies. That breadth increases maintenance and upgrade cost. The recent releases include v3.9.1, v3.8.4, and v3.8.1, and the repository's last push was on 2026-09-22. The v3.9.1 release description says that it absorbs the Core Manager and sandboxes every dependency. This suggests that operators should review release notes and dependency changes before upgrading, rather than treating the application as a self-contained PHP package.
The GPL-3.0 license applies to the repository. That does not answer licensing questions for bundled tools, codecs, fonts, or distributions containing other components. No legal conclusion should be drawn from the repository license alone. Operators distributing a modified or packaged deployment should review the relevant component licenses separately.
Where HRConvert2 Is the Wrong Choice
HRConvert2 is a poor fit for a hosted API product that cannot grant the capabilities required by the documented sandbox. The Docker command requests `--cap-add SYS_ADMIN`, and the README says conversions stop when the sandbox is unavailable. A provider that prohibits that capability or uses an environment without bubblewrap support may be unable to run the application as documented.
It is also a poor fit for users who need a stateless, managed conversion endpoint with no server operations. The application is self-hosted, installs a systemd unit through its traditional setup path, manages storage, and relies on local conversion tools. The documentation provides no rollback procedure, hosted service tier, or SLA.
The broad format list also needs careful interpretation. The README names categories and examples, but it does not establish conversion fidelity for every input and target pair. Codec availability, hardware support, temporary storage, and sandbox compatibility can vary. A team should verify its required formats and representative files before accepting user traffic.
Editorial conclusion
Adopt HRConvert2 when files must remain on infrastructure you control and you have staff or users who can operate a PHP server with Linux conversion tools. Do not choose it as a simple hosted API without checking its sandbox, dependency, and resource requirements. The repository documentation does not explain licensing obligations for bundled conversion tools or user-facing redistribution, so verify those details before deployment. The first concrete check should be whether the documented `SYS_ADMIN` Docker option and bubblewrap sandbox can run in your target environment.
Frequently asked questions
How do I install HRConvert2?
The README provides a traditional setup using `git clone` followed by `sudo bash HRConvert2/Documentation/Build/hrconvert2-setup.sh`. It also provides a Docker command using `zelon88/hrconvert2` and `--cap-add SYS_ADMIN`.
Does HRConvert2 require an account or database?
The README states that HRConvert2 needs no user account and uses no database or cookies. It says users are represented by temporary directories and that files can be removed through age-based cleanup.
Why do HRConvert2 conversions fail without SYS_ADMIN?
The README says `SYS_ADMIN` is required for the security sandbox. Without it, HRConvert2 refuses conversions rather than running without the documented isolation.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/zelon88-hrconvert2)Was this useful?