Documentation

Videre is a browser-based camera evaluation tool for Linux. It connects to any V4L2-compatible camera and streams live video to your browser — no desktop environment, no Qt, no Electron required.

Installation

Videre ships as a single self-contained binary. Download the package for your system from the Community download page.

PackageRecommended forInstall
ArchitecturePackageRecommended forInstall
x86-64.debUbuntu / Debian and derivativessudo dpkg -i videre_*.deb
x86-64.AppImageAny x86 Linux distrochmod +x videre-*.AppImage && ./videre-*.AppImage
x86-64.tar.gzManual install / custom pathsExtract and run ./videre
arm64.debRaspberry Pi OSsudo dpkg -i videre_*.deb
arm64.tar.gzManual install on RPi5Extract and run ./videre

Runtime dependencies

The .deb and .AppImage bundles include all dependencies. For tarball installs, the following libraries must be present:

libjpeg / libjpeg-turbo libtiff libavcodec · libavutil · libswscale libopencv-core/imgproc/imgcodecs libzbar libcurl (Community only)

First Run

bash
$ videre
Videre 0.9.2 — http://localhost:8080

Videre starts a local web server and opens your default browser automatically. Navigate to http://localhost:8080 if it doesn't open. The port is printed to the terminal on startup; use --port PORT to change it.

To control which browser is launched, or to suppress it entirely:

bash
$ videre --browser firefox
$ videre --browser chromium
$ videre --no-browser # headless / server use

--browser accepts any command on $PATH. The default is xdg-open.

Community Edition: The free tier requires an internet connection. On first launch a consent dialog appears — clicking Accept & Continue enables usage data collection and grants camera access. After 1 hour of cumulative use, a verified connection becomes required to continue. See Usage Data & Privacy for full details. Paid tiers have no connectivity requirement.

PWA install: Look for the install icon in the browser address bar after opening the app — this gives you a standalone window without browser chrome.

Interface Overview

layout
┌─────────────────────────────────────────────────────┐
│ Title bar │
├──────────┬──────────────────────────────┬───────────┤
│ Sidebar │ Toolbar │ │
│ (device │──────────────────────────────│ Control │
│ list) │ Viewport (live video) │ Panel │
│ │ │ │
│ │ [Histogram / ROI overlays] │ │
├──────────┴──────────────────────────────┴───────────┤
│ Status bar (FPS · resolution · status) │
└─────────────────────────────────────────────────────┘
ElementPurpose
SidebarDevice list. Collapsible and pinnable.
ToolbarStream controls, zoom, flip, crop, save, record, histogram, settings.
ViewportLive video display with floating histogram and ROI overlays. Right-click for context menu.
Control PanelCamera Panel with configurable sections: setup, capture / 3A, ISP image pipeline, processing, detectors, and advanced device controls. Collapsible and pinnable.
Status barLive FPS, frame resolution, and status messages.

Connecting a Camera

  1. Click the sidebar toggle (chevron, top-left) to open the device list.
  2. A list of detected V4L2 devices appears (e.g. /dev/video0). Click a device to open it.
  3. The sidebar shows the device name when connected.
  4. Click ▶ Play in the toolbar to start streaming.

The status bar shows live FPS and resolution once streaming starts. If the camera disconnects, an error banner appears and streaming stops automatically.

Pixel format and frame size can be changed in the Control Panel while not streaming. Stop the stream first — there is no need to close the camera. The new format takes effect when you press Play again.

Camera Controls

The Control Panel (right side) exposes every parameter reported by the V4L2 driver, rendered as sliders, checkboxes, menus, or buttons depending on type. Exposure and Gain sliders refresh ~3 times per second to reflect the current driver value when Auto mode is active.

Primary controls

ControlDescription
ExposureSensor exposure time. Supports manual value and Auto mode.
GainSensor amplification. Supports Auto mode where available.
GammaGamma curve correction.
BrightnessDigital brightness offset.
White BalanceColour temperature adjustment. Supports Auto mode.
Frame RateTarget capture rate. Enter a value and press Apply (or Enter). Shows the driver-reported min–max fps range. The status bar updates to show the actual fps the driver accepted, which may differ slightly from the requested value.

Additional controls

