How to Scan Documents over a Shared Network: TWAIN, SANE, eSCL, and Web SDK Options
Dynamic Web TWAIN (DWT)’s Remote Scan feature makes it possible to scan documents from your scanner or multi-function printer (MFP) directly to any device. You may wonder what other network scanning options exist. This article is going to give a brief overview of scanning over the network and why DWT’s solution is a better option.
What you’ll build: This guide compares network scanning protocols (SANE, eSCL, WSD) and shows how Dynamic Web TWAIN’s Remote Scan feature enables browser-based document scanning from any device on a shared network.
Key Takeaways
- Dynamic Web TWAIN Remote Scan enables driverless, browser-based document scanning from any device on a LAN without installing client software.
- eSCL (AirScan) is the leading vendor-neutral network scanning protocol, supported by macOS, Windows 10/11, and Linux, but cannot be used directly from JavaScript due to CORS restrictions.
- SANE’s network daemon (saned) supports only USB-connected scanners, requires client software installation, and lacks auto-discovery.
- Dynamic Web TWAIN unifies TWAIN, SANE, ICA, and eSCL scanner access behind a single web SDK, supporting USB and network-connected scanners with auto-discovery.
Common Developer Questions
- How do I scan documents from a shared network scanner in a web browser?
- What network scanning protocols support driverless scanning over LAN (eSCL vs WSD vs SANE)?
- How does Dynamic Web TWAIN Remote Scan work across Windows, Linux, and macOS?
Prerequisites
To try Dynamic Web TWAIN’s Remote Scan feature, Get a 30-day free trial license for Dynamic Web TWAIN. Download the SDK from the official downloads page.
Existing Network Scanning Options
Share a Scanner via the Operating System
It is possible to share a printer on Windows. However, it is not possible to share a document scanner. A multi-function device can be shared but we cannot use its scanning ability.

Share a USB Scanner over LAN with SANE (saned)
On Linux, we can share USB-connected scanners through an Intranet using saned.
You can learn about how to set it up by seeing Debian’s wiki.
After the setup, we can scan on any device with sane installed like mobile scanning on Android devices using SANEDroid.

Cons:
- It requires running sane on the client.
- It only supports USB-connected scanners.
- It does not support auto-discovery. Users have to input the IP of the server manually.
Use the eSCL (AirScan) Protocol for Driverless Network Scanning
Many scanners now support a protocol called eSCL. It is a vendor-neutral network protocol that allows driverless scanning via ethernet, wireless and USB connected devices. It uses Bonjour for auto-discovery.
eSCL is also known as Apple AirScan which is promoted by Apple.
eSCL is a simple XML and HTTP based protocol. You can find its full specification on Mopria.org.
Here is a simple Python script that creates a scanning job and saves the scanned document using the eSCL protocol (This works for HP Officejet Pro 6970):
from requests import get as requests_get, post as requests_post
def scan():
scanner_ip = "192.168.8.66"
xml = '''<scan:ScanSettings xmlns:scan="http://schemas.hp.com/imaging/escl/2011/05/03" xmlns:dd="http://www.hp.com/schemas/imaging/con/dictionaries/1.0/" xmlns:dd3="http://www.hp.com/schemas/imaging/con/dictionaries/2009/04/06" xmlns:fw="http://www.hp.com/schemas/imaging/con/firewall/2011/01/05" xmlns:scc="http://schemas.hp.com/imaging/escl/2011/05/03" xmlns:pwg="http://www.pwg.org/schemas/2010/12/sm"><pwg:Version>2.1</pwg:Version><scan:Intent>Photo</scan:Intent><pwg:ScanRegions><pwg:ScanRegion><pwg:Height>3300</pwg:Height><pwg:Width>2550</pwg:Width><pwg:XOffset>0</pwg:XOffset><pwg:YOffset>0</pwg:YOffset></pwg:ScanRegion></pwg:ScanRegions><pwg:InputSource>Platen</pwg:InputSource><scan:DocumentFormatExt>image/jpeg</scan:DocumentFormatExt><scan:XResolution>300</scan:XResolution><scan:YResolution>300</scan:YResolution><scan:ColorMode>Grayscale8</scan:ColorMode><scan:CompressionFactor>25</scan:CompressionFactor><scan:Brightness>1000</scan:Brightness><scan:Contrast>1000</scan:Contrast></scan:ScanSettings>'''
resp = requests_post('http://{0}/eSCL/ScanJobs'.format(scanner_ip), data=xml, headers={'Content-Type': 'text/xml'})
if resp.status_code == 201:
url = '{0}/NextDocument'.format(resp.headers['Location'])
r = requests_get(url)
with open("scanned.jpg",'wb') as f:
f.write(r.content)
scan()
Due to the CORS policy, it is not possible to directly use eSCL in JavaScript.
eSCL is supported by macOS, Windows 11, Windows 10 with KB5014666 and Linux with the sane-airscan backend.
Use WSD for Windows-Based Network Scanning
Another vendor-neutral network protocol similar to eSCL is based on Microsoft’s Web Services for Devices framework. This protocol is called WSD.
WSD is supported by Windows and Linux with the sane-airscan backend.
Not all scanners support both WSD and eSCL. Some may only support WSD and some may only support eSCL.
Scan Documents from Any Device with Dynamic Web TWAIN Remote Scan
Dynamic Web TWAIN runs a local service called Dynamic Web TWAIN Service to interact with scanners and web clients. The service can run on Windows, Linux and macOS and supports scanner APIs like TWAIN, ICA, SANE and eSCL.
When the remote scan feature is enabled, other devices on the Intranet can contact the service to scan documents via a proxy service. Dynamic Web TWAIN provides an easy-to-use web SDK to implement a web document scanner.
Here are the pros of DWT’s remote scan:
- It is a driverless scanning solution.
- It runs on end-users’ web browsers on any device with no extra software required.
- It supports USB-connected scanners as well as network scanners.
- Easy setup with auto discovery feature and SSL certificate support.

Download Dynamic Web TWAIN to have a try on your own.
Common Issues and Edge Cases
- eSCL cannot be used from a browser directly. Due to CORS restrictions, eSCL/AirScan scanning cannot be triggered via client-side JavaScript. Browser-based solutions like Dynamic Web TWAIN work around this by routing requests through a local service proxy.
- SANE over network requires manual IP configuration. saned does not support multifunction device auto-discovery; each client must be configured with the server’s IP address. Consider eSCL or Dynamic Web TWAIN for plug-and-play setups.
- Protocol compatibility varies by scanner model. Some scanners support only WSD, others only eSCL, and some support both. Always verify your scanner’s supported protocols before choosing a network scanning approach.