Skip to main content

App Control

App Control lets Vidsy Pipes act as an operator assistant for the recording / reporting application your team already uses in the field.

Use it when you want to keep your existing workflow and still get the codes for live detections into your existing tools with less manual typing and fewer missed steps.

Why use App Control

App Control is built for teams that already have an established reporting workflow but want Vidsy Pipes to do more than flag detections on screen.

  • Keep your current Windows recording or reporting software in place.
  • Trigger observation transfer directly from the camera view or with a global hotkey.
  • Reduce duplicate entry while the inspection is still in progress.
  • Let operators stay focused on validation instead of retyping findings.

Typical workflow

  1. Vidsy Pipes detects active events during live analysis.
  2. The operator triggers App Control from the camera view or with a hotkey.
  3. Vidsy Pipes sends the matching key sequence to the target reporting application.
  4. The operator verifies the result instead of entering the observation from scratch.

App Control tab placeholder

Configure App Control

Open Outputs configuration and use the App Control tab to configure App Control.

  • Enable or disable App Control.
  • Select a controller definition by its name.
  • Optionally enable a global hotkey.
  • Configure hotkey modifiers (ctrl, alt, shift) and one key.
  • Default hotkey: ctrl+shift+F1.

If the selected definitionId is no longer available for the loaded project/template definitions, App Control is automatically disabled.

App Control settings placeholder

Triggering observation updates

You can trigger App Control in two ways:

  • Select button in the camera tab.
  • Global hotkey (if enabled).

Active-event selection behavior

  • If no active events exist (no endTime), nothing is sent.
  • If multiple active events exist:
    • Minimized events (still running, but currently not visible) are excluded.
    • If multiple remain, a selection dialog is shown.
    • By default, all events are selected.
    • Enter confirms.
    • Number keys (1, 2, 3, ...) select events.
    • ctrl + number toggles an event on/off.

Event selection placeholder

App Control definition file format

App Control reads JSON definition files from:

  1. <template>/control-definitions/*.json
  2. <project>/control-definitions/*.json

If both locations contain the same filename, the project file overrides the template file.

Top-level fields

  • name: display name shown in the UI.
  • window: part of the target app window name/title.
  • mode: input mode. Supported values: hardware (default), virtual.
  • templates: reusable instruction lists.
  • events: mapping from events to template references.
  • running: running-event groups with start and end behavior.

Instruction items

A template is a list of instruction items. Each item can include:

  • c: list of characters/keys to send.
  • m (optional): modifier keys for all entries in c.
  • w (optional): wait time in milliseconds after sending that item.

Example:

[{ "c": ["F10", "a", "1"], "m": ["alt", "ctrl"] }]

Placeholders

Supported placeholders inside template instructions:

  • {{keys}}: replaced with the keys from the event template reference.
  • {{value}}: replaced with the event value.

Event template reference format

An event template reference is always an object with exactly one field:

  • key: template name
  • value: list of keys/tokens to inject into {{keys}}

Examples:

{ "obs": ["a", "e", "c", "a"] }
{ "obs_value": ["b", "a", "j", "c"] }

Running events

Each running item includes:

  • start: dictionary of events mapped to event template references.
  • end: one event template reference.

Behavior:

  • When a sent running event later gets an endTime, the end instruction is sent automatically.
  • If a new event from the same running group is triggered while another tracked event in that group is still active, end instructions are sent first for those tracked active events.

Full example definition

{
"name": "My pretty display name",
"window": "CAM-I",
"mode": "hardware",
"templates": {
"obs_value": [
{ "c": ["space"] },
{ "w": 200 },
{ "c": "{{keys}}" },
{ "c": ["enter"] },
{ "w": 200 },
{ "c": ["{{value}}"] },
{ "w": 200 },
{ "c": ["tab", "tab", "tab", "tab", "tab"] }
],
"obs": [
{ "c": ["space"] },
{ "w": 200 },
{ "c": "{{keys}}" }
]
},
"events": {
"shape": {
"round": { "obs": ["a", "e", "c", "a"] },
"rectangle": { "obs": ["a", "e", "c", "b"] }
},
"angular rotation": { "obs_value": ["b", "a", "j", "c"] }
},
"running": [
{
"start": {
"sand": { "obs": ["b", "b", "c", "a"] },
"rocks": { "obs": ["b", "b", "c", "c"] }
},
"end": { "obs": ["b", "b", "c", "1"] }
},
{
"start": {
"crack": { "obs": ["b", "a", "b", "b"] }
},
"end": { "obs": ["b", "a", "b", "1"] }
}
]
}

Troubleshooting

  • App Control disables itself: verify selected definition still exists in loaded definitions.
  • No observation is added: confirm at least one active event exists.
  • Wrong target app receives input: verify the window matcher in the definition.
  • Too many possible target windows: close duplicates or make the window value more specific.
  • Hotkey does nothing: verify global hotkey is enabled and configured correctly.