Skip to content

Vision Node INI

visionnode.ini is the configuration file for Broox Vision Node. It resides in the user's local data folder by default (hidden) but can be edited in the application UI.

Sections

logging

  • loglevel: Numeric or string (INFO, DEBUG, WARN)
  • logfile: Relative or absolute path/name of the logfile. If no value is given, default to the user's AppData/Local ( windows) or .cache (Linux) folder.
[logging]
loglevel = INFO
logfile = visionnode.log 

engine

  • pipeline: Name or Path (relative or absolute) to the startup pipeline.
  • rate_limit_fps: floating point number, absolute rate limit of frame ingestion.
  • max_interactive_height: Maximum height of the preview window. If not set, will be the camera input height. If set, the preview window will be scaled down to this height.
  • Advanced options:
    • webservices_host/webservices_port: IP and port where the AST and webservices are started. Defaults to localhost:5000
    • rpc_endpoint/rpc_notify: Internal webservice/engine ports. Defaults to tcp://127.0.0.1:5556 and :5557.
    • debug_queue_lengths: Boolean, only in debug versions, print internal queue lengths.
    • debug_webservices: Start the AST window in debug mode.
[engine]
pipeline = pipelines/skeleton-osc.yml
rate_limit_fps = 24

camera

Camera definition section. See Cameras.

AST Values (internal)

Additional values starting with underscore (_xxxxxx) are used internally by AST and should not be manually changed.

Zones

Zones are defined via AST, and are recorded as a list of pairs [x,y] in normalized coordinates over the whole picture.

[camera]
zones.contour_enabled0 = true
zones.contour_name0 = Corner
zones.contour0 = [[0.0, 0.0], [0.5, 0.5], [0.5,0.0], [0.0,0.0]]
zones.contour_semantics0 = count
zones.contour_color0 = #ff0000

Gates

Gates are defined via AST, and are recorded as a list of pairs [x,y] in normalized coordinates over the whole picture. Point order is important, as it defines the gate inside and outside parts. Using a "Right hand" rule, the normal points to the "inside" of the gate. That is, given a pair of points [A,B], [C,D], the vector (x,y) = [C-A,D-B] is the tangent, rotate 90º clockwise to get the normal vector (x,y) = (-y,x) (note that coordinates are screen-space, Y positive downwards).

          OUTSIDE
        1         2
 [A,B] *---------* [C, D]
      /     |   | \
   0 *      |<--|   \
            |         \
            v          * 3
            INSIDE
[camera]
gates.gate_enabled0 = true
gates.gate_name0 = Gate
gates.gate_points0 = [[0.0, 0.0], [0.5, 0.5], [0.5,0.0], [0.0,0.0]]

autostart

  • enabled: 0/1 wether to automatically start the vision service upon opening the UI.
[autostart]
enabled = 0 

controller

Broox Controller Node to connect to. client_id is automatically assigned on first connection and can be checked in Broox Studio.

[controller]
id = DEVEL-CONTROLLER
ip = 192.168.0.1
port = 9912
config_url = http://192.168.0.1:9912/config
client_id = 51503b18-2a45-486e-9c22-1bed2525f2dd

pipeline

This section(s) allow for custom settings to the selected pipeline values.

  • enable_analytics: boolean (0/1, true/false, yes/no, on/off) — whether to send analytics to Broox Studio.
  • processor.parameter = value: sets parameter parameter on processor processor. If the parameter does not exist in the pipeline, it is appended.
  • processor.networks.netname.kwarg = value: sets kwarg kwarg on the network named netname inside processor. The network must already exist in the pipeline; otherwise the override is logged and ignored.
  • processor.networks.netname.class = ClassName: swaps the implementation class of the network.

Overrides whose processor or network name does not match anything in the loaded pipeline produce a WARNING in the log and are otherwise ignored. Typos are therefore silent at the engine level but visible in the log.

Additional [pipeline:pipeline-name:<suffix>] sections are merged on top of [pipeline] whenever the running pipeline matches pipeline-name. The <suffix> part is purely a human grouping label — the engine matches by the pipeline-name prefix only and merges every matching section into a single flat dictionary, so suffixes do not restrict the override to a specific processor on their own. Use the dotted-key forms above to scope overrides.

[pipeline]
enable_analytics = 1
report.enable_http = false
report.send_status_post_url = http://localhost:8085
report.send_status_time_interval = 1.0

[pipeline:audience-analytics-low:traffic]
detector.threshold = 0.5
detector.networks.class_finder.device = GPU ; Use GPU for this network
detector.networks.class_finder.model = yolov8n ; Use custom model for this network

[pipeline:audience-analytics-low:agegender]
agegender.enabled = true

[pipeline:audience-analytics-low:api_output]
report.enable_mqtt = false
report.send_status_mqtt_channel = /vision
report.enable_http = false
report.send_status_post_url = http://localhost:8085
report.send_status_time_interval = 0
osc.enabled = false
osc.target_host = 127.0.0.1
osc.target_port = 15000