Headless Scanning Server For Fujitsu ScanSnap and Similar Devices.
These are pretty cheap to find used, I brought mine for CA$5 from a local electronics recycler.
Wikipedia Entry | |
Fujitsu ScanSnap S1500 Front | ![]() |
Fujitsu ScanSnap S1500 Rear | ![]() |
Fujitsu ScanSnap S1500 Internal | ![]() |
Fujitsu ScanSnap S1500 Closed | ![]() |
This is a duplex scanner (scans both sides at once) with a gravity fed tray and has a scan button on the device to start scanning.
The scan button on the device does not trigger the scanning function, it instead just notifies an accompanying software which then initiates the scan. I think the software for windows and mac was available till 2024 and then the support was dropped, I don't even know if this works with the latest windows and mac machines. But what I want is a standalone scan server where I just load the tray, press scan and shred the documents while my document storage automatically ingests the scanned document and processes it for later use.
Standalone Headless Scanning system
Apart from the ScanSnap scanner, I hooked up a SBC-Computer card (with a USB 2.0 or higher port) I had lying around (no preference, get the cheapest one, RPi, ROCK*, OrDroid, etc.)
Almost all of my machines are built over DietPi, even VMs, I use simple script to manage docker containers running on DietPi. This allows me to update, prune and backup the entire system easily. I use dietpi-software
to install Docker
which is optimized for DietPi.
The Device is now connected to SBC and is on, I can now create a docker-compose.yaml
like so:
services:
scanner:
image: ghcr.io/whizzzkid/scan-station:latest
container_name: scanner
hostname: scanner
restart: always
privileged: true
environment:
- TZ=${TZ}
volumes:
- /ingest:/scans
- /var/run/dbus:/var/run/dbus
don't forget to have the right mount path for /ingest
this is just an example, for me this is a NFS mount. Then start the scanning system:
./run.sh -cupv # based on the docker management script above, can be `docker compose up -d` too.
Load the docs to be shredded (or scanned before) in the tray and press the button. The first time it ran I was excited, it goes through so quickly and does both sides too. WOW!
This is way faster than my HP Flatbed and my phone camera scanner, time to cleanup all those pesky papers I have laying around.
The scan.sh script is all what it takes to scan the page, this is based on sane-scan-pdf.
You can configure the DPI and Mode settings in the docker-compose.yaml
:
environment:
- TZ='America/Edmonton' # defaults to 'Etc/UTC'
- dpi=120 # defaults to 300
- mode=Gray # defaults to 'Color'
- file_prefix=scan # defaults to 'scan'
- date_format="%Y-%m-%d-%H%M%S-%3N-%Z" # defaults to "%Y-%m-%d-%H%M%S-%3N-%Z"
Or, create a .env
file in the same directory as docker-compose.yaml
with the above variables, this will override the defaults.
# .env
TZ='America/Edmonton' # defaults to 'Etc/UTC'
dpi=120 # defaults to 300
mode=Gray # defaults to 'Color'
file_prefix=scan # defaults to 'scan'
date_format="%Y-%m-%d-%H%M%S-%3N-%Z" # defaults to "%Y-%m-%d-%H%M%S-%3N-%Z"
Tip
The computed filename with defaults will be scan-<YYYY>-<MM>-<DD>-<HHMMSS>-<3N>-<Z>.pdf
, for example scan-2025-01-01-120000-123-UTC.pdf
.
Or, if you want more flexibility, you can probably create your own custom scan script and overlay in the docker compose like:
...
volumes:
- ./your-custom-scan.sh:/etc/scanbd/scripts/scan.sh
...
The sane-scan-pdf project is built around Fujitsu scanners, but there is a possibility to provide a custom device.
So docker-compose.yaml
can be modified to have a vendor (this defaults to fujitsu
)
environment:
- vendor='Non-Fujitsu'
There are plenty of self-hosted solutions for document management available, two popular ones are paperless-ngx and papra, either should work till these can ingest from the same NFS share and have the document ready to be served.
- https://github.com/ep1cman/fujitsu-ix1300-scan-on-button inspiration for this work.
- https://github.com/rocketraman/sane-scan-pdf makes scanning so simple.
MIT