{"id":13820548,"url":"https://github.com/sbs20/scanservjs","last_synced_at":"2026-10-19T15:15:56.508Z","repository":{"id":38710118,"uuid":"73478141","full_name":"sbs20/scanservjs","owner":"sbs20","description":"SANE scanner nodejs web ui","archived":false,"fork":false,"pushed_at":"2026-10-03T12:38:42.000Z","size":17640,"stargazers_count":1169,"open_issues_count":65,"forks_count":197,"subscribers_count":8,"default_branch":"master","last_synced_at":"2026-10-10T12:36:25.216Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://sbs20.github.io/scanservjs/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sbs20.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2016-11-11T13:02:21.000Z","updated_at":"2026-10-10T10:56:08.000Z","dependencies_parsed_at":"2023-10-16T23:59:53.272Z","dependency_job_id":"bcdf2a77-bb42-4ff9-bb9c-1cac8a3ab2e7","html_url":"https://github.com/sbs20/scanservjs","commit_stats":null,"previous_names":[],"tags_count":74,"template":false,"template_full_name":null,"purl":"pkg:github/sbs20/scanservjs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sbs20%2Fscanservjs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sbs20%2Fscanservjs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sbs20%2Fscanservjs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sbs20%2Fscanservjs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sbs20","download_url":"https://codeload.github.com/sbs20/scanservjs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sbs20%2Fscanservjs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":344872684,"owners_count":38358747,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-10-03T21:59:58.778Z","status":"online","status_checked_at":"2026-10-19T02:00:06.414Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-04T08:01:05.140Z","updated_at":"2026-10-19T15:15:56.502Z","avatar_url":"https://github.com/sbs20.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"# scanservjs\n\n[![Build Status](https://img.shields.io/github/actions/workflow/status/sbs20/scanservjs/build.yml?branch=master\u0026style=for-the-badge)](https://github.com/sbs20/scanservjs/actions)\n[![Code QL Status](https://img.shields.io/github/actions/workflow/status/sbs20/scanservjs/codeql-analysis.yml?branch=master\u0026style=for-the-badge\u0026label=CodeQL)](https://github.com/sbs20/scanservjs/actions)\n[![Docker Image Size (latest by date)](https://img.shields.io/docker/image-size/sbs20/scanservjs?style=for-the-badge)](https://hub.docker.com/r/sbs20/scanservjs)\n[![Docker Pulls](https://img.shields.io/docker/pulls/sbs20/scanservjs?style=for-the-badge)](https://hub.docker.com/r/sbs20/scanservjs)\n[![GitHub stars](https://img.shields.io/github/stars/sbs20/scanservjs?label=Github%20stars\u0026style=for-the-badge)](https://github.com/sbs20/scanservjs)\n[![GitHub](https://img.shields.io/github/license/sbs20/scanservjs?style=for-the-badge)](https://github.com/sbs20/scanservjs/blob/master/LICENSE.md)\n\n![screenshot](https://github.com/sbs20/scanservjs/raw/master/docs/screen0.jpg)\n\nCopyright 2016-2026 [Sam Strachan](https://github.com/sbs20)\n\n## What people are saying\n\n\u003e I've decided to switch to using only this, I find using this in a browser is\n\u003e just perfect and way better than bloated software from printer manufacturers\n\n\n\u003e It enabled me to still use my old hp3900 scanner without worrying about\n\u003e drivers and vendor specific UIs. Furthermore, scans just being accessible via\n\u003e an awesome web interface makes it even more brilliant!\n\n\n\u003e This is a great project! The touchscreen and buttons on my Brother scanner are\n\u003e broken, meaning the device is useless by itself because one cannot trigger\n\u003e scans, but with this project I can trigger it remotely just fine.\n\n\n\u003e Absolutely love untethering my scanner from my laptop. Also means that I know\n\u003e it will work \"forever\", regardless of OS updates, since its all just a docker\n\u003e container.\n\n## About\n\nscanservjs is a web UI frontend for your scanner. It allows you to share one or\nmore scanners (using SANE) on a network without the need for drivers or\ncomplicated installation.\n\n## Features\n\n* Cropping\n* Source selection (Flatbed / ADF)\n* Resolution\n* Output formats (TIF, JPG, PNG, PDF and TXT with Tesseract OCR) with varying\n  compression settings\n* Filters: Autolevels, Threshold, Blur\n* Configurable overrides for all defaults as well as filters and formats\n* Multipage scanning (with collation for double sided scans)\n* International translations: Arabic, Czech, Dutch, French, German, Hungarian,\n  Italian, Mandarin, Polish, Portuguese (PT \u0026 BR), Russian, Slovak, Spanish,\n  Turkish, Ukrainian;\n  [Help requested](https://github.com/sbs20/scanservjs/issues/154)\n* Light and dark mode\n* Responsive design\n* Docker images for `amd64`, `arm64` and `armv7`\n* OpenAPI documentation\n\nIt supports any\n[SANE compatible devices](http://www.sane-project.org/sane-supported-devices.html).\n\n## Requirements\n\n* SANE Scanner\n* Linux host (or VM with necessary pass-through e.g. USB)\n* Software sane-utils, ImageMagick, Tesseract and nodejs\n\n## Install\n\n* Debian:\n  ```sh\n  curl -s https://raw.githubusercontent.com/sbs20/scanservjs/master/bootstrap.sh | sudo bash -s -- -v latest\n  ```\n* Arch:\n  ```sh\n  yay -S scanservjs\n  ```\n* Docker:\n  ```sh\n  docker run \\\n    --detach \\\n    --publish 8080:8080 \\\n    --volume /var/run/dbus:/var/run/dbus \\\n    --restart unless-stopped \\\n    --name scanservjs-container \\\n    --privileged sbs20/scanservjs:latest\n  ```\n\n## Documentation\n\n### Installation and setup\n\n* [Standard install](docs/01-install.md)\n* [Docker install](docs/02-docker.md)\n* [SANE setup](docs/03-sane.md)\n* [Troubleshooting](docs/04-troubleshooting.md)\n\n### Configuration\n\n* [Configuration](docs/10-configuration.md)\n* [Integration](docs/11-integration.md)\n* [Recipes](docs/12-recipes.md)\n* [Using a proxy](docs/13-proxy.md)\n\n### Developing\n\n* [Development](docs/50-development.md)\n* [Localisation](docs/51-localisation.md)\n* [Testing](docs/60-testing.md)\n* [References](docs/90-references.md)\n* [QNAP](docs/91-qnap.md)\n\n### External resources\n\n* [External resources](docs/99-external.md)\n\n## Running scanservjs\n\nIn most cases the use of the app should be fairly self-explanatory. When the app\nfirst loads, it attempts to detect your scanner - this step is the most\nprecarious and may either require custom drivers or some additional steps if\nyou're running a network scanner or docker. See the documentation above for\nmore.\n\nOnce the scanner is detected then you have a number of pages.\n\n### Scan\n\nThis page gives access to the controls for your scanner. The app will generally\nfind the settings available automatically, although some scanners mis-report\ntheir abilities. (If this is the case, then you can override what's detected,\nsee [Configuration and device override](docs/10-configuration.md) for more). If\ngeometry is available (selecting scan size and position) then you will have\ncropping available to you.\n\nThere is also the ability to perform batch scanning. If you have a document\nfeeder, then just use the `Auto` option. If not then use `Manual` and the app\nwill prompt you to change pages between scans.\n\nAny scan operation will always result in a single file. Some image formats, such\nas PDF and TIF support multiple pages, while others, such as PNG and JPG do not.\nIf the scan pipeline results in more than one file, then the app will zip the\nfiles into a single output. You can choose the image format under `Format`.\n\nYou can create and customise your own pipelines.\n\n### Files\n\nAny scanned files will be saved in a flat directory which has a simple web view\navailable on this page. The intended usage of the app is to allow the user to\nsave their scans locally - i.e. to download the files. The app will never delete\nthese files, but if you run under docker then unless volume mapping is specified\nthen the files may be lost when you run a new version.\n\nFurthermore, users in real life will want to store their scans with their own\nnames, directory structures and cloud services or NAS devices. The permutations\nand possibilities are endless and are beyond the scope of the app.\n\nscanservjs can integrate files either through pipeline automation or file\nactions. See [integration documentation](docs/11-integration.md) for more.\n\n### Settings\n\nThe settings page allows you to change the appearance and locale / language.\n\n### About\n\nCopyright information and system info.\n\n## OpenAPI documentation\n\nThere is built in OpenAPI documentation with an API explorer. Access it direct\nusing `/api-docs` or navigate from the `About` page.\n\n![OpenAPI](https://github.com/sbs20/scanservjs/raw/master/docs/swagger.png)\n\n## Why?\n\nThis is yet another scanimage-web-front-end. Why? It originally started as an\nadaptation of phpsane - just to make everything a bit newer, give it a refresh\nand make it work on minimal installations without imagemagick - that version is\n[still available](https://github.com/sbs20/scanserv) but is no longer\nmaintained. Since then, I just wanted to write it in node and enhance it a bit,\nand it's been a labour of love ever since.\n\n## Acknowledgements\n\n * This project owes its genesis to\n   [phpsane](http://sourceforge.net/projects/phpsane/)\n * [Everyone](https://github.com/sbs20/scanservjs/graphs/contributors) who has\n   filed issues, tested, fixed issues, added translations and helped over the\n   years. Thank you!\n\n## More about SANE\n\n * \u003chttp://www.sane-project.org/\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsbs20%2Fscanservjs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsbs20%2Fscanservjs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsbs20%2Fscanservjs/lists"}