Fork of ScanSlicer (https://github.com/macrodev8/ScanSlicer), implementing a mirrored export patch.
Find a file
2026-09-12 15:37:44 +02:00
docs chore: prune boilerplate and refresh stale docs 2026-09-11 23:07:30 +02:00
packaging/appimage docs: add maintenance guide; fix AppImage version selection; bump to 1.1.0 2026-09-12 15:11:07 +02:00
scanslicer chore: prune boilerplate and refresh stale docs 2026-09-11 23:07:30 +02:00
.dockerignore docs: add maintenance guide; fix AppImage version selection; bump to 1.1.0 2026-09-12 15:11:07 +02:00
.env.example chore: add example environment variables for desktop runtime 2026-02-18 10:31:31 +00:00
.gitignore chore: fork setup — tidy ignores, untrack runtime state, add AGENTS.md 2026-09-11 20:23:00 +02:00
docker-compose.yml build: add docker runtime files 2026-03-04 11:12:14 +00:00
Dockerfile build: add docker runtime files 2026-03-04 11:12:14 +00:00
LICENSE docs: add GPLv3 licensing and upstream attribution 2026-03-04 13:46:58 +00:00
MAINTENANCE.md docs: add maintenance guide; fix AppImage version selection; bump to 1.1.0 2026-09-12 15:11:07 +02:00
pyproject.toml docs: add maintenance guide; fix AppImage version selection; bump to 1.1.0 2026-09-12 15:11:07 +02:00
README.md Minor README revision. 2026-09-12 15:37:44 +02:00
setup.py build: add legacy setuptools shim entry point 2026-02-18 11:10:54 +00:00
THIRD_PARTY_NOTICES build: harden dependency supply chain 2026-09-11 23:07:30 +02:00
uv.lock docs: add maintenance guide; fix AppImage version selection; bump to 1.1.0 2026-09-12 15:11:07 +02:00

ScanSlicer (fork)

ScanSlicer is a desktop Qt application (Python/PySide6) that detects multiple photos in a flatbed scan image, lets you correct each box manually, and exports perspective-corrected crops. It runs on Linux desktops over Wayland or X11.

This is a fork of macrodev8/ScanSlicer. Upstream credit: the original is inspired by PhotoSlicer by Francesco Vannini.

Changes from upstream

  • Fixed mirrored slice exports: added an explicit left/right orientation workflow with a Swap L/R button and color-coded left/right corners and edges.
  • Orientation corrections now persist through "squarize" and "reset rotation" (previously they were silently overwritten).
  • Hardened dependencies: switched to opencv-python-headless, removed the unused Pillow dependency, and made the AppImage build verify package hashes.

What It Does

  • Detects photo boxes from .png, .jpg, and .jpeg source images.
  • Supports threshold-based and Canny-based detection pipelines.
  • Provides manual correction tools (corner drag, edge drag, rotate, move, add/remove box).
  • Saves only locked boxes, each as a perspective-corrected output image.
  • Includes auto-tuning with feedback learning from your prior saved results.

Requirements

  • Python >= 3.10
  • A Linux desktop session over Wayland or X11
  • System libraries required by Qt/OpenCV (see Dockerfile for a known-good set)

Project dependencies (from pyproject.toml): PySide6, opencv-python-headless, numpy.

Quick Start

Use the provided AppImage file under "Releases", or build and run it yourself:

bash packaging/appimage/build-appimage-docker.sh
./appimage/dist/ScanSlicer-<version>-x86_64.AppImage

See docs/appimage.md for full details.

Run from source (uv)

uv sync --frozen
uv run scanslicer /path/to/scans

Open with no startup directory, or select the display backend explicitly:

uv run scanslicer
uv run scanslicer --backend wayland
uv run scanslicer --backend x11

You can also run the installed package directly with python -m scanslicer.

CLI

scanslicer [path] [--backend {auto,wayland,x11}]

Typical Workflow

  1. Open an input directory.
  2. Verify the output directory (defaults to the opened input directory).
  3. Run detection (Detect), or rely on automatic detection on image load.
  4. Adjust boxes as needed (drag corners/edges, rotate, move, add/remove).
  5. Lock the boxes to export (or use lock-all).
  6. Choose the save format (jpg or png) and quality/compression.
  7. Click Save images.

Only locked boxes are exported.

Configuration

ScanSlicer stores its defaults, presets, auto-tune feedback, and a session status log under ~/.config/scanslicer/ (or $XDG_CONFIG_HOME/scanslicer/). All paths can be overridden via SCANSLICER_*_PATH environment variables. See docs/runtime-config.md.

Docker

A GUI-oriented compose setup is provided for Linux desktop use:

docker compose up --build

See .env.example and docker-compose.yml for host UID/GID and Wayland/XDG settings.

Documentation

See docs/README.md for an index and recommended reading order (end-user guide, parameters, auto-tune, architecture, runtime config, AppImage, development).

Repository

scanslicer/                 application source (package)
packaging/appimage/         AppImage recipe and build scripts
docs/                       end-user and developer documentation
Dockerfile / docker-compose.yml   container runtime
pyproject.toml / uv.lock    package metadata and pinned dependencies

License

GNU GPL v3 — see LICENSE. See THIRD_PARTY_NOTICES for bundled third-party components.