-
buo4 技术教程组 用户
把文件传到某个在线转换网站,点一下"转换",下载结果——这个动作很多人每天都在做。
但很少有人停下来想:刚才那份文件去哪了?
如果它是合同、是简历、是财务报表、是身份证扫描件,那它现在正躺在一台你不认识的服务器上。留没留副本、留多久、会不会被索引、有没有人看得到——你都不知道。绝大多数这类网站的服务条款里,对此的表述都很模糊。
ConvertX 给的是另一个选择:一个自托管的在线文件转换器,支持一千多种格式,文件不用出你的机器。

它在技术上是什么
README 的定位很简洁:
一个自托管的在线文件转换器。支持一千多种不同格式。用 TypeScript、Bun 和 Elysia 编写。
三句话把定位、规模和实现都说清了。
功能层面不算复杂,但都是实用项:
- 把文件转换成不同格式
- 一次处理多个文件
- 密码保护
- 多账号
一千多种格式是怎么来的
这是最值得看的部分。ConvertX 本身不是格式转换引擎,它是一层 Web 界面,背后接的是一堆成熟的开源转换工具。README 里给了完整对照表:
| 转换器 | 用途 | 输入格式数 | 输出格式数 |
|---|---|---|---|
| ImageMagick | 图像 | 245 | 183 |
| GraphicsMagick | 图像 | 167 | 130 |
| FFmpeg | 视频 | 约 472 | 约 199 |
| Assimp | 3D 资产 | 77 | 23 |
| Vips | 图像 | 45 | 23 |
| Pandoc | 文档 | 43 | 65 |
| LibreOffice | 文档 | 41 | 22 |
| Calibre | 电子书 | 26 | 19 |
| Inkscape | 矢量图 | 7 | 17 |
| libjxl | JPEG XL | 11 | 11 |
| VTracer | 位图转矢量 | 8 | 1 |
| Potrace | 位图转矢量 | 4 | 11 |
| Dasel | 数据文件 | 5 | 4 |
| libheif | HEIF | 2 | 4 |
| MarkItdown | 文档 | 6 | 1 |
| XeLaTeX | LaTeX | 1 | 1 |
| msgconvert | Outlook | 1 | 1 |
| dvisvgm | 矢量图 | 4 | 2 |
| VCF 转 CSV | 联系人 | 1 | 1 |
| pdftops | 文档 | 1 | 2 |
这个设计挺聪明。每个工具在自己的领域都已经打磨多年——ImageMagick 处理图像、FFmpeg 处理视频、Pandoc 处理文档互转——ConvertX 不重新发明,只把它们统一到一个界面后面。
这也解释了一千多这个数字:不是自己实现了上千种格式,而是把十几个专业工具的格式矩阵加起来。

Docker 部署
services:
convertx:
image: ghcr.io/c4illin/convertx
container_name: convertx
restart: unless-stopped
ports:
- "3000:3000"
environment:
- JWT_SECRET=aLongAndSecretStringUsedToSignTheJSONWebToken1234
volumes:
- ./data:/app/data
或者直接一行:
docker run -p 3000:3000 -v ./data:/app/data ghcr.io/c4illin/convertx
一个必须注意的坑,README 用 WARNING 标出来了:
如果登录不了,确认你通过 localhost 或 https 访问,否则需要设置
HTTP_ALLOWED=true。
这是 Cookie 安全策略导致的——非安全上下文下 JWT 存不住。本地测试很容易碰到,知道原因就好办。
另外 JWT_SECRET 不设置的话会用 randomUUID() 随机生成,重启后所有会话失效。长期跑的话记得设一个固定值。

谁适合用它
适合:
- 经常处理敏感文件,不愿上传到第三方网站
- 有 NAS 或常开服务器,本来就跑着一堆自托管服务
- 需要一个团队共用的转换入口(支持多账号)
- 需要批量转换
- 格式需求杂——图像、视频、文档、电子书、3D 什么都有
不太适合:
- 完全不想碰 Docker 和命令行
- 偶尔转一两次文件,用在线工具更省事
- 需要专业级的转换参数控制(ConvertX 走的是"够用就好"路线)
说点实在的
这类工具的价值不在技术难度,在消除一个不必要的风险。文件格式转换本身没有秘密,ImageMagick、FFmpeg 都是开源老牌工具,谁都能装。问题只在于——你愿不愿意为了省个安装步骤,把自己的合同交给一台陌生服务器。
自托管的成本其实很低:一份 compose 文件,一条命令。收益是这件事从"你不知道发生了什么"变成"一切都在你机器上"。
另外说一句,HTTP_ALLOWED 那个坑不少人会踩。如果你在内网用 IP 访问而不是域名,记得加上这个环境变量,否则会一直卡在登录不了的状态,还以为是部署错了。