2024-11-12 22:20:32 +01:00

# ConvertX
[](https://github.com/C4illin/ConvertX/actions/workflows/docker-publish.yml)
2024-11-14 11:26:24 +01:00
[](https://github.com/C4illin/ConvertX/pkgs/container/ConvertX)
2024-11-12 22:20:32 +01:00
[](https://github.com/C4illin/ConvertX/pkgs/container/convertx)



2024-11-14 11:26:24 +01:00
<!--  -->
2024-11-12 22:20:32 +01:00
A self-hosted online file converter. Supports over a thousand different formats. Written with TypeScript, Bun and Elysia.
## Features
- Convert files to different formats
- Process multiple files at once
- Password protection
- Multiple accounts
## Converters supported
| Converter | Use case | Converts from | Converts to |
|------------------------------------------------------------------------------|---------------|---------------|-------------|
| [libjxl ](https://github.com/libjxl/libjxl ) | JPEG XL | 11 | 11 |
| [resvg ](https://github.com/RazrFalcon/resvg ) | SVG | 1 | 1 |
| [Vips ](https://github.com/libvips/libvips ) | Images | 45 | 23 |
| [Assimp ](https://github.com/assimp/assimp ) | 3D Assets | 70 | 24 |
| [XeLaTeX ](https://tug.org/xetex/ ) | LaTeX | 1 | 1 |
| [Pandoc ](https://pandoc.org/ ) | Documents | 43 | 65 |
| [GraphicsMagick ](http://www.graphicsmagick.org/ ) | Images | 166 | 133 |
| [FFmpeg ](https://ffmpeg.org/ ) | Video | ~473 | ~280 |
<!-- many ffmpeg fileformats are duplicates -->
Any missing converter? Open an issue or pull request!
## Deployment
```yml
# docker-compose.yml
services :
convertx :
image : ghcr.io/c4illin/convertx
container_name : convertx
restart : unless-stopped
ports :
- "3000:3000"
environment :
- JWT_SECRET=aLongAndSecretStringUsedToSignTheJSONWebToken1234 # will use randomUUID() if unset
volumes :
- convertx:/app/data
```
or
```bash
docker run -p 3000:3000 -v ./data:/app/data ghcr.io/c4illin/convertx
```
Then visit `http://localhost:3000` in your browser and create your account. Don't leave it unconfigured and open, as anyone can register the first account.
If you get unable to open database file run `chown -R $USER:$USER path` on the path you choose.
### Environment variables
All are optional, JWT_SECRET is recommended to be set.
| Name | Default | Description |
|---------------------------|---------|-------------|
| JWT_SECRET | when unset it will use the value from randomUUID() | A long and secret string used to sign the JSON Web Token |
| ACCOUNT_REGISTRATION | false | Allow users to register accounts |
| HTTP_ALLOWED | false | Allow HTTP connections, only set this to true locally |
| ALLOW_UNAUTHENTICATED | false | Allow unauthenticated users to use the service, only set this to true locally |
| AUTO_DELETE_EVERY_N_HOURS | 24 | Checks every n hours for files older then n hours and deletes them, set to 0 to disable |
| WEBROOT | "" | The address to the root path setting this to "/convert" will serve the website on "example.com/convert/" |
### Tutorial
Tutorial in french: <https://belginux.com/installer-convertx-avec-docker/>
Tutorial in chinese: <https://xzllll.com/24092901/>
## Screenshots

## Development
0. Install [Bun ](https://bun.sh/ ) and Git
1. Clone the repository
2. `bun install`
3. `bun run dev`
Pull requests are welcome! See below and open issues for the list of todos.
## Todo
- [x] Add messages for errors in converters
- [x] Add searchable list of formats
- [ ] Add options for converters
- [ ] Divide index.tsx into smaller components
- [ ] Add tests
- [ ] Make the upload button nicer and more easy to drop files on. Support copy paste as well if possible.
- [ ] Make errors logs visible from the web ui
- [ ] Add more converters:
- [ ] [deark ](https://github.com/jsummers/deark )
- [ ] LibreOffice
- [ ] [dvisvgm ](https://github.com/mgieseki/dvisvgm )
## Contributors
<a href="https://github.com/C4illin/ConvertX/graphs/contributors">
<img src="https://contrib.rocks/image?repo=C4illin/ConvertX" alt="Image with all contributors"/>
</a>
## Star History
<a href="https://github.com/C4illin/ConvertX/stargazers">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=C4illin/ConvertX&type=Date&theme=dark" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=C4illin/ConvertX&type=Date" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=C4illin/ConvertX&type=Date" />
</picture>
</a>