Repository navigation
Releases: aharmer/RAPIID
Release list
RAPIID v4.2.0
Changelog
All notable changes to this project are documented here.
[4.2.0] — 2026-08-17
Added
-
QR code and 1D barcode reading. The barcode camera previously read
DataMatrix only (libdmtxsupports nothing else). Three checkboxes below the
barcode camera window now select which types to read — DataMatrix,
QR, and 1D barcode (EAN, UPC, Code 39, Code 128). DataMatrix is
ticked by default, so existing behaviour is unchanged unless the extra types
are enabled. A value decoded from any type is entered as the accession
number. Types are attempted in the order above and only when ticked, so the
default configuration costs no extra work per frame.QR and 1D reading use OpenCV's own detectors, so no new dependencies, DLLs or
installer content are involved. Both options are disabled automatically if
the OpenCV build in use does not provide them.
Fixed
- 1D barcodes held close to the camera failed to decode. OpenCV's barcode
detector stops working once the individual bars exceed roughly four pixels
wide, so moving a barcode nearer the lens — the natural response to a failed
scan — made it worse. Decoding now retries on progressively downscaled
frames, which thins the bars and recovers those cases. Full size is tried
first, so a normally-sized barcode still costs a single pass.
[4.1.0] — 2026-08-05
Added
- Editable camera names. Each camera's name can now be edited in its header.
Cameras default to "Label camera 1", "2" … as before; renaming one (e.g. to
"Specimen") marks what it captures. The name flows into the image filename
(<accession>_specimen.jpg), the EXIF description, and thecaptionand
titleCSV columns, so a specimen image is distinguishable from a label
image. Default-named cameras keep the existing_label/_label_N
filenames, so existing workflows are unchanged. Names are reduced to a
filename-safe form, and duplicate names have the camera number appended so
one capture cannot overwrite another. Custom names survive renumbering when
another camera is removed, and are saved to the config file.
Fixed
- Re-capturing an accession added duplicate CSV rows. Overwriting the images
for an existing accession appended a second set of rows to the taxon CSV
instead of replacing the originals. Rows are now matched onimage_filename
and updated in place, keeping one row per image. The CSV is rewritten through
a temporary file and an atomic replace, so an interrupted write can no longer
truncate it.
[4.0.1] — 2026-07-23
Patch release. Fixes a packaging fault that prevented v4.0 from starting on
machines without a conda installation, and makes FLIR camera setup diagnosable.
Added
- Documented the FLIR Spinnaker SDK prerequisite in the installer section of
the README. The SDK supplies the FLIR camera driver, which cannot be bundled
into the installer, so a clean machine detects no FLIR camera even though the
app is otherwise working. The note explains that the SDK version need not
match the app — RAPIID ships its own Spinnaker runtime (2.7.0.128) and needs
the SDK only for the driver — and makes clear it is not needed for
webcam-only use. - Step-by-step Spinnaker SDK installer instructions: which installer to
download (x64), the Application Development profile, the Visual Studio
prompt, when to tick "I will use GigE cameras" (not for the USB 3.0
Blackfly S), and that evaluation programs can be declined. Also notes that
SpinView can be used to test the camera independently of RAPIID.
Fixed
-
FLIR detection failures were invisible. Diagnostics were written with
print(), but the app is frozen withbase="Win32GUI"and therefore has no
console, so end users saw cameras silently missing with no explanation. The
reason a FLIR camera was not found is now reported in the in-app log panel,
along with a note that the Spinnaker SDK is only required for FLIR cameras.
The camera-discovery error handler no longer refers users to a console that
does not exist. -
Frozen builds failed to start on machines without a conda install, with
"The code execution cannot proceed because zlib.dll was not found".
python38.dlllinks againstzlib.dlldynamically in conda builds, but
cx_Freeze placedzlib.dllunderlib/, where the Windows loader does not
look — it searches the executable's own directory. Development machines
masked this because the conda environment is onPATH.setup.pynow ships
zlib.dllalongside the executable, and fails the build early if it cannot
be located in the active environment.
[4.0] — 2026-07-23
Unified release. RAPIID and RAPIIDlite are now a single application under the
name RAPIID.
Changed
- Renamed the application from RAPIIDlite to RAPIID. The two applications
had merged into one, and the "lite" qualifier no longer described a real
distinction. This release is the direct continuation of RAPIIDlite v3.2 —
no functionality has been removed. - Renamed the repository from
aharmer/RAPIIDlitetoaharmer/RAPIID. The
previous URL redirects to the new one. - Renamed source files, GUI modules, icons, and the workflow document to drop
thelitequalifier (rapiid_lite.py→rapiid.py,
rapiidlite_GUI.*→rapiid_GUI.*,RAPIIDlite_icon.*→RAPIID_icon.*). - Updated the installer: application name, install directory, Start Menu and
desktop shortcuts, and output filename now use the RAPIID name. The Inno
SetupAppIdis unchanged, so existing installations upgrade in place
rather than installing alongside the old version. - Updated the Windows AppUserModelID to
ManaakiWhenua.RAPIID.4. - Images captured with this version are tagged
RAPIIDin their EXIFMake
andSoftwarefields, and in thecapture_deviceCSV column. Images
captured with earlier versions retain their originalRAPIIDlitetags. - Replaced the
pyuic5.exelauncher in the GUI rebuild helper with
python -m PyQt5.uic.pyuicand relative paths. The.exelauncher embeds
an absolute interpreter path at install time and breaks if the environment
is renamed.
Fixed
- Documented the
qt-materialversion ceiling inenvironment.yml. Release
2.14.2 dropped PyQt5 support, and newer versions fail silently: the material
theme's icons and fonts never load, and the app logs
"qt_material must be imported after PySide or PyQt!". The pin at 2.12 was
already correct; the constraint is now stated so it is not upgraded past it.
Upgrading
Existing installations upgrade in place. Desktop and Start Menu shortcuts are
recreated under the new name; you may want to remove stale pinned taskbar
shortcuts, which point at the old executable name.
Earlier releases
Versions 3.2 and earlier were published under the name RAPIIDlite.
RAPIID v4.1.0
Changelog
All notable changes to this project are documented here.
[4.1.0] — 2026-08-05
Added
- Editable camera names. Each camera's name can now be edited in its header.
Cameras default to "Label camera 1", "2" … as before; renaming one (e.g. to
"Specimen") marks what it captures. The name flows into the image filename
(<accession>_specimen.jpg), the EXIF description, and thecaptionand
titleCSV columns, so a specimen image is distinguishable from a label
image. Default-named cameras keep the existing_label/_label_N
filenames, so existing workflows are unchanged. Names are reduced to a
filename-safe form, and duplicate names have the camera number appended so
one capture cannot overwrite another. Custom names survive renumbering when
another camera is removed, and are saved to the config file.
Fixed
- Re-capturing an accession added duplicate CSV rows. Overwriting the images
for an existing accession appended a second set of rows to the taxon CSV
instead of replacing the originals. Rows are now matched onimage_filename
and updated in place, keeping one row per image. The CSV is rewritten through
a temporary file and an atomic replace, so an interrupted write can no longer
truncate it.
[4.0.1] — 2026-07-23
Patch release. Fixes a packaging fault that prevented v4.0 from starting on
machines without a conda installation, and makes FLIR camera setup diagnosable.
Added
- Documented the FLIR Spinnaker SDK prerequisite in the installer section of
the README. The SDK supplies the FLIR camera driver, which cannot be bundled
into the installer, so a clean machine detects no FLIR camera even though the
app is otherwise working. The note explains that the SDK version need not
match the app — RAPIID ships its own Spinnaker runtime (2.7.0.128) and needs
the SDK only for the driver — and makes clear it is not needed for
webcam-only use. - Step-by-step Spinnaker SDK installer instructions: which installer to
download (x64), the Application Development profile, the Visual Studio
prompt, when to tick "I will use GigE cameras" (not for the USB 3.0
Blackfly S), and that evaluation programs can be declined. Also notes that
SpinView can be used to test the camera independently of RAPIID.
Fixed
-
FLIR detection failures were invisible. Diagnostics were written with
print(), but the app is frozen withbase="Win32GUI"and therefore has no
console, so end users saw cameras silently missing with no explanation. The
reason a FLIR camera was not found is now reported in the in-app log panel,
along with a note that the Spinnaker SDK is only required for FLIR cameras.
The camera-discovery error handler no longer refers users to a console that
does not exist. -
Frozen builds failed to start on machines without a conda install, with
"The code execution cannot proceed because zlib.dll was not found".
python38.dlllinks againstzlib.dlldynamically in conda builds, but
cx_Freeze placedzlib.dllunderlib/, where the Windows loader does not
look — it searches the executable's own directory. Development machines
masked this because the conda environment is onPATH.setup.pynow ships
zlib.dllalongside the executable, and fails the build early if it cannot
be located in the active environment.
[4.0] — 2026-07-23
Unified release. RAPIID and RAPIIDlite are now a single application under the
name RAPIID.
Changed
- Renamed the application from RAPIIDlite to RAPIID. The two applications
had merged into one, and the "lite" qualifier no longer described a real
distinction. This release is the direct continuation of RAPIIDlite v3.2 —
no functionality has been removed. - Renamed the repository from
aharmer/RAPIIDlitetoaharmer/RAPIID. The
previous URL redirects to the new one. - Renamed source files, GUI modules, icons, and the workflow document to drop
thelitequalifier (rapiid_lite.py→rapiid.py,
rapiidlite_GUI.*→rapiid_GUI.*,RAPIIDlite_icon.*→RAPIID_icon.*). - Updated the installer: application name, install directory, Start Menu and
desktop shortcuts, and output filename now use the RAPIID name. The Inno
SetupAppIdis unchanged, so existing installations upgrade in place
rather than installing alongside the old version. - Updated the Windows AppUserModelID to
ManaakiWhenua.RAPIID.4. - Images captured with this version are tagged
RAPIIDin their EXIFMake
andSoftwarefields, and in thecapture_deviceCSV column. Images
captured with earlier versions retain their originalRAPIIDlitetags. - Replaced the
pyuic5.exelauncher in the GUI rebuild helper with
python -m PyQt5.uic.pyuicand relative paths. The.exelauncher embeds
an absolute interpreter path at install time and breaks if the environment
is renamed.
Fixed
- Documented the
qt-materialversion ceiling inenvironment.yml. Release
2.14.2 dropped PyQt5 support, and newer versions fail silently: the material
theme's icons and fonts never load, and the app logs
"qt_material must be imported after PySide or PyQt!". The pin at 2.12 was
already correct; the constraint is now stated so it is not upgraded past it.
Upgrading
Existing installations upgrade in place. Desktop and Start Menu shortcuts are
recreated under the new name; you may want to remove stale pinned taskbar
shortcuts, which point at the old executable name.
RAPIID v4.0.1
Changelog
All notable changes to this project are documented here.
[4.0.1] — 2026-07-23
Patch release. Fixes a packaging fault that prevented v4.0 from starting on
machines without a conda installation, and makes FLIR camera setup diagnosable.
Added
- Documented the FLIR Spinnaker SDK prerequisite in the installer section of
the README. The SDK supplies the FLIR camera driver, which cannot be bundled
into the installer, so a clean machine detects no FLIR camera even though the
app is otherwise working. The note explains that the SDK version need not
match the app — RAPIID ships its own Spinnaker runtime (2.7.0.128) and needs
the SDK only for the driver — and makes clear it is not needed for
webcam-only use. - Step-by-step Spinnaker SDK installer instructions: which installer to
download (x64), the Application Development profile, the Visual Studio
prompt, when to tick "I will use GigE cameras" (not for the USB 3.0
Blackfly S), and that evaluation programs can be declined. Also notes that
SpinView can be used to test the camera independently of RAPIID.
Fixed
-
FLIR detection failures were invisible. Diagnostics were written with
print(), but the app is frozen withbase="Win32GUI"and therefore has no
console, so end users saw cameras silently missing with no explanation. The
reason a FLIR camera was not found is now reported in the in-app log panel,
along with a note that the Spinnaker SDK is only required for FLIR cameras.
The camera-discovery error handler no longer refers users to a console that
does not exist. -
Frozen builds failed to start on machines without a conda install, with
"The code execution cannot proceed because zlib.dll was not found".
python38.dlllinks againstzlib.dlldynamically in conda builds, but
cx_Freeze placedzlib.dllunderlib/, where the Windows loader does not
look — it searches the executable's own directory. Development machines
masked this because the conda environment is onPATH.setup.pynow ships
zlib.dllalongside the executable, and fails the build early if it cannot
be located in the active environment.
RAPIID v4.0
Changelog
All notable changes to this project are documented here.
[4.0] — 2026-07-23
Unified release. RAPIID and RAPIIDlite are now a single application under the
name RAPIID.
Changed
- Renamed the application from RAPIIDlite to RAPIID. The two applications
had merged into one, and the "lite" qualifier no longer described a real
distinction. This release is the direct continuation of RAPIIDlite v3.2 —
no functionality has been removed. - Renamed the repository from
aharmer/RAPIIDlitetoaharmer/RAPIID. The
previous URL redirects to the new one. - Renamed source files, GUI modules, icons, and the workflow document to drop
thelitequalifier (rapiid_lite.py→rapiid.py,
rapiidlite_GUI.*→rapiid_GUI.*,RAPIIDlite_icon.*→RAPIID_icon.*). - Updated the installer: application name, install directory, Start Menu and
desktop shortcuts, and output filename now use the RAPIID name. The Inno
SetupAppIdis unchanged, so existing installations upgrade in place
rather than installing alongside the old version. - Updated the Windows AppUserModelID to
ManaakiWhenua.RAPIID.4. - Images captured with this version are tagged
RAPIIDin their EXIFMake
andSoftwarefields, and in thecapture_deviceCSV column. Images
captured with earlier versions retain their originalRAPIIDlitetags. - Replaced the
pyuic5.exelauncher in the GUI rebuild helper with
python -m PyQt5.uic.pyuicand relative paths. The.exelauncher embeds
an absolute interpreter path at install time and breaks if the environment
is renamed.
Fixed
- Documented the
qt-materialversion ceiling inenvironment.yml. Release
2.14.2 dropped PyQt5 support, and newer versions fail silently: the material
theme's icons and fonts never load, and the app logs
"qt_material must be imported after PySide or PyQt!". The pin at 2.12 was
already correct; the constraint is now stated so it is not upgraded past it.
Upgrading
Existing installations upgrade in place. Desktop and Start Menu shortcuts are
recreated under the new name; you may want to remove stale pinned taskbar
shortcuts, which point at the old executable name.
Earlier releases
Versions 3.2 and earlier were published under the name RAPIIDlite. Their
history is available from the git tags in this repository:
- [3.2] — 2026-07-08
- [3.1] — 2026-06-21
- [3.0] — 2026-03-23
RAPIIDlite v3.2
RAPIIDlite — Changes & Bug Fixes
UI Layout
- Controls above camera view — Start/stop button, camera dropdown, and exposure/gain/gamma controls were moved from below the live view to above it, for both label cameras and the barcode camera, so they're visible without scrolling.
- Removed redundant labels — the "Label camera" / "Barcode camera" captions above each Start live view button were removed since the section header already states this.
- Redundant "Select camera" labels removed, then re-added as invisible space-holders (
QLabel(" ")) so the Start button and dropdown stay vertically aligned with the FLIR exposure/gain/gamma controls, which retain real labels.
New Features
- Institution field — new text field added below "Creator" in the right panel. Feeds into EXIF
Copyrighttag and the CSVrights_ownercolumn (falls back to "Manaaki Whenua Landcare Research" if left blank), and is saved/loaded via the YAML config file. - Camera conflict prevention — selecting the same physical camera in two different slots (or between a label slot and the barcode camera) could freeze the live feed, and for FLIR devices required deselecting/reselecting to recover. Fixed by:
- Adding a "— Select camera —" placeholder option to every camera dropdown.
- Greying out (italic, muted colour) any camera already claimed elsewhere.
- Actively reverting the dropdown selection if a user manages to pick an already-claimed camera (since Qt item-flag disabling isn't reliably honoured under the
qt_materialtheme). - Availability is re-synced after every camera selection change, slot add/remove, and live-view start/stop, across both label slots and the barcode camera.
Bug Fixes
- Crash after "Discovering cameras" — root cause was infinite recursion in
AspectRatioLabel.resizeEvent(setFixedHeightre-triggeringresizeEvent), causing a silent C-stack overflow with no Python traceback. Fixed with a recursion guard flag. QLayoutdouble-layout crash — replacing the label camera grid layout viaQWidget().setLayout(old)caused PyQt5 to destroy the layout while the widget still referenced it. Fixed by replacing the entire scroll area widget (QScrollArea.setWidget(...)) with a fresh container that owns the grid from creation.
Build & Deployment
cx_Freezemissing native DLL —pylibdmtx's bundledlibdmtx-64.dllwasn't picked up automatically (it's loaded viactypes, not a normal import) causingFileNotFoundErroron end-user machines.setup.pynow explicitly discovers and includes all.dllfiles from thepylibdmtxpackage directory.- Switched installer tooling from cx_Freeze's
bdist_msito Inno Setup, giving a proper install wizard with:- A dialog letting the user choose per-user vs. all-users installation (
PrivilegesRequiredOverridesAllowed=dialog). - Correct 64-bit
Program Filestargeting ({autopf64},ArchitecturesInstallIn64BitMode=x64) — the default{autopf}had been resolving toProgram Files (x86). - Automatic uninstall of the previous version on upgrade, via a stable
AppIdGUID. - Desktop and Start Menu shortcuts, with the app icon properly embedded.
- A dialog letting the user choose per-user vs. all-users installation (
Documentation
- Added a full
README.mdcovering features, installation (MSI/installer-first, with source build instructions for developers), requirements, workflow, output file formats, FLIR camera settings, config file format, architecture notes, known limitations, and acknowledgements. - Updated README with an "Installation" section distinguishing the pre-built Windows installer (recommended) from building from source (for development).
RAPIIDlite
Complete rebuild, now supporting multiple camera view and types.
RAPIIDlite
Bug fix:
Prevent selection of camera that is already selected in another slot. This caused live views to freeze and cameras to be restarted.