Dual sensors#

CineMate automatically detects each camera connected to the Raspberry Pi (and defined in config.txt) and spawns a separate cinepi-raw process per sensor. Cameras are synchronized with cam0 being the server and cam1 being the client.

HDMI preview#

With two sensors, both previews appear together on the on-camera HDMI monitor (HDMI-0), side-by-side, each with a white frame and a centre divider. The simple GUI columns keep their room on the left and right.

Switch which sensor(s) the monitor shows with the set preview command — the change is live, no restart:

Command Shows
set preview both both side-by-side (default; cam0+cam1 is an alias)
set preview cam0 cam0 full-screen
set preview cam1 cam1 full-screen
set preview pip_cam0 cam0 full-screen, cam1 as a corner inset (pip / pip0 alias)
set preview pip_cam1 cam1 full-screen, cam0 as a corner inset (pip1 alias)
set preview cycles both → cam0 → cam1 → pip_cam0 → pip_cam1

A single selected sensor fills the preview area just like a single-sensor setup. The default source is hdmi_display.preview.default_hdmi_source in settings.jsonc; the live value is the hdmi_preview_source Redis key.

Picture-in-picture#

The two pip_* modes show one sensor full-screen with the other shrunk into a corner. The inset geometry is set in settings.jsonc under hdmi_display.preview.pip:

Key Default Meaning
scale 0.28 inset size as a fraction of the main pane
corner lower_right lower_right, lower_left, upper_right, upper_left
margin 0.03 gap from the edge as a fraction of the pane

If the secondary sensor hasn't produced a frame yet, pip falls back to cam0 full-screen so the monitor is never blank.

One monitor, both feeds. DRM master is exclusive per GPU, so the primary cinepi-raw process owns the display and composites both sensors; the secondary runs with --nopreview and hands its frame to the primary.

Recording#

Which sensor(s) record a take depends on the sensors.record_policy setting in settings.jsonc and, when it is follow_preview, on the preview:

"follow_preview" (default) — recording follows the preview. A full-screen or pip-main sensor records alone; side-by-side records both. Switching the preview during a take only ever adds sensors: the newly previewed sensor joins the running take back-to-back and writes its own clip folder, and a sensor already recording is never dropped mid-clip.

"always_both" — force dual. Both sensors always record, whatever the preview shows. A camera token on rec (rec cam0 / rec cam1 / rec both) overrides either policy for one take.

Each sensor writes to its own clip folder (..._cam0 / ..._cam1).

When using the cam1 with the official Raspberry Pi CM carrier board, make sure to connect the JC GPIO pins as described here: https://www.raspberrypi.com/documentation/computers/compute-module.html#connect-two-cameras

You can override geometry, HDMI port, camera name, and FPS correction for each port independently in settings.jsonc under sensors.cam0 and sensors.cam1. See settings.