`SaneDev.snap()` raises `SANE_STATUS_INVAL` on Epson `epsonscan2` backend at any depth — works with `scanimage`

Open
#107 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
50/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Quiet
Tech stack
c, python
Domain
backend

Research direction

Start by reproducing the Epson failure with the minimal Python example, then inspect SaneDev_snap's sane_read() loop where the issue reports SANE_STATUS_INVAL. Compare its behavior with the successful scanimage run and verify that dev.snap() completes and returns the expected 8-bit image at the reported settings.

Written by the indexing model from the issue text.

Description

Environment

  • python-sane: 2.9.2 (both the distro package and a fresh pip install . from this repo)
  • Python 3.13.13, openSUSE Leap 16.0
  • SANE backend: epsonscan2:Perfection V39/GT-S650:esci2:usb:ES010D:317
  • Scanner: EPSON Perfection V39 / GT-S650 (USB)

Summary

SaneDev.snap() fails with _sane.error: Invalid argument (SANE_STATUS_INVAL) on every scan through the Epson epsonscan2 backend. The failure is independent of scan mode and depth — reproduced at 1-bit lineart and 8-bit grayscale. The same device scans cleanly with scanimage at both depths, so hardware, USB permissions and the backend itself are all functional.

Minimal reproducer

import sane

sane.init()
dev = sane.open("epsonscan2:Perfection V39/GT-S650:esci2:usb:ES010D:317")
dev.mode = "Grayscale"
dev.resolution = 300
dev.start()
print(dev.get_parameters())   # ('gray', 1, (2280, 2280), 8, 2280)
img = dev.snap()              # raises _sane.error: Invalid argument

start() and get_parameters() return GOOD; the INVAL is raised inside SaneDev_snap's sane_read() loop. Cross-check: scanimage --mode Grayscale --resolution 300 > test.pnm completes and yields a valid 8-bit PGM.

Please see this issue in scantpaper for more details.

Dominant language
C
Stars
61
Forks
22
PR merge metrics
No merged PRs in 30d

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from python-pillow/Sane

All issues in python-pillow/Sane

Similar issues

More C issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.