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
- Vidsy Pipes detects active events during live analysis.
- The operator triggers App Control from the camera view or with a hotkey.
- Vidsy Pipes sends the matching key sequence to the target reporting application.
- The operator verifies the result instead of entering the observation from scratch.

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.

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.
Enterconfirms.- Number keys (
1,2,3, ...) select events. ctrl+ number toggles an event on/off.

App Control definition file format
App Control reads JSON definition files from:
<template>/control-definitions/*.json<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 withstartandendbehavior.
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 inc.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 eventvalue.
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, theendinstruction 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
windowmatcher in the definition. - Too many possible target windows: close duplicates or make the
windowvalue more specific. - Hotkey does nothing: verify global hotkey is enabled and configured correctly.