A  A

AD·VNVM·DATVM Down to a single bit of data : Tutorials : Latest Post An Introduction to the "Impost" Book Scanner, using Voussoir

Posted in || , , , , , , , , 17 min. to read

In short:

Following several design principles of my "Non-Destructive Guillotine", I introduce a more portable single-camera book scanner design. The scanner uses a hinged platen that works with tightly-bound and paperback books, while allowing the book to sit spine-down at a variable angle. I also introduce a piece of software, "Voussoir," which semi-automates the process of de-keystoning and cropping images.

This is a long post; thus, I've added a Table of Contents with links here:

Background / Introduction

In the year since I released my "Non-Destructive Guillotine" ("NDG") book scanner design, I've thought more about de-keystoning photographs of book pages.

In many planetary A "planetary" scanner is one that scans the book from above, typically using cameras. book scanner designs, from DIY Scanners to the DIYBookScanner community's Archivist Scanner to commercial scanners such as the Book2Net Ultra, the book's pages are flattened by a glass or acrylic platen at 90, 100, or 180 degrees (respectively, in the examples linked above). This works well for reducing reflections and glare on two two sides of the platen, and for allowing the use of two cameras, each of which can take photographs of one side of the book straight-on.

However, in my experience, the more obtuse the angle of a platen, the less able the platen is to "dig into" the gutter of a book, and thus to flatten the pages relative to at an acute angle. Less "dig" also means that books with text close to the gutter can be difficult to scan using this type of fixed-platen design. For this reason, and considering books that are so fragile or tightly-bound that they are unable to be opened to 90+ degrees, I've been experimenting with methods for photographing books at acute angles (i.e., angles where the book is open at less than 90 degrees).

Description of the Impost Scanner

It is with this background in mind that I am today excited to release a new scanner design, which I have named the "Impost Scanner." The scanner consists of three parts:

  1. A simple copystand, on which are mounted two lights and a single camera. The design can straightforwardly be modified to mount two cameras and additional lights Like the NDG scanner, this element is constructed from 3/4-inch "Schedule 40" PVC plumbing pipe, and is thus inexpensive to build, is collapsible, and is reconfigurable.
  2. A cradle, constructed from 1/2-inch plywood (or a similarly sturdy but lightweight material) and a few additional pieces of hardware, all of which can be purchased at hardware stores across the USA. This cradle, like the Archivist Scanner's, is adjustable for different book spine sizes. Additionally, unlike the Archivist design, its angle is independently adjustable for each side of the book.
    Atop the cradle lies a hinged platen, as with the NDG scanner. Like the NDG scanner, this platen allows for scanning tightly-bound and paperback books (which, with fixed platen designs, tend to close when pressure is not being applied to them); unlike the NDG scanner, this platen-cradle configuration allows scanning these types of books while still allowing the books to sit spine-down. The cradle moves laterally (to the left or right, depending on the handedness of the operator) on two wheels to allow the book's pages to be turned.
  3. Software. As part of this design project, I have been working to document and add to "bookscan," a piece of software written in one day in 2012 by Yutaka Tsutano. I have added a full command-line interface and documentation to the program, and have renamed the fork "Voussoir". It should work across platforms, and can run separate from the scanning process or be built into it, depending on whether one's camera can directly deposit images into a directory that a provided example script is watching.
    Voussoir looks at images and recognizes special "Glyphs", similar to QR Codes, that are in the image. The user affixes these glyphs at the corners (or at any fixed locations along the perimeter) of the book or platen before scanning and then informs Voussoir of the dimensions of the book. Really, the user informs Voussoir of the dimensions of space between the markers. With these pieces of information, Voussoir can recognize the book's pages and digitally separate, crop, and de-keystone them, making it look as though each page were photographed face-on.

Images of the Hardware Components Described Above

Note well: Some of the images below show a third piece of plexiglass between the two primary platen pieces. Further below, other photos show a piece of black cardstock / posterboard used instead. Black cardstock works better than a third layer of plexiglass, because it is thinner and thus allows the platen overall to dig into the book spine more. This third piece, whether of cardstock or another material, is useful for preventing glare on each side of the platen from the opposite page when photographing at acute angles.

