v0.5
FileWizard 0.5 is about security, reliability and a rebuilt Docker image. The image now also runs on arm64 (Raspberry Pi 4/5, Apple Silicon, ARM servers), no longer runs as root, and the GPU image works again. Many conversions that failed in 0.4 now work. It also adds the most requested features from the issue tracker.
Upgrading is recommended for everyone, especially for instances reachable from the internet (see Security).
Before you upgrade
docker compose pull && docker compose up -d works with your existing compose file and settings. The upgrade notes explain the details. In short:
- The app no longer runs as root. On the first start, the container hands the mounted folders to
PUID/PGID(default1000/1000, Unraid99/100). Set these to the user that should own the files. - Keep your job history: 0.4 stored it inside the container. To take it along, copy it out before updating, then mount
/app/data(and/app/models, so downloaded models survive updates):mkdir -p data && docker compose cp web:/app/jobs.db ./data/jobs.db - Behind a reverse proxy: requests from other origins are now rejected. If uploads fail with 403, forward the original
Hostheader, or setapp_public_urlin the settings or theCSRF_TRUSTED_ORIGINSvariable. - Settings page: with OIDC login it is only available to admins (
admin_users). Conversion commands are read-only there; editsettings.ymlor setALLOW_COMMAND_EDITS=true. - Using the API from a web page on another domain now needs that origin in
ALLOWED_ORIGINS. Scripts and tools such as curl or n8n are not affected. - Image tags:
latestandsmallkeep their meaning, and0.5-latestfollows the old0.4-latestnaming. The GPU image is nowcuda(was0.3-cuda). - The image is based on Ubuntu 24.04 LTS instead of Debian, so some converters are older releases (e.g. LibreOffice 24.2, Pandoc 3.1.3, Tesseract 5.3) and output can differ slightly.
New
- arm64 images for
latestandsmall(#14, #18). - Working NVIDIA GPU image (
cuda): transcribes on the GPU when the container has one and falls back to the CPU otherwise. It ships its own CUDA 12 libraries, so any driver from version 525 works. - Unraid templates for the CPU and GPU images, see
unraid/(#5). - OCR language selection (#26): choose the language(s) per job next to Start OCR, and set a default in the settings. The image includes English, German, French, Spanish, Italian, Portuguese, Dutch and Polish; the
TESSERACT_LANGSbuild argument adds more. The API acceptsocr_language. - Delete selected history items (#25), including their files and, for ZIP batches, all sub-jobs. Running jobs are cancelled first.
- Automatic cleanup:
retention_daysdeletes finished jobs and their files after the given number of days (off by default). - Conversion timeouts can be changed per tool on the settings page (#21).
- Restrict who may log in with OIDC:
allowed_usersandallowed_domains. - SVG conversion with rsvg-convert (to PNG, PDF, PS, EPS). cjxl (JPEG XL), cjpeg and potrace, which the settings listed but the image lacked, are now installed.
- Converters that are not installed are hidden in the UI and listed on the settings page, instead of failing when used.
- Whisper compute type
auto(new default): picks the fastest type the CPU or GPU supports. - Failed uploads say why (e.g. file too large) when you hover over the status.
- The web interface no longer loads anything from CDNs, so it also works without internet access.
- The container has a health check, and
/healthreports version and variant. - New environment variables:
ALLOWED_HOSTS,CSRF_TRUSTED_ORIGINS,ALLOWED_ORIGINS,SESSION_COOKIE_SECURE,FRAME_ANCESTORS,ALLOW_COMMAND_EDITS,CHILD_CPU_LIMIT_SECONDS,CHILD_MEMORY_LIMIT_MB,STALE_UPLOAD_HOURS(see the README) andPUID,PGID(see docs/docker.md).
Security
- With OIDC login, the settings page was reachable without logging in and contained the OIDC client secret and the webhook token. It now requires an admin, and secrets are never sent to the browser. If your instance was reachable by others, change the OIDC client secret at your identity provider and the webhook token.
- Other websites could send requests to your instance through your browser (for example to change settings). Such cross-site requests are now rejected, and cross-origin API access is off unless allowed with
ALLOWED_ORIGINS. - File names shown in the job history could inject HTML and scripts into the page; all values are now escaped.
- Changing the programs that conversions run now needs
ALLOW_COMMAND_EDITS=true; other settings only accept the fields the settings form has. - Uploads: the size limit now also applies to chunked uploads (the way the web interface uploads), uploads of different users are kept apart, and ZIP files are limited in number of files and unpacked size.
- Whisper models and TTS voices are checked against the allowed ones.
- The container runs as an unprivileged user; converter processes have CPU and memory limits, and TeX shell escape is disabled.
- Security headers (Content Security Policy, frame protection,
nosniff) and optional host name checking (ALLOWED_HOSTS). - Admin rights and login restrictions ignore e-mail addresses the identity provider marks as unverified.
Fixed
- LibreOffice conversions failed (#16).
- Conversions with a lot of console output (Calibre, ffmpeg, Docling) stalled and failed with "Conversion timed out" (#21).
- Calibre could not create PDFs in the container (#9).
- Logging out with Keycloak and other OIDC providers (#20).
- Without
SECRET_KEY, OIDC login failed at random because every worker process made up its own session key. The key is now generated once and stored inconfig/.secret_key. - Cancel now stops the running converter instead of letting it run until its timeout.
- Ghostscript PDF presets (screen, ebook, printer, prepress, PDF/A) were ignored.
- Pandoc conversions to plain text, Markdown and LaTeX failed.
- SoX "44k" presets produced 44000 Hz instead of 44100 Hz.
- Files with non-Latin names (e.g.
文件.pdf) failed. - ZIP batches could get stuck on "processing".
- Dropping a single file showed an empty format list; it now shows the formats available for that file type (#23).
- Delete Processed Files only covered the newest 100 jobs, and Clear History left the files behind.
- Settings changes now take effect in all worker processes right away.
- API: download links and status polling work with API tokens, webhooks fire for chunked API uploads, and tools with
_in their id (e.g.ghostscript_pdf) are accepted. - Whisper models stayed in memory for good; they are now unloaded when idle.
run.shno longer requires a.envfile (#13).- The app works with current Starlette releases; fresh installs failed to render pages.
Docker image
| Image | Tags | Platforms |
|---|---|---|
| All tools | latest, 0.5.0, 0.5, 0.5-latest
| amd64, arm64 |
| Without TeX, Inkscape and Docling | small, 0.5.0-small, 0.5-small
| amd64, arm64 |
| NVIDIA GPU | cuda, latest-cuda, 0.5.0-cuda, 0.5-cuda
| amd64 |