As I've previously
posted, I routinely track registry changes across BI updates using NirSoft
RegistryChangesView and thought I'd share a few observations regarding the group-related changes introduced in 6.0.5.4.
When 6.0.5.4 was released, I noticed a new DWORD value named
Number added under every Group registry key. Subsequent releases (6.0.5.5, 6.0.5.6, etc.) continued to change these values, which initially made me suspect BI was introducing some sort of internal group identifier.
The 6.0.7.2 changelog eventually provided an important clue:
An issue likely introduced in 6.0.5.4 where adding more than 256 cameras (possible by deleting/importing/etc.) could cause group associations to become corrupted.
After updating to 6.0.7.2, I noticed a new 128-byte REG_BINARY value named
cameras128 added under most Group registry keys.
At first I assumed this was replacing the older group membership mechanism. However, after further investigation I discovered that each Group key actually contains two membership bitmaps:
cameras (32 bytes)
cameras128 (128 bytes)
The contents of the first 32 bytes of cameras128 match the existing cameras bitmap exactly.
This appears significant because:
- 32 bytes = 256 bits
- 128 bytes = 1024 bits
which aligns almost perfectly with the 256-camera limitation described in the 6.0.7.2 changelog.
By comparing these bitmaps against the JSON
camlist output, it appears that group membership is represented as a bitmap indexed by the camera
number values returned by the Blue Iris webserver API (identical to regkey
Number mentioned above).
I also found evidence that Blue Iris currently maintains multiple representations of group membership:
Code:
Per-camera:
group (REG_SZ)
groups (REG_SZ)
Per-group:
cameras (REG_BINARY, 32-byte bitmap)
cameras128 (REG_BINARY, 128-byte bitmap)
Per-camera examples from my system:
Code:
DriveWay-1:
group = Outdoor;Garage;Front;DW1cloneset;Driveway
groups = Outdoor;Garage;Front;DW1cloneset;Driveway
DriveWay-2:
group = Outdoor;Front;Driveway
groups = Outdoor;Front;Entry;Driveway
Interestingly, those two values are not always identical.
I also discovered that
some cameras have neither regkey present.
The 6.0.7.2 changelog specifically states that the repair process rebuilt associations using the
groups list string in camera settings. That wording now appears very deliberate.
Unfortunately, the 6.0.7.2 remapping was not completely accurate on my system. Several manually-created groups disappeared entirely, and some existing groups lost members.
One possible explanation is that some cameras either lacked a
groups value entirely or contained group metadata that differed from the current bitmap representation. If the repair process relied exclusively on the
groups string, those memberships may not have been recoverable.
The good news is that I was able to recover everything using pre-update registry backups and JSON camlist exports.
I also compared JSON
camlist exports before and after updating from 6.0.7.2 to 6.0.7.3. The group-to-camera mappings were identical, suggesting that whatever repair work was done in 6.0.7.2 appears stable in 6.0.7.3.
My current best guess regarding the architecture is:
Code:
Camera
├─ group (legacy)
├─ groups (authoritative string list)
└─ Number
Group
├─ Number
├─ cameras (256-bit bitmap)
└─ cameras128 (1024-bit bitmap)
and 6.0.7.2 probably did:
groups string
↓
rebuild cameras/cameras128
rather than:
group string
↓
rebuild cameras/cameras128
with 6.0.7.2 rebuilding the group bitmaps from the per-camera
groups strings.
If others have systems with large camera counts or have observed missing groups after 6.0.7.2, I'd be interested in comparing notes.
One lesson learned: before major BI updates, I now save:
- Blue Iris registry backup
- JSON
camlist output
- CSV export of group names, camera names, and camera numbers
- Registry export of
HKLM\SOFTWARE\Perspective Software\Blue Iris\Groups
Those backups should make it possible to identify and reconstruct every group change that occurs during the current 6.0.7 and future migrations.