Skip to content

gutschke/scanservjs

 
 

Repository files navigation

scanservjs (Community Fork)

Important

This is a community fork of sbs20/scanservjs, maintained by Markus Gutschke. The master branch mirrors upstream. For the full feature set and a pre-built package, see the production branch.

Installing this fork

Pre-built Debian/Ubuntu packages are available:

wget https://github.com/gutschke/scanservjs/raw/refs/heads/binary/scanservjs_3.0.4-1_all.deb
sudo apt install ./scanservjs_3.0.4-1_all.deb

Enhancements over upstream

  • PDF Editor: Rearrange, rotate, and delete pages in scanned PDFs directly in the browser; merge multiple documents into one with drag-and-drop and full undo/redo.
  • Smart Autocrop: Automatic document boundary detection, deskew, and crop for flatbed scans.
  • Installable PWA: Add scanservjs to your home screen; the app name is configurable per instance.
  • Pixel-Precise Coordinates: Dual mm/pixel input fields with aspect-ratio lock for exact scan geometry.
  • File Previews: In-browser previews for PDFs, images, and OCR text, with on-the-fly TIFF transcoding.
  • Scan on Tab Click: Optional immediate scan trigger when revisiting the Scan tab.
  • UI Fixes: Various interface refinements and bug fixes.
  • Security Hardening: Input validation, HTTP security headers, and fixes for common injection and traversal patterns.

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

screenshot

Copyright 2016-2023 Sam Strachan (Original) | Community Fork Maintainer: Markus (Current)

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
  • Image transformations: Rotate (90° clockwise/counter-clockwise) and Flip (horizontal/vertical)
  • 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, arm64 and armv7
  • 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.

Image Transformations

Above the preview image, you will find image transformation controls:

  • Rotate 90° counter-clockwise: Rotates the image 90 degrees to the left
  • Rotate 90° clockwise: Rotates the image 90 degrees to the right
  • Flip horizontally: Mirrors the image along the vertical axis
  • Flip vertically: Mirrors the image along the horizontal axis

These transformations are applied to both the preview and the final scanned output. The flip buttons are highlighted when active. Transformations are reset when you clear the preview.

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.

PDF files also have an Edit button that opens the document editor, where you can rearrange or delete pages, rotate pages, adjust paper size, perform duplex page-order operations (interleave/deinterleave for double-sided scans), and merge multiple documents into one — all without leaving the browser.

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

About

SANE scanner nodejs web ui

Resources

License

Code of conduct

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • JavaScript 46.3%
  • Vue 27.5%
  • Python 21.7%
  • Shell 3.2%
  • Dockerfile 0.8%
  • HTML 0.4%
  • Other 0.1%