All other V4L2 controls reported by the driver (sharpness, saturation, hue, power-line frequency, backlight compensation, and any camera-specific controls) appear below the primary controls, automatically discovered at open time.

Format and resolution

Discrete cameras (most USB webcams) show a drop-down list of preset resolutions.

Stepwise / continuous cameras (industrial, machine-vision) support arbitrary resolutions within a range. Two number inputs appear instead of a drop-down — enter the desired width and height; the hint below shows the valid range and step size (e.g. 640–1920 × 480–1080 (step 2×2)). Click Apply to set it.

Display Rate

The Display Rate section in the Control Panel (visible while streaming) controls how many frames per second are forwarded to the browser, using adaptive decimation.

After each second of streaming, Videre computes a decimation factor so the browser receives approximately the target FPS. For example, if the camera captures at 120 fps and the target is 30 fps, 1 in every 4 frames is forwarded.

ControlDescription
Adaptive toggleEnable or disable automatic decimation. When disabled, every captured frame is forwarded.
Target FPSDesired display frame rate (default: 30 fps). Read-only labels show the current device fps and active decimation factor.

Decimation only affects the display. The camera always captures at its configured rate, and recordings capture every frame regardless of this setting.

H.264 cameras: Every H.264 frame is decoded internally even when decimation is active — skipping decoder input would corrupt subsequent P-frames. The CPU cost of decoding is unchanged by decimation on H.264 sources; the saving is in JPEG encoding and WebSocket delivery only.

Zoom & Flip

Zoom

ControlAction
+ / buttonsZoom in/out in 10% increments
FitScale to fill the viewport
Mouse wheel over videoZoom in/out

Zoom is display-only and has no effect on saved images or recordings.

Flip

Flip H / Flip V mirror the image horizontally or vertically. Flip is display-only — saved images and recordings are not affected.

Crop / ROI

Videre probes each camera at open time to determine which crop mode it supports and labels the UI accordingly. Three modes exist:

ModeHow to activateProcessed byAffects captured frameChanges resolution
Software Crop Click Crop in toolbar, drag on viewport Browser No No
Hardware Crop Right-click → Hardware Crop Camera driver (sensor level) Yes Yes
UVC ROI (AE/AF) Right-click → Set AE/AF ROI Camera firmware (metering only) No No

Many USB webcams report crop support but only implement UVC ROI — a UVC spec feature that tells the camera where to meter for auto-exposure and auto-focus. Hardware Crop and Set AE/AF ROI are shown exclusively based on what Videre detects at device open time.

When a hardware crop or UVC ROI is active, a Reset H.Crop or Reset ROI button appears in the toolbar. The camera driver may adjust the selected region to align with sensor boundaries; the status bar shows the actual applied dimensions.

The Advanced section of the Control Panel also exposes crop/ROI coordinates as number inputs for precise entry.

Saving Images

Click the Camera icon in the toolbar. The current frame is saved immediately to ~/Pictures/videre/ with a timestamp filename (e.g. 20260222_143512_042.jpg).

FormatNotes
JPEG Quality 95. For MJPEG cameras, the raw compressed frame is written directly without re-encoding.
TIFF Lossless, uncompressed. Mono cameras preserve full bit depth: GREY → 8-bit; Y16 → 16-bit. Colour cameras save as 8-bit RGB. Not available for MJPEG or H.264 cameras — enable any filter to force decompression first.
Raw Verbatim V4L2 buffer bytes. Available via REST API only (POST /api/save with {"format":"raw"}). Useful for machine vision and offline processing.

Select JPEG or TIFF as the default in Settings (gear icon). When image processing filters are active, all save formats operate on the filtered frame.

Recording Video

Click Record in the toolbar to start; click again to stop. Files are saved to ~/Pictures/videre/ as AVI.

Source formatAVI codec
MJPEG cameraMJPG — frames written directly, no re-encoding
YUYV, NV12, H.264, etc.MJPG — converted to JPEG before writing

A maximum file size limit (default 200 MB, configurable in Settings) stops recording automatically. The AVI container uses a nominal 30 fps timestamp — playback speed will differ if the camera runs at a different rate. Recordings capture every frame regardless of the display rate / decimation setting.

Image Mode

Image mode lets you load a still image file for offline analysis using the same tools available for live streams — histogram, ROI analysis, image processing filters, and detectors. No camera is required.

