Repository navigation
Releases: adehad/py-scantailor
Releases · adehad/py-scantailor
Release list
v1.0.0-rc4
v1.0.0-rc3
Features
- Ship NumPy and OpenCV only: drop numba, SciPy and scikit-image (#237, #231) by @adehad
- Fix preview refresh, cropped arrow label and window title (#238, #232, #233, #234) by @adehad
- UI design pass: header hit area, type scale and edges (#239, #235, #236) by @adehad
- Publish the Linux build as an AppImage too (#251, #230) by @adehad
- Add a page grid to Margins and Output, and show the source DPI (#256, #247, #248, 4lex4#130, 4lex4#98) by @adehad
Fixes
- Fix the Select Content size fields, Fine Tune Page Corners and trimmed-edge page detection (#252, #242, #243, #5) by @adehad
Translations
- Compile the translations without a manual step, at first start or into the wheel (#255, #55) by @adehad
Documentation
Tests and maintenance
- Fix the test run that hangs after a Qt crash (#244, #240) by @adehad
- Run the help icon tests without a leftover app style sheet (#258) by @adehad
Other changes
Full Changelog: v1.0.0-rc2...v1.0.0-rc3
v1.0.0-rc2
Builds for Linux and macOS join the Windows build, and every build is smoke-tested.
Packaging
- Add an end-to-end smoke test for frozen builds
- Build Linux and macOS packages in the release workflow
- Smoke-test the Windows release build instead of rerunning the test suite
Tests and maintenance
- Let project_window finish its renders before a test moves the scans
Full Changelog: v1.0.0-rc1...v1.0.0-rc2
v1.0.0-rc1
The first pre-release of pyScanTailor, a Python and PySide6 port of ScanTailor Advanced. The port was built from the ScanTailor Advanced 1.2.1 sources over 93 earlier commits (2024 to April 2026) that are not listed here; the entries below are the changes made since the port was tracked in issues.
Features
- Add image loading and TIFF/PNG writing with DPI (#117)
- Port background estimation and real grayscale/colour output (#118)
- Make pipeline stages build one transformation and resample once (#119)
- Port C++ despeckle and expose colour options on output params (#120)
- Lay out pages from a batch pre-pass and pass colour options to output (#121, #122, #123, #124)
- Wire the main window to projects, pages and stage switching (#125, #126)
- Match C++ defaults for despeckle level and page margins (#127)
- Port mixed output, posterize, Wiener and Savitzky-Golay filters (#129, #130)
- Add a process-pool batch runner with C++ output file naming (#131, #132)
- Add a lazily rendered page thumbnail list (#133)
- Show stage options and rendered pages in the main window (#134)
- Port colour segmentation, split output and a numba grayscale reconstruction (#135)
- Dewarp, resample to output DPI and segment colours in the output stage (#136)
- Edit page geometry by dragging overlays in the stage image views (#137)
- Run batches, apply settings to other pages and propagate edits from the main window (#138)
- Port the C++ content box finder and per-method threshold adjustment (#139, #140)
- Fix DPI, relink missing images, store relative paths and track recent projects (#141)
- Add the remaining output options and a manual dewarping grid (#142)
- Add jbig2-numba, a standalone lossless JBIG2 generic-region encoder (#145)
- Port Mokji binarisation and align Bradley, EdgeDiv and picture detection with C++ (#152)
- Load pages with the project's fixed DPI for rendering and batch (#154)
- Add the welcome panel, output folder relinking and C++ Fix DPI limits (#155)
- Detect pages on the batch pool and send stage defaults to workers (#156, #157)
- Import PDF pages and map their text layer through the page transformation (#158)
- Export output pages to PDF with JBIG2, G4 or JPEG images and text layers (#146, #159)
- Rebuild a PDF end to end with its text layer kept (#160)
- Add File > Open PDF and Export PDF and show detection progress in batches (#162)
- Give the app one cross-platform look with Lucide icons and bundled Inter (#163)
- Show dialogs that were opening blank and order new pages naturally (#164, #165, #166, #167)
- Re-detect page split and deskew when their inputs change or Auto is clicked (#169, #170)
- Order pages exactly like C++ SmartFilenameOrdering, which ignores letters (#168)
- Adapt manual page splits like C++ and wire Page Split apply-to and page counts (#172, #173)
- Make Settings and Default Parameters work, with JSON profiles for new projects (#174)
- Ship the signed-off icon set with palette tints and a despeckle slider (#175, #176)
- Polish the dark theme, binarization panel and deskew readouts; close leaked test windows (#179, #180, #181, #182, #183)
- Apply Settings: units, thumbnail size and quality, TIFF compression, scheme preview (#184, #185, #186)
- Import every filter setting from C++ .ScanTailor projects and refuse newer versions (#187)
- Grow the page list for detected spreads, match C++ split scopes, auto-save (#189, #190)
- Draw view overlays in theme colours and dim disabled controls (#62, #63)
- Re-detect page splits saved without dependencies like C++ and document split scopes (#94, #95)
- Keep C++ output file labels and stage defaults, and open non-UTF-8 C++ projects (#41, #66)
- Add the C++ shortcuts, Units menu, status bar panel and thumbnail context menu (#10, #11, #12, #13, #14)
- Keep upstream's new pause-sorting button on the shared theme
- Open projects saved by upstream 1.2.x (format version 4) (#192)
- Apply EXIF orientation when loading images, as upstream does (#194)
- Port upstream oblique (shear) deskew and fix its open upstream bugs (#193)
- Adopt upstream page focus, stored dewarp model and content box fixes; wire oblique deskew into the pipeline and main window (#37, #40, #43)
- Add upstream's Margins size lock, Match size to all pages, per-side Apply and source DPI
- Add upstream's top page edge deskew option, turning the page the right way
- Add upstream's Fox, Window and Grad thresholds and fill outside page box; document the despeckle choice (#83)
- Wire the round 14 features into the main window, settings, persistence and docs (#25)
- Make image I/O safe: atomic writes, a finite bomb limit, alpha, odd TIFF resolutions and mode I (#75, #76, #77, #78, #79)
- Port upstream's Output zone tools, tabs, Picture Shape, EdgePlus and BlurDiv (#16, #17, #19, #33, #213)
- Render interactive stages faster, harden PDF import and export, and wire the Output tabs (#35, #47, #48, #49, #50, #51, #91, #93, #206, #208, #15, #18, #34, #36, #52, #53, #72, #92)
- Pay down test and UI debt: batch panel form, non-owning widgets, pre-crop and harness tests (#45, #60, #80, #82, #85, #86, #46, #92)
- Cut first-visit Output and Select Content time, pre-warm numba, and make the first thumbnail Qt call safe (#70, #71, #72, #74, #36)
- Match upstream's image view interactions, view hints and per-stage thumbnail orders (#27, #28, #29, #30, #31)
- Close upstream pipeline gaps: shadow cleanup, post-dewarp skew, Select Content dependencies, guides and continuous despeckle (#22, #23, #24, #42, #59, #64, #65, #67, #20, #44)
- Wire round 16 into the main window and docs: re-run earlier pages, restore removed halves, sort orders, auto-save after batch (#21, #26, #32, #38, #39, #52, #68, #15, #18, #34, #53, #61, #69)
- Detect page splits with upstream's PageLayoutEstimator, checked against a transcription of the C++ (#6, #5, #9)
- Trace text lines and page edges with upstream's TextLineTracer and TopBottomEdgeTracer (#7, #8, #44)
- Fix the Select Content side choice and top-edge deskew before shadow cleanup; honour the continuous despeckle strength; link margins by default (#215, #218, #67)
- Wire round 17 into batch and views: stage-wide defaults, Fill Zones on the output image (#43)
- Trace dewarp page edges on the source scan, as upstream does
- Ignore the scan border when tracing dewarp page edges; refuse auto models with too small a span (#226, #227)
- Extract PDF pages inside New Project (#228)
- Add a headless scantailor-cli for scripting (#229)
- Skip work the stage views do not show and reuse the Output render for its thumbnail (#36)
- Map exported text through the same point mapper the Output view uses (#92, #53)
- Reuse thumbnails whose inputs have not changed and render settled stages from a shrunk source (#36)
- Rewrite the guide in plainer words with tables for options, and add performance notes (#96)
- Port upstream's manual per-image trim in Fix Orientation
- Show an applied oblique correction, name the Fix DPI tabs, add the missing guide screenshots
Fixes
- Round-trip fix orientation settings through project JSON (#128)
- Lock page split settings, drop cv2 wrappers and fall back to the whole image for background estimation (#147, #148, #149, #150, #151)
- Apply output settings per group so zones and the dewarp model survive (#171)
- Keep a manual deskew angle when a background detection finishes after it (#178)
- Keep hand-drawn content and page boxes on their content when split cutters move (#202)
- Remove the whole measured oblique lean, not half of it (#196)
- Harden jbig2-numba: masked arrays, 32-bit lengths, and poppler-less test runs (#88, #89, #90)
- Fall back to content deskew when the top page edge is not found or not confident (#210, #211)
- Centre deskew ties, cut neighbour offcuts on Auto single pages, fix XSpline end segments (#219, #220, #225, #212)
- Load translations by locale and compile .qm files at build (#56)
- Drop late decodes for deleted stage widgets, remove NonOwningWidget, reset the test cursor (#46, #61)
- Apply the chosen language at startup and switch the open window when it changes (#56)
- Address the PR review: Manual alignment follows the checked button, StrEnum values, narrower excepts
Performance
- Vectorise remove_small_components and reuse it in content finder (#115)
- Vectorise dewarp remap grid computation (#116)
- Search whitespace incrementally in the content box finder (#153)
- Run PDF import, text layers and export on one shared process pool (#161)
- Speed up despeckle, background estimation and dewarp maps with identical results (#73, #81, #84)
Translations
- Refresh the translation catalogues with machine drafts flagged for review
- Translate the PDF extraction prompts, with machine drafts flagged
- Wrap user-visible strings in tr() and give each Apply dialog its own context
Packaging
- Build the Windows exe from a v* tag and publish it as a release
- Move to Python 3.14 with PySide6 6.12, numpy 2.5, scipy 1.18 and the latest tools
- Skip the pdm type check on pre-commit.ci
Documentation
- Bring the README remake checklist up to date and compile translations in the devcontainer
- Add a user guide whose screenshots are taken from the running app (#188)
- Rewrite the user guide from the code, add API pages and a generated sample book (#69)
- Build the manual on Read the Docs from the lock, with screenshots made on the builder
- Drop the remake checklist from the README and run each workflow as a single job
Tests and maintenance
- Add pytest-qt harness and UI pathway tests (#114)
- Keep the default test run fast and mark slow tests (#143)
- Run the test suite in parallel with pytest-xdist (#144)
- Fix UI tests that raced leftover windows and superseded renders (#177)
- Tidy the docs and tooling for a Python-only project (#87)
- Rename the project to py-scantailor
- Accept anti-aliased caption text in the thumbnail test
Full Changelog: https://github.com/adehad/py-scantailor/commits/v1.0.0-rc1