Repository navigation
Releases: foxzyt/LibreOMR
Release list
LibreOMR v1.2.0
LibreOMR 1.2.0 Release Notes
LibreOMR 1.2.0 introduces LibreOMR Desktop, an intuitive graphical application designed to streamline the grading and evaluation of multiple-choice bubble sheets for educators, institutions, and assessment coordinators.
LibreOMR Desktop Overview
LibreOMR Desktop provides an end-to-end workflow for managing, processing, and analyzing standardized answer sheets directly from a clean desktop interface.
Key Capabilities
- Single and Batch Sheet Evaluation: Process individual scanned sheets or evaluate entire batches from a directory in seconds.
- Answer Key and Grading Configuration: Define answer keys with custom question weights, point scales, and the ability to mark questions as voided with automatic full credit.
- Roster and Student Association: Map student names and identification numbers via roster CSV import to automatically associate marks with student profiles.
- Statistical Dashboard and Item Analysis: Review real-time performance indicators, including average score, approval percentage, score distribution, and individual question difficulty.
- Export Options: Export detailed grading results and student records directly to CSV and JSON formats for spreadsheet and database integration.
- Printable Template Library: Includes a comprehensive catalog of standardized A4 answer sheets (10 to 100 questions, 3 to 5 options), economical 2-in-1 and 4-in-1 layouts, and True/False assessment sheets in six languages (English, Portuguese, Spanish, French, German, and Italian).
- Windows Integration: Native desktop application with file associations, shell context menu integration for right-click grading of images and folders, and an integrated installer.
Precompiled Binary Packages
| Platform | Architecture | Archive | Checksum |
|---|---|---|---|
| Linux | x86_64 | libreomr-linux-x86_64.tar.gz |
SHA256 |
| Windows | x86_64 | libreomr-windows-x86_64.zip |
SHA256 |
| macOS | Apple Silicon (arm64) | libreomr-macos-arm64.tar.gz |
SHA256 |
Package Contents
Every release package includes:
bin/: CLI binary (libreomr) and dynamic runtime libraries.lib/: Import and shared/static library targets.include/libreomr/: C++ header (libreomr.hpp) and C ABI header (libreomr.h).lib/cmake/LibreOMR/: CMake package configuration forfind_package(LibreOMR REQUIRED).lib/pkgconfig/:libreomr.pcfor pkg-config.LICENSE: GNU General Public License v3.0.README.md: Documentation and code examples.
Verifying Checksums
To verify integrity, compare SHA-256 hashes against SHA256SUMS.txt:
# Linux
sha256sum -c SHA256SUMS.txt
# macOS
shasum -a 256 -c SHA256SUMS.txt
# Windows PowerShell
Get-FileHash -Algorithm SHA256 libreomr-*.zipCopyright (C) 2026 Bernardo Alvim. Licensed under GNU General Public License v3.0.
Full Changelog: v1.1.3...v1.2.0
LibreOMR v1.1.3
LibreOMR 1.1.3
Fixes & CLI
- Bubble refinement: require minimum ink mass before adjusting center to prevent centroid drift onto printed letters in empty bubbles.
- CLI: add
--no-orient,--no-adaptive-threshold, and--no-refine-bubblesflags tolibreomr process.
Precompiled Binary Packages
| Platform | Architecture | Archive | Checksum |
|---|---|---|---|
| Linux | x86_64 | libreomr-linux-x86_64.tar.gz |
SHA256 |
| Windows | x86_64 | libreomr-windows-x86_64.zip |
SHA256 |
| macOS | Apple Silicon (arm64) | libreomr-macos-arm64.tar.gz |
SHA256 |
Package Contents
Every release package includes:
bin/: CLI binary (libreomr) and dynamic runtime libraries.lib/: Import and shared/static library targets.include/libreomr/: C++ header (libreomr.hpp) and C ABI header (libreomr.h).lib/cmake/LibreOMR/: CMake package configuration forfind_package(LibreOMR REQUIRED).lib/pkgconfig/:libreomr.pcfor pkg-config.LICENSE: GNU General Public License v3.0.README.md: Documentation and code examples.
Verifying Checksums
To verify integrity, compare SHA-256 hashes against SHA256SUMS.txt:
# Linux
sha256sum -c SHA256SUMS.txt
# macOS
shasum -a 256 -c SHA256SUMS.txt
# Windows PowerShell
Get-FileHash -Algorithm SHA256 libreomr-*.zipCopyright (C) 2026 Bernardo Alvim. Licensed under GNU General Public License v3.0.
Full Changelog: v1.1.2...v1.1.3
LibreOMR v1.1.2
LibreOMR 1.1.2
Fixes
- Fiducial detection: scale adaptive threshold window proportionally in corner detector fallback to prevent hollowed-out markers at 300+ DPI.
Precompiled Binary Packages
| Platform | Architecture | Archive | Checksum |
|---|---|---|---|
| Linux | x86_64 | libreomr-linux-x86_64.tar.gz |
SHA256 |
| Windows | x86_64 | libreomr-windows-x86_64.zip |
SHA256 |
| macOS | Apple Silicon (arm64) | libreomr-macos-arm64.tar.gz |
SHA256 |
Package Contents
Every release package includes:
bin/: CLI binary (libreomr) and dynamic runtime libraries.lib/: Import and shared/static library targets.include/libreomr/: C++ header (libreomr.hpp) and C ABI header (libreomr.h).lib/cmake/LibreOMR/: CMake package configuration forfind_package(LibreOMR REQUIRED).lib/pkgconfig/:libreomr.pcfor pkg-config.LICENSE: GNU General Public License v3.0.README.md: Documentation and code examples.
Verifying Checksums
To verify integrity, compare SHA-256 hashes against SHA256SUMS.txt:
# Linux
sha256sum -c SHA256SUMS.txt
# macOS
shasum -a 256 -c SHA256SUMS.txt
# Windows PowerShell
Get-FileHash -Algorithm SHA256 libreomr-*.zipCopyright (C) 2026 Bernardo Alvim. Licensed under GNU General Public License v3.0.
Full Changelog: v1.1.1...v1.1.2
LibreOMR v1.1.1
LibreOMR 1.1.1
Fixes
- Fiducial detection: dynamically scale background sampling ring to support high-resolution and 300+ DPI scans.
- Orientation: add circular perimeter contrast scoring to prevent false rotations on blank and partially answered sheets.
Precompiled Binary Packages
| Platform | Architecture | Archive | Checksum |
|---|---|---|---|
| Linux | x86_64 | libreomr-linux-x86_64.tar.gz |
SHA256 |
| Windows | x86_64 | libreomr-windows-x86_64.zip |
SHA256 |
| macOS | Apple Silicon (arm64) | libreomr-macos-arm64.tar.gz |
SHA256 |
Package Contents
Every release package includes:
bin/: CLI binary (libreomr) and dynamic runtime libraries.lib/: Import and shared/static library targets.include/libreomr/: C++ header (libreomr.hpp) and C ABI header (libreomr.h).lib/cmake/LibreOMR/: CMake package configuration forfind_package(LibreOMR REQUIRED).lib/pkgconfig/:libreomr.pcfor pkg-config.LICENSE: GNU General Public License v3.0.README.md: Documentation and code examples.
Verifying Checksums
To verify integrity, compare SHA-256 hashes against SHA256SUMS.txt:
# Linux
sha256sum -c SHA256SUMS.txt
# macOS
shasum -a 256 -c SHA256SUMS.txt
# Windows PowerShell
Get-FileHash -Algorithm SHA256 libreomr-*.zipCopyright (C) 2026 Bernardo Alvim. Licensed under GNU General Public License v3.0.
Full Changelog: v1.1.0...v1.1.1
LibreOMR v1.1.0
LibreOMR 1.1.0
Changes
- Fiducial Detection: Support corner detection when non-page background (e.g. table margins) is present around the sheet using local contrast scoring and fallback candidate search.
- Binarization: Use adaptive thresholding instead of global Otsu in
Processor::processto handle non-uniform lighting and shadows. - Bubble Alignment: Add
refine_bubble_centersoption to locally adjust bubble sampling coordinates based on ink centroid, compensating for paper curvature. - Orientation: Add
auto_orientto detect 0°, 90°, 180°, and 270° page rotations using candidate quad scoring. - Image Rotation: Update
Image::rotateto expand canvas dimensions to prevent clipping rotated content.
API Additions
- C++:
ProcessorConfig::auto_orient,ProcessorConfig::refine_bubble_centers, and corresponding getters/setters inProcessor. - C API:
libreomr_processor_set_auto_orient,libreomr_processor_set_adaptive_thresholding,libreomr_processor_set_refine_bubble_centers.
Distribution
Precompiled packages and SHA256SUMS.txt are attached below.
Precompiled Binary Packages
| Platform | Architecture | Archive | Checksum |
|---|---|---|---|
| Linux | x86_64 | libreomr-linux-x86_64.tar.gz |
SHA256 |
| Windows | x86_64 | libreomr-windows-x86_64.zip |
SHA256 |
| macOS | Apple Silicon (arm64) | libreomr-macos-arm64.tar.gz |
SHA256 |
Package Contents
Every release package includes:
bin/: CLI binary (libreomr) and dynamic runtime libraries.lib/: Import and shared/static library targets.include/libreomr/: C++ header (libreomr.hpp) and C ABI header (libreomr.h).lib/cmake/LibreOMR/: CMake package configuration forfind_package(LibreOMR REQUIRED).lib/pkgconfig/:libreomr.pcfor pkg-config.LICENSE: GNU General Public License v3.0.README.md: Documentation and code examples.
Verifying Checksums
To verify integrity, compare SHA-256 hashes against SHA256SUMS.txt:
# Linux
sha256sum -c SHA256SUMS.txt
# macOS
shasum -a 256 -c SHA256SUMS.txt
# Windows PowerShell
Get-FileHash -Algorithm SHA256 libreomr-*.zipCopyright (C) 2026 Bernardo Alvim. Licensed under GNU General Public License v3.0.
Full Changelog: v1.0.3...v1.1.0
LibreOMR v1.0.3
LibreOMR 1.0.3
Patch release resolving coordinate space projection in debug rendering and adding defensive allocation guards.
Bug Fixes
- Debug Overlay Projection: Fixed coordinate space mismatch in
PageResult::renderDebugImageandlibreomr_result_render_debugwhen processing rotated or skewed images. Bubble overlays are now projected via template-to-base homography directly onto the original image space. - Memory Safety: Added
nullptrguards post-callocinPageResult::toCacross questions and bubble allocations to prevent null pointer dereferences on out-of-memory (OOM) conditions.
Assets and Distribution
Precompiled packages are available below for Linux (x86_64), Windows (x86_64), and macOS (Apple Silicon arm64). Integrity checksums are listed in SHA256SUMS.txt.
Precompiled Binary Packages
| Platform | Architecture | Archive | Checksum |
|---|---|---|---|
| Linux | x86_64 | libreomr-linux-x86_64.tar.gz |
SHA256 |
| Windows | x86_64 | libreomr-windows-x86_64.zip |
SHA256 |
| macOS | Apple Silicon (arm64) | libreomr-macos-arm64.tar.gz |
SHA256 |
Package Contents
Every release package includes:
bin/: CLI binary (libreomr) and dynamic runtime libraries.lib/: Import and shared/static library targets.include/libreomr/: C++ header (libreomr.hpp) and C ABI header (libreomr.h).lib/cmake/LibreOMR/: CMake package configuration forfind_package(LibreOMR REQUIRED).lib/pkgconfig/:libreomr.pcfor pkg-config.LICENSE: GNU General Public License v3.0.README.md: Documentation and code examples.
Verifying Checksums
To verify integrity, compare SHA-256 hashes against SHA256SUMS.txt:
# Linux
sha256sum -c SHA256SUMS.txt
# macOS
shasum -a 256 -c SHA256SUMS.txt
# Windows PowerShell
Get-FileHash -Algorithm SHA256 libreomr-*.zipCopyright (C) 2026 Bernardo Alvim. Licensed under GNU General Public License v3.0.
Full Changelog: v1.0.2...v1.0.3
LibreOMR v1.0.2
LibreOMR 1.0.2
Patch release fixing out-of-bounds crash on empty input images.
Bug Fixes
- Fixed unhandled exception in
Processor::process: Processing empty images (0x0 or unallocated buffers) or zero-dimension templates now returns a graceful failed-alignmentPageResultinstead of throwingstd::out_of_range.
Assets and Distribution
Precompiled packages are available below for Linux (x86_64), Windows (x86_64), and macOS (Apple Silicon arm64). Integrity checksums are listed in SHA256SUMS.txt.
Precompiled Binary Packages
| Platform | Architecture | Archive | Checksum |
|---|---|---|---|
| Linux | x86_64 | libreomr-linux-x86_64.tar.gz |
SHA256 |
| Windows | x86_64 | libreomr-windows-x86_64.zip |
SHA256 |
| macOS | Apple Silicon (arm64) | libreomr-macos-arm64.tar.gz |
SHA256 |
Package Contents
Every release package includes:
bin/: CLI binary (libreomr) and dynamic runtime libraries.lib/: Import and shared/static library targets.include/libreomr/: C++ header (libreomr.hpp) and C ABI header (libreomr.h).lib/cmake/LibreOMR/: CMake package configuration forfind_package(LibreOMR REQUIRED).lib/pkgconfig/:libreomr.pcfor pkg-config.LICENSE: GNU General Public License v3.0.README.md: Documentation and code examples.
Verifying Checksums
To verify integrity, compare SHA-256 hashes against SHA256SUMS.txt:
# Linux
sha256sum -c SHA256SUMS.txt
# macOS
shasum -a 256 -c SHA256SUMS.txt
# Windows PowerShell
Get-FileHash -Algorithm SHA256 libreomr-*.zipCopyright (C) 2026 Bernardo Alvim. Licensed under GNU General Public License v3.0.
Full Changelog: v1.0.1...v1.0.2
LibreOMR v1.0.1
LibreOMR 1.0.1
Patch release fixing bubble label matching in synthesized answer sheets.
Bug Fixes
- Fixed substring collision in
Template::renderFilledSheet: Answer label matching now uses exact token parsing (delimited by commas or semicolons) instead of substring search, preventing unintended fills on numeric or prefix-sharing labels (e.g., answering "10" no longer erroneously marks option "1").
Assets and Distribution
Precompiled packages are available below for Linux (x86_64), Windows (x86_64), and macOS (Apple Silicon arm64). Integrity checksums are listed in SHA256SUMS.txt.
Precompiled Binary Packages
| Platform | Architecture | Archive | Checksum |
|---|---|---|---|
| Linux | x86_64 | libreomr-linux-x86_64.tar.gz |
SHA256 |
| Windows | x86_64 | libreomr-windows-x86_64.zip |
SHA256 |
| macOS | Apple Silicon (arm64) | libreomr-macos-arm64.tar.gz |
SHA256 |
Package Contents
Every release package includes:
bin/: CLI binary (libreomr) and dynamic runtime libraries.lib/: Import and shared/static library targets.include/libreomr/: C++ header (libreomr.hpp) and C ABI header (libreomr.h).lib/cmake/LibreOMR/: CMake package configuration forfind_package(LibreOMR REQUIRED).lib/pkgconfig/:libreomr.pcfor pkg-config.LICENSE: GNU General Public License v3.0.README.md: Documentation and code examples.
Verifying Checksums
To verify integrity, compare SHA-256 hashes against SHA256SUMS.txt:
# Linux
sha256sum -c SHA256SUMS.txt
# macOS
shasum -a 256 -c SHA256SUMS.txt
# Windows PowerShell
Get-FileHash -Algorithm SHA256 libreomr-*.zipCopyright (C) 2026 Bernardo Alvim. Licensed under GNU General Public License v3.0.
Full Changelog: v1.0.0...v1.0.1
LibreOMR v1.0.0
LibreOMR 1.0.0
Initial release of LibreOMR, a C++17 and C library for Optical Mark Recognition (OMR).
Core Features
- Document rectification: Automatic detection of 4 corner registration fiducials via connected component analysis and projective homography computation using Hartley-normalized Direct Linear Transformation (DLT).
- Photometric analysis: Otsu optimal global thresholding, integral-image adaptive local thresholding, and differential inner-bubble sampling relative to local paper background.
- Classification and ambiguity handling: Fill ratio calculation, relative contrast scoring, detection of multiple marks on single-choice fields, and confidence interval estimation.
- Dual API:
- Modern C++ API (
libreomr/libreomr.hpp) with RAII, STL containers, and integrated JSON serialization. - C ABI (
libreomr/libreomr.h) with opaque handles, explicit error codes, thread-local error retrieval, and dynamic/static linking support.
- Modern C++ API (
- Zero external image or parser dependencies: Integrated PNG, JPEG, BMP, and TGA codecs, and embedded JSON parser/serializer.
- Form synthesis: Programmatic rendering of scannable blank forms and calibration answer sheets directly from template definitions.
- CLI utility (
libreomr): Command-line tool for template creation, sheet rendering, batch form evaluation, and debug visual overlay export.
Assets and Distribution
Precompiled packages are available below for Linux (x86_64), Windows (x86_64), and macOS (Apple Silicon arm64). Integrity checksums are listed in SHA256SUMS.txt.
Precompiled Binary Packages
| Platform | Architecture | Archive | Checksum |
|---|---|---|---|
| Linux | x86_64 | libreomr-linux-x86_64.tar.gz |
SHA256 |
| Windows | x86_64 | libreomr-windows-x86_64.zip |
SHA256 |
| macOS | Apple Silicon (arm64) | libreomr-macos-arm64.tar.gz |
SHA256 |
Package Contents
Every release package includes:
bin/: CLI binary (libreomr) and dynamic runtime libraries.lib/: Import and shared/static library targets.include/libreomr/: C++ header (libreomr.hpp) and C ABI header (libreomr.h).lib/cmake/LibreOMR/: CMake package configuration forfind_package(LibreOMR REQUIRED).lib/pkgconfig/:libreomr.pcfor pkg-config.LICENSE: GNU General Public License v3.0.README.md: Documentation and code examples.
Verifying Checksums
To verify integrity, compare SHA-256 hashes against SHA256SUMS.txt:
# Linux
sha256sum -c SHA256SUMS.txt
# macOS
shasum -a 256 -c SHA256SUMS.txt
# Windows PowerShell
Get-FileHash -Algorithm SHA256 libreomr-*.zipCopyright (C) 2026 Bernardo Alvim. Licensed under GNU General Public License v3.0.
Full Changelog: https://github.com/foxzyt/LibreOMR/commits/v1.0.0