Top view of the scanner. The operator stands facing the cradle as from this view. Top_View

Side view of the scanner Front_of_Scanner

Detail of the PVC copystand. All PVC pieces are "Schedule 40" 3/4-inch PVC, and are held in place by friction (i.e., no glue is necessary), making them able to be disassembled and reconfigured. PVC_Side

Side view of the cradle. The cradle is constructed of 1/2-inch plywood (four pieces total, each 14 x 16 inches), with small hinges connecting each pair. A larger hinge (which can likely be smaller than the pair selected for this build) controls the angle of the cradle, by fitting into 1/4-inch holes (or whatever size allows the hinge being used to "grip" the wooden base) that are drilled at one-inch intervals along the base. This image for a DIY Drafting Table provided inspiration for the racheting mechanism. Cradle_Side_View

Cradle chain detail. The chains on each side keep the two halves of the cradle from moving apart more than the thickness of the book being scanned. The chain is held in place by looping it over a finishing nail on each side of the cradle. Cradle_Chain_Detail

Outside detail of the cradle's platen guide. This piece is constructed from a T-shaped bracket, a small 90-degree bracket, and a straight mending plate, as well as a rubber wheel (visible in the photograph below). The guide is attached to the cradle with a medium-sized binder clip, and is thus able to be moved up and down to adjust for the size of the platen and the thickness of the book being scanned. Cradle_Guide_Detail_Outside

Interior detail of the cradle's platen guide described in the gloss next to the photograph above. The rubber wheel (available from many hardware stores) is visible in this photograph. Before scanning a book, the operator adjusts the guide so that (a) the wheel is just above the platen's edge, and (b) the edge of the guide is next to the platen, such that the platen cannot move laterally, whether at rest or suspended on the wheels. Cradle_Guide_Detail_Inside

The camera mount is constructed of one T-shaped plate, two "#2" electrical conduit hangers, two 1/4-inch wingnuts (assuming the electrical conduit hangers each come with a 1/4-inch bolt), and a 1/4 inch bolt (adjusted for depth by 1/4-inch hex nuts as necessary), which screws into the mounting hole at the base of the camera. Camera_Mount

Detail of the camera mount described in the gloss next to the photograph above. The 1/4-inch thumb-tightening bolt is kept in place in the t-shaped plate when the camera is not mounted by a thin o-ring. Camera_Mount_Detail

Detail of the lighting mount. The lighting mount is adapted from the hardware that comes with a "clamp light." A "#2" electrical conduit hanger attaches to the PVC; several washers fill out the middle of the hardware that came with the clamp light; and, in place of the original "clamping" piece, a hex bolt (or marble, etc.) fills the other side of the tightening mechanism that connects to the lamp itself. Light_Mount_Detail

Cradle hinge layout. Cradle hinge layout

Cradle hinge layout, alternative hinge view. The large hinge could be moved slightly to the left from its position in this photograph to allow easier folding for storage. Cradle hinge layout, alternative hinge view.

The Scanner's Name: Why "Impost"?

The names of this scanner design's hardware and software both follow an archway theme. A voussoir is a stone in an archway; a keystone is a type of voussoir. Voussoir (the software) is meant to be one piece among several in a book scanning workflow (like one of several stones that compose an arch), and deals centrally with the "keystone effect,", which is named after the type of arch stone. With this in mind, an "impost" is a block on which an archway rests. With this theme in mind, "springer" may be a more fitting name; however, when choosing the name, I wanted to avoid a namespace collision with Springer, the large publishing company.

Voussoir Source Code, and a Similar Project

Voussoir's source code and marker glyphs are available under a permissive license on GitHub. The GitHub repository also contains example scripts for (a) watching a folder for auto-processing images, and (b) invoking the program with several of its features.

I've been adding to this program in what feels like a primarily custodial way; I would be happy to collaborate on additional contributions to it!