Loading an image

Click the Load Image button in the toolbar. A panel appears with two loading methods:

MethodHow
UploadClick the file picker or drag-and-drop. Sent over HTTP and processed immediately.
Local pathType an absolute path on the server filesystem and click Load. Useful for large files already on the machine.

Supported formats: JPEG, PNG, TIFF, BMP, and camera RAW files (DNG, CR2, CR3, NEF, ARW, ORF, RW2, and others via LibRaw). RAW files take 1–5 seconds. To return to camera streaming, click the next to the filename.

Pro / Subscription / Source: RAW file loading requires a paid tier. Community Edition is limited to JPEG, PNG, TIFF, and BMP.

Render modes (RAW files only)

ModeDescription
CameraDisplays the embedded JPEG preview generated in-camera. Matches the manufacturer's colour science exactly.
RawLibRaw demosaic with sRGB gamma, no tone mapping. Neutral starting point for filter work.
FilmicACES filmic tone mapping with optional CLAHE local contrast enhancement. Exposure (0.10–2.00, default 0.65) and Clarity (0–8, default 2.5) sliders appear in the toolbar.

Analysis tools in image mode

Histogram, ROI analysis, image processing filters, and detectors all work identically on the loaded image. Changing the render mode or Filmic sliders re-renders in place — no "apply" button needed.

Settings

Click the gear icon in the toolbar to open the Settings panel.

SettingDescription
Save formatDefault snapshot format: JPEG or TIFF.
Recording formatAVI codec for recordings: MJPEG (compressed, default) or Raw RGB24 (uncompressed).
Max recording size (MB)Recording stops automatically when this limit is reached (default: 200 MB).
Close app when browser closesWhen enabled (default), Videre exits automatically 4 seconds after the last browser tab is closed. A page reload reconnects within the grace period and does not trigger shutdown. Disable to keep Videre running in the background.
Performance DiagnosticsOpens the diagnostics page in a new tab. See Hardware Diagnostics.

Live Histogram

Click the Histogram (bar chart) icon in the toolbar to toggle the overlay. The panel appears in the lower-left corner of the viewport, and is freely moveable and resizable.

Channels

ChannelColour
Luma (BT.601 Y)White
RedRed
GreenGreen
BlueBlue

Each channel has an independent toggle (L / R / G / B). Disabling a channel removes it from the display and from the auto-scale calculation — remaining channels fill the full height.

Moving and resizing

ActionHow
MoveDrag the panel header. Release near the viewport edge to snap flush.
Resize widthDrag the right edge
Resize heightDrag the bottom edge
Resize bothDrag the bottom-right corner

Scale, Axes, and Crosshair

Toggle between Log (default) and Lin scale in the panel header. Log scale makes shadows and dark tones easier to read.

Click Axes to overlay axis labels: Y-axis (max count / 0), X-axis (0, 128, 255), and faint grid lines at 25%, 50%, and 75% positions.

Move the mouse over the histogram canvas to show a vertical crosshair. A tooltip displays the pixel value (0–255) at the cursor and the count for each visible channel, updating live during streaming.

Clipping indicators

Histogram is not available for MJPEG or H.264 cameras — compressed frames contain no raw pixel values. Enable any pixel filter to force decompression. On cameras wider than 1920 px or above 60 fps, a performance note is shown before starting Analyze mode.

Image Quality Analysis

Click Analyze in the histogram footer to collect 5 seconds of data at up to 60 samples/sec. A progress bar shows collection status. After collection, the analysis dialog reports:

CategoryWhat you get
ExposureMean brightness and qualitative label (dark / slightly dark / well exposed / etc.), highlight and shadow clipping percentages, contrast span
Color BalancePer-channel (R/G/B) means, qualitative colour cast label
Temporal StabilityLuma standard deviation across samples, dominant flicker frequency via DFT, flicker depth (peak-to-peak modulation as %), source hints for 50/100 Hz mains flicker

Nyquist note: Detecting mains-frequency flicker (50/100 Hz) requires a camera running above 100/200 fps respectively. A note is shown when the camera frame rate limits the detectable flicker range below 30 Hz.

ROI Analytics

Right-click the live viewport and select Analyze, then click and drag to draw a region. The ROI Analysis panel appears and begins updating automatically.

