Adding a camera
In the tree, click “Add camera”. The main form has the tabs “General information”, “Detectors”, “Observers”; the Detectors tab is not available for some source types.
General fields
| Field | Meaning | What to enter / select |
|---|---|---|
| Camera type | How material is received and processed | The actual source type from the table below |
| Camera name* | Name used in the tree, logs and reports | Sigma — workshop 1 — workstation 01; avoid duplicate names |
| RTSP* | Source address field; this label is also used for some other types | The address provided by the camera administrator or integrator. For a standard IP camera, this is the video stream address, not a link to its web page |
| Protocol | Connection transport for a fixed source | An option compatible with the source; the technical TCP/UDP values are described in the API |
| Stream resolution | The stream quality selected in the available form | Choose based on the source image and processing load. Selecting 1080p does not create detail missing from the original stream |
| At site → Select | Camera location in the tree | The site and, if applicable, the floor |
| Map → Mark | Camera position on the plan | Available after selecting a suitable site; mark the actual installation location |
| Workspaces → Add | Membership in organizational groups of cameras | Select existing workspaces; these are not physical zones within the frame |
| Camera activation → Manual / Scheduled | Source operating mode | For a schedule, select the days of the week and the start and end times. These fields have no effect in manual mode |
| Camera status, OFF / ON | Whether the source is in use | Enabling it does not confirm that the server is actually receiving images |
| Neural network, OFF / ON | Whether the assigned analytics are running | Enable after configuring the preset; the stream can operate without analysis |
| Video recording, OFF / ON | Whether to maintain a video archive | Availability depends on the camera type and storage. This switch does not control saving all event photos |
| Monochrome image | Converts the image to grayscale | Use only when justified by the model configuration; color information is lost |
| Additional parameters | JSON settings for processing this camera | Supported filters and algorithm settings. See the format, example and limitations below; preserve the other keys when editing. |
A stream may have several address variants: the main stream, a secondary stream and different codecs. Obtain the address from the camera/VMS documentation. If it requires access credentials, enter them in the working system, but remove the secrets before including the address in a report or support request.
Additional parameters: JSON settings for one camera
The Additional parameters field stores processing settings for this camera as JSON. It may contain detection and event filters, video processing options and settings for individual algorithms. It is not a free-text notes field: a key only has an effect if the installed component supports it.
Applicability. The settings below come from BOX documentation, the media server test guide and completed development tasks. Some belong to specific modules or deployments. The same field in BOX 5.0 does not imply that every scenario consumes these keys: check which camera parameters its blocks read. A completed development task confirms a change, but does not prove that it is installed in every system release.
Minimum object size and event suppression
| JSON key | Purpose | Format and example |
|---|---|---|
size_filters |
Rules that filter detections by minimum object size | An array of objects; each rule identifies the classes it applies to |
size_filters[].labels |
Classes covered by the rule | An array of strings, such as ["person"]. Use class codes from the installed model, not translated display names |
size_filters[].min_size_width |
Minimum width of the detected object | Pixels; 70 in the example |
size_filters[].min_size_height |
Minimum height of the detected object | Pixels; 70 in the example |
time_window |
Time window used by the event suppression filter | Seconds; 10 in the example |
Example field contents:
{
"size_filters": [
{
"labels": ["person"],
"min_size_width": 70,
"min_size_height": 70
}
],
"time_window": 10
}
This example applies the size rule to the person class and sets a ten-second suppression window. The values 70 and 10 come from a deployment example. They are not defaults and must be chosen for the scene and task. A size filter can remove small detections; a threshold that is too high can also remove a person in the distance. The precise suppression algorithm and the meaning of zero depend on the component that reads the setting.
The source manual states that camera settings take precedence over the preset. Do not assume that every custom scenario follows this rule: it may read the parameters differently or ignore them.
The face detector documentation uses the same size_filters structure with the classes mask_off, mask_viol and mask, and 70 × 70 pixel thresholds. In that example, both dimensions must exceed 70 pixels. Class names depend on the installed model.
Media server: decoding, frame rate and processing group
| JSON key | Purpose | Values and verification |
|---|---|---|
mediaserver.decoder_use_ffmpeg |
Use the FFmpeg decoder for this camera | JSON boolean: true enables it. Check HLS playback after saving |
mediaserver.decode_hardware_decode_enabled |
Hardware decoding | JSON boolean: true enables it and false disables it. Requires compatible hardware and service configuration; successful playback alone does not prove that hardware decoding is in use |
mediaserver.fps |
Frame-rate limit for this camera | Frames per second. The guide shows 25, with 1 or 2 suggested for an easily visible test. The complete range and the meaning of 0 for this JSON field are not established |
group |
Group used to allocate the camera to inference processes | A string, such as "group_name". Use a name agreed with the processing configuration. This is separate from the object hierarchy and user access scope |
Example: limit one camera to two frames per second.
{
"mediaserver": {
"fps": 2
}
}
A low value is useful for testing, but may be unsuitable for fast movement or brief events. After the test, set a frame rate that meets the analytics requirements. A media server limit does not replace the camera schedule or the LLM execution interval.
For an MJPEG stream, the guide specifies a GENERIC camera with software FFmpeg decoding:
{
"mediaserver": {
"decoder_use_ffmpeg": true,
"decode_hardware_decode_enabled": false
}
}
When combining settings, place them in one mediaserver object and preserve its existing keys. Do not create two root keys with the same name.
After saving, check that HLS plays correctly, colours and proportions are natural, and playback delay does not keep growing. An operations engineer can verify the processing group in the media server log messages Camera group is and Adding camera to inference. To confirm hardware decoding, the guide uses nvidia-smi -q -x and the decoder_util field.
The limit for all cameras is configured separately through the service environment variable DECODE_MAX_FPS. Its documented values are positive integers; 0 disables the limit, and the documented fallback when the variable is absent is 25. This is a server setting. For one camera, the documented JSON path is mediaserver.fps. Do not automatically apply the environment variable's zero behaviour to the JSON field.
Linked cameras and crane cabin position
| JSON key | Purpose | Values and limitations |
|---|---|---|
event_filter_seconds |
Time interval for suppressing duplicate person events in a linked-camera configuration | Seconds; 5.0 in the example. When omitted, the service setting applies: five seconds in the documented deployment. This is a separate setting from time_window |
cabin_position |
Cabin position used by the lifting and handling safety algorithm | One of "LEFT", "RIGHT", "DOWN" or "TOP". Set on the downward-facing, or nadir, camera. Match the installed camera and its calibration |
camera_position |
Camera role within the linked set | The documentation screenshots show "NADIR", "FRONT" and "UNSPECIFIED". These are observed values, not a verified exhaustive list |
links |
Linked cameras and their roles | An object such as {"5":"FRONT","6":"NADIR"}, with camera IDs as string keys. Preserve existing links; do not copy IDs from another installation |
Example of a cabin-position setting:
{
"cabin_position": "DOWN"
}
Manage the links themselves through the system's linked-camera screen. When changing another setting, preserve links and camera_position if they are already present. The documented event_filter_seconds change concerns duplicate filtering by person ID and zone type. It does not set the event clip length or a universal interval for every detector.
Speed settings by vehicle class
The speed detector configuration uses a speed_table object. Each key is a class code and each value is a numeric speed setting. The documented example is:
{
"speed_table": {
"car_sedan_suv": 40,
"bus": 30,
"truck": 20
}
}
The available description does not specify units, the comparison rule, allowed ranges or the behaviour for an omitted class. Do not present 40/30/20 as universal limits in km/h. First check the configuration contract and calibration of the installed speed detector.
Settings for individual modules
A completed development change confirms support for reading module settings from the camera's additional parameters. This is a way to supply parameters, not a universal key catalogue for all algorithms.
The activity module documentation describes activity_thresholds with the levels low, medium and high, using 10/20/50 as an example. A later change groups the settings under person_activity and adds aggregation by time or frame count: aggregation_by_time, time_seconds_aggregate and num_frames_aggregate. Camera settings take precedence over this module's configuration; missing settings fall back to that configuration.
Check the installed contract before copying the old aggregation example. The task description misspells the key as aggretation_params, while the implementation comments use aggregation_params. The example's 30-second period is not a reliable default either: the change history records a new default of 60 seconds. Confirm the nesting and values for the installed release. These sources do not define the units of the activity thresholds.
Other completed tasks mention early_send_on_zone_exit and controlling pose detection through camera parameters. The reviewed descriptions do not provide their complete JSON contracts. For RTSP sources with malformed SDP, support was added for the GStreamer property force-noncompliant-url, requiring GStreamer 1.24.7 or later. However, these sources do not establish the exact camera JSON key or nesting. Apply these options using the module's configuration contract, not a task title alone.
Other parameters found in configurations
The following keys appear in deployment examples. This table records their structure and actual example values. It does not define allowed ranges or recommend copying the entire configuration to every camera.
| Group | Keys and example values | Applicability |
|---|---|---|
movement_detection |
turn_on: "true", threshold: 55, close_ksize: [31, 31], gb_ksize: [11, 11], gb_sigma: 3, silhouette_height: 0.05 |
Motion processing options. Consult the installed algorithm's contract for threshold meanings and ranges. The source uses the string "true"; do not replace it with boolean true without checking |
check_movement |
labels, sub_label, time_for_report: 8, percent_frames_for_report: 0.5, drop_after_time: 30 |
The example sets sub_label to "person_lay_down_secondary". The units of the time fields and result accumulation rules are not established here |
A completed development task confirms the motion-checking module. Its description does not establish the units of time_for_report or drop_after_time, threshold ranges, or how percent_frames_for_report is calculated. The key names alone are insufficient to determine those rules.
Entering and checking changes
- Copy the current field contents before editing. Preserve unrelated keys when changing one setting.
- Enter a JSON object with double quotes around keys and strings. JSON does not allow comments or a trailing comma after the last item.
- Check the model's class codes and the units. Do not reuse pixel thresholds in a different view without checking the image scale.
- If a separate editor is open, select Apply, then save the camera. Use controlled footage to compare required detections, small objects and repeated events before and after the change. For media server settings, also check HLS playback.
- If required events disappear, restore the saved configuration and check the size filter, event suppression and interaction with the preset or scenario.
BOX 3.2 API: the reviewed CreateCamera.etc_params schema is string | null, with the default "{}". The field's JSON must therefore be sent as a string with escaped quotes, for example "etc_params": "{\"time_window\":10}". This is a request-body fragment, not a complete camera creation request. An empty object means that no keys are set here; it does not define universal analytics defaults.
If the field is unavailable: check permission to edit the camera and its additional parameters. A project-specific role model was extended to give administrators and data analysts access, including for synchronised cameras. Your installation's permissions determine actual access. If the button does not open the editor, or existing values disappear when editing, record the interface version and contact support: this behaviour has been documented and fixed as a defect. Do not save an empty form over a configured camera.
Camera types and their specific fields
| Type in the form | Use and characteristics |
|---|---|
| Fixed camera | Continuous video stream. Protocol, address, resolution, manual mode / schedule, recording, analytics and monochrome image are available |
| V4L2 camera | A device accessible to the server component through V4L2. The form retains the “RTSP” label, but the actual device identifier is specified by the integration contract. This is not a USB camera connected to the operator’s browser |
| Snapshot camera | Periodic frame capture. Adds the numeric field “Snapshot interval”. No unit is displayed next to the field: check it against the driver parameters rather than assuming minutes by analogy with LLM |
| Thermal camera | Temperature monitoring. Fields “Monitoring”: “People” / “Zones”; “Temperature threshold”. For zones, the form also displays “Monitoring type”: minimum temperature, maximum temperature or temperature difference. Choose the threshold according to the measurement procedure and device settings; a demonstration value is not a regulatory limit |
| Video recorder | Management of a wearable/portable DVR and uploaded material. Fields: name, employee number, site, workspaces. RTSP and the standard stream switches are absent from the inspected form |
| Virtual camera | Analysis of a prepared video file. Fields: “File”, “Upload”, “Download”, name, site, workspaces, status, neural network. Select an existing file or upload your own. The absence of a recording button for this type does not mean that the file is not stored |
| Auto-detected camera | A source whose type is determined by a supported connection mechanism. Use only an address compatible with the installation; the mode name does not guarantee recognition of every protocol |
Changing the type changes the available fields. Select the type first, then enter the address and type-specific parameters. Do not enter internal API enumeration values in the name field or copy them from hidden interface elements.
“Detectors” tab
Click “Add preset”, and select an existing preset. Rows can be deleted or moved. Review the resulting set of classes and save the camera. Do not add the same preset more than once. For full descriptions of thresholds and states, see §9.5.
“Observers” tab
Find and select the user, then click “Add”. Check the entries already added: the creator may already be listed. Save. An observer is responsible for the camera and participates in the notification route; their actual access is also governed by their role.
Checks after saving
- Find the camera under the correct site.
- Open the live stream and make sure the view is correct and the image is updating.
- Check the camera status and neural network status separately.
- Open the zones and make sure their boundaries match the frame.
- Check the expected detection and log entry using an approved test example.
- If recording is enabled, check the archive separately.
- Open the camera using the operator’s working role.
Copying a camera does not replace these checks: verify the new camera’s address, site, zones, presets, observers and schedule. Preset saving/copying was fixed in closed issues BOXD-5278 and BOXD-5285; this is a reason to check the result, not a guarantee that every copy is automatically correct.



