woolworm (Pre-Alpha State)
Hello Northwestern Digitization team (and anyone else who may be following along), welcome to woolworm, your new (hopefully) one-stop shop for digitization. I have attempted to abstract as much of the intricacies of image transformation in python. At least to the best of my ability. While we are working on this grant, I will be working on build automation and a CLI for you all so that it can be even easier to use. The point of this repo is in case I die, it can be developed and such. Here is my current feature list, where I am open to suggestions or requests, because I like this sort of thing:
Road to v0.1.0
- API
- Load image
- Deskew
- Intelligent document binarization/grayscale
- Tesseract OCR
- Standalone Ollama LLM OCR
- Marker Document Understanding LLM OCR
- HathiTrust (currently experimental in a standalone script)
Road to v1.0.0
- Pipelines
- Image processing
- OCR (do we need a pipeline for this? It is a single function)
- HathiTrust (Migrated Brendan's Ruby script to python)
- ???
- Profit
- CLI (To be done later)
- Figure out how the hell I publish a python package
Automation, supercomputing interfacing, remote directories will be handled in a different repository. This is to track one step of the data science process: data cleaning.
Prerequisites
You will want to familiarize yourself with the absolute basics of calling object-methods. If you want to use any LLM models, you will need to install Ollama. Feel free to contact me if you need assistance in setting up Ollama.
Quickstart
If you are extremely impatient, you can get started with two lines of code
from woolworm import Woolworm
Woolworm.Pipelines.process_image("inputfilename.jpg", "outputfilename.jpg")
In the backend, it looks like this. You can find this code in the cookbook directory
from woolworm import Woolworm
p = woolworm() # Creates the "woolworm" class
f = "filename.jpg"
base_name = f.replace(".jpg", "")
# Step 1: Load original
img = p.load(f)
# Step 2: de-skew
img = p.deskew_with_hough(img)
# Step 3: This is kinda weird, and currently fine-tuned for use with NU's environmental impact statements
# Long story short, the programming will use some heuristics to detect if the image is a diagram or mostly text
# If the program thinks it is text, it will binarize, if it thinks it is a diagram, it will not.
img = p.binarize_or_gray(img)
p.save_image(img)
Sample output:
Metadata
Release files for woolworm 0.0.10
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| woolworm-0.0.10.tar.gz | 7.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| woolworm-0.0.10-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 14.3 kB
Release files / woolworm-0.0.10.tar.gz
| Download URL | woolworm-0.0.10.tar.gz |
|---|---|
| Size | 7.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
62bee209e8091597b139b5de665e1c235e9f35c1dca87ea2b54d742b9aa793c9
|
|
BLAKE2b-256 checksum How to use checksums |
3963877dbf5fe871dbf1ac89f67e772165a0e0cc28f797381dae3432a3b714e7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 3, 2025.
Transparency logRelease files / woolworm-0.0.10-py3-none-any.whl
| Download URL | woolworm-0.0.10-py3-none-any.whl |
|---|---|
| Size | 7.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
22e20b5b4b30820fbb2a05aa7074cc9b440e6908ccfbc1eed0a2d34e175253de
|
|
BLAKE2b-256 checksum How to use checksums |
98c87c48214c3c999dcf384035c304c3ad941f650bf6173eab88a7f452c6cbe8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 3, 2025.
Transparency log