Skip to content

NeLy-EPFL/octacam

Repository files navigation

octacam

Preview, record, and save synchronized video from many scientific cameras through one fast, simple interface. octacam drives Basler, FLIR / Teledyne, and any GenICam USB3-Vision camera from a live web GUI, and turns a day's recordings into archived videos with one command. It auto-detects the best available driver per camera (a backend cascade) with a pip-installable floor, so it just works on modern Python. It is the successor to SeptaCam.

  • 📹 Many cameras at once — 8 is not the limit despite the name
  • 🖥️ Live web GUI — preview every camera while recording; run it locally or over SSH
  • 💾 Record straight to video — monochrome H.264 (or raw) with per-frame drop tracking
  • ⚙️ One-command post-processing — transcode, tile into grid videos, and copy to storage
  • 📦 Clone-and-go install with uv

📖 Full documentation: https://nely-epfl.github.io/octacam/

Install

git clone https://github.com/NeLy-EPFL/octacam.git
cd octacam
uv tool install .    # puts an `octacam` command on your PATH

Cloning main (always the latest stable release) also gives you the configs/ example rigs and the emulator config the quickstart uses. The Python-installable backends (pypylon and the always-on pycameleon floor) all ship in core, so a rig works out of the box on Python 3.10+. FLIR / Teledyne cameras need one manual step — Teledyne's Spinnaker SDK plus the PySpin wheel (cp310–cp314). See the installation guide and camera backends.

Quickstart

No cameras attached? Try the built-in Basler emulator first:

PYLON_CAMEMU=8 octacam gui configs/emulate_basler   # 8 fake cameras, live GUI

On a real rig, point octacam at a config directory (camera names, layout, and recording settings — see configs/ for examples):

octacam config <config_dir>    # scaffold a new rig config interactively
octacam doctor <config_dir>    # check the install + validate the rig
octacam gui <config_dir>       # live web GUI on http://127.0.0.1:8765
octacam record <config_dir>    # headless recording (no browser)
octacam process --all          # transcode + grid + copy everything you recorded

Everything after recording — transcoding, composite grid videos, and copying to a shared destination — is the single command octacam process, driven by a config snapshot each recording saves alongside its videos.

Commands

Command What it does
octacam config [config_dir] Interactively scaffold a new rig config (--backend/--force/--no-snapshot-params)
octacam doctor [config_dir] Diagnose the install and list cameras/plugins; validate a rig
octacam gui <config_dir> Launch the live web GUI (--host/--port/--no-browser)
octacam record <config_dir> Record headlessly (--fps/--duration/--output)
octacam process <paths…> Transcode, build grids, and transfer (config-driven)

Run octacam --help (or <command> --help) for the full option list.

Documentation

Guide
Installation Install, update, FLIR setup, development install
Quickstart Your first recording, with or without hardware
Web GUI Preview, record, and remote operation over SSH
Recording Outputs, the recording summary, transformed vs raw
Processing Transcode, grid videos, and transfer to storage
Configuration The octacam_config.toml reference
Camera backends The auto-detect cascade (Basler → FLIR → Spinnaker → pycameleon)
Plugins Flywheel turntable, 2-photon trigger, and the configurable triggerbox (camera trigger + lights)
Troubleshooting Common errors and fixes

License

octacam is released under the MIT License. © 2026 Neuroengineering Laboratory @EPFL — Ramdya Lab.

About

No description, website, or topics provided.

Resources

License

Stars

1 star

Watchers

1 watching

Forks

Packages

 
 
 

Contributors