Little command line program that allow to send scan from device to computer.
Can be run with npx :
npx node-hp-scan-to or with Docker (see below)
Developed and tested for the following HP All-in-One Printers:
- HP Officejet 6500A Plus
- HP Deskjet 3520
- HP Smart Tank Plus 570 series
The following printer are also working:
- HP Deskjet 3050 All-in-One Printer - J610a
- HP Officejet 5230
- HP Officejet 6700 premium
- HP Officejet 5740
- HP Officejet 6950
- HP OfficeJet Pro 8025e
There are good chances it also works on your HP All-in-One Printer. For this purpose, the original HP Windows application's interaction with the device has been reverse engineered.
This project is not endorsed by nor affiliated with HP.
✔️JPG scan output ✔️PDF document scan output ✔️Scan from automatic document feeder ✔️Dual side with automatic document feeder ✔️Multi page from platen ✔️Automatic IP address discovery ✔️Prebuilt Docker images (multi arch) ✔️Command line support (Cross platform) ✔️Customizable file names ✔️Customizable resolution ✔️Customizable label on the device
--addressfollowed by the ip address of the printer, i.e.
-ip 192.168.0.5. This overrides
--labelThe label to display on the printer (default is the hostname).
--namefollowed by the printer name, it probably contains spaces, so it needs to be quoted, i.e.
-name "Officejet 6500 E710n-z"
--directoryfollowed by the directory path where the scanned documents should be saved, i.e.
-d ~/Documents/Scans. Defaults to
/tmp/scan-to-pc<random value>when not set.
--temp-directoryTemp directory used for processing. Defaults to
/tmp/scan-to-pc<random value>when not set.
--patternfollowed by the pattern for the filename without file extension, i.e.
"scan"_dd.mm.yyyy_hh:MM:ssto name the scanned file
scan_19.04.2021_17:26:47. Date and time patterns are replaced by the current date and time, text that should not be replaced need to be inside quotes. Documentation for the pattern can be found here in the section
Mask options. Defaults to
scan<increasing number>_page<page number>when not set.
--resolutionResolution in DPI of the scans (defaults is 200).
-D, --debug"enables debug logs.
If you wish to test it by cloning this repository:
git clone ... cd node-hp-scan-to yarn install -d yarn build # now start the program with the ip or name of the desired printer node dist/index.js -ip 192.168.1.4 # or -n "Officejet 6500 E710n-z"
Run with docker
Be aware that with docker you have to specify the ip address of the printer via the
IP environment variable, because
bonjour service discovery uses multicast network traffic which by default doesn't work in docker.
You could however use docker's macvlan networking, this way you can use service discovery and the
NAME environment variable.
All scanned files are written to the volume
/scan, the filename can be changed with the
PATTERN environment variable.
For the correct permissions to the volume set the environment variables
To enable debug logs set the environment variable
-D. Can also be used for any other command line parameters.
The name shown on the printer's display is the hostname of the docker container, which defaults to a random value, so you may want to specify it via the
Example for docker:
git clone ... cd node-hp-scan-to docker build . -t node-hp-scan-to docker run -e IP=192.168.0.5 -e PGID=1000 -e PUID=1000 --hostname scan node-hp-scan-to
Example for docker-compose:
Write the following
docker-compose.yml file into this directory:
version: "3" services: node-hp-scan-to: build: context: . dockerfile: Dockerfile container_name: node-hp-scan-to hostname: scan environment: - IP=192.168.0.5 - PATTERN="scan"_dd.mm.yyyy_hh:MM:ss - PGID=1000 - PUID=1000 - TZ=Europe/London volumes: - /some/host/directory/or/volume:/scan restart: always
docker-compose up -d --build.
Public Pre-built Docker image:
https://hub.docker.com/repository/docker/manuc66/node-hp-scan-to (take master:
docker pull manuc66/node-hp-scan-to:master)
I'm using Visual Studio Code to debug this application, so instead of running ts-node just enter
code . and press F5 to start debugging.
You may want to set your printers ip or name in
💖 Support this project
If this project helped you save money or time or simply makes your life also easier, you can give me a cup of coffee =)