Skip to content

Releases: Kataglyphis/OmniAccelerANT

OmniAccelerANT 2.1.0

Choose a tag to compare

@github-actions github-actions released this 15 Oct 20:30

The first release made by a merge into main, and the first the ObservANT cameras update
themselves from. Most of it is the cat cam, ObservANT since 2026-10-14, whose guide is
docs/source/camera-streaming.md § The ObservANT package.

Added

  • Branches, CI rounds and releases (2026-10-15, owner; the family's rule in
    ANTfrastructure's docs/branch-and-release-strategy.md). A push to develop runs Linux x64
    alone; the Linux arm64, Windows x64 and arm64, Android and web lanes run when a commit message
    asks with [ci <lane>] ([ci windows], [ci arm64], [ci all]), read by the new
    on-request.yml, or by hand, since every lane has Run workflow now. main moves only
    by the owner's fast-forward to a fully green develop commit.

  • Releases, and cameras that update themselves (2026-10-15, owner). Every push to main
    runs the new release.yml: every lane once more, then the tag v<version> and a GitHub
    release with web.yml's tested ObservANT packages, a SHA256SUMS and the version's
    CHANGELOG section as notes, only when every lane is green. A version that is released
    already, or has no CHANGELOG section, stops it within a minute
    (scripts/linux/publish-release.sh --check). The .deb brings omni-observant-update.timer: every night
    it installs a newer release's package for the camera's architecture once it matches the
    release's checksum, and leaves the camera alone otherwise; systemctl disable --now omni-observant-update.timer turns it off. Both are tested: the release script against a
    stand-in gh in the native lane, the updater against a local stand-in for GitHub in the
    package jobs (an update, no downgrade, a bad checksum, a missing architecture).

  • Visit statistics on the Stream page (2026-10-15, owner). A Visits button opens the
    last two weeks: visits today and in all, the average stay, and bars per day and per hour of the
    day, counted in the viewer's own time zone. They come from ObservANT's new /visits (OxidANT),
    which keeps every visit of the last 30 days in visits.json and is read only while the panel
    is open, every minute; /healthz, which the page polls, stays as small as it was.
    test/visit_stats_test.dart covers the counting at the window's and midnight's edges, the
    average over the visits that left, and the panel opening, closing and a camera that does not
    answer.

  • The Camera page's requests to ObservANT are tested in Chrome (2026-10-15).
    observant_api_web.dart, which reads /healthz and /settings and saves settings, had no
    test, since it loads only in a browser. test/observant_api_web_test.dart runs in the web
    lane's Chrome (@TestOn('browser'), so the VM lanes skip it), swaps the page's fetch for a
    fake and checks each request's URL, method, content-type, JSON body and timeout, and that an
    error status or a failed request reads as nothing. It fails against a PUT and against a
    page that ignores the status.

  • Benchmarks in the projects' own tooling, tracked in CI (2026-10-14, owner). The Flutter side
    is integration_test/performance_test.dart under flutter drive --profile with
    test_driver/perf_driver.dart: watchPerformance times the start, three rounds through every
    tab and resizes across both breakpoints. The native lane runs it on x64 under Xvfb, and
    scripts/linux/frontend-perf-report.py compares it in the run's summary with the median of
    the default branch's last 20 runs (2026-10-15; first against the run before, which a slow
    creep never crossed): above +25 % it warns, and an average or 90th-percentile build time at
    double the median fails the lane once 3 earlier runs exist. The Rust side is OxidANT's
    Criterion benches under cargo bench, judged the same way. bench/page-perf.mjs also times
    the signalling socket now, and scripts/linux/flutter-trace-summary.py names what a slow
    frame builds (how the 0.94 s start-up block below was found).

  • A test audit, and tests that can fail (2026-10-15, the owner asked whether the tests catch
    regressions). docs/source/testing.md says what each kind of test proves, the rules that
    keep a green run honest, and the gaps still open. Here:

    • test/widget_test.dart asserted only that App existed after pumping it;
      test/bootstrap_settings_test.dart reads the shipped settings files instead (locales
      against the translations, unique blog routes, every post's markdown present).
    • test/app_layout_test.dart also checks each route lands on its page, not ErrorPage; a
      planted /noSuchPage now fails it.
    • The plugin's Linux gtest has six tests of the texture beside GetPlatformVersion: pipeline
      errors as Dart sees them, a transparent test pattern shown opaque, knt_push_frame's codes
      and registry. Each was run against a planted bug in my_texture.cc.
    • The perf scripts have a 23-assertion suite in the native lane, and the frame timings are
      kept in out/perf/, which the docs step's flutter clean no longer deletes.
    • In the submodules: OxidANT tests its webcam engine with its real features, property-tests
      ObservANT's network and config inputs, holds every crate to its own coverage floor, and
      caught 142 of 145 planted bugs in ObservANT's network code (mutation testing);
      AccelerANTgine fails its Linux lane on a skipped test or a UBSan report and keeps
      main() out of its library; ANThology tests its settings readers instead of expect(1, 1).
  • Performance tools and a baseline (2026-10-14, the owner's benchmark).
    scripts/linux/observant/bench/model.sh times models in the installed service on a board,
    viewer.sh measures a board idle and with one viewer plus the page's cold load
    (page-perf.mjs), and camera-streaming.md § Measuring performance keeps the numbers: the
    model is 99 % of a detection, every viewer costs an encoder, and plain HTTP makes browsers
    load the 0.75 MB larger renderer.

  • "Too dark" on the Stream page (2026-10-14). ObservANT's /healthz says dark while
    its picture is black, as a camera without IR is at night and the model idles; the status
    line says so instead of looking like a quiet camera.

  • "Recent detections" on the Camera page (2026-10-14): the last five arrivals with their
    pictures, each with "Not a cat", which ignores the spot it was seen at. A false arrival is
    seldom on screen when it happens, so the live button alone rarely caught one.

  • An overview of the other cat cams, and a calmer Stream page (2026-10-14). With
    peers in catcam.toml, the Stream page shows a card per other cat cam: its name,
    picture and cat. It also says since when a cat cam is unreachable, folds out the whole
    visit log, shows each earlier video with its arrival's picture, and closes the video of
    a tab hidden for a minute. /healthz names the build (version, also on the Camera
    page) and the tabs connected (viewers); more than max_viewers (8) get 503.

  • "Not a cat", and a cat must move to arrive (2026-10-14). Under the Camera page's
    preview, "Not a cat" marks the boxed spot, such as a drying rack, so the cat cam ignores
    it from then on; the marked spots show grey, and "Watch again" forgets them. And a
    detection now starts a visit only where something moved in the last 10 s, so a still
    object the model takes for a cat never counts, while a cat that sits down stays counted.

  • A Camera page for the cat cam's settings (2026-10-13), in the bottom bar beside
    Stream. ⟲ and ⟳ turn the picture a quarter each way, for a board that gets moved about; a
    slider sets how sure detection must be before a cat counts, against false alarms; a field
    renames the camera. A live preview shows the result, the score of the last detection under
    the slider says where a false one sits, and a table shows what the camera runs.
    The cat cam applies each change at once and keeps it across restarts. It turns the
    picture itself, so detection, the arrival picture and the clips turn with the stream, and
    a quarter turn is bordered into the frame now, where it used to come out stretched.

  • An installable cat cam (2026-10-05/06). The cat_webrtc producer, its GStreamer
    plugins, the chain ONNX Runtime, the model and the web build travel as one bundle:
    a .deb with a systemd service and a ufw profile, an AppImage that runs it or installs
    it as that service, and a flatpak. On Windows it is an MSI and a signed MSIX, each
    starting at logon with a firewall rule for the LAN. web.yml packages each one and
    install-tests it.

  • The cat cam on riscv64 (2026-10-13). package-catcam.sh builds its .deb and tarball
    natively on a riscv64 board, in that board's own :latest; no AppImage or flatpak, as
    flatpak has no riscv64 runtime. It runs on a SpacemiT board with a USB webcam, at about
    24 fps to a browser on the LAN. No CI lane builds it yet.

  • It reports the cat (2026-10-11/12). /healthz says whether a cat is in view,
    when one last was, how many visits it counted, and when the latest 20 began and how
    long they lasted. /snapshot.jpg is the latest
    boxed frame and /arrival.jpg the frame each arrival was confirmed on. A cat counts
    after two detections in a row. Visits and the arrival frame outlive a restart.

  • It can notify (2026-10-12): notify_url gets every arrival and departure as a
    JSON POST, which a Home Assistant webhook trigger takes as it is.

  • The Stream page shows the cat (2026-10-12). Under the video: the cat cam's name,
    then "Cat in view", "Cat last seen: 14:32" or "No cat seen yet" in English or German,
    the latest visits with their stays, and the last arrival's picture. On a phone the video keeps its 4:3 and the line wraps.

  • The web app boots without its Rust core, as Firefox and Safari need without
    cross-origin isolation; serve.sh --http serves the page with no certificate
    (2026-10-05).

  • The integration test runs on Windows x64 an...

Read more

🗡️New stable binary release targeting Linux and Windows🗡️

Choose a tag to compare

@Kataglyphis Kataglyphis released this 24 Sep 21:47

Enjoy my first binary ready to use packages of my app.

🍻Cheers!🍻