Voussoir's primary purpose is to de-keystone images from a one- or two-camera scanner where the book was open at an acute angle. It can also be used with a basic copystand setup with book open flat, however. For example, I recently digitized a spiral-bound notebook, which was able to sit flat on a tabletop. By placing the glyphs near the corners of the notebook, I was able not to worry about precisely calibrating the camera's spatial relation to the notebook. Instead, once I had measured the notebook and entered the relevant measurements into Voussoir's command-line invocation, the program automatically separated and cropped the pages and performed the slight keystone correction necessary from having the camera not exactly overhead.

Exciting and similar development is currently being performed by Jonathon Duerig, one of the leaders of the DIYBookScanner.org community, in a program called marker-crop. marker-crop also uses glyphs and is intended to simplify the process of cropping images. To my knowledge, it does not currently support de-keystoning of images. Jonathon and I began working on these programs separately at approximately the same time, and have been in contact about feature development and collaboration; thus, marker-crop is also a project to be aware of and to watch.

Licensing of the Design and this Documentation

As with the NDG scanner last year, I am releasing this scanner hardware design into the Public Domain (or its nearest equivalent internationally) via the Creative Commons CC0 dedication, following Daniel Reetz' advice on the topic. This write-up and the images that are part of it are released under a Creative Commons Attribution-ShareAlike 4.0 license; if you would like to arrange a different license to re-use these materials, please contact me.

Example Input and Output from the Scanner

We start with two images from the scanner:

Left page, original image

Right page, original image

These images were passed to Voussoir using the following command. Voussoir was called once on each image, since each just contains one page rather than two:

./bin/voussoir \
    --verbose \
    --page-height 13.5 \
    --page-width 7.25 \
    --no-right-page \
    --offset-left-page-left-side 2.3 \
    --offset-left-page-right-side 0.7 \
    --offset-left-page-top-side 2.0 \
    --offset-left-page-bottom-side -2.3 \
    -i /path/to/test1_original.jpg \

./bin/voussoir \
    --verbose \
    --page-height 13.5 \
    --page-width 7.25 \
    --no-left-page \
    --offset-right-page-left-side -0.6 \
    --offset-right-page-right-side -2.2 \
    --offset-right-page-top-side 2.0 \
    --offset-right-page-bottom-side -2.5 \
    -i /path/to/test2_original.jpg \

The output from Voussoir is below. Note that the cropping is adjustable using the offset options above -- if desired, Voussoir can de-keystone and output the full image, showing glyphs and all. The units started with centimeter measurements of the width and height between the glyphs; I then divided the units by 2 to make them smaller and more manageable (Voussoir is unit-agnostic, but larger numbers will result in larger output file sizes). I then did some trial-and-error until I found offset values that I liked for the cropping.

Left page, Voussoir output

Right page, Voussoir output

As a final example, I processed the images from Voussoir using ScanTailor, to show what further-processed output could look like:

Left page, ScanTailor output

Right page, ScanTailor output

A program like Darktable could also be used to batch-adjust (e.g., sharpen) the Voussoir output before sending to ScanTailor.

Constructing the Scanner

Parts List

I have not listed prices for most of the tools listed below, as I assume that you either have or can rent or otherwise borrow them. Many hardware stores will cut plywood for a small charge (e.g., $0.25 - $1 per cut).


Item Quantity Approx. Price Per Unit (USD) Total Item Price (USD) Optional Item Price
Scissors 1
(Optional, but highly recommended) PVC cutting tool 1 10 10
(Optional, but recommended) Pliers (Useful for removing stuck PVC pipe from fittings) 1
Hammer (for the finishing nails) 1
Electrical tape 1
(Optional, but highly recommended, for platen hinge) Clear packing tape 1
Screwdriver 1
(Optional; Recommended to use a local hardware store instead) Jigsaw or circular saw for cutting plywood
Electric drill + drill heads that will allow the tip of the hinge used to “catch” on the hole
Required Total: 0 10


