scanservjs

scanservjs

Docker app from moritzf's Repository

Overview

scanservjs is a web UI frontend for your scanner. You can perform scans using your USB or network scanner through this web UI. The application allows you to share one or more scanners (using SANE) on a network without the need for drivers or complicated installation. To discover your devices, open the docker console and run: scanimage -L This will return a list of discovered devices. Copy the device id e.g. "epson2:libusb:001:002" and put it into the devices variable.

scanservjs

Build Status Code QL Status Docker Image Size (latest by date) Docker Pulls GitHub stars GitHub

screenshot

Copyright 2016-2026 Sam Strachan

What people are saying

I've decided to switch to using only this, I find using this in a browser is just perfect and way better than bloated software from printer manufacturers

It enabled me to still use my old hp3900 scanner without worrying about drivers and vendor specific UIs. Furthermore, scans just being accessible via an awesome web interface makes it even more brilliant!

This is a great project! The touchscreen and buttons on my Brother scanner are broken, meaning the device is useless by itself because one cannot trigger scans, but with this project I can trigger it remotely just fine.

Absolutely love untethering my scanner from my laptop. Also means that I know it will work "forever", regardless of OS updates, since its all just a docker container.

About

scanservjs is a web UI frontend for your scanner. It allows you to share one or more scanners (using SANE) on a network without the need for drivers or complicated installation.

Features

  • Cropping
  • Source selection (Flatbed / ADF)
  • Resolution
  • Output formats (TIF, JPG, PNG, PDF and TXT with Tesseract OCR) with varying compression settings
  • Filters: Autolevels, Threshold, Blur
  • Configurable overrides for all defaults as well as filters and formats
  • Multipage scanning (with collation for double sided scans)
  • International translations: Arabic, Czech, Dutch, French, German, Hungarian, Italian, Mandarin, Polish, Portuguese (PT & BR), Russian, Slovak, Spanish, Turkish, Ukrainian; Help requested
  • Light and dark mode
  • Responsive design
  • Docker images for amd64 and arm64
  • OpenAPI documentation

It supports any SANE compatible devices.

Requirements

  • SANE Scanner
  • Linux host (or VM with necessary pass-through e.g. USB)
  • Software sane-utils, ImageMagick, Tesseract and nodejs

Install

  • Debian:
    curl -s https://raw.githubusercontent.com/sbs20/scanservjs/master/bootstrap.sh | sudo bash -s -- -v latest
    
  • Arch:
    yay -S scanservjs
    
  • Docker:
    docker run \
      --detach \
      --publish 8080:8080 \
      --volume /var/run/dbus:/var/run/dbus \
      --restart unless-stopped \
      --name scanservjs-container \
      --privileged sbs20/scanservjs:latest
    

Documentation

Installation and setup

Configuration

Developing

Running scanservjs

In most cases the use of the app should be fairly self-explanatory. When the app first loads, it attempts to detect your scanner - this step is the most precarious and may either require custom drivers or some additional steps if you're running a network scanner or docker. See the documentation above for more.

Once the scanner is detected then you have a number of pages.

Scan

This page gives access to the controls for your scanner. The app will generally find the settings available automatically, although some scanners mis-report their abilities. (If this is the case, then you can override what's detected, see Configuration and device override for more). If geometry is available (selecting scan size and position) then you will have cropping available to you.

There is also the ability to perform batch scanning. If you have a document feeder, then just use the Auto option. If not then use Manual and the app will prompt you to change pages between scans.

Any scan operation will always result in a single file. Some image formats, such as PDF and TIF support multiple pages, while others, such as PNG and JPG do not. If the scan pipeline results in more than one file, then the app will zip the files into a single output. You can choose the image format under Format.

You can create and customise your own pipelines.

Files

Any scanned files will be saved in a flat directory which has a simple web view available on this page. The intended usage of the app is to allow the user to save their scans locally - i.e. to download the files. The app will never delete these files, but if you run under docker then unless volume mapping is specified then the files may be lost when you run a new version.

Furthermore, users in real life will want to store their scans with their own names, directory structures and cloud services or NAS devices. The permutations and possibilities are endless and are beyond the scope of the app.

scanservjs can integrate files either through pipeline automation or file actions. See integration documentation for more.

Settings

The settings page allows you to change the appearance and locale / language.

About

Copyright information and system info.

OpenAPI documentation

There is built in OpenAPI documentation with an API explorer. Access it direct using /api-docs or navigate from the About page.

OpenAPI

Why?

This is yet another scanimage-web-front-end. Why? It originally started as an adaptation of phpsane - just to make everything a bit newer, give it a refresh and make it work on minimal installations without imagemagick - that version is still available but is no longer maintained. Since then, I just wanted to write it in node and enhance it a bit, and it's been a labour of love ever since.

Acknowledgements

  • This project owes its genesis to phpsane
  • Everyone who has filed issues, tested, fixed issues, added translations and helped over the years. Thank you!

More about SANE

Install Scanservjs on Unraid in a few clicks.

Find Scanservjs in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.

Open the Apps tab on your Unraid server Search Community Apps for Scanservjs Review the template variables and paths Click Install

Download Statistics

730,747
Total Downloads
45,150
This Month
28,590
Avg / Month

Total Downloads Over Time

Loading chart...

Related apps

Details

Repository
sbs20/scanservjs
Last Updated2026-06-25
First Seen2022-10-23

Runtime arguments

Web UI
http://[IP]:[PORT:8080]
Network
bridge
Shell
sh
Privileged
true

Template configuration

Path for Scan OutputPathrw

Path for the file output from performed scans

Target
/var/lib/scanservjs/output
AppData Config PathPathrw

Folder for persisting configuration data

Target
/etc/scanservjs
Value
/mnt/user/appdata/scanservjs
Web Interface PortPorttcp

Port for the web interface

Target
8080
Value
1234
Saned Net HostsVariable

If you want to use a SaneOverNetwork scanner then to perform the equivalent of adding hosts to /etc/sane.d/net.conf specify a list of ip addresses separated by semicolons in the SANED_NET_HOSTS environment variable.

Target
SANED_NET_HOSTS
Airscan DevicesVariable

If you want to specifically add sane-airscan devices to your /etc/sane.d/airscan.conf then use the AIRSCAN_DEVICES environment variable (semicolon delimited).

Target
AIRSCAN_DEVICES
Ignore Scanimage ListVariable

Forces the application to ignore the result of the automatic device detection (scanimage -L) and instead only uses the entries present in the configuration file and docker environment variables.

Target
SCANIMAGE_LIST_IGNORE
Default
false | true
Value
false
DevicesVariable

Force add devices use DEVICES (semicolon delimited).

Target
DEVICES
OCR LanguageVariable

Determines the language that is to be used for OCR (optical character recognition). The value has to conform with tesseracts naming scheme.

Target
OCR_LANG
dbusPathrw

dbus (needed for automatic detection of network scanners through bonjour)

Target
/var/run/dbus
Default
eng | deu | fra | spa
Value
/var/run/dbus