v1.1.3 — Tools that never worked, and a dependency gate that was backwards
⚠️ The.dmgoriginally attached here was rejected by macOS as "damaged" — the build invalidated its own code signature. It has been removed. Download the fixed disk image from v1.1.4; it contains every fix listed below.
A bug-fix release. Several tools had never worked, and the dependency
detection added in 1.1.2 was inverted in places — hiding tools that were
fine and offering tools that were not.
Tools that were broken and now work
- OCR produced nothing at all. The page image was handed to PyMuPDF as a PIL image where a
Pixmapwas required, so every run failed on the first page withpixmap must be a Pixmap, for every input. - Split by Bookmarks always reported "Bookmarks found but no valid page targets". Page targets were resolved through a pikepdf method that does not exist, and the resulting
AttributeErrorwas swallowed. Named destinations and/GoToactions are now resolved properly. - Split by Size failed as soon as a split was actually needed. It only ever succeeded when the whole document fitted in one chunk.
- Watermark (image) raised
TypeErroron every run:insert_imagehas noopacityparameter, and itsrotateonly accepts multiples of 90. - Watermark (text) was never rotated — the default 45° rounded to 0°.
- Bates Numbering crashed with
NameError: name 'Path' is not definedwhenever the output folder was left empty. - Organize Pages silently did nothing: the new order was sorted before use, so
3,1,2,4became1,2,3,4and the output matched the input. - Compress silently skipped grayscale and transparent images, reporting success with no size reduction.
Dependency detection
- Tesseract, cairo and pango are now found under the Homebrew prefixes. Launched from Finder, an app bundle gets a
PATHand a library search path that exclude/opt/homebrew, so 1.1.2 dimmed OCR, Deskew and HTML → PDF on machines where those dependencies were installed and working. - Word → PDF was gated on "is this macOS", which is neither necessary nor sufficient. It is now available whenever Apple Pages or the WeasyPrint fallback can do the job — including on Linux and Windows, where 1.1.2 blocked it despite the fallback working.
- OCR and Deskew also check for the
pytesseractbinding, not just the binary. - Detection no longer imports WeasyPrint at startup, which cost over three seconds on every launch.
- Dependencies are re-checked when you return to the home page, so installing one no longer requires restarting the app.
Interface
- Colours follow the PdfRomeo palette, defined in one place in
app/ui/styles.py. - Closing a document with ⌘W re-dims the tools that need one.
- Tools that write several files now ask for a folder. Picking a file meant the app created a directory literally named
output.pdf. - Leaving a tool while it is still working now asks first. It used to destroy the running thread, which aborts the process.
- Options are locked while a job runs, so its inputs cannot change underneath it.
- Split's default range
1-means "to the end of the document" again, rather than page 1 only. - Fill & Sign no longer writes an output file when no field matched, and reports the real error when saving fails.
- The About box shows the running version instead of a hardcoded 1.0.
Build
- py2app's
strippass corrupted the Qt plugins, leaving a bundle that could not load a platform plugin. Two invalid options (plist_strings,install_requires) aborted the build outright. - The app now depends on PySide6-Essentials and prunes Qt frameworks outside its dependency closure: 1.3 GB down to 400 MB.
- Building requires Python 3.11 — Qt's platform plugins do not load under the Python 3.9 that ships with Xcode.
tests/regression.py covers each fix above.
Full changelog: v1.1.2...v1.1.3