Item Quantity Approx. Price Per Unit (USD) Total Item Price (USD) Optional Item Price
Medium (1.25”) binder clips 6 0.15 0.9
Black anti-slip drawer liner (non-adhesive) (16” x 32”) 1 6 6
3” Straight mending plate 2 2.97 / 4 pack 1.485
2.5” 90-degree flat corner brace 2 2.67 / 4 pack 1.335
12” x 16” x 1/2” plywood (Price here is for a 1/2”x2’x4’ plywood sheet) 4 12 / sheet 12
18” thin chain 2 0.52 / foot 1.56
Screws and washers (to adjust for the thinness of the plywood) for the hinges (diameters will depend on the hinges used; screws should be as short as possible) (Approximate price listed) 5
Rubber wheels / rollers 2 1.1 2.2
3x3” T-shaped plate 2 1.39 2.78
1/4” wingnut + flathead bolt (for roller mount assembly) 2 0.75 1.5
Small gate hinge (2.5” long arm) 4 1.7 6.8
Large gate hinge (7.5” long arm) 2 4.97 9.94
Required Total: 51.5


Item Quantity Approx. Price Per Unit (USD) Total Item Price (USD) Optional Item Price
Acrylic sheet 11”x14”x3/32” (.093” thick suffices) 2 4.78 9.56
Black cardstock / posterboard, 14” x ~13” 1 1 1

PVC and fittings (for structure)

Item Quantity Approx. Price Per Unit (USD) Total Item Price (USD) Optional Item Price
3/4” Schedule 40 PVC ~7.10 feet (see cut list for specifics) (pricing here is for 10 feet, the length at which PVC is often sold) 2.70 / 10 feet 2.7
Coupler 3 0.35 1.05
Tee 4 0.75 3
90 angle 2 0.48 0.96
Cap 4 0.46 1.84
Required Total: 9.55


Item Quantity Approx. Price Per Unit (USD) Total Item Price (USD) Optional Item Price
Lightbulbs (1600 lumens/120 volt equivalent) (Price here is for CFL bulbs) 2 5 10
Clamp light with aluminum reflector (the clamp will be removed) 2 7.5 15
#2 (1" – should fit snugly enough to be tightened around the 3/4" PVC) conduit hangers with 1/4" carriage bolts 2 0.87 1.74
1/4" Wingnut 2 0.24 0.48
Extension cord with 2 plugin spaces 1 2.5 2.5
Washers (to fit through the bolt that comes in the lamp clamp assembly) 6 0.05 0.3
1/4" hex nut 2 0 (Take from Conduit hanger) 0
Required Total: 30.02

Camera mount

Item Quantity Approx. Price Per Unit (USD) Total Item Price (USD) Optional Item Price
#2 (1" – should fit snugly enough to be tightened around the 3/4" PVC) conduit hangers with 1/4" carriage bolts 2 0.87 1.74
1/4" Wingnut 2 0.24 0.48
3”x3” T-shaped plate 2 2.98 / 2 pack 2.98
1/4"x3/4” long Allen bolt / “socket cap screw/bolt,” with grooved head exterior (to allow thumb-tightening into camera) 1 0.55 0.55
(Optional) 1-2x additional 1/4" hex nut for spacing bolt for camera 2 0 (Take from Conduit hanger) 0
Thin o-ring that fits snugly over the 1/4" bolt for camera (for example, 5/16” Outside Diameter x 3/16” Inside Diameter x 1/16”) (Often comes in pack of 10, which is priced here) 1 2.27 2.27
Required Total: 8.02

Total Cost (Assuming you do not have any required parts already – if you do have some parts already, the cost decreases)

Required Parts Required + Optional Parts
109.65 119.65

Cut List


Purpose Inches (Approx.) Number Total
Frame feet / legs 3.5 2 7
Frame feet / legs 4 2 8
Frame height 13 4 52
Frame width 1.5 2 3
Frame width 9 1 9
Frame width 6 1 6
85 (7.08 feet)

Using the Scanner

Adjusting Spine Size for the Thickness of the Book

The book should first be placed spine-down (and closed) between the two sides of the cradle. The cradle should then be chained together at this distance.

At this point, the book can be removed, and the black drawer liner clipped onto the wood frame.

Adjusting platen wheel location for the thickness of the book

