-
v0.5.8-demo — Use this computer's own camera, and a straight answer when a camera is unreachable Pre-Release
released this
2026-09-30 12:50:44 +00:00 | 1 commits to main since this releaseUse this computer's own camera, and a straight answer when a camera is unreachable
Two changes, both about the moment somebody is standing in front of the
software wondering why it is not working."This computer's own camera" is now an option
Adding a camera now offers This computer's own camera alongside the makes.
Pick it, give it a name, save — the laptop's built-in camera becomes a
Behavision camera and recognition runs on it.The engine has always been able to do this; no screen had ever offered it.
It is the best way to show the product to somebody: real faces, in the room,
instantly, depending on no network at all. Pointing a demo machine at a camera
in another building depends on two internet connections staying up while you
are mid-sentence.The address, stream path and camera password disappear when you choose it,
because none of them mean anything for a camera that is plugged into the
machine. Camera number 0 is the built-in one; try 1 if something else is
plugged in."Cannot reach 192.168.1.121" now says why
Camera addresses like
192.168.1.121only exist inside the shop's own
network. From mobile internet, a hotel or head office there is nothing at that
address — and there must not be, because a camera reachable from the open
internet is how a shop's cameras end up being watched by strangers.The old message was
cannot reach 192.168.1.121:554 - Operation timed out,
which reads like a broken camera and sends you to re-type an address and
password that were always correct. It now distinguishes the two cases, because
they need opposite actions:- This computer is on that network → check the camera is powered on and
that the address is right. - This computer is somewhere else → the computer is in the wrong place.
No setting here fixes it; recognition has to run on a machine in the shop.
Nothing has changed about what works from away: Live, Cameras, Customers and
Watch live all work from anywhere, because the shop computer sends its
pictures out rather than anything connecting in.Everything since v0.5.4, in one place
- The engine actually updates. Every release used to build the engine
under the same version number, so setup did nothing on a computer that had
run it once. Each release now stamps its own version, setup forces a
replace, and/api/healthreports the engine version. - Model downloads work on a python.org Mac, which ships with no list of
trusted certificate authorities. - Setup works with Python 3.14, refuses a too-new one in one line, and
rebuilds a half-built environment left by a failed run. - Signing in on a second computer no longer knocks a shop offline.
- "Run setup" instead of a 200-character file path, and it detects macOS
running the app from a temporary read-only copy.
Installing
- Unzip.
- Move Behavision to your Applications folder and open it from there.
- Run
behavision-setupand wait — the first run downloads about 300 MB of
recognition models. - Open Behavision.
To try it straight away with no CCTV camera: Cameras → Add camera → make:
This computer's own camera.On a computer that will not watch cameras — a laptop, an office machine — skip
setup entirely and just sign in.Downloads
Behavision-v0.5.8-demo-windows-x64.zip— Windows 10/11, 64-bitBehavision-v0.5.8-demo-macos-arm64.zip— Apple Silicon
Downloads
- This computer is on that network → check the camera is powered on and
-
released this
2026-09-30 12:07:29 +00:00 | 3 commits to main since this releaseThe certificate fallback now actually fires
v0.5.6 made the engine update properly — and that immediately revealed that
the certificate fix inside it had never worked.Python's
urllibdoes not report a certificate failure as a certificate
failure: it catches it and re-raises a generic network error with the real
cause tucked inside. The fallback was written to catch the first kind, so it
matched nothing and never ran. It is now written to catch what urllib actually
raises.The unit test passed the whole time, because the stub it used raised the error
in the form that seemed obvious rather than the form Python really produces. So
this release also adds a real test: it puts Python into the exact state a
Mac is in with no certificate list, over the real network, and downloads a real
model through the fallback. Putting the old code back makes it fail; the new
code makes it pass.What this means on a Mac
Model downloads work on a python.org Python, which ships with no list of
trusted certificate authorities unless you find and double-click
Install Certificates.command. Behavision carries its own list and falls back
to it — while still preferring the machine's own where there is one, so a shop
behind a corporate proxy is unaffected. A genuine network failure is still
reported as a network failure, not retried as a certificate problem.Everything since v0.5.4, and all of it now installs
- The engine updates again. Every release built the engine package under
the same version, sopip install --upgradedid nothing on a computer that
had run setup once — while the app and agent beside it updated normally. Each
release now stamps its own version, setup forces the engine to be replaced,
and/api/healthreports the engine version so a stale one is visible. - Setup works with Python 3.14, and refuses a too-new one in a single line
instead of trying to compile numpy from source. - A half-built environment from a failed run is rebuilt.
- Signing in on a second computer no longer knocks a shop offline — every
installation now has its own name on the message broker. - "Run setup" instead of a 200-character file path, and it detects macOS
running the app from a temporary read-only copy.
Installing
- Unzip.
- Move Behavision to your Applications folder and open it from there.
- Run
behavision-setupand wait — the first run downloads about 300 MB of
recognition models. - Open Behavision.
Upgrading over an earlier install is the same steps.
On a computer that will not watch cameras — a laptop, an office machine — skip
setup entirely and just sign in. You get Live and Cameras across all your
shops, including Watch live on any camera.Downloads
Behavision-v0.5.7-demo-windows-x64.zip— Windows 10/11, 64-bitBehavision-v0.5.7-demo-macos-arm64.zip— Apple Silicon
Downloads
- The engine updates again. Every release built the engine package under
-
v0.5.6-demo — The engine now actually updates Pre-Release
released this
2026-09-30 12:00:53 +00:00 | 4 commits to main since this releaseThe engine now actually updates
v0.5.5 fixed the certificate problem that stopped model downloads on macOS.
That fix never reached anyone, and the reason is the more important bug.Every release built the engine package under the same version number, and the
installer usedpip install --upgrade— which does nothing when the version is
already there. It even printed the reason, one line above a green tick:behavision is already installed with the same version as the provided wheel. Use --force-reinstall to force an installation of the wheel. [ok] Engine and dependencies installedSo on any computer that had run setup once, the recognition engine stopped
updating while the app, the agent and the setup tool beside it kept updating
normally. A current app supervising a months-old engine, with nothing anywhere
saying so.Three changes:
- Setup now forces the engine package to be replaced, so "installed" means the
code in the folder. Your libraries are not re-downloaded — only the engine
itself, which is small. - Every release stamps its own version into the engine, so the numbers move.
/api/healthnow reports the engine version. Without it there was no way
to tell a computer three releases behind from a current one, which is exactly
how this survived several releases.
Everything in v0.5.5 is included and now actually installs:
- Model downloads work on a python.org Mac. That Python ships with no list
of trusted certificate authorities unless you find and double-click
Install Certificates.command. Behavision now carries its own and falls back
to it, while still preferring the machine's own list where there is one — so
a shop behind a corporate proxy is unaffected. - Setup works with Python 3.14, picks a version it knows, and refuses a
too-new one in a single line rather than compiling numpy from source. - A half-built environment from a failed run is rebuilt.
- Signing in on a second computer no longer knocks a shop offline — every
installation now has its own name on the message broker. - "Run setup" instead of a 200-character file path, and it detects macOS
running the app from a temporary read-only copy.
Installing
- Unzip.
- Move Behavision to your Applications folder and open it from there.
- Run
behavision-setupand wait — the first run downloads about 300 MB of
recognition models. - Open Behavision.
Upgrading over an earlier install is the same steps; setup replaces what needs
replacing.On a computer that will not watch cameras — a laptop, an office machine — skip
setup entirely and just sign in. You get Live and Cameras across all your
shops, including Watch live on any camera.Downloads
Behavision-v0.5.6-demo-windows-x64.zip— Windows 10/11, 64-bitBehavision-v0.5.6-demo-macos-arm64.zip— Apple Silicon
Downloads
- Setup now forces the engine package to be replaced, so "installed" means the
-
v0.5.5-demo — Setup now finishes on a clean Mac Pre-Release
released this
2026-09-30 11:52:10 +00:00 | 5 commits to main since this releaseSetup now finishes on a clean Mac
v0.5.4 got the install itself working on a current Mac. It then stopped on the
very last step — downloading the recognition models — with forty lines of
traceback ending inCERTIFICATE_VERIFY_FAILED.That is a quirk of Python installed from python.org on macOS: it ships its own
security library with no list of trusted certificate authorities, and only
gets one if you find and double-clickInstall Certificates.commandinside the
Python folder. Nobody installing this software has any reason to know that.Behavision now carries its own trusted-authority list and falls back to it when
the machine has none. It still prefers the machine's own list where there is
one, so a shop behind a corporate proxy is unaffected.Use this rather than v0.5.3 or v0.5.4.
Everything from v0.5.4, in one place
- Setup could not finish on a Mac with Python 3.14. It picked the newest
Python on the machine, which is the one least likely to have ready-built
libraries, and ended up trying to compile numpy from source. It now picks a
version it knows works, and says so in one line — before downloading
anything — if the only Python present is too new. - A half-built environment from a failed run is rebuilt, rather than reused
and failing the same way. - Signing in on a second computer could stop a shop working. Every computer
linked to one shop used the same name on the message broker, so two of them
took turns disconnecting each other — and the shop's own till was the other
half of that loop. Each installation now has its own name; existing installs
pick one up on their next start. - "no such file or directory" instead of "run setup". Pressing Start before
setup had run reported a 200-character file path. It now names the setup
tool, on the button, the status panel and at startup. It also detects macOS
running the app from a temporary read-only copy — which happens whenever the
app is opened straight from Downloads, and which re-running setup cannot fix.
Installing
- Unzip.
- Move Behavision to your Applications folder and open it from there.
- Run
behavision-setupand wait — the first run downloads about 300 MB of
recognition models. - Open Behavision.
On a computer that will not watch cameras — a laptop, an office machine — skip
setup entirely and just sign in. You get Live and Cameras across all your
shops, including Watch live on any camera.Downloads
Behavision-v0.5.5-demo-windows-x64.zip— Windows 10/11, 64-bitBehavision-v0.5.5-demo-macos-arm64.zip— Apple Silicon
Downloads
- Setup could not finish on a Mac with Python 3.14. It picked the newest
-
v0.5.4-demo — Setup works on a current Mac, and one laptop no longer knocks a shop offline Pre-Release
released this
2026-09-30 11:43:00 +00:00 | 6 commits to main since this releaseSetup works on a current Mac, and one laptop no longer knocks a shop offline
Five fixes, all found by installing on a colleague's Mac. Every one of them
failed in a way that looked like something else. Use this rather than
v0.5.3, which fixed four of the five.Setup could not finish on a Mac with Python 3.14
It picked the newest Python on the machine — which is the one least likely to
have ready-built libraries. Installing then tried to compile numpy from
source and ended in two screens of C compiler errors.Setup now picks a version it knows works, and if the only Python on the
machine is newer than Behavision supports it says so in one line, before
downloading anything, and names the version to install. "Too new" and "too
old" are different messages, because they need opposite actions.If a failed run left a half-built environment behind, setup now notices that
it was made by the wrong Python and rebuilds it. Without that, the fix above
would have looked like it did nothing on the very machine that needed it.Behavision also now works with numpy 2, which is what lets it install on
current Python versions at all. Verified on Python 3.12 with numpy 2.5.3: the
whole engine test suite passes, four runs out of four.Signing in on a second computer could stop a shop working
Every computer linked to one shop introduced itself to the message broker
under the same name. Brokers require that name to be unique and enforce it by
disconnecting whoever had it first — so two computers on one shop took turns
kicking each other off, over and over.The damage was not limited to the new computer: the shop's own till was the
other half of that loop, so opening the app on a laptop to look at the
product stopped that shop delivering visits, and from either end it looked
like a bad network connection.Each installation now has its own name. Nothing to do — existing installs pick
one up on their next start."no such file or directory" instead of "run setup"
Pressing Start before setup had run reported a 200-character file path and
nothing about what to do. It now says the engine is not installed yet and
names the setup tool — on the button, on the status panel and at startup, so
all three agree.It also detects the case where macOS is running Behavision from a temporary
read-only copy, which happens whenever the app is opened straight from
Downloads. That one is invisible otherwise, and no amount of re-running setup
fixes it: move Behavision to your Applications folder and open it from
there, then run setup.Also fixed
A test that deliberately provoked an unsafe condition could crash the whole
test run on newer OpenCV. It runs in its own process now. This never affected
recognition — the running product has always kept one detector per camera.Downloads
Behavision-v0.5.4-demo-windows-x64.zip— Windows 10/11, 64-bitBehavision-v0.5.4-demo-macos-arm64.zip— Apple Silicon
Unzip, move the app to Applications, run
behavision-setup, then open
Behavision.INSTALL.txthas the steps. On a computer that will not watch
cameras you can skip setup and just sign in.Downloads
-
v0.5.3-demo — Setup works on a current Mac, and one laptop no longer knocks a shop offline Pre-Release
released this
2026-09-30 11:39:55 +00:00 | 7 commits to main since this releaseSetup works on a current Mac, and one laptop no longer knocks a shop offline
Four fixes, all found by installing v0.5.2 on a colleague's Mac. Every one of
them failed in a way that looked like something else.Setup could not finish on a Mac with Python 3.14
It picked the newest Python on the machine — which is the one least likely to
have ready-built libraries. Installing then tried to compile numpy from
source and ended in two screens of C compiler errors.Setup now picks a version it knows works, and if the only Python on the
machine is newer than Behavision supports it says so in one line, before
downloading anything, and names the version to install. "Too new" and "too
old" are different messages, because they need opposite actions.Behavision also now works with numpy 2, which is what lets it install on
current Python versions at all.Signing in on a second computer could stop a shop working
Every computer linked to one shop introduced itself to the message broker
under the same name. Brokers require that name to be unique and enforce it by
disconnecting whoever had it first — so two computers on one shop took turns
kicking each other off, over and over.The damage was not limited to the new computer: the shop's own till was the
other half of that loop, so opening the app on a laptop to look at the
product stopped that shop delivering visits, and from either end it looked
like a bad network connection.Each installation now has its own name. Nothing to do — existing installs pick
one up on their next start."no such file or directory" instead of "run setup"
Pressing Start before setup had run reported a 200-character file path and
nothing about what to do. It now says the engine is not installed yet and
names the setup tool — on the button, on the status panel and at startup, so
all three agree.It also detects the case where macOS is running Behavision from a temporary
read-only copy, which happens whenever the app is opened straight from
Downloads. That one is invisible otherwise, and no amount of re-running setup
fixes it: move Behavision to your Applications folder and open it from
there, then run setup.Also fixed
A test that deliberately provoked an unsafe condition could crash the whole
test run on newer OpenCV. It runs in its own process now. This never affected
recognition — the running product has always kept one detector per camera.Downloads
Behavision-v0.5.3-demo-windows-x64.zip— Windows 10/11, 64-bitBehavision-v0.5.3-demo-macos-arm64.zip— Apple Silicon
Unzip, move the app to Applications, run
behavision-setup, then open
Behavision.INSTALL.txthas the steps. On a computer that will not watch
cameras you can skip setup and just sign in.Downloads
-
released this
2026-09-30 11:20:20 +00:00 | 8 commits to main since this releaseWatch any camera live, from anywhere
Builds on v0.5.1, which made the app usable on a computer that is not watching
any cameras itself. That showed each camera's most recent picture. This shows
you the camera now, from any network, on Mac and Windows.Open Cameras, press Watch live on a tile. The shop computer starts
sending video and stops the moment you stop watching — nothing is uploaded
while nobody is looking, which is why one camera plays at a time rather than a
whole grid going live because you opened the page.There is no port to open and no VPN to set up. The shop computer pushes the
picture out to head office; nothing ever connects in to the shop.A camera could say "Connected" long after it had stopped
Found while testing the above, on the real system: two cameras showing
Connected in green, thirty-four minutes after their shop computer had
stopped being able to see either of them.The shop computer correctly reports nothing when it cannot reach its own
recognition engine — but the last thing it had said stayed on screen looking
current. So a computer that was switched off, or had Behavision closed, left
green lights behind it.A camera now says one of four things, and they need different responses:
Connected working Not connecting the shop computer can see the camera and cannot open it — check the address, password and cabling Waiting for the shop computer just added, the shop computer has not picked it up yet Not reporting the shop computer has stopped — check it is on and Behavision is running The last one is new, and it is the one that was quietly reading as
Connected. "Not connecting" would have been the wrong word: it sends
somebody to check cabling on a camera that was working fine the last time
anyone could ask.Downloads
Behavision-v0.5.2-demo-windows-x64.zip— Windows 10/11, 64-bitBehavision-v0.5.2-demo-macos-arm64.zip— Apple Silicon
Unzip, run
behavision-setup, then open Behavision.INSTALL.txthas the
steps. On a computer that will not watch cameras you can skip setup and just
sign in.Downloads
-
released this
2026-09-30 11:04:07 +00:00 | 9 commits to main since this releaseThe app works on a computer that is not watching any cameras
Sign in on a second Mac or PC and it now shows your shops. Before this it
showedengine not reachable at http://127.0.0.1:8010and 0 of 0 cameras,
on an account whose shops were running and recognising people the whole time.Nothing had been broken. The Live and Cameras screens read only the recognition
engine on that computer's own loopback, so a laptop with no engine answered as
though nobody had signed in — and the camera list comes through the engine,
which is why the count was zero rather than merely stale.Having no engine is a normal state. A shop PC watches cameras; an owner's
laptop, a manager's machine and a till still being set up do not, and all three
sign in to the same estate.What you get on a computer with no engine
- Live — arrivals from every shop, with the customer reference, the camera
and the shop, plus cameras up and the recognition-health figure across the
estate. A banner says you are viewing your shops from here rather than
watching cameras on this computer. - Cameras — every camera in every shop, with its connection state and the
most recent picture the shop computer sent. Edit, Remove and Check placement
are not offered: those talk to a camera on a network this computer cannot
reach, and a button that cannot work is worse than one that is absent. - Customers — unchanged; it always came from head office.
A shop PC is unaffected. Loopback is still tried first, so a computer that is
watching cameras shows its own live numbers, never a minute-old summary.Details worth knowing
- The recognition-health figure is the worst shop, not an average. 0.10
against 0.73 averages to 0.42 and hides the only shop anyone needs to visit. - A camera nobody has reported on yet says Waiting for the shop computer,
which is a different thing from Not connecting and needs a different
response. - The camera picture is the last frame the shop computer sent, not live
video. Live video from another network is a separate piece of work — the
shop PC sits behind a router with no way in, and head office's relay is what
answers that.
Downloads
Behavision-v0.5.1-demo-windows-x64.zip— Windows 10/11, 64-bitBehavision-v0.5.1-demo-macos-arm64.zip— Apple Silicon
Both are source installs: unzip, run
behavision-setup, then open Behavision.
INSTALL.txtin the zip has the steps. On a computer that will not watch
cameras you can skip setup entirely — open the app, choose to run without a
shop computer link if asked, and sign in.Downloads
- Live — arrivals from every shop, with the customer reference, the camera
-
released this
2026-09-30 10:14:55 +00:00 | 10 commits to main since this releaseThe macOS install actually works now
v0.4.9-demoshipped a macOS package that had never been installed from.
It was — on a clean state directory, the way a second machine does it — and it
failed at the first step. This is that fixed, verified end to end.Fixed
- Setup told a Mac with Python 3.12 on it to go and install Python. It
searchedpython3andpythononly, and on macOS/usr/bin/python3is
always the Command Line Tools build — 3.9, below the 3.10 floor. Anything
newer installs aspython3.12, under Homebrew, as a framework, or somewhere
a GUI app's PATH never reaches. It now tries versioned names newest-first,
then the plain ones, then the directories macOS actually uses. - The finishing message described the wrong computer. It said "Start
Behavision from the Start menu" and "it appears in the system tray;
right-click there to stop it" — on a platform with neither. It now says to
right-click the app the first time (unsigned build) and that closing the
window stops recognition. Stop()could hang forever.stopGrace = 10swas declared and wired to
nothing; with noWaitDelay,cmd.Wait()waits for every writer of the
engine's stdout to close, so one lingering grandchild hangs Stop — and on
the desktop app that is the tray's Quit never returning.- Dead code and a doubled import in the agent;
go.modmarking direct
dependencies as indirect. All three Go modules are now staticcheck-clean.
Verified on a Mac, not assumed
[ok] Python 3.12 (found where PATH could not see it) [ok] Virtual environment 298 MB runtime [ok] Engine and dependencies installed [ok] Recognition models downloaded [ok] Engine starts and answers verified EXIT=0Install
macOS — unzip,
./behavision-setup, then right-clickBehavision.app→
Open. Needs Python 3.10+; setup says where to get it if you have none. Apple
silicon only, and not notarised — macOS blocks an unsigned download rather
than warning, so the first launch must be right-click → Open.Windows — unzip,
behavision-setup.exe, thenBehavision.exe.Still true of the Windows package: it is built but never run. That remains
the one thing nobody has proved.Downloads
- Setup told a Mac with Python 3.12 on it to go and install Python. It
-
released this
2026-09-30 09:23:07 +00:00 | 14 commits to main since this releaseWindows and macOS, and a tray that opens the window
First release with a macOS package. Same shape as the Windows one — a
pure-Python wheel and a setup tool that builds a venv on the machine — so it
costs no frozen engine and no second packaging story.macOS, read this first
- Not notarised. macOS blocks an unsigned download rather than warning
like SmartScreen. First launch: right-click → Open, then Open again.
Notarising needs an Apple Developer account. - Apple silicon only (arm64).
- No tray icon. macOS gives Wails its one main run loop and systray wants the
same one; two attempts both crashed on launch. The window is in the Dock,
and closing it quits and stops recognition — with no tray there would be
nothing to get the window back from.
Fixed
- The tray's "Open dashboard" did nothing reliable on Windows. Three
faults: an unlocked Win32 call from the systray goroutine, no un-minimise,
and no foreground request — a tray click is by definition a moment when the
app is not in front. Double-clicking the desktop icon while already running
had the same bug. - The engine inherited whatever directory launched the app, which for a
double-clicked bundle is/. Nothing ever set it. - The macOS window could not be maximised — Wails disables the green
button unless aMacoptions block exists, and there was none. build.ps1would have shipped a stale UI silently. A failednpm ci
did not stop the script, and a built frontend is committed, sogo build
embedded the old one and produced an installer that worked and was wrong.- The setup tool told Mac users to tick "Add python.exe to PATH".
Since v0.4.8-demo
- Engine CPU 214% → 16% of a core: a motion gate and one detector thread.
Detection skipped on 92% of frames with no face lost — the gate only runs
while no track is open, forces a look every second regardless, and compares
against the last frame searched. - Three states that looked like health from outside: a gallery the running
encoder cannot read, a camera connected and sending nothing, and an RTSP
timeout that never existed. - Admin console drill-down, sales you can read rather than only sum, a
dashboard summary, self-service password change, and creating a customer
before a camera has seen them — with the merge that makes that safe. - A wrong URL answered 500, and five endpoints answered 500 to a platform
admin. Both fixed at the chokepoint.
Install
Windows — unzip, run
behavision-setup.exe, thenBehavision.exe.
macOS — unzip, right-clickBehavision.app→ Open, then run
./behavision-setupin the same folder to build the engine venv.Downloads
- Not notarised. macOS blocks an unsigned download rather than warning