The CineMate stack explained#

The CineMate camera stack, exploded

The layers#

Layer What it is Responsible for Documented in
Sensor kernel driver A V4L2 kernel module, selected by a dtoverlay= line in config.txt Register writes to the sensor, the readout modes it offers, sensor-specific controls such as ClearHDR Boot config, Camera sensors and frame rates
libcamera The libcamera camera framework, in Raspberry Pi's fork of it, built here from this project's own fork (Tiramisioux/libcamera, branch cinemate) Configuring streams, applying controls such as analogue gain and frame duration, delivering completed frame requests Manual installation
cinepi-raw A C++ fork of rpicam-apps, built on CinePi RAW The capture loop, the CinemaDNG writer, the HDMI and MJPEG previews, and a separate audio-capture process Recompiling cinepi-raw, CinePi RAW terminal commands
Redis In-memory key-value store with publish/subscribe channels Holding live state (iso, fps, is_recording, …), carrying control changes down on the cp_controls channel and per-frame stats up on cp_stats Redis API, Redis key reference
CineMate A Python program, src/main.py All operator surfaces, storage handling, settings, and launching cinepi-raw Simple GUI, Web GUI, Terminal commands

What runs as what#

Six systemd units, and the important thing about them is what does not depend on CineMate.

Unit What it is
cinemate-autostart.service CineMate itself, started at boot
redis-server The key-value store both programs depend on. Enabled by the installer
storage-automount.service Mounts removable drives, RAW-labelled ones at /media/RAW
wifi-hotspot.service The CinePi access point. Independent of CineMate, so it survives a crash
cinemate-recovery.service A root-run console on port 8080 for a camera that will not start
redis-log-maintenance.timer Keeps the Redis log from filling the root filesystem

Fore more information on each unit, check System services.