The book should be opened to its first page and placed onto the cradle. The platen should then be placed onto the book, resting on the open book's left page. At this point, the wheels can be clipped to the frame, such that (a) the edges of the metal mending plates form a channel for the two sides of the platen (i.e., such that the mending plates "hug" the sides of the platen), and (b) the wheels are just above the vertically-topmost edge of the platen.

Adjusting the Glyph Locations

The glyphs can be affixed for each book, or can be left in place regardless of book size. The glyphs do not need to be placed at the actual corners of the book; rather, they only need to provide a clear rectangle for Voussoir to see. Voussoir's "offset" options can then be used to fine-tune the cropping of the images as they are processed.

I recommend adjusting the glyphs for each book, such that the camera can zoom in as much as possible when taking photographs. I also recommend using the Voussoir PDF whose markers are shown in the example photos in this post -- it connects pairs of markers with lines, making it easier to align them.

Taking photographs


One challenge of photographing pages at an angle is that the camera must focus on multiple planes at the same time (i.e., depth of focus must be increased); lacking attention to this, part of the page may be out-of-focus in the transformed image.

Moving into your camera's Aperture-priority setting is one way to control depth-of-field. Additionally (or alternatively), some cameras allow manually controlling the point from which their auto-focus feature measures; in that case, setting the auto-focus to measure from the horizontal middle of one of the pages (i.e., vertically halfway between the gutter and outside edge of the book) can also help to keep all parts of the page in focus at once. This is a common question in photography forums; see, e.g., here.

The camera settings used for the example images above were as follows:

  1. Aperture-priority mode with autofocus
  2. ISO 160 (the lowest possible, meaning that more light is necessary)
  3. Aperture: F-22 (highest possible), meaning a small aperture
  4. Autofocus set to the largest part of the image possible, encompassing both sides of the book page (i.e., focus is not just on the edges of the book closest to the camera).
  5. Exposure compensation: +/- 0.

Moving the platen, Turning the pages

Choosing a platen configuration for a book

If you are using a hinged platen and the cradle is holding the book open at less than 90 degrees, you may experience distracting reflections on each side of the platen from the opposite page. To counteract this, I use the piece of black posterboard mentioned above. I keep this piece between the two main platen pieces. I also experimented with constructing the platen out of "anti-glare" acrylic or plexiglass, which is typically used for art and photography frames. I found that acrylic with this anti-glare coating often comes only in thin pieces, however, and also produces slight blurring when viewed at an angle, and so is not suitable for use as a primary platen (where thickness and thus weight are useful for flattening the pages). Eliminating glare from this type of setup without using a middle piece (turning the camera into a single-page rather than dual-page scanner) is difficult or impossible, as discussed in this StackExchange post that I started.

Photographing a book with this third platen piece is slightly more time-consuming, as each picture is of only one page (as the other is masked by the black-coated piece) instead of two; each picture also essentially loses some of the resolution that could otherwise be available to it if each page were fully framed in the camera's shot; to accomplish this with the Impost setup, the cradle would somewhat comically need to be placed on a Lazy Susan and rotated with each page turn. I've not tried this turntable approach; for me, just photographing each page filling half of the shot is acceptable.

In books with very thin gutters, the Impost design allows opening the book to 90 degrees and using just one piece of acrylic (with glyphs pasted on both sides), in order to "dig" as far into the book's binding as possible.

The process of manipulating the platen

