WINKSCData

Headless Command-Line Tool for Genetec Security Center
Complete User Manual
Version 0.9.0.0
June 2026
WINK Streaming
Authorized Partner of Genetec Inc.

Table of Contents

Downloads for this release: WINK-SecurityCenterTools-Setup-0.9.0.0.exe contains both the console and the GUI — pick the components you want during setup. For deployment questions email support@wink.co.

What's New in 0.9 v0.9.0.0

1. What It Does

WINKSCData is a command-line tool for reading from and (selectively) writing to Genetec Security Center systems. It is designed for scripts, scheduled tasks, CI pipelines, and remote shell sessions where a GUI is impractical.

For the WPF graphical counterpart, see the APIBridge Metro Manual. Both tools share the same Genetec SDK assemblies, the same Forge XML output format, and the same users.json credentials file.

CapabilityModes
Read the Security Center inventory--forge, -c, -a, -e, --cameraunit, --connectedentities, -n
Audit decoder / camera bindings--comparenames
Write name changes to AnalogMonitors--associatemonitors (preview), --associatemonitorseven (apply)
Write video routing via SDK actions--applyassociations, --reassociate, -r
Inspect the Security Center license-l

All write modes also produce a log of what changed.

2. Installation

The console ships inside the combined installer WINK-SecurityCenterTools-Setup-0.9.0.0.exe. During installation, tick the WINKSCData console (Genetec SDK 5.9, --forge) component.

After install:

C:\Program Files\WINKStreaming\SecurityCenterTools\Console\
├── WINKSCData.exe
├── WINKSCData.exe.config
├── users.json            (blank by default)
├── Genetec.Sdk.dll       (5.9.x)
└── ... ~155 supporting files

The Start Menu shortcut WINKSCData Console (cmd) opens a Command Prompt already cd-ed into the install folder and prints --help.

2.1 Portable Use

WINKSCData is fully portable. Copy the entire Console\ folder to a USB drive or network share and run WINKSCData.exe from there. No registry writes are required for the console itself. The optional Windows Service component is separate — see section 9.2.

3. Credentials: users.json

The console reads users.json to fill in -h, -u, and -p if you do not provide them on the command line. Command-line arguments always take precedenceusers.json only fills in what is missing.

3.1 Search Order

First match wins:

  1. users.json in the same folder as WINKSCData.exe
  2. %APPDATA%\WINKStreaming\users.json (shared with APIBridge Metro)

3.2 Schema

{
  "host": "10.18.183.20",
  "username": "YOUR_SDK_USER",
  "password": "YOUR_PASSWORD",
  "useDemoCertificate": false
}

3.3 Precedence Matrix

Command lineusers.jsonEffective values
-h X -u Y -p Z (all three)(anything)CLI values; --democert only if passed
-h X onlyhas username / password / useDemoCertificateCLI host + file user / pass / cert
(none)completeAll from file
(none)emptyExits with code 2 and prints schema example

3.4 Save Once, Use Forever

Use the GUI's Save Credentials button to write %APPDATA%\WINKStreaming\users.json, then on the same machine simply run:

WINKSCData.exe --forge

The console picks up the file automatically.

4. The Startup Banner

Every invocation prints a banner:

================================================================
   WINKSCData 0.9.0.0   (build 0 / 2026-06-28)
   Genetec SDK 5.9.3
   WINK Streaming LLC  —  Authorized Genetec Partner
================================================================

The Genetec SDK line reflects the actually loaded Engine.ProductVersion — not a hardcoded value. If the displayed version is not what you expect (for example you wanted 5.11), confirm which Genetec.Sdk.dll is on disk next to the EXE.

The banner is followed by an SDK-version detection line:

SDK version (auto-detected from Engine.ProductVersion 5.9.3.123): 5.9

This tells you which internal code branch will be used (5.9 vs 5.12 query patterns). Override with --sdk 5.9|5.12 if auto-detection picks the wrong branch.

5. Complete Option Reference

Run WINKSCData.exe --help at any time to print the auto-generated option list. Below is the same with usage notes.

5.1 Connection

OptionDefaultNotes
-h, --host <ip-or-name>from users.jsonGenetec Security Center server
-u, --username <name>from users.jsonSDK-enabled account
-p, --password <pwd>from users.jsonPlain text; quote if it contains spaces
--democertfrom users.json useDemoCertificate, else falseUse the Genetec demo certificate
--sdk 5.9|5.12auto-detectForce internal code branch
--helpPrint auto-generated help and exit

5.2 Read Modes (produce XML or JSON)

