Skip to content

octacam 0.3.0

Choose a tag to compare

@tkclam tkclam released this 11 Jul 04:12

The 0.3.0 line is a large step beyond 0.2: octacam gains a multi-vendor camera
backend cascade, trigger-hardware plugins, a frame-rate benchmark, GPU encoding,
one-command post-processing, and a much richer web GUI.

Added

  • Backend cascadebackend = "auto" resolves each camera to the highest
    available tier: basler (pypylon) → flir (Spinnaker/PySpin) → spinnaker
    (libSpinnaker_C via ctypes) → pycameleon (libusb floor, always present).
    Multiple backends run at once; sensor params persist as native GenApi TSV
    (.txt), so a rig can switch flir↔spinnaker on shared param files.
  • triggerbox plugin — drives the EPFL common-trigger-circuit (Arduino Nano
    ESP32): self-describing wire protocol v2, three symmetric light channels, and
    server-side auto strobe duty; auto-recovers a wedged USB CDC link.
  • Arduino firmware auto-flash — per-plugin source-hash fingerprinting and
    one-command flashing (octacam flash) via arduino-cli.
  • Benchmark / diagnostics (octacam benchmark + a GUI tab) — measures grab,
    encode, and end-to-end ceilings and names the bottleneck.
  • Post-processing (octacam process) — transcode, tile into grid videos,
    and mirror to storage, driven by a per-recording config snapshot.
  • CLIdoctor (install/rig diagnosis; never opens a camera), config
    (interactive rig scaffold), Rich-styled help, and a rig instance-lock.
  • Web GUI — adaptive per-client preview (adaptive resolution, sharp
    maximize, scroll-zoom, server-side crop of the zoomed region), a full
    Camera-tab GenApi node-map browser, plugin tabs in a responsive overflow menu,
    a configurable colour theme, and keyboard shortcuts with a ? help overlay.
  • GPU encoding — opt-in NVIDIA NVENC H.264, with the session cap
    auto-detected and overflow falling back to CPU encoding.
  • Recording — per-frame timestamps in one timestamps.npz; a configurable
    writer queue depth (record.writer_queue_size, default 64); and a
    trigger-source model (software / managed / external) mirrored in the live
    preview.

Changed

  • octacam.__version__ is single-sourced from the installed package metadata.
  • FLIR DeviceLinkThroughputLimit is raised to max at open, and
    TriggerOverlap=ReadOut is set best-effort in every backend to lift the
    software-trigger frame rate.
  • Every backend restores the config trigger source on save, so a preview's
    software trigger is never baked into a param file.
  • Every grab loop is capped at round(fps × duration) frames so all cameras
    stop at the same count.

Fixed

  • Hardened teardown and error paths across the recording pipeline (dozens of
    verified robustness fixes); every camera now captures the same frame count.
  • Stopped Spinnaker/GenTL teardown crashes — the spinnaker ctypes tier exists
    specifically to avoid the Spinnaker GenTL producer's GIL-holding DevClose.

Removed

  • The GenTL/harvesters backend and the mvIMPACT path — the always-present
    libusb pycameleon floor covers the general GenICam-USB3 camera without a
    vendor producer or EULA.