Statistics

Per-channel statistics are computed over all pixels in the selected region:

StatisticDescription
MinMinimum pixel value
MaxMaximum pixel value
MeanAverage pixel value
Std DevStandard deviation — a measure of contrast or noise within the region

For colour cameras values are in the 0–255 range across R, G, B, and luma channels. For mono cameras (GREY / Y16) analysis runs at native bit depth — a single Mono row is shown with values in the sensor's native range (e.g. 2048 / 4095 for a 12-bit source).

Line profiles

Two colour-coded canvas charts show pixel values sampled from within the ROI. Use the H / V tab buttons to switch between horizontal and vertical profiles. Each channel (R, G, B, luma) can be toggled independently.

ModeDescription
1px (default) Samples the single centre row (horizontal) or centre column (vertical). A yellow dashed crosshair appears on the video showing exactly which row/column is sampled.
Avg Averages all rows across the full region height (horizontal) or all columns across the full region width (vertical). The crosshair overlay is hidden in this mode.

The panel polls every 250 ms while streaming. Moving or resizing the selection box updates statistics immediately on mouse release. Close with the × button to stop polling.

ROI Analytics requires decoded pixel data. Not available for MJPEG cameras in passthrough mode — enable any pixel filter to force decompression.

Pixel Filters

The Processing section in the Control Panel provides a per-frame OpenCV filter chain. Filters run sequentially in a dedicated processing thread and can be toggled while streaming — changes take effect on the next frame.

FilterParametersDescription
Gaussian Blur Kernel size (3–15), Sigma (0 = auto) Smoothing blur; reduces noise at the cost of detail. Sigma 0 lets OpenCV choose an appropriate value for the kernel size.
Median Blur Kernel size (3–11) Salt-and-pepper noise removal; preserves edges better than Gaussian. Kernel must be odd.
Sharpen Strength (0.5–5.0), Radius (1–5) Unsharp mask — boosts high-frequency detail. Higher strength increases the effect; higher radius blurs the reference more before subtracting.
Grayscale Converts to luminance (BT.601 coefficients) and outputs a three-channel grey image.
Threshold Threshold (0–255), Mode (Binary / Otsu) Pixels above the threshold go to 255, below to 0. Otsu mode ignores the slider and computes an optimal threshold automatically from the image histogram.
Canny Edges Threshold 1 (0–255), Threshold 2 (0–255), Aperture (3/5/7) Canny edge detector. Outputs white edges on a black background. Threshold 2 is the strong-edge threshold; Threshold 1 is the hysteresis weak-edge threshold.

Filters are applied in the order shown. Multiple filters can be active simultaneously — each is applied to the output of the previous one. When filters are active, histogram computation, saves, and recordings all operate on the filtered frame.

MJPEG cameras: When at least one filter or detector is enabled, Videre decompresses each MJPEG frame to raw RGB24, applies the processing chain, and re-encodes the result. This also enables histogram and ROI Analytics. Disable all filters and detectors to return to zero-overhead passthrough.

Shape Detectors

Detectors run after the pixel filter chain, concurrently across available CPU cores. Enabling multiple detectors does not multiply latency.

DetectorOverlay colourParameters
Contour Green (rects) / Cyan (polygons) Min/max area (px²), Mode (external / all), Output (rect / polygon / both), Burn-in
Circle (Hough) Yellow Min/max radius, Param 1 (Canny threshold), Param 2 (accumulator threshold), Burn-in
Blob Magenta Min/max area, Min circularity (0–1; set to 0 to detect irregular blobs), Burn-in

Overlay vs. Burn-in

ModeDescription
Overlay (default)Shapes sent to the browser as JSON and drawn on a transparent canvas layer. The underlying frame is unmodified — recordings and saves are clean.
Burn-inShapes drawn into the RGB24 frame before JPEG encoding. Visible in recordings and saved images as well as the live view.

Tips

Barcode & QR Scanner

