---
title: "Release Notes: v1.1.0"
product: "LumiScan Text Reader"
component: "lumiscan-text-reader"
version: "1.1.0"
display_version: "1.1.0.6"
latest_version: true
language: "en"
url: "https://docs.hdvisionsystems.com/en/lumiscan-text-reader/1.1.0/release-notes/v1-1-0-2026-08-10.html"
---

# Release Notes: v1.1.0 – LumiScan Text Reader

First functioning release of LumiScan Text Reader. Earlier versions registered the application’s Data Layer nodes but returned a fixed placeholder result, so nothing below was usable before.

## New

**Text reading.** `<module>/read-text/execute` reads the printed text in a camera image and reports it twice over: the whole text as the engine laid it out, and a per-word list carrying a confidence and a position for every word.

**A choice of recognition engine**, `input/engine`: the modern neural-network `LSTM`, the original pattern-matching `LEGACY`, both together, or `DEFAULT` to let the engine choose. `LEGACY` is worth trying on dot-matrix and laser-etched marking.

**Twelve text layouts**, `input/layout`, from `SINGLE_CHAR` up to whole-page analysis with orientation detection. The default `SINGLE_BLOCK` suits a cropped label.

**A character set restriction**, `input/characters/mode` with `allow` and `deny`. Reading a numeric part number with `DIGITS` removes the whole class of `O`/`0` and `S`/`5` substitutions rather than filtering them afterwards - the cheapest accuracy improvement available.

**A confidence threshold**, `input/min-score`, so a control program never sees a word the engine had little faith in. The result reports the threshold that was applied, so a short word list can be told apart from a bad image.

**A region of interest per reading**, `input/crop`, which is both the biggest accuracy improvement and the biggest speed improvement available.

**Uploadable language models.** English and the orientation model ship with the application, and you add more by uploading `.traineddata` files into `…/activeConfiguration/lumiscan-text-reader/tessdata`. Uploading **adds** languages - the shipped ones are always searched as well, so English keeps working and you never copy our files anywhere. The file name is the language code, so there is nothing to look up: upload `deu.traineddata` and set `input/language` to `deu`. A model is usable on the very next reading, with no restart. `system/tessdata-dirs` shows every directory searched, `system/languages` what was found across them, and `system/set-tessdata-dir` points the upload directory somewhere else - a USB stick, for instance.

**Several modules**, each with its own settings and results, so one installation can watch several cameras. One licence covers ten modules.

**A status on every operation**: `output/status-code` and `output/status-text`, where a negative code always means the run failed and produced nothing.

## Worth knowing

**Text is not a code.** An OCR reading always returns something, and a misread looks exactly like a correct reading. Set `input/characters/mode` and `input/min-score` before relying on one in production - see [Reading Accurately](https://docs.hdvisionsystems.com/en/lumiscan-text-reader/1.1.0/lumiscan-text-reader/reading-accurately.html).

**An empty reading means no text was found, and nothing else.** Every other reason a run could produce nothing - an unreachable camera, an unusable setting, an engine that could not start - is caught and reported as a negative status code. A reader that could not start reports `-7` and says why, rather than looking like a working reader in front of a blank part.

**A language that is not installed is replaced by English rather than refused.** A reading validates the language up front and refuses an uninstalled one, naming what **is** available; and if a model disappears afterwards, `output/result.language` reports what was actually used. Read that field, not your own input, when you need to know how a reading was produced. See [Language Models](https://docs.hdvisionsystems.com/en/lumiscan-text-reader/1.1.0/lumiscan-text-reader/language-models.html).

**Every invalid input is reported at once**, and each message names the **node** to change rather than an internal field name - `min-score must be between 0 and 1, got 1.5`.

**The whole text is not filtered by the confidence threshold**, only the word list is. They answer different questions and can legitimately disagree.
