Fork of ScanSlicer (https://github.com/macrodev8/ScanSlicer), implementing a mirrored export patch.
Find a file
dan c8194742d1 docs: add maintenance guide; fix AppImage version selection; bump to 1.1.0
- Add MAINTENANCE.md (dependency updates, EOL watch, build/smoke-test
  workflows, orientation-fix invariants)
- Remove AGENTS.md; fold its unique context into MAINTENANCE.md
- Add .venv/.posit/appimage to .dockerignore to shrink build context
- Fix build-appimage.sh to select the wheel matching pyproject.toml
  version instead of alphabetically-first (bundled stale 1.0.0 code)
- Bump version 1.0.0 -> 1.1.0 in pyproject.toml, uv.lock, AppImage recipe
2026-09-12 15:11:07 +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 docs: finalize README, attribute fork, sync AGENTS.md 2026-09-11 23:24:54 +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, whose original maintainer is inactive. It is kept in a working state for the maintainer's own photo scans.

Upstream credit: the original is inspired by PhotoSlicer by Francesco Vannini. This repository keeps the GNU GPL v3 license for compatibility with that upstream work.

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

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.

Run the AppImage (preferred)

Build the AppImage and run it:

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

See docs/appimage.md for full details, including the local build path and a Docker Desktop caveat.

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.