Enable the Barcode Detector (ZBar) in the Detectors section. Each found symbol is highlighted with a yellow polygon overlay and labelled with its type and decoded text (e.g. QR-Code: https://...).

ParameterDescription
Throttle (1–60)Number of frames to skip between scans. Cached results are shown on skipped frames to avoid flicker.
Burn-inDraw overlays into the frame (visible in recordings/saves).

Supported symbologies: QR Code, EAN-13/8, UPC-A/E, Code 128/39/93, DataBar, ITF, and more.

Hardware Diagnostics

Open via Settings → Performance Diagnostics → Open, or navigate directly to /diagnostics. No root access required — all data is read from sysfs/procfs.

System Information

FieldDescription
CPUModel name, core count, and key SIMD instruction sets (SSE4.2, AVX2, etc.)
GPUDetected GPU and VA-API hardware decode availability (H.264, HEVC, VP9)
RAMTotal and available memory
KernelLinux kernel release string

Camera / USB

FieldDescription
BusUSB version and negotiated bus speed (High Speed 480 Mbps, SuperSpeed 5 Gbps, etc.)
TransferIsochronous (typical for USB 2.0 UVC) or Bulk (typical for USB 3.0)
AutosuspendWhether Linux USB autosuspend is active for the camera. Autosuspend can add latency between frames; disabling it is recommended for stable high-frame-rate capture.
UVCUVC protocol version reported by the camera (e.g. v1.50)
ResolutionsDiscrete (fixed presets) or Stepwise (arbitrary sizes within a range)
Frame RateMin and max frame rate at the current format and size
USB BandwidthEstimated bandwidth usage for the current format, resolution, and fps — shown as absolute value and percentage of bus capacity. Highlighted in orange when above 80%.

Recommendations

SeverityMeaning
ActionSomething likely causing a problem with a clear fix
WarningA configuration worth reviewing
InfoSetup is fine but an upgrade path may exist

Common recommendations include: disabling USB autosuspend (with the exact sysfs command to run), USB 3.0 suggestions when bandwidth utilisation exceeds 80%, hardware crop / UVC ROI capability notes, and adjustable frame rate range information.

Live Pipeline Metrics

While streaming, the page polls every second and shows average and peak timing for each processing stage, plus a bar chart relative to the frame budget (1000 / device FPS):

StageWhat is timed
CaptureV4L2 buffer handling and pixel format detection
H.264 DecodeFFmpeg decode time (H.264 cameras only)
Format ConvertMJPEG imdecode or raw format conversion to RGB24
Filter ChainAll enabled OpenCV pixel filters
DetectorsAll enabled shape detectors
HistogramHistogram computation (only when overlay is open)
JPEG Encodelibjpeg encode for WebSocket delivery

Total, Budget, and Headroom rows at the bottom show at a glance whether the pipeline is on track for the camera's frame rate. Frame counts (processed and dropped, with a drop percentage) are shown below the table.

Enable a heavy filter (Gaussian blur with a large kernel) and watch the Filter Chain row increase — an easy way to identify your bottleneck before enabling multiple features simultaneously.

Usage Data & Privacy

On first launch, Videre shows a consent dialog before camera controls become accessible. Behaviour depends on your license tier.

Community Edition

Anonymous usage data collection is mandatory for the free Community Edition. The consent dialog offers Accept & Continue or Exit. Choosing Exit shows a "usage data required" message and the app does not proceed. After accepting, the app works normally — no further action is needed.

After 1 hour of cumulative use, a verified internet connection is required to continue:

  1. A popup appears: "To continue, an internet connection is required for usage data verification — or purchase the Pro version."
  2. Three connection attempts are made automatically (immediately, +30 s, +60 s).
  3. A 3-minute window is given in total. If any attempt succeeds, the popup is dismissed and the app continues normally.
  4. If the window expires without a connection, the app shuts down after 3 seconds.

Cumulative usage is tracked across sessions and stored in ~/.config/videre/config.json. Delete or edit that file to reset the consent decision — the dialog will reappear on next launch.

Paid tiers

Paid tiers (Pro, Subscription, Source) show the consent dialog with Accept & Continue and Decline options. Usage data collection is optional, the decision can be changed in Settings, and no internet connection is required.

What is collected

EventData sent
Session start / endSession UUID (random, not linked to identity), timestamp
Device openedCamera path, pixel format, frame resolution
Stream sessionDuration, frames processed, frames dropped
Control changeControl name only — no values
Feature usedFeature name (see below)

Feature events fire once per user action, never per frame: histogram, histogram_analyze, roi_analysis, snapshot, recording, filter:gaussian_blur, filter:canny_edges, filter:contour_detector, flip_h, flip_v, crop, zoom_fit, and similar.

No video data, pixel values, control values, or personally identifiable information is ever collected. Each session generates a random UUID that is never linked to a user identity.

Disabling usage data collection

Pass --no-telemetry on the command line to suppress the consent dialog and disable all data collection. This is intended for paid tiers.

bash
$ videre --no-telemetry

Paid License Flow

When a Pro or Subscription build starts without an activated license token, Videre shows a blocking license screen before the main application is accessible.

Options on first launch

ActionWhat happens
Activate nowEnter the license key and click Activate Now. Videre contacts the licensing backend, activates the current device, and proceeds normally.
Continue on this deviceStores a local single-device binding for the current machine. Useful before formal activation, limited to this device only.
AbortCloses the session without activating and without reserving the local allowance.

Activation credits

Pro licenses include 50 lifetime activation credits. Subscription licenses include 100 activation credits per year (renewed annually). Reinstalling on the same machine typically reuses the existing activation. Major hardware changes may consume another credit — contact support in exceptional cases.

Activation state is stored in ~/.config/videre/license.json. To revoke the current device, use Settings → Revoke License.

Retrieving your license key

After purchase, the purchase-success page shows your license key immediately from the LemonSqueezy redirect. If you no longer have the key, the recovery page at get-videre.com/license-recovery sends an email with a single-use verification link that reveals your key.

Remote Access

SSH port forwarding (recommended)

Forward Videre's port over SSH to access the full web UI from your local machine securely:

bash
# On your local machine
$ ssh -L 8080:localhost:8080 user@remote-machine

# Then open in your local browser
$ open http://localhost:8080

This is the recommended approach — the SSH tunnel provides authentication and encryption with no additional configuration.

CLI over SSH

CLI subcommands work naturally over SSH without port forwarding:

bash
# List cameras on a remote machine
$ ssh user@pi "videre list"

# Capture a frame remotely, save locally
$ ssh user@pi "videre capture /dev/video0" > frame.jpg

# Capture multiple frames, pull files
$ ssh user@pi "videre capture /dev/video0 --frames 10 --output /tmp/caps/"
$ scp user@pi:/tmp/caps/*.jpg ./local-caps/

# Stream raw H264 over SSH to local player
$ ssh user@pi "videre capture /dev/video0 --format native --frames 0" | ffplay -f h264 -

Network binding

By default Videre binds to 127.0.0.1. Use --bind to listen on other interfaces:

bash
$ videre --bind 0.0.0.0 --port 8080 --no-browser
$ videre --bind 192.168.1.50 --port 8080 --no-browser

Security warning: Binding to 0.0.0.0 exposes the camera stream and all API endpoints to anyone on your network. There is no authentication built in. Use SSH port forwarding for secure remote access.

CLI Reference

Videre includes CLI subcommands that operate without starting the web server — useful for scripting, automation, headless systems, and SSH workflows.

commands
videre list List available cameras
videre info DEVICE Show device info and capabilities
videre capture DEVICE Capture frames to file or stdout
videre record DEVICE Record video to AVI
videre Start the web UI server (default)

Run videre COMMAND --help for full options on any subcommand.

List cameras

bash
$ videre list
/dev/video0 Logitech C920 uvcvideo usb-0000:00:14.0-1
/dev/video2 ZWO ASI120MM uvcvideo usb-0000:00:14.0-2

$ videre list --json # machine-readable output

Device info

bash
$ videre info /dev/video0
Device: Logitech C920
Current: MJPEG 1920×1080 @ 30.0 fps
Formats: MJPEG (6 sizes), YUYV (6 sizes)
Frame Rate: 5.0 – 30.0 fps
Controls: 14 controls listed

$ videre info /dev/video0 --json # full device descriptor

Capture frames

bash
# Single JPEG to stdout (pipeable)
$ videre capture /dev/video0 > frame.jpg

# 100 lossless TIFFs, skip 30 frames for auto-exposure to settle
$ videre capture /dev/video0 --frames 100 --skip 30 --format tiff --output ./caps/

# With camera settings
$ videre capture /dev/video0 --size 1280x720 --pixel-format YUYV --control "Exposure (Absolute)=500" --format tiff --output shot.tiff

# Timelapse: one frame every 5 seconds
$ videre capture /dev/video0 --interval 5s --frames 60 --output ./timelapse/

# Pipe to another tool
$ videre capture /dev/video0 | convert - -resize 50% thumbnail.jpg

Capture flags

FlagDescription
--frames NNumber of frames to capture (default: 1). Use 0 for unlimited (Ctrl+C to stop).
--format FORMATOutput format: jpeg (default), tiff, raw, native
--output PATHOutput file or directory. Omit to write to stdout (single frame, jpeg/native only).
--size WxHSet frame size before capture
--pixel-format FMTSet pixel format (e.g. MJPEG, YUYV)
--control "NAME=VALUE"Set a V4L2 control before capture (repeatable)
--interval DURATIONDelay between frames for timelapse (e.g. 5s, 500ms)
--skip NSkip the first N frames before saving (for auto-exposure settling)

Capture formats

--formatOutputUse case
jpeg (default)JPEG fileGeneral purpose
tiffLossless TIFF (native bit depth for GREY/Y16)Scientific, lossless
nativeCamera encoding verbatimMJPEG/H.264 passthrough
rawV4L2 buffer bytes verbatimMachine vision, post-processing

For raw and native multi-frame captures, a metadata.json sidecar is written with pixel format, dimensions, and per-frame timestamps. When --frames N with N > 1, frames are written to a directory as frame_000001.jpg, frame_000002.jpg, etc.

Record video

bash
$ videre record /dev/video0 --duration 30
$ videre record /dev/video0 --output clip.avi --size 1920x1080 --limit-mb 500

# Record on a remote machine, stream to local file
$ ssh user@pi "videre record /dev/video0 --duration 60 --output -" > clip.avi
OptionDescription
--output PATHOutput file (default: timestamped filename in current directory)
--format mjpeg|rawAVI codec: compressed (default) or uncompressed RGB24
--duration SECONDSStop after N seconds (default: unlimited — Ctrl+C to stop)
--limit-mb NStop when file reaches N MB
--size WxHSet capture resolution
--fps NSet capture frame rate
--quality NJPEG quality 1–100 for mjpeg format (default: 85)
--control "Name=Value"Set a camera control before recording (repeatable)

H.264 cameras: The recorder waits for the first IDR keyframe (up to 10 seconds) before writing frames. The --duration timer starts from the first keyframe, so you always get the requested duration of usable content.

Server Options

bash
videre [OPTIONS]

--port PORT Listen on PORT (default: 8080)
--bind ADDRESS Bind to ADDRESS (default: 127.0.0.1)
--device /dev/videoN Auto-open device on startup
--no-browser Do not open browser automatically
--browser CMD Open with a specific browser command
--no-telemetry Disable usage data collection (paid tiers only)
-h, --help Show help and exit
-v, --version Show version and exit

REST API

Every feature in the web UI is also accessible via HTTP REST and WebSocket — suitable for scripting, automation pipelines, and headless integration.

bash — headless quick start
$ videre --no-browser --device /dev/video0 &

$ curl localhost:8080/api/stream/start -X POST
$ curl localhost:8080/api/save -X POST -d '{"format":"tiff"}'
$ curl localhost:8080/api/stream/stop -X POST

Full endpoint reference — including WebSocket events, control endpoints, and the diagnostics API — is available in the API Reference.

Pixel Formats

FormatDescription
MJPEGMotion JPEG — camera delivers compressed frames
H.264H.264/AVC — decoded via FFmpeg
YUYVPacked YUV 4:2:2
UYVYPacked YUV 4:2:2 (byte-swapped)
NV12Semi-planar YUV 4:2:0
NV21Semi-planar YUV 4:2:0 (UV swapped)
GREY8-bit grayscale
Y1616-bit grayscale
RGB2424-bit packed RGB
BGR2424-bit packed BGR
SBGGR8 / SGBRG8 / SGRBG8 / SRGGB88-bit Bayer mosaic (BGGR, GBRG, GRBG, RGGB) — demosaiced to RGB24 via OpenCV
SRGGB10P / SBGGR10P / SGBRG10P / SGRBG10P10-bit packed CSI-2 Bayer (rp1-cfe native output) — demosaiced to RGB24
SRGGB12P / SBGGR12P / SGBRG12P / SGRBG12P12-bit packed CSI-2 Bayer — demosaiced to RGB24
SRGGB10 / SBGGR10 / SGBRG10 / SGRBG1010-bit unpacked Bayer (uint16 LE) — demosaiced to RGB24
SRGGB12 / SBGGR12 / SGBRG12 / SGRBG1212-bit unpacked Bayer (uint16 LE) — demosaiced to RGB24

Gray World white balance is applied to all Bayer demosaic paths.

Not yet supported

Raspberry Pi 5

Videre supports Raspberry Pi 5 with CSI-2 cameras using the rp1-cfe driver. Supported sensors include the HQ Camera (imx477), Camera Module 3 (imx708), Camera Module 2 (imx219), and others.

Camera discovery

Raspberry Pi cameras appear in the sidebar as a single logical entry — e.g. "Raspberry Pi HQ Camera (imx477)" — rather than individual /dev/videoX nodes. Videre configures the Linux Media Controller graph automatically.

Pipeline modes

ModeDescription
ISPRoutes sensor data through the PiSP hardware ISP, delivering fully processed RGB24 frames with white balance, gamma, and demosaic applied in hardware. Recommended for most use cases.
RawRoutes sensor data directly from rp1-cfe as PISP_COMP1 Bayer frames. Useful for diagnostics; display decoder pending.

Tuning file selection

On first open in ISP mode, Videre scans /usr/share/libcamera/ipa/rpi/pisp/ for matching .json tuning files and shows a selection dialog. Choose the file that matches your sensor (e.g. imx477.json for the HQ Camera, imx477_noir.json for the NoIR variant). The choice is remembered for the session.

Image Pipeline controls (ISP mode)

ControlDescription
AWBAutomatic white balance using hardware statistics from pisp-fe. Gains shown live when enabled.
BLCBlack level correction. Value auto-detected from sensor driver (e.g. 4096 for imx477 in 12-bit mode).
LSCLens shading correction using tuning-backed luminance data.
DPCDefect pixel correction using tuning-backed FE mapping.
DenoiseBayer SDN plus mild CDN when tuning data is available.
SharpenConservative first-pass sharpening.

Feature status

FeatureStatus
Camera discovery (Media Controller)✅ Supported
ISP pipeline (PiSP FE + BE → RGB24)✅ Supported
Grey-world AWB✅ Supported
Black level adjustment✅ Supported
Gamma correction (sRGB)✅ Supported
Tuning file selection✅ Supported
CCM (colour correction matrix)⚠️ From tuning file if available; identity otherwise
Exposure / gain controls✅ Available (Generic Device Controls)
JPEG snapshots and recording✅ Supported
Raw Bayer mode (PISP_COMP1)✅ Streaming works; display decoder pending
Sensor H/V flip (ISP pipeline)⚠️ State persists correctly; ISP streaming after flip may fail on current rp1-cfe stack
Noise reduction, sharpening⚠️ Conservative first pass; further tuning planned

Limitations

LimitationDetail
Single cameraOnly one camera can be open at a time.
Localhost by defaultBinds to 127.0.0.1. Use --bind 0.0.0.0 to expose on LAN (no authentication), or SSH port forwarding for secure access.
No format change while streamingStop the stream before changing pixel format or resolution. No need to close the camera — stopping is sufficient.
AVI frame rateFixed nominal 30 fps timestamp. Playback speed differs at other capture rates.
TIFF / histogram / raw recordingNot available for MJPEG or H.264 cameras (no raw pixel data). Enable any pixel filter to force decompression.
Software crop and flipDisplay-only — no effect on saved images or recordings. Hardware crop does affect the captured frame and output; UVC ROI affects AE/AF metering only.
ROI AnalyticsRequires decoded pixel data. Not available for MJPEG in passthrough mode — enable a filter first.
No desktop integrationNo system tray or native window. Keep the browser tab open, or install as a PWA. By default the server exits when the last tab closes (see Settings).
Community Edition connectivityAfter 1 hour of cumulative use, a verified internet connection is required to continue. A popup gives up to 3 minutes to reconnect. Paid tiers have no such requirement.