Platen operation is swift and simple after a few minutes of practice. I am assuming in my description below that, facing the book, the pages of the book will turn right-to-left, as with English-language texts; with this in mind, the Impost setup can just as easily be set up in reverse, as for Arabic-language texts. I am also assuming the use of a three-leaf platen (two hinged pieces, plus a piece of black cardstock / posterboard [or a third piece of black-coated plexiglass, which is shown in some of the pictures below] As noted above, black cardstock works better than a third layer of plexiglass, because it's thinner and thus allows the platen overall to dig into the book spine more. between them).

The overall process looks like this:

Platen Usage

The platen begins closed, resting on the left page of the book.

Platen Lowered Middle Platen_Lowered_Middle

The middle leaf is pulled to the right, causing it and the other platen leaf to rest on the right page of the book. The left page of the book is now visible below one side of the platen, framed with the glyphs pasted around the platen.

Platen Lowered Open to Left Page Platen_Lowered_Open_to_Left_Page

A picture is now taken, capturing the left page and its glyphs.

The middle leaf is pulled to the left, covering the left page and exposing the right page, which remains under the other half of the hinged platen, framed in its glyphs.

Platen Lowered Open to Middle Platen_Lowered_Open_to_Middle

A picture is now taken, capturing the right page and its glyphs.

Platen Lowered Open to Right Page Platen_Lowered_Open_to_Right_Page

The right side of the platen is now folded over to the left page, returning the full platen to where it started: closed and resting on the left page of the book.

Platen Lowered Right Piece Being Turned Platen_Lowered_Page_Separator_Being_Turned

Holding the vertically-uppermost edges of the three leaves of the platen with the left hand, the operator starts to turn the right page toward the left.

Platen Middle Position Platen_Middle_Position

As the operator completes the page turn, she pulls the gripped edges of the platen upward slightly and to the left, so that the platen begins traveling along the rollers that are attached to the cradle. This causes the platen to move left along the left page, and out of the way so that the operator can finish turning the right page to the left.

The operator pushes down slightly on the gripped edges of the platen, causing it to function as a lever and raise the hinged side.

Platen Raised Platen_Raised

The operator pushes the platen back toward the right, so that it falls back into the page gutter, resting again on the left page, ready to be re-opened, and for the process above to be repeated.

Platen Lowered Middle Platen_Lowered_Middle

Alternative, platen-less usage of the scanner cradle

If, for some reason, it is desirable not to use a platen, but the book to be scanned sits open well when one side is flat, the cradle chain can be used to create a platen-less "teeter-totter" design:

Alternative "Teeter-Totter" Cradle Usage Alternative "Teeter-Totter" Cradle Usage

In this case, the glyphs could be affixed to the cradle itself.


I'm excited about this new design, and see it as an evolution of the principles being explored with the Non-Destructive Guillotine. I welcome constructive comments and suggestions, either directly or through the DIYBookScanner community.

More Posts:

  1. An Introduction to the "Non-Destructive Guillotine" ("NDG") Book Scanner // I introduce a new portable, single-camera book scanner design. The scanner is small enough to fit into a backpack when disassembled, and can be re-assembled in under 10 minutes. It does not require any power tools to construct; the only required tools are a tape measure, a PVC cutting tool, and scissors. A full list of parts, sizes, and prices are below, along with a video explaining the scanner's construction and use.
  2. A Workflow for Using Plaintext Notes with Zotero // I've created an "export translator" and a CSL file to facilitate creating and using plaintext notes associated with citations in the cross-platform reference manager Zotero. The CSL file should also be compatible with Mendeley and other programs that use the CSL standard.
  3. A Self-Hosted Sync Solution for Zotero // Because of my preference not to use the Zotero server to sync my academic library, I have written a small bash (command-line) function to sync Zotero database files over any server of one's choosing (including, e.g., OwnCloud or Dropbox).
  4. A Workflow for Using Plaintext Notes with JabRef // I've created two "export filters" to facilitate creating and using plaintext notes associated with citations in JabRef, a cross-platform reference manager.
  5. A Brief Introduction to Bayesian Reasoning, with a Calculator for Day-to-Day Use // I present a short conceptual introduction and calculator script (in Python) for Bayesian inference.
  6. Creating Word Processor Tables from R Dataframes // Here is a small function for creating Word- or LibreOffice-compatible tables from R.
  7. A Turnkey Solution for Graphing Qualtrics Data for Participants // Qualtrics is a point-and-click survey application that has many features but does not allow graphing data for participants after they click "Submit." I've developed a ready-to-go script in PHP for doing just that.
  8. KeePass2 KPScript Installation on Linux // KeePass2 comes with an extension that gives it a Command-Line Interface. I found it confusing to install in Linux, and so am posting instructions here.
  9. A Converter for Full KeePass2 XML Export to CSV // If you use KeePass2, you may have noticed that CSV exports do not include user-defined columns. I wrote a script to convert KeePass2 XML exports to CSV, allowing CSV exporting from KeePass2.