OptionOutputPurpose
-f, --forgeGenetecForge_<ts>.xmlHierarchical nested XML grouped by IP / unit; full camera + decoder attributes. The primary reporting mode.
-c, --cameraliststdout XMLAll cameras with model, resolution, codec, FPS, GPS
-a, --analogliststdout XMLAll analog monitors with UDP port, IP, MAC, online state
--connectedentitiesstdout XMLAnalog monitors + their connected camera reference
--cameraunitstdout XMLCameras grouped by their parent VideoUnit
-e, --entityliststdout XMLMixed entity browser
-n, --nestedstdout XMLNested XML similar to --forge but without writing a file
-j, --jsonswitches XML to JSON for any of the aboveOutput format toggle
-l, --licensestdout textPrint Security Center license + version info

5.3 Audit Modes

OptionOutputPurpose
--comparenamesstdout text + compare_names_<ts>.xmlCompare each decoder's name against the camera currently displayed on it. Reports MATCH / MISMATCH / NO CAMERA per row plus a summary with percentages.

5.4 Write Modes — Names

OptionWritesPurpose
--associatemonitorsnothing (preview)Print what --associatemonitorseven would change
--associatemonitorsevenAnalogMonitor Name + DescriptionEvenly distribute cameras across decoders matching the WF### pattern, then rename each monitor {CameraName} - {WF###}-{UdpPort}. Original name preserved in Description with an Original: marker.

5.5 Write Modes — Routing (SDK actions)

OptionWrites viaPurpose
-r, --reconnectActionManager.DisplayOnAnalogMonitorWalks every analog monitor with a connected entity and re-issues the display action. Use after a routing wipe.
--applyassociationsActionManager.DisplayOnAnalogMonitorRe-apply existing camera-to-decoder assignments based on monitor name (matches {CameraName} in name to a Camera entity).
--reassociateRemoveFromAnalogMonitor then DisplayOnAnalogMonitorFor each monitor with a connected camera: disconnect first, then reconnect. Use when a routing assignment is "stuck" and -r alone does not take.

6. Common Invocations (Cookbook)

6.1 Daily Forge Export

REM Reads creds from %APPDATA%\WINKStreaming\users.json
WINKSCData.exe --forge

Output: GenetecForge_20260628_143025.xml in the current directory.

6.2 Forge Export with Explicit Credentials

WINKSCData.exe -h 10.18.183.20 -u sdkuser -p "P@ssword 1" --forge

Use double quotes around passwords containing spaces or special characters.

6.3 Audit Decoder / Camera Name Drift

WINKSCData.exe --comparenames

Stdout shows progress per monitor, then a summary like:

=== SUMMARY ===
MATCH:      287 (89%)
MISMATCH:    24 ( 7%)
NO CAMERA:  12 ( 4%)

Full per-row details written to compare_names_<ts>.xml.

6.4 Force-Fix Stuck Routing on One Server

WINKSCData.exe --reassociate
This is destructive — it removes every routing assignment, then immediately reapplies it. Use only when individual -r runs are not taking.

6.5 Preview Then Apply Even Distribution

WINKSCData.exe --associatemonitors        REM preview only
WINKSCData.exe --associatemonitorseven    REM actually write the names

Only monitors with names matching WF### are touched.

6.6 JSON Output for Downstream Tooling

WINKSCData.exe -j -c > cameras.json
WINKSCData.exe -j -a > monitors.json

6.7 License & Version Snapshot

WINKSCData.exe -l

Outputs SDK version, server version, license expiration, and feature flags — useful for asset and compliance reports.

7. Exit Codes

CodeMeaning
0Success
2Missing credentials (no -h/-u/-p and users.json is empty or missing)
Non-zero (other)Mode-specific failure (LogOn failure, SDK exception, etc.) — see stdout for details

Scripts that wrap WINKSCData should check %ERRORLEVEL%:

WINKSCData.exe --forge
if errorlevel 1 (
    echo Forge export failed >> wink-error.log
    exit /b 1
)

8. Output Files

ModeFilename patternLocationNotes
--forgeGenetecForge_<yyyyMMdd_HHmmss>.xmlcurrent directoryHierarchical, full attributes, CDATA-escaped
--comparenamescompare_names_<ts>.xmlcurrent directoryOne row per analog monitor
--associatemonitorsevenassociate_monitors_log_<ts>.txtcurrent directoryWhat was renamed, before → after
-c, -a, -e, -n, --cameraunit, --connectedentitiesnone (stdout only)Redirect with >

For very large deployments (more than 1,000 monitors), redirect stderr too:

WINKSCData.exe --forge 2>&1 | tee forge-run.log