Camera card: all tabs
Open the card from monitoring or the tree. Common actions are back, “Edit”, and location on the map if a plan is available. Eight tabs were available on the inspected camera.
| Tab | Fields and use |
|---|---|
| Live stream | “Camera” / “Neural network” mode, HLS / WebRTC, playback, player settings and full screen. Expandable panels contain entry/exit counters, occupancy counters, LLM prompts and detectors |
| Zones | A list of frame regions and “Add zone”. For editing geometry and type, see §9.4 |
| Archive | Period, zone, “Show” / “Reset”, zone display and timeline. If “Video recording is disabled” is displayed, check recording and storage; this does not prove that event photos are unavailable |
| Video clips | Period, zone, event type, measures and decision; select an episode on the timeline and play the associated material. A video error can occur even when a photo is available |
| Heatmap | Period and “Show” / “Reset”. Displays the accumulated spatial distribution of observations; this is not a temperature image from a thermal camera |
| Linked cameras | “Link camera” and viewing linked angles. “Tablet mode” is used with a prepared set; it may be unavailable when there are no links |
| Camera health | Charts for the last 24 hours, separately for the camera and neural network; states are “working”, “disabled” and “fault”. The table shows time, state and stream resolution |
| Camera activity | Period, “Show”, state change history and control method, including manual user actions |
First distinguish a video acquisition problem from a neural network processing problem. A healthy stream produces no new detections while analytics are disabled. Activity history helps establish whether a shutdown was scheduled or manual.
There is a Jira proposal for a “Parameters” tab (BOXD-5321), but this tab is absent from the inspected card. It is therefore not included in these instructions as an available feature.






On screen: Example of an open archive recording and clip list; Diagnosing missing recordings; Diagnosing playback errors.
Choosing HLS or WebRTC for live viewing
Applies to: BOX 3.2 camera cards with an HLS / WebRTC selector on the Live stream tab. You need permission to view the camera, a working video source, and a deployment configured to deliver the selected stream to your browser. If the selector is absent, ask your administrator which viewing modes the installed interface and integration support.
This selector changes how video reaches the browser. The camera connection address and source protocol are configured separately. Switching between HLS and WebRTC does not enable archive recording or start a disabled detector.
| Situation | Try | Check |
|---|---|---|
| Low viewing latency matters | WebRTC | The image updates and the observed delay is acceptable for the task |
| WebRTC freezes, breaks up or loses the image | Switch to HLS | Playback is more stable and its delay is acceptable |
| Neither mode shows current video | Check the camera state and source | A previously saved frame is not being mistaken for a live stream |
- Open the camera card from monitoring or the camera tree, then select Live stream.
- Keep the same Camera or Neural network view when comparing modes. Select HLS or WebRTC and start playback if paused.
- Check that the image updates and assess the delay. If the problem persists, compare the other mode on the same camera.
- Check the archive and analytics state separately. Successful playback alone does not prove that recording or analysis is running.
Expected result: a viewing mode that suits the task, with a current image and a delay the operator understands. WebRTC is generally the first choice when responsiveness matters; HLS is an alternative when playback is unstable. A fixed delay or universal processing-load advantage is not guaranteed: source, server, network and browser conditions affect the result.
If HLS works but WebRTC does not, give your administrator the time, camera identifier, browser version and comparison result. Changing the camera RTSP address or analytics settings is not part of switching the viewing mode. If many cameras fail together, use the shared-failure checks.