9. Scheduling

9.1 Windows Task Scheduler (one-off invocations)

Create a Basic Task pointing at WINKSCData.exe with arguments --forge. The trigger frequency is your choice — common patterns:

Set the working directory to the install folder so output files land predictably. Credentials come from users.json in %APPDATA%\WINKStreaming\ — this works because the scheduled task runs as the user account whose %APPDATA% you populated via the GUI's Save Credentials button.

If the task runs as SYSTEM instead, drop a users.json next to WINKSCData.exe in the install folder so the portable search path finds it.

9.2 WINKSCDataMonitor Windows Service

A purpose-built Windows Service (installed via the GUI's Configuration → Windows Service tab) runs --forge every 20 minutes, compares exports for changes, and emails diffs. See the GUI manual section 7 for setup details.

The service uses DPAPI-encrypted credentials at %APPDATA%\WINKStreaming\APIBridge\settings.encrypted — NOT the plain-text users.json. The two credential stores are independent.

9.3 Continuous Integration

Example PowerShell wrapper for a CI pipeline that produces a nightly Forge export and uploads it:

$ErrorActionPreference = 'Stop'
$cwd = 'C:\Program Files\WINKStreaming\SecurityCenterTools\Console'
Set-Location $cwd

& .\WINKSCData.exe --forge
if ($LASTEXITCODE -ne 0) { throw "Forge export failed: $LASTEXITCODE" }

$xml = Get-ChildItem -Filter 'GenetecForge_*.xml' |
       Sort-Object LastWriteTime -Descending | Select-Object -First 1

# Upload to your artifact store / S3 / etc.
Copy-Item $xml.FullName "\\fileserver\reports\$($xml.Name)"

10. Forge XML Structure

--forge emits a hierarchical XML grouped by archiver IP and command port. Top-level structure:

<wink report_time="2026-06-28T14:30:25" generation_duration="00:00:14.523">
  <monitors decoder_count="1801" camera_count="1674">
    <monitor_device ipaddress="162.249.44.100" macaddress="8C1F64428000" guid="...">
      <monitor_unit cmdport="5602">
        <decoder guid="..." name="..." udpport="15000" online="true" ...>
          <connectedcamera guid="..." name="..." model="..." resolution="..." ...>
            <!-- 58+ camera attributes -->
          </connectedcamera>
        </decoder>
        <!-- more decoders on this unit -->
      </monitor_unit>
    </monitor_device>
    <!-- more units -->
  </monitors>
</wink>

Decoder attributes include: guid, name, description, udpport, online, runningstate, currentsignalstate, streamconnectiontype, supportedconnectiontypes, monitorgroupguid, plus connected-alarm fields.

Camera attributes (when an <connectedcamera> is present) include: guid, name, manufacturer, model, resolution, codec, framerate, bitrate, keyframeinterval, quality, gpslatitude, gpslongitude, encryptiontype, runningstate, currentsignalstate, isblocked, isinmaintenance, timezone, and more.

All string fields are XML-escape-safe (&, <, >, ", ' handled) and wrapped in CDATA where appropriate. JSON output (-j) emits the same data with field names converted to camelCase keys.

11. Required Genetec Privileges

The SDK account used must have:

If --forge produces a file with decoder_count=0 or blank IP/MAC, the SDK user is missing one of the above. Run the Connectivity & Permissions tab in the GUI to identify exactly what is missing — faster than guessing from the console output.

12. Performance & Resilience

12.1 Batched Queries with Reconnect

Cameras and AnalogMonitors are pulled in batches of 5. After each batch the session liveness is rechecked; if dead, the console auto-reconnects using cached credentials with progressive backoff (0 / 30 / 60 / 120 / 300 / 600 seconds) and resumes from the next batch.

12.2 Resume from Partial Runs

--forge cumulatively appends to GenetecForge_progress.jsonl in the current directory. If a run dies mid-way, simply re-run — the next invocation reads the progress file as a starting cache and only re-queries entities not yet collected. Successful completion renames the progress file to GenetecForge_completed_<ts>.jsonl.

12.3 Expected Wall-Clock Times

For a healthy SC 5.11.3 server with a privileged SDK user:

Inventory size--forge time
~100 monitors< 30 seconds
~500 monitors~2 minutes
~1,800 monitors~5–10 minutes
~1,800 monitors on a restricted SDK user (permission cascades)20–60 minutes

If you observe times longer than these, check the SDK user's privileges first.

13. Troubleshooting

Banner shows "Genetec SDK unknown"

Engine.ProductVersion could not be read — usually means Genetec.Sdk.dll is not loadable. Verify the DLL is present next to WINKSCData.exe and is not blocked (right-click → Properties → Unblock if it came from a download).

"ERROR: host, username, and password are required"

You did not pass -h/-u/-p and no users.json was found. The error message includes the expected schema and the per-user path. Save credentials via the GUI or create the file by hand.

Exit code 2 from a scheduled task

Same root cause as above — verify the scheduled task runs as the user whose %APPDATA%\WINKStreaming\users.json is populated, OR drop a users.json next to the EXE so portable-mode discovery picks it up.

"Logon: connecting…" then nothing for minutes

SC 5.11.3 firewall throttle. Wait ~5 minutes between connect attempts. The console will retry with patient backoff automatically (look for "Reconnect attempt N/5" lines).

decoder_count=0 camera_count=0 in the Forge output

The SDK user cannot see entities. Most often a missing View Analog Monitors privilege. Confirm in Config Tool against the SDK user's role.

IP and MAC addresses blank

User lacks View hardware configuration on the VideoUnit entity. This is the most common partial-data scenario.

Auto-detected SDK version is wrong

Engine.ProductVersion reflects the loaded DLL. Override with --sdk 5.9 or --sdk 5.12 to force a different code branch. If your DLL is genuinely SDK 5.11 but you want the 5.12 code paths (since they are largely compatible), --sdk 5.12 is the right flag.

--forge runs but the XML has unescaped ampersands

Should not happen in v0.9 — all output goes through XmlEsc / XmlAttr / Cdata helpers. If you see this, file a support case with the offending camera/decoder name; it indicates a code path that bypassed the escaper.

Console exits immediately with no banner

Usually a .NET Framework 4.8 mismatch on the target. Install the runtime from Microsoft (it ships with Windows 10 1809+ and all Windows 11; older OS needs the redistributable).

14. File Locations

PathPurpose
{install}\Console\WINKSCData.exeThe executable
{install}\Console\users.jsonPortable credentials (blank by default)
%APPDATA%\WINKStreaming\users.jsonPer-user credentials (shared with GUI)
current directoryOutput files (GenetecForge_*.xml, compare_names_*.xml, etc.)
current directoryGenetecForge_progress.jsonl (in-flight resume cache)

15. Version History

WINKSCData has shipped roughly eight releases since 2017, most of them quiet — bug fixes, Genetec SDK compatibility refreshes, and the occasional small security touch. Feature work has been incremental and conservative; the v0.9 release in 2026 is the largest functional jump in the tool's lifetime, pairing the console with the APIBridge Metro WPF GUI under a combined installer.

0.9.0.0 Current — 2026-06-28

Combined-installer release. Introduces shared credentials and dynamic SDK detection, and tightens long-running-export resilience so unattended jobs survive a network hiccup.

0.7.3.34 — 2025-08-10

Resilience release. Removes the last third-party JSON dependency and adds a three-tier fallback for camera detail queries on locked-down SDK 5.9 deployments.

0.7.x — 2023

Maintenance release. SDK compatibility refresh and small fixes accumulated from field deployments.

0.6.x — 2022

Quiet maintenance and a small security touch.

0.5.x — 2020

Maintenance release.

0.4.x — 2019

Maintenance release with a small security touch.

0.2.x — 2018

First post-release fix wave.

0.1.x — 2017

Initial release. Built against the Genetec Security Center deployments common at the time — primarily 5.2 and the then-current 5.4 line — with forward-compatibility against the 5.x query patterns Genetec was settling on.

16. GUI Companion (APIBridge Metro)

WINKSCData ships alongside APIBridge Metro, a WPF graphical operator console that performs the same reads and writes through a point-and-click interface. Use the GUI for ad-hoc work and diagnostic walk-throughs; use WINKSCData for everything that needs to run unattended, in a script, or on a schedule.

QuestionAnswer
Are credentials shared?Yes — both read the same users.json paths.
Are output formats shared?Yes — Forge XML from --forge matches the GUI's Export XML output byte-for-byte.
Are write actions shared?Yes — same SDK actions (DisplayOnAnalogMonitor, RemoveFromAnalogMonitor, name changes).
Are the JSONL caches shared?No — console writes to current directory; GUI writes to %USERPROFILE%\Documents.
Are the SDK versions the same?No — Console ships SDK 5.9; GUI ships SDK 5.11. They cannot share an install folder for this reason.
Can I run both at the same time?Yes — each opens its own SDK session.

For the GUI side of the story, read the APIBridge Metro User Manual.

17. Support

When